les afficheurs
Transcription
les afficheurs
HACKGYVER – HACK GUY VERS L’ÉLECTRONIQUE. M1.11 – LES AFFICHEURS Commande d’afficheurs, LEDs, Matrice Merci pour vos participations, retours, corrections et insultes à l’adresse : [email protected] objet : [hackguy] Je décline bien sur toute responsabilité, etc… SOMMAIRE 7 segments Principe Multiplexage Matrice de led (8x2 , 8x4, 8x8) Afficheurs LCD (HD44780, Ks0065) Principe Programmation Afficheurs type « nokia » Principe programmation 2 AFFICHEURS 7 SEGMENTS Principe : un afficheur 7 segments est un assemblage de LED dans un seul boitier. De manière classique, il existe des afficheurs Anodes commune, et d’autre cathode commune. 3 AFFICHEURS 7 SEGMENTS Le branchement s’effectue comme les LEDs, on calcul la valeur des résistances de protections et on branche. Exemple d’un afficheur anode commune : Pourquoi 8 résistances ? 7 pour les segments (a,b,c..) et 1 pour le point (dp). On peut éventuellement en mettre qu’une sur la ligne VCC ou GND, mais attention a bien piloter qu’une seule LED en même temps. 4 7SEGMENTS : MULTIPLEXAGE Quand on dispose de plusieurs afficheurs, par exemple une horloge, il est idiot de réquisitionner 8 x 4 = 32 lignes d’entrée sortie. On utilise a lors le multiplexage et la persistance rétinienne. Montage classique : 5 7SEGMENTS : MULTIPLEXAGE On utilise les 2 transistors pour commuter entre les afficheurs, et on utilise qu’un seul bus de donnée. Techniquement, il n’y a toujours qu’un seul afficheurs alimenté (voire une seule LED), mais la persistance rétinienne nous permet de faire des économies de lignes, mais aussi d’énergie. 6 AFFICHEUR 7 SEGMENTS : ÉCONOMIE D’ ÉNERGIE ? Un ensemble d’afficheurs 7 segments peut vite devenir un gouffre en énergie. Exemple : Pour 3 afficheurs (voltmètre par exemple ) : Un afficheur = 8 led = 8 x 20mA = 160 ma X 3 = 480mA !!! (dans pire des cas ‘8’ + point) Pour un couple voltmètre / ampèremètre = 960mA… Alors qu’avec le multiplexage, on obtiens 160mA maxi (un seul afficheur), voire 40 mA maxi si on utilise un multiplexage par segment… pour la même fonction visuelle… 7 MATRICE A LEDS DE 8X8 Comment faire une matrice à led ? Bein, on en a déjà fait une de 2x16 ! La preuve : 8 MATRICE A LEDS DE 8X8 Donc pour une matrice 8x4 cela nous donne : Pour une 8x8, on utilise 4 sorties colonnes de plus, et on duplique le schéma des 24 premières LEDs pour l’étendre. Dans le cas de grosse matrice, on utilise le même principe, mais avec des multiplexeurs / démultiplexeurs intermédiaires. 9 MATRICE : PROGRAMMATION Dans le langage Arduino/Energia, nous ne disposons pas de commande pour basculer (ou lire) l’état d’un port. Dans le cas d’une matrice, cela peut être compliqué de le faire ligne par ligne. Mais, on a un accès direct au registre du µC, un port E/S se décompose en général en plusieurs registres : L’un pour la direction E/S par pin, et l’autre pour l’état des broches (parfois 2 registres IN et OUT). Pour mettre la valeur B11111110 sur le second port je peut donc écrire : Arduino (ATMEL AVR) : DDRB=B11111111; // toutes les pins du port B en sorties PORTB=B11111110 ; // pour un 8 sur un 7segm. Sans le point. Energia (MSP430) P2DIR =B11111111; // toutes les pins du port 2 en sorties P2OUT=B11111110; ; // pour un 8 sur un 7segm. Sans le point. Attention : Arduino/Energia ne contrôle pas ces informations, si vous désactivez votre port série par exemple, bonne chance pour le débug… il faut toujours vérifier le nom des ports en fonction du µC utilisé (nom du registre de direction ET nom du port.) 10 AFFICHEURS LCD Brochage : N° Broche Fonction 1 GND 2 +5V 3 CO Réglage du contraste 4 RS 0 : Instuction 1 : Données 5 R/W 0 : Ecriture 1 : Lecture 6 EN Validation 7 D0 D0 en 8 bits 8 D1 D1 en 8 bits 9 D2 10 D3 11 D4 D2 en 8 bits D3 en 8 bits D4 en 8 bits Et D0 en 4 bits 12 D5 D5 en 8 bits Et D1 en 4 bits 13 D6 D6 en 8 bits Et D2 en 4 bits 14 D7 D7 en 8 bits Et D3 en 4 bits Il est possible de lire dans l’afficheur, mais cette option ne sera pas développé ici. 11 AFFICHEUR LCD : BRANCHEMENT La plupart des afficheurs LCD sont 5v. Nos platines launchpad sont 3V3. Le niveau haut de la launchpad est suffisant pour que l’afficheur le comprenne, nous n’avons pas besoins d’adaptation de niveau particulière si nous nous contentons d’écrire (RW=0v). Attention bien sur à ne pas mélanger les 5v et les 3v3… par précaution, je glisse un réseau de résistances de 10K en pull down. Dans le cas contraire, un montage avec un composant spécialisé comme le 74LVC245 est nécessaire. 12 AFFICHEUR LCD : BRANCHEMENT RS EN RW D4-D7 GND 13 AFFICHEURS LCD : FONCTIONNEMENT Un afficheur LCD, est composé d’un écran LCD et d’un contrôleur. Celui-ci réagit a des ordres transmis selon un protocole précis. On peut piloter un afficheur LCD en 4 bits ou en 8 bits. Le 8 bits est plus simple a programmer en assembleur, mais sous Energia, cette difficulté est complètement masqué par la librairie. Le mode 4bits sera utilisé pour l’économie de broche E/S que cela représente. Il est possible de créer ces propres motifs est les intégrer dans la RAM de l’afficheur. Ce n’est pas présenté ici ( voir createChar() ). La librairie nous mâche le travail : il suffit de créer le composant, de l’initialiser, d’éventuellement de placer le curseur, et d’écrire… 14 AFFICHEURS LCD Programmation en mode 4 bits : Nous disposons d’une bibliothèque simple d’utilisation : #include <LiquidCrystal.h> Ensuite on initialise l’objet avec nos broches : LiquidCrystal lcd(P1_5, P1_4, P1_3, P1_2, P1_1, P1_0); // RS ; EN; DB4 ; DB5 ; DB6 ; DB7 void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!"); } void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setCursor(0, 1); // print the number of seconds since reset: lcd.print(millis()/1000); } 15 AFFICHEURS TYPE « NOKIA » PCD8544 Les afficheurs des Nokia 3310 et Nokia 5110 se prêtent bien a l’expérimentation. Facile d’approvisionnement, 3v3, graphique et programmation série, ils possèdent beaucoup d’avantages. 16 AFFICHEURS TYPE « NOKIA » PCD8544 La communication série minimise le nombres de broches nécessaire. Seulement 4 broches (ou 5) pour le commander ! SCE : sélection du circuit SDIN : entrée données série SCLK : horloge synchrone D/C : sélection donnée/commande RES : reset 17 AFFICHEURS TYPE « NOKIA » PCD8544 Pour la programmation, regardez : http://playground.arduino.cc/Code/PCD8544 18 PROCHAINES ÉTAPES ? Conception d’un capteur infrarouge 18Khz pour le robot. Protocol série RS232, RS485, SPI, CAN, I2C, Onewire… 19