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
[modifier | modifier le code]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
[modifier | modifier le code]En mode 8 bits
[modifier | modifier le code]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
[modifier | modifier le code]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 :
- d’abord les 4 bits de poids fort, par une première validation sur la broche E,
- puis les 4 bits de poids faible, par une seconde validation sur la broche E.
Timings à respecter
[modifier | modifier le code]En écriture
[modifier | modifier le code]En lecture
[modifier | modifier le code]Instructions de contrôle et d’affichage
[modifier | modifier le code]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
[modifier | modifier le code]- 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)
[modifier | modifier le code]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 aux caractères est la même que pour un écran 1 ligne,
- la logique d'accès aux 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)
[modifier | modifier le code]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)
[modifier | modifier le code]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
[modifier | modifier le code]- 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®