Pilote
des afficheurs 7 segments de l'émulateur
Mini système
FORTH
Instructions
Utilisation
Exemple
Principe
Si les
afficheurs 7 segments
de l'émulateur sont des registres adressables dans
la zone des registres
d'extension du coeur FORTH décrit comme suit:
280
(0x118) afficheur 0 (à gauche)
281 (0x119) afficheur 1
...
287 (0x11F) afficheur 7 (à droite)
lecture/écriture:
bits[15..8] = 0x00
bits[7..0] = a,b,c,d,e,f,g,dp
segment allumé si 1
Le pilote va permettre de faciliter l'utilisation de ces registrse en
se
servant du noyau temps réel. Le principe consiste
à
permettre au développeur de n'avoir qu'à
gérer qu'une simple chaine de 8 caractères
codés en ASCII.
Pour
l'émulateur du mini système FORTH, les 8 afficheurs 7 segments sont
câblés sur les composants PCF8574 et PCF8574A du port I2C numéros 3 à 6. Le PCF8574 numéro 3 correspond au
premier afficheur et le PCF8574A numéro 6 au huitième afficheur. Le
schéma électrique est le suivant:
Instructions
- CW_AFFICHEUR 280
Numéro du
registre d'extension du premier des 8 afficheurs 7 segments.
Cette instruction
n'existe pas dans le mini système FORTH,
l'accès direct aux afficheurs se fait par l'intermédiaire des
instructions I2C_PCF8574_C@, I2C_PCF8574_C!,
I2C_PCF8574A_C@
et I2C_PCF8574A_C! numéros 3 à 6.
adr_chr AFFICHEUR -
Affichage de 8
caractères ASCII.
adr_chr est l'adresse du premier des 8 caractères
codés en ASCII (8 bits par caractère).
Si le bit 7 du caractère est à "1", le point de
l'afficheur correspondant est allumé.
Utilisation
Le
pilote n'étant pas intégré au noyau,
il fau
d'abord compiler le fichier source 7_segments.txt avant de pouvoir l'utiliser.
Pour
l'émulateur du mini système FORTH, il faut d'abord compiler les pilotes
I2C décrits dans les fichiers sources pcf8574.txt
et pcf8574a.txt
puis compiler 7_segments.txt.
La séquence
suivante correspond à l'affichage de
"12345678":
" 12345678"
STRING S_NOMBRE
S_NOMBRE 1+ AFFICHEUR
Le pilote utilise une table permettant de transformer chacun des 8
codes ASCII en un caractère affichable (0 à 127).
Le bit 7 de chacun des codes ASCII permet d'allumer le point.
Exemple
Le
programme suivant installe une tâche qui affiche tous les
caractères possibles:
DECIMAL
"
" STRING S_AFFICHEUR ( 8
espaces )
TACHE:
T_7_SEGMENTS
S_AFFICHEUR 1+ DUP AFFICHEUR DUP C@
IF
( Decalage des caracteres vers la gauche )
DUP >R 1+ R@ 7 CMOVE R@ 8+ R@ DO
( Effacement du dernier point affiché )
I C@ 127 AND I C!
LOOP
( Initialisation du point avec decalage du precedent vers la
droite )
R@ 7+ C@ DUP 127 = OVER 0= OR
IF
DUP XOR
ELSE
1+
THEN
( Effacement progressif de la chaine lorsque le caractere
127 vient d'etre affiche )
DUP R@ 7+ C! ?DUP
IF
7 AND R> + DUP >R C@ 128 OR
R> C!
ELSE
R> DROP
THEN
ELSE
( Initialisation de la chaine et retrait de la tache )
8 32 FILL T_7_SEGMENTS T_RETIRE
THEN
;
500
T_7_SEGMENTS 32768 OVER T_AJOUTE T_PERIODE
Voici
une vidéo:
