16 août 2009

Écran texte 16*2 VFD en lieu et place du LCD

Tags : , ,

Certains le savent, juste derrière les leds, j'adore les écran LCD type HD44780 (lcdproc, lcd4linux, etc). Je viens de recevoir des 16T202DA1J de Samsung achetés sur eBay pour moins de 20 Euros pièces (port inclus). Certes, c'est deux fois plus cher que le LCD mais franchement, ça a une autre gueule. Comme le brochage est parfaitement compatible avec les LCD HD44780, c'est interchangeable directement sur mon module USB/série/AVR permettant un contrôle USB de l'affichage. De quoi décorer bon nombre de montages embarqués et mes serveurs...

vfdwww

Bon, on ne peut pas faire de PWM sur le rétro-éclairage (puisqu'il n'en en a pas) mais le rendu et la luminosité de l'ensemble compense largement.

dans Electronique | 4 Commentaires

21 juillet 2009

Nommage udev en fonction de l’interface (bInterfaceNumber)

Tags : ,

Je viens tout juste de recevoir un nouveau programmeur AVR sur port USB. Bonne nouvelle, celui-ci propose non pas un port série de type ttyACM* mais deux (le second fournissant un port USB/TTL simple). Mauvaise nouvelle, une règle udev classique (voir ce billet) ne fonctionne pas. En effet, la règle match les deux interfaces et on se retrouve systématiquement avec un lien symbolique pointant sur la seconde interface. Le programmeur est inaccessible proprement via un Makefile.

Le problème ici est de mixer des attributs provenants à la fois du périphérique (product) et du périphérique parent (bInterfaceNumber). Ceci ne fonctionne donc pas :

SUBSYSTEMS=="usb", KERNEL=="ttyACM*", ATTRS{product}=="Pololu USB AVR Programmer", \
  SYMLINK+="POLOLU"

Pas plus que :

SUBSYSTEMS=="usb", KERNEL=="ttyACM*", ATTRS{product}=="Pololu USB AVR Programmer", \
  ATTRS{bInterfaceNumber}==02, SYMLINK+="POLOLU_SERIAL"
SUBSYSTEMS=="usb", KERNEL=="ttyACM*", ATTRS{product}=="Pololu USB AVR Programmer", \
  ATTRS{bInterfaceNumber}==02, SYMLINK+="POLOLU_SERIAL"

Il faut être plus tordu et réutiliser le nom d'un attribut du périphérique pour nommer le lien symbolique avec :

SUBSYSTEMS=="usb", KERNEL=="ttyACM*", ATTRS{product}=="Pololu USB AVR Programmer",  \
  SYMLINK+="POLOLU%s{bInterfaceNumber}"

Ce qui nous donne :

% ls -l /dev/POL*
13099267 lrwxrwxrwx 1 root root 7 jui 21 21:01 /dev/POLOLU00 -> ttyACM0
13099249 lrwxrwxrwx 1 root root 7 jui 21 21:01 /dev/POLOLU02 -> ttyACM1

Pareil en présence d'un autre programmeur ttyACM* :

13105697 lrwxrwxrwx 1 root root 7 jui 21 21:10 /dev/POLOLU00 -> ttyACM1
13105715 lrwxrwxrwx 1 root root 7 jui 21 21:10 /dev/POLOLU02 -> ttyACM2

Ça n'est pas exactement ce que je voulais (POLOLU0 et POLOLU1) mais c'est fixe et clair. On va pas chercher la petite bête...

dans Configuration | 0 Commentaire

17 avril 2009

Programmeur ISP USB pour AVR

Tags : ,

Les programmeurs de type dapa sont économiques, efficaces et très simples. Mais ils dépendent d'un port clairement en voie de disparition sur les machines modernes : le port parallèle. Peu d'adaptateurs USB/parallèle existent, il s'agit en forte majorité d'USB/printer (lp) avec lesquels il n'est pas possible de contrôler les lignes DATA, CONTROL et STATUS individuellement.

On peut alors se tourner vers le dasa, adaptateur pour port série utilisant du bit banging mais, là encore, on rencontre des problèmes puisque tous les pilotes ne supportent pas la palette d'ioctl nécessaires.

