Display EADOGS102

Étude du display LCD EADOGS102 : j'ai choisi d'intégrer ce modèle de display LCD au projet « Minuteur », principalement pour sa très faible consommation électrique et ses dimensions compactes. Ces caractéristiques sont particulièrement intéressantes pour ce projet, qui doit pouvoir fonctionner sur batterie tout en conservant un affichage suffisamment lisible. Le choix de ce display permet ainsi de limiter la consommation globale du système tout en bénéficiant d'une résolution adaptée à l'affichage des informations du minuteur.

Principe de fonctionnement : une des méthodes permettant de piloter ce display consiste à créer en mémoire RAM un buffer correspondant à l'ensemble des pixels de l'écran. Chaque octet du buffer représente une colonne de 8 pixels verticaux, chaque bit correspondant à l'état d'un pixel : allumé ou éteint. Pour un display de 102 × 64 pixels, le buffer nécessaire est donc de 102 × 64 / 8 = 816 octets. Le programme peut alors modifier directement le contenu de ce buffer avant de transférer les données vers le contrôleur du display. Cette méthode permet notamment de construire l'affichage en mémoire, puis de mettre à jour l'écran de manière organisée.

Les registres de commande

Command Command Code Function
CD D7 D6 D5 D4 D3 D2 D1 D0
(1) Write Data Byte 1 data bit D[7..0] Write one byte to memory
(4) Set Column Address LSB 0 0000 CA[3..0] Set the SRAM column address
CA=0..131
Set Column Address MSB 0001 CA[7..4]
(5) Set Power Control 0 00101 PC[2..0] PC0: 0=Booster OFF; 1=Booster ON
PC1: 0=Regulator OFF; 1=Regulator ON
PC2: 0=Follower OFF; 1=Follower ON
(6) Set Scroll Line 0 01 SL[5..0] Set the display startline number SL=0..63
(7) Set Page Address 0 1011 PA[3..0] Set the SRAM page address PA=0..7
(8) Set VLCD Resistor Ratio 0 00100 PC[5..3] Configure internal resistor ratio
PC=0..7
(9) Set Electronic Volume 0 10000001 Adjust contrast of LCD panel
PM=0..63
00 PM[5..0]
(10) Set All Pixel On 0 1010010C1 C1=0: show SRAM content
C1=1: Set all SEG-Drivers to ON
(11) Set Inverse Display 0 1010011C0 C0=0: show normal SRAM content
C0=1: show inverse SRAM content
(12) Set Display Enable 0 1010111C2 C2=0: disable Display (sleep)
C2=1: enable Display (exit from sleep)
(13) Set SEG direction 0 1010000MX MX=0: normal SEG 0..131
MX=1: mirror SEG 131..0
(14) Set COM direction 0 1100MY000 MY=0: normal COM 0..63
MY=1: mirror COM 63..0
(15) System Reset 0 11100010 System Reset
(17) Set LCD Bias Ratio 0 1010001BR BR: 0=1/9; 1=1/7
(25) Set Adv. Program Control 0 0 11111010 TC: Temp. comp. 0= -0.05; 1= -0,11%/°C
WC: Column wrap around 0=OFF; 1=ON
WP: Page wrap around 0=OFF; 1=ON
TC00100WCWP

Orientation et origine des coordonnées : les registres SET_COM_Direction et SET_SEG_Direction permettent de définir l'orientation du display ainsi que la direction de progression des coordonnées x et y. Ils permettent ainsi d'adapter le système de coordonnées à la position physique du LCD et de choisir l'emplacement de l'origine de l'affichage. Il faut toutefois être attentif à l'orientation choisie : dans le cas de l'orientation 12 o'clock, la première colonne visible ne correspond pas à la coordonnée x = 0. L'affichage commence à la coordonnée x = 30, ce qui doit être pris en compte lors du calcul de la position des différents éléments graphiques à l'écran.

Set Scroll line 0x40,
Set SEG Direction 0xA0,
Set COM Direction 0xC0,
Set ALL Pixel 0xA4,
Set Invers Display 0xA6,
Set LCD Bias Ratio 0xA2,
Set Power Control 0x2F,
Set VCLD Resistor Ratio 0x27,
Set Electronic Volume MSB 0x81,
Set Electronic Volume LSB 0x10,
Set Adv. Program control0 msb 0xFA,
Set Adv. Program control0 lsb 0x90,
Set Display Enable 0xAF,
structure rotation 180 C

les polices de caractère

Les polices de caractères (fonts) sont représentées sous la forme de tableaux de bytes. Chaque caractère peut avoir une largeur différente : par exemple, la lettre « I » est moins large que la lettre « W ». Si nous utilisons un espacement constant, l'écriture devient moins agréable à lire.
C'est pourquoi nous utilisons deux tableaux. Le premier, « font » (police de caractères), contient les données permettant de représenter chaque caractère. Le deuxième, appelé descripteur, définit la largeur du caractère en pixels ainsi que sa position, ou son décalage, dans le tableau « font ».

Prenons un exemple pour mieux comprendre : la lettre « D » majuscule dans le tableau de la police Arial16pt.
La police utilisée est Arial 16. Pour pouvoir représenter l'ensemble des caractères, notamment les minuscules et les jambages de certaines lettres, cette police est définie sur une hauteur de 21 pixels.

fichier "font.c"
@1260 'D' (12 pixels wide)
0x00, 0x00,
0xFF, 0x00,
0xFF, 0xC0,
0xC0, 0xE0,
0xC0, 0xE0,
0xC0, 0xE0,
0xC0, 0xE0,
0xC0, 0xE0,
0xC0, 0xE0,
0xC0, 0xE0,
0xC0, 0xE0,
0xC0, 0xE0,
0xC0, 0xE0,
0xC0, 0xE0,
0xFF, 0xC0,
0xFF, 0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
,
fichier "descripteur.c"
{ 11, 1176 }, // B
{ 13, 1218 }, // C
{ 12, 1260 } // D
{ 11, 1302 }, // E
{ 10, 1344 }, // F
{ 14, 1386 }, // G

Le tableau de description, appelé descripteur, définit la position du caractère dans le tableau font.c. Dans cet exemple, la lettre « D » commence à l'adresse 1260 et occupe 42 octets. Sa largeur est définie sur 12 pixels. On remarque que les quatre derniers bits du deuxième octet sont toujours égaux à zéro, car ils ne sont pas utilisés.

Le décalage dans le tableau font.c est toujours un multiple de 21, puisque cette valeur correspond à la hauteur des caractères de la police.