all of craigslist

La page des Photos La page des Vidéos Accueil  

Le moteur Stirling

Historique
Principe de fonctionnement
Les différents moteurs
Le L.D.T.
Mon moteur Stirling
Ma pompe Stirling

Ecologie

Le solaire
L'éolien
le MCE-5
Le réacteur pantone
Le Bio-Ethanol (e85)


Divers

Les microcontroleurs
Expériences
STAR TREK (new)
En Vrac
Liens

Partenaire

Créer votre blog
Créer un site

EOL le blog de l'éolien



Gérer un écran LCD avec un pic 16f876




Mon programme permet de gérer un écran LCD ayant un certain 'Chipset' (programme interne, protocole).
Il gère le HD44780 et compatible avec un chipset d'écran Samsung SX66 (enfin je crois).

LCD.asm

En fait, vous pouvez quasiment l'utiliser comme ça, copier-coller dans votre prog. Respectez juste
les connections, voir en début de Programme....

Explications du Programme :

LCD_E EQU 0 ; LCD Enable control line
LCD_RW EQU 1 ; LCD Read/Write control line
LCD_RS EQU 2 ; LCD Register-Select control line

Ligne A0 du port A pour Enable (Broche 6) : c'est une entrée d'activation, selon son état le contrôleur de l'afficheur LCD lit les données DB0-DB7.
Ligne A1 du port A pour Read/Write (Broche 5) : Entrée qui commande l'afficheur en lecture ou en écriture.
Ligne A2 du port A pour RS (broche 4) : Entrée qui permet d'informer l'afficheur de la nature de l'octet sur DB0-DB7 --> Données ou Instructions.

; PORTB bits
DB7 EQU 0 ; LCD dataline 7 (MSB)
DB6 EQU 1 ; LCD dataline 6
DB5 EQU 2 ; LCD dataline 5
DB4 EQU 3 ; LCD dataline 4
DB3 EQU 4 ; LCD dataline 3
DB2 EQU 5 ; LCD dataline 2
DB1 EQU 6 ; LCD dataline 1
DB0 EQU 7 ; LCD dataline 0 (LSB)

Ce sont là toutes les entrées/sorties du PORT B du Pic, le port qui envoie l'octet qui contient soit les instructions, soit les données, il lit aussi les données envoyées par l'afficheur.



Les Broches de Connexions (Ecran LCD < 80 caractères).

Pin number Symbol  Level   I/O Function
1 Vss - - Power supply (GND)
2 Vcc - - Power supply (+5V)
3 Vee - - Contrast adjust
4 RS 0/1 I 0 = Instruction input
1 = Data input
5 R/W 0/1 I 0 = Write to LCD module
1 = Read from LCD module
6 E 1, 1->0 I Enable signal
7 DB0 0/1 I/O Data bus line 0 (LSB)
8 DB1 0/1 I/O Data bus line 1
9 DB2 0/1 I/O Data bus line 2
10 DB3 0/1 I/O Data bus line 3
11 DB4 0/1 I/O Data bus line 4
12 DB5 0/1 I/O Data bus line 5
13 DB6 0/1 I/O Data bus line 6
14 DB7 0/1 I/O Data bus line 7 (MSB)


Instructions du HD44780.

Instruction Code Description Execution time**
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
Clear display 0 0 0 0 0 0 0 0 0 1 Clears display and returns cursor to the home position (address 0). 1.64mS
Cursor home 0 0 0 0 0 0 0 0 1 * Returns cursor to home position (address 0). Also returns display being shifted to the original position. DDRAM contents remains unchanged. 1.64mS
Entry mode set 0 0 0 0 0 0 0 1 I/D S Sets cursor move direction (I/D), specifies to shift the display (S). These operations are performed during data read/write. 40uS
Display On/Off control 0 0 0 0 0 0 1 D C B Sets On/Off of all display (D), cursor On/Off (C) and blink of cursor position character (B). 40uS
Cursor/display shift 0 0 0 0 0 1 S/C R/L * * Sets cursor-move or display-shift (S/C), shift direction (R/L). DDRAM contents remains unchanged. 40uS
Function set 0 0 0 0 1 DL N F * * Sets interface data length (DL), number of display line (N) and character font(F). 40uS
Set CGRAM address 0 0 0 1 CGRAM address Sets the CGRAM address. CGRAM data is sent and received after this setting. 40uS
Set DDRAM address 0 0 1 DDRAM address Sets the DDRAM address. DDRAM data is sent and received after this setting. 40uS
Read busy-flag and address counter 0 1 BF CGRAM / DDRAM address Reads Busy-flag (BF) indicating internal operation is being performed and reads CGRAM or DDRAM address counter contents (depending on previous instruction). 0uS
Write to CGRAM or DDRAM 1 0 write data Writes data to CGRAM or DDRAM. 40uS
Read from CGRAM or DDRAM 1 1 read data Reads data from CGRAM or DDRAM. 40uS
Remarques:
- DDRAM = RAM données Ecrans.
- CGRAM = RAM du générateur de Caractères.
- DDRAM = Adresse de la position du Curseur.
- * = Pas Utilisé