Finalement, pour pouvoir développer et programmer un Atmel AVR via USB (sur un lappy par exemple), il ne reste pas d'autre choix simple que d'investir quelques euros (moins de 30 euros avec le port sur eBay)  dans un programmeur USB compatible STK500v2 (chercher "USB ISP-Programmer").

avrusbstk500

(Le miens est vert fluo et livré avec un câble également vert,
très bon produit, joli design, super propre) Voir la suite »

dans Electronique | 12 Commentaires

11 janvier 2009

PWM 4 canaux en C sur Attiny2313

Tags : ,

Juste un petit bout de code en passant. Pour ceux qui voudraient utiliser les 4 canaux de PWM des Amtel AVR Attiny2313, voici la configuration :

  DDRB |= (1<<PB2);               // make OC0A an output
  DDRD |= (1<<PD5);               // make OC0B an output
  DDRB |= (1<<PB3);               // make OC1A an output
  DDRB |= (1<<PB4);               // make OC1B an output

  TCCR0B = 0;                     // stop timer 0
  TCCR0A = (1<<WGM00)|(1<<WGM01); // select fast pwm mode 3
  TCCR0A |= (1<<COM0A1);          // Clear OC0A on Compare Match when up-counting.
                                  // Set OC0A on Compare Match when down-counting.
  TCCR0A |= (1<<COM0B1);          // Clear OC0B on Compare Match when up-counting.
                                  // Set OC0B on Compare Match when down-counting.
  OCR0A = 0x00;                   // duty cycle
  OCR0B = 0x00;                   // duty cycle
  TCCR0B |= (1<<CS00);            // no prescaling, timer on

  TCCR1B = 0;                     // stop timer 1
  TCCR1A = (1<<WGM12)|(1<<WGM10); // Fast PWM, 8-bit mode 5
  TCCR1A |= (1<<COM1A1);          // Clear OC1A on Compare Match when up-counting.
                                  // Set OC1A on Compare Match when down-counting.
  TCCR1A |= (1<<COM1B1);          // Clear OC1B on Compare Match when up-counting.
                                  // Set OC1B on Compare Match when down-counting.
  OCR1A = 0x00;                   // duty cycle
  OCR1B = 0x00;                   // duty cycle
  TCCR1B |= (1<<CS10);            // no prescaling, timer on

Il ne reste, ensuite qu'à changer la valeur de OCR0A, OCR0B, OCR1A ou OCR1B pour modifier le rapport de phase.

dans Electronique | 0 Commentaire

26 décembre 2008

Ecran LCD 2*16 série/USB via AVR Attiny2313

Tags : , ,

Décidément aujourd'hui je n'arrête pas ! Cela faisait longtemps que j'avais cette idée en tête : monter un afficheur LCD alpha-numérique sur USB/série. Voilà chose faîte avec un petit AVR Attiny2313.

lcdavr2 Voir la suite »

dans Electronique | 3 Commentaires

30 novembre 2008

Base de travail pour différents projets à base d’AVR en C

Tags : ,

Je travail sur différentes choses autour des microcontrôleurs Atmel AVR à l'heure actuelle. Je n'en dirai pas trop pour le moment, mais cela touche à la PWM et aux leds (comme souvent) ainsi qu'aux ports séries/USB. Dans le tas, il y a une signalisation lumineuse pour notre salle de réunion (dans la GLMFcave), le projet coccilight et un projet secret (tant qu'il sera pas terminé) qui manque encore d'éléments de décoration (bricoler un truc laid plein d'epoxy et de soudure c'est facile, arriver à quelque chose de présentable c'est une autre affaire).

Quoi qu'il en soit, j'ai dernièrement joué un peu avec un de mes vieux codes en assembleur Atmel que j'ai réimplémenté en C pour un AVR Attiny13 : la pulsation d'une led en PWM utilisant des valeurs sinusoïdales stockées dans la Flash du microcontrôleur. Voir la suite »

dans Electronique | 4 Commentaires

10 octobre 2008

Un coup de main avec les fuses de l’Atmel AVR attiny2313 ?

Tags :

Juste un petit post vite fait pour partager. Je me suis fait un petit aide-mémoire/tableau pour définir les fuses des AVR Attiny2313 plus facilement :

dans Electronique | 0 Commentaire