Document fait avec Nvu Document made with Nvu




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: