Un HD44780 est un contrôleur standard permettant de piloter un dispositif d'affichage par cristaux liquides.

Photo d'un afficheur HD44780 rétroéclairé ambre à 2x8 caractères, affichant des caractères cyrilliques

Des « clones » existent, tels que le KS0070B ou le SPLC780A1.

Branchement physique modifier

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

En mode 8 bits modifier

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

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

En écriture modifier

 
Temps à respecter en écriture pour le HD44780

En lecture modifier

 
Temps à respecter en lecture pour le HD44780

Instructions de contrôle et d’affichage modifier

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)
S(Shift) = 1 → Décalage de l'affichage dans le sens de déplacement du curseur
S = 0 → L'affichage n'est pas décalé
Attention le décalage de l'affichage (S = 1) décale également les adresses de l'afficheur de sorte que l’adresse 00h ne correspondra plus à la 1re position à gauche, 1re ligne.

> 40 µs
Display on/off control 0 0 0 0 0 0 1 D C B D = 1 → Affichage visible

D = 0 → Affichage invisible
C = 1 → Curseur visible
C = 0 → Curseur invisible
B = 1 → Curseur clignotant
B = 0 → Curseur fixe

> 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
R/L = 1 → Décalage à droite
R/L = 0 → Décalage à gauche

> 40 µs
Function set 0 0 0 0 1 DL N F - - DL = 1 → Interface 8 bits

DL = 0 → Interface 4 bits
N = 1 → 2 lignes d'affichage
N = 0 → 1 ligne d'affichage
F = 1 → Matrice 5 x 11 points
F = 0 → Matrice 5 x 8 points

> 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
BF = 0 → Le contrôleur est disponible pour une 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

  1. Attendre au moins 15ms depuis le passage à +5V de Vcc,
  2. Envoyer l'instruction Function set avec la valeur 0011...(.),
  3. Attendre au moins 4.1ms,
  4. Envoyer à nouveau l'instruction Function set avec la valeur 0011(.)...,
  5. Attendre au moins 100µs,
  6. Envoyer à nouveau l'instruction Function set avec la valeur 0011....,
  7. Si on veut activer le mode 4 bits, envoyer les 4 bits de poids fort de l'instruction Function set avec la valeur 0010,
  8. 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),
  9. 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),
  10. Effacement de l'écran, en envoyant l'instruction Clear display, avec pour valeur 00000001,
  11. 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).
  12. 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

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

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

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.
 
Jeu de caractères du HD44780

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