É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.
| 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 | 0 | 0 | 0 | 0 | CA[3..0] | Set the SRAM column address CA=0..131 |
|||
| Set Column Address MSB | 0 | 0 | 0 | 1 | CA[7..4] | ||||||
| (5) | Set Power Control | 0 | 0 | 0 | 1 | 0 | 1 | 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 | 0 | 1 | SL[5..0] | Set the display startline number SL=0..63 | |||||
| (7) | Set Page Address | 0 | 1 | 0 | 1 | 1 | PA[3..0] | Set the SRAM page address PA=0..7 | |||
| (8) | Set VLCD Resistor Ratio | 0 | 0 | 0 | 1 | 0 | 0 | PC[5..3] | Configure internal resistor ratio PC=0..7 |
||
| (9) | Set Electronic Volume | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Adjust contrast of LCD panel PM=0..63 |
| 0 | 0 | PM[5..0] | |||||||||
| (10) | Set All Pixel On | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | C1 | C1=0: show SRAM content C1=1: Set all SEG-Drivers to ON |
| (11) | Set Inverse Display | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | C0 | C0=0: show normal SRAM content C0=1: show inverse SRAM content |
| (12) | Set Display Enable | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 1 | C2 | C2=0: disable Display (sleep) C2=1: enable Display (exit from sleep) |
| (13) | Set SEG direction | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | MX | MX=0: normal SEG 0..131 MX=1: mirror SEG 131..0 |
| (14) | Set COM direction | 0 | 1 | 1 | 0 | 0 | MY | 0 | 0 | 0 | MY=0: normal COM 0..63 MY=1: mirror COM 63..0 |
| (15) | System Reset | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | System Reset |
| (17) | Set LCD Bias Ratio | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | BR | BR: 0=1/9; 1=1/7 |
| (25) | Set Adv. Program Control 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 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 |
| TC | 0 | 0 | 1 | 0 | 0 | WC | WP | ||||
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, |
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.