HD44780
Un HD44780 est un contrĂ´leur standard permettant de piloter un dispositif d'affichage par cristaux liquides.
Des « clones » existent, tels que le KS0070B ou le SPLC780A1.
Branchement physique
Un module HD44780 comporte 16 bornes (dont les 2 dernières sont optionnelles si l'écran piloté ne dispose pas d'un rétroéclairage) :
Borne | Symbole | Type | Fonction |
---|---|---|---|
1 | Vss ou V0 | Alim | Masse 0V |
2 | Vcc ou Vdd | Alim | Alimentation générale 5V |
3 | Vee | Alim | Alimentation du panneau LCD (Contraste des caractères)
Vee = Vcc – Vss Vss = Vcc → Vee = 0 → Caractères invisibles Vss = 0 → Vee = Vcc → Contraste maximum |
4 | RS | Entrée | RS = 1 → Sélection du registre de données
RS = 0 et R/W = 0 → Sélection du registre d’instruction RS = 0 et R/W = 1 → Sélection du drapeau BUSY et du compteur d’adresse |
5 | R/W | Entrée | R/W = 0 → Mode écriture
R/W = 1 → Mode lecture |
6 | E | Entrée | Entrée de validation
Les entrées RS et R/W sont lues sur le front montant, et le bus de données est lu sur le front descendant. |
7 | D0 | Entrée/Sortie | Bus de données, bit n°0 (LSB) |
8 | D1 | Entrée/Sortie | Bus de données, bit n°1 |
9 | D2 | Entrée/Sortie | Bus de données, bit n°2 |
10 | D3 | Entrée/Sortie | Bus de données, bit n°3 |
11 | D4 | Entrée/Sortie | Bus de données, bit n°4 |
12 | D5 | Entrée/Sortie | Bus de données, bit n°5 |
13 | D6 | Entrée/Sortie | Bus de données, bit n°6 |
14 | D7 | Entrée/Sortie | Bus de données, bit n°7 (MSB) |
15 | A | Alim | Anode du système de rétro-éclairage (à alimenter en 5V à travers une résistance de 50 à 100Ω pour limiter le courant à 100mA) |
16 | K | Alim | Cathode du système de rétro-éclairage (masse) |
Commande
En mode 8 bits
Dans ce mode, l’octet contenant les données est envoyé à l'afficheur (ou lu par l'afficheur) directement sur les broches D0 à D7.
En mode 4 bits
Dans ce mode, on n’utilise que les broches D4 à D7, les broches D0 à D3 doivent être connectées à la masse.
L’octet de données est envoyé (ou lu) en 2 fois :
Timings Ă respecter
En Ă©criture
En lecture
Instructions de contrôle et d’affichage
Instructions | RS | R/W | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Description | Durée |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Clear display | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Efface l'Ă©cran Place le curseur dans la position d'origine (1re position Ă gauche, 1re ligne : compteur d'adresse Ă 00h) |
> 1.64 ms |
Return home | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | - | Place le curseur dans la position d'origine (1re position Ă gauche, 1re ligne : compteur d'adresse Ă 00h) | > 1.64 ms |
Entry set mode | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | I/D | S | I/D = 1 → Déplacement du curseur d'une position à droite (Incrémentation du compteur d'adresse) I/D = 0 → Déplacement du curseur d'une position à gauche (Décrémentation du compteur d'adresse) |
> 40 µs |
Display on/off control | 0 | 0 | 0 | 0 | 0 | 0 | 1 | D | C | B | D = 1 → Affichage visible D = 0 → Affichage invisible |
> 40 µs |
Cursor or display shift | 0 | 0 | 0 | 0 | 0 | 1 | S/C | R/L | - | - | S/C = 1 → Décalage de l'affichage S/C = 0 → Déplacement du curseur |
> 40 µs |
Function set | 0 | 0 | 0 | 0 | 1 | DL | N | F | - | - | DL = 1 → Interface 8 bits DL = 0 → Interface 4 bits |
> 40 µs |
Set CGRAM address | 0 | 0 | 0 | 1 | ACG5 | ACG4 | ACG3 | ACG2 | ACG1 | ACG0 | Positionne le compteur d'adresse de la CGRAM à la valeur (ACG5 ... ACG0) | > 40 µs |
Set DDRAM address | 0 | 0 | 1 | ADD6 | ADD5 | ADD4 | ADD3 | ADD2 | ADD1 | ADD0 | Positionne le compteur d'adresse de la DDRAM (ADD6 ... ADD0) | > 40 µs |
Read busy & address | 0 | 1 | BF | AC6 | AC5 | AC4 | AC3 | AC2 | AC1 | AC0 | Lit le drapeau BF (Busy Flag) et le compteur d'adresse (AC6 ... AC0) BF = 1 → Le contrôleur est occupé et n’accepte aucune nouvelle instruction |
> 1 µs |
Write data to CGRAM or DDRAM | 1 | 0 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Write data to CGRAM : écrit la donnée (D7 ... D0) à l'adresse de la CGRAM définie par l'instruction précédente Set CGRAM address Write data to DDRAM : écrit la donnée (D7 ... D0) à l'adresse de la DDRAM définie par l'instruction précédente Set DDRAM address |
> 43 µs |
Read data from CGRAM or DDRAM | 1 | 1 | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | Read data from CGRAM : lit la donnée (D7 ... D0) à l'adresse de la CGRAM définie par l'instruction précédente Set CGRAM address Read data from DDRAM : lit la donnée (D7 ... D0) à l'adresse de la DDRAM définie par l'instruction précédente Set DDRAM address |
> 43 µs |
Initialisation
- Attendre au moins 15ms depuis le passage Ă +5V de Vcc,
- Envoyer l'instruction Function set avec la valeur 0011...(.),
- Attendre au moins 4.1ms,
- Envoyer Ă nouveau l'instruction Function set avec la valeur 0011(.)...,
- Attendre au moins 100µs,
- Envoyer Ă nouveau l'instruction Function set avec la valeur 0011....,
- Si on veut activer le mode 4 bits, envoyer les 4 bits de poids fort de l'instruction Function set avec la valeur 0010,
- Configuration du nombre de lignes et de la matrice, en envoyant l'Instruction Function set avec par exemple la valeur 00111000 (8 bits, 2 lignes, 5x8pixels),
- Configuration du contrĂ´le d'affichage, en envoyant l'instruction Display on/off control avec par exemple la valeur 00001110 (Affichage visible, curseur visible, curseur fixe),
- Effacement de l'Ă©cran, en envoyant l'instruction Clear display, avec pour valeur 00000001,
- Configuration du curseur, en envoyant l'instruction Entry set mode, avec par exemple pour valeur 00000110 (déplacement du curseur vers la droite, pas de décalage du compteur d'adresse).
- Fin de l'initialisation, l'Ă©cran est prĂŞt Ă recevoir les autres instructions permettant l'affichage.
Mémoire d’affichage DDRAM (Display Data RAM)
Il s’agit de la mémoire où sont stockés les caractères affichés.
L’adresse du caractère correspond à sa position à l’écran.
Pour un écran à 1 ligne (80 caractères max) :
- le premier caractère de gauche est à l'adresse 0x00,
- le caractère à sa droite est à l'adresse 0x01,
- le caractère suivant est à l'adresse 0x02,
- et ainsi de suite...
@ 0x00 | @ 0x01 | @ 0x02 | @ 0x03 | .......... | @ 0x4C | @ 0x4D | @ 0x4E | @ 0x4F |
Pour un écran à 2 lignes (40 caractères max par ligne) :
- la logique d'accès au caractères est la même que pour un écran 1 ligne,
- le logique d'accès au caractères est la même que pour un écran 1 ligne sauf que l'adresse du premier caractère de gauche commence à 0x40.
@ 0x00 | @ 0x01 | @ 0x02 | @ 0x03 | .......... | @ 0x24 | @ 0x25 | @ 0x26 | @ 0x27 |
@ 0x40 | @ 0x41 | @ 0x42 | @ 0x43 | .......... | @ 0x64 | @ 0x65 | @ 0x66 | @ 0x67 |
Pour l’écran à 2 lignes de 40 caractères, si on écrit un caractère à l’adresse 27h, le curseur vient se placer automatiquement à l’adresse 40h.
Pour un écran plus petit (de 2 lignes de 16 caractères par exemple), bien qu’inutile, il est possible d’accéder aux adresses mémoires des caractères inexistants.
Mémoire du générateur de caractères CGRAM (Character Generator RAM)
Pour une matrice de caractères de 5x8, il y a 8 caractères personnalisables dans la CGROM, et seulement 4 lorsque la matrice est de 5x11. Pour une matrice de 5x8 :
- Le 1er caractère est accessible aux adresses 00h et 08h (de la DDRAM),
- Le 2e caractère est accessible aux adresses 01h et 09h,
- …
- Le 8e caractère est accessible aux adresses 07h et 0Fh.
Pour configurer les caractères personnalisables :
- il faut appeler la fonction « Set CGRAM address » où les bits « ACG5 ACG4 ACG3 » correspondent à l’adresse du caractère (ex : « 010 » pour le 3e caractère) et les bits « ACG2 ACG1 ACG0 » à la ligne dans la matrice du caractère (ex : « 011 » pour la 3e ligne en partant du haut),
- il faut ensuite appeler la fonction « Write data to CGRAM » où les bits « D7 D6 D5 » sont mis à 0 et les bits « D4 D3 D2 D1 D0 » correspondent à l’état des pixels (0 = éteint, 1 = allumé).
Pour une matrice de 5x11, mĂŞme principe sauf que :
- Le 1er caractère est accessible aux adresses 00h et 08h (de la DDRAM) pour les 8 lignes du haut, et 01h et 09h pour les 3 autres lignes,
- Le 2e caractère est accessible aux adresses 02h et 0Ah pour les 8 lignes du haut, ainsi que 03h et 0Bh pour les 3 autres lignes,
- …
- Le 4e caractère est accessible aux adresses 06h et 0Eh pour les 8 lignes du haut, ainsi que 07h et 0Fh pour les 3 autres lignes.
Les jeux de caractères standards de la CGROM (Character Generator ROM)
Les 128 premiers caractères sont répartis comme suit :
- les 16 premiers caractères correspondent aux caractères personnalisés stockés en CGRAM,
- les 16 suivants sont des caractères de contrôle (flèches, guillemets, ...),
- les 96 suivants sont à peu près les caractères ASCII.
Pour les 128 derniers caractères, il existe plusieurs standards en fonction de la référence du contrôleur « HD44780Ux » où « x » correspond au ROM code :
- si ce « ROM code = A00 », alors le contrôleur utilise le jeu de caractère japonais ;
- si le « ROM code = A02 », alors le contrôleur utilise le jeu de caractère européen.
Il peut exister encore d'autres jeux de caractères notamment pour les clones KS0070B et SPLC780A1.
Il faut se référer à la datasheet pour connaître la signification exacte de chaque emplacement de la CGROM, ou alors le vérifier expérimentalement.
Liens externes
- Datasheet
- Analyse des mémoires internes au module et création de caractères spéciaux.
- Note d'application de Microchip pour piloter un écran via un HD44780 avec un microcontrôleur PIC®