HD44780

Un article de Wikipédia, l'encyclopédie libre.
Aller à : navigation, rechercher
Photo d'un afficheur "HD44780" rétroéclairé ambre aux 2x8 charactères, affichant des charactères cyrilliques

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 Alim Masse 0V
2 Vcc Alim Alimentation générale 5V
3 Vee Alim Alimentation du panneau LCD (Contraste des caractères)

VLCD = VDD – V0

V0 = VDD → VLCD = 0 → Caractères invisibles

V0 = 0 → VLCD = VDD → 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]

Temps à respecter en écriture pour le HD44780

En lecture[modifier | modifier le code]

Temps à respecter en lecture pour le HD44780

Instructions de contrôle et d’affichage[modifier | modifier le code]

Instructions RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 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 (1ère position à gauche, 1ère 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 (1ère position à gauche, 1ère 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 1ère position à gauche, 1ère 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 to 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]

  1. Attendre au moins 15ms depuis le passage à +5V de Vcc,
  2. Envoyer l'instruction Function set avec la valeur 0011XXXX,
  3. Attendre au moins 4.1ms,
  4. Envoyer à nouveau l'instruction Function set avec la valeur 0011XXXX,
  5. Attendre au moins 100µs,
  6. Envoyer à nouveau l'instruction Function set avec la valeur 0011XXXX,
  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 | modifier le code]

Il s’agit 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)[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 2ème caractère est accessible aux adresses 01h et 09h,
  • Le 8ème 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 3ème caractère) et les bits « ACG2 ACG1 ACG0 » à la ligne dans la matrice du caractère (ex : « 011 » pour la 3ème 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 2ème 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 4ème 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.
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 « HD44780Uxxx » où « xxx » est le ROM code :

  • Si le « 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]