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