Nom des "Bits"
Bit name Setting / Status
I/D 0 = Decrement cursor position 1 = Increment cursor position
S 0 = No display shift 1 = Display shift
D 0 = Display off 1 = Display on
C 0 = Cursor off 1 = Cursor on
B 0 = Cursor blink off 1 = Cursor blink on
S/C 0 = Move cursor 1 = Shift display
R/L 0 = Shift left 1 = Shift right
DL 0 = 4-bit interface 1 = 8-bit interface
N 0 = 1/8 or 1/11 Duty (1 line) 1 = 1/16 Duty (2 lines)
F 0 = 5x7 points 1 = 5x10 points
BF 0 = Can accept instruction 1 = Internal operation in progress
DDRAM utilisation des adresses pour un écran 1 ligne
Taille Ecran Visible
positions Caractères DDRAM adresses
1*8 00..07 0x00..0x07
1*16 00..15 0x00..0x0F [1] [2] [3] [4]
1*20 00..19 0x00..0x13
1*24 00..23 0x00..0x17
1*32 00..31 0x00..0x1F
1*40 00..39 0x00..0x27


DDRAM utilisation des adresse pour Ecran 2 lignes
Taille Ecran Visible
Positions Caractères DDRAM adresses
2*16 00..15 0x00..0x0F + 0x40..0x4F [1]
2*20 00..19 0x00..0x13 + 0x40..0x53
2*24 00..23 0x00..0x17 + 0x40..0x57
2*32 00..31 0x00..0x1F + 0x40..0x5F
2*40 00..39 0x00..0x27 + 0x40..0x67


Protocole 8 bits



Il existe aussi un mode 4 bits mais je ne l'ai pas utilisé.

Je vous laisse vous débrouiller avec tout ça, je pense que vous pouvez faire facilement le rapprochement entre le tableau des instructions et les routines du programme d'utilisation d'un écran LCD HD44780.

Bon allez je vous donne un exemple d'interprétation :

;====================================================
; LCDDMODE
; Sets display control.
; Required display mode must be set in W
; b0 : 0 = cursor blink off 1 = cursor blink on
; b1 : 0 = cursor off 1 = cursor on
; b2 : 0 = display off 1 = display on
; b3-7 : don't care
; OK
;===================================================
LCDDMODE
   ANDLW 0x007 ; Strip upper bits
    IORLW 0x008 ; Function set
    CALL LCDPUTCMD ; Envoi l'instruction dans l'écran
    RETURN

Le "ANDLW" 0x007 crée un masque avec le registre de travail W :



Ce qui permet de ne "garder" que les trois dernier bits de W pour commander les choix décrit dans le tableau de description.
Le "IORLW" 0x008 impose un état haut sur DB3 sans changer les états des autres bits et nous fait passer dans la ligne d'instruction Display On/Off control (voir le tableau des instructions).
Nous pouvons effectivement voir que par rapport au tableau des instructions et au nom des "bits", les trois bits du résultat W AND 0x07 puis IORLW 0x08 commandent le clignotement du curseur, la visibilité du curseur ainsi que l'afiichage général de l'écran LCD.

Pour le reste, c'est exactement la même philosophie.

;==================================================
; LCDCLEAR
;==================================================
LCDCLEAR
    MOVLW 0x001
    CALL LCDPUTCMD ;envoi de 0x001 dans l'écran.
    RETURN

En regardant le tableau des instructions vous pouvez voir qu'il s'agit bien de la ligne concernant la fonction "clear display", efface écran. Très simple, non ?