( Voltmetre numerique. Version 0.10 du 11 Juillet 2004. Ecrit par jpb.forth . ) TELECHARGEMENT ( Definition des registres d'extension des differents peripheriques: ------------------------------------------------------------------ ) DECIMAL 272 CONSTANT CW_PORT_A ( Discrets port A ) 273 CONSTANT CW_PORT_B ( Discrets port B ) 274 CONSTANT CW_ECHANT ( Configuration echantillonnage ) 275 CONSTANT CW_ANALOG ( Entree/sortie analogique ) 276 CONSTANT CW_MOTEUR ( Moteur pas a pas ) 278 CONSTANT CW_CLAV ( Clavier 16 touches ) 280 CONSTANT CW_AFF_0 ( Afficheur 7 segments 0 ) 281 CONSTANT CW_AFF_1 ( Afficheur 7 segments 1 ) 282 CONSTANT CW_AFF_2 ( Afficheur 7 segments 2 ) 283 CONSTANT CW_AFF_3 ( Afficheur 7 segments 3 ) 284 CONSTANT CW_AFF_4 ( Afficheur 7 segments 4 ) 285 CONSTANT CW_AFF_5 ( Afficheur 7 segments 5 ) 286 CONSTANT CW_AFF_6 ( Afficheur 7 segments 6 ) 287 CONSTANT CW_AFF_7 ( Afficheur 7 segments 7 ) ( Definition des constantes: -------------------------- ) ( Table d'affichage des symboles des chiffres: Bits[7..0]: a b c d e f g dp ) BIN HERE 11111100 C, ( chiffre 0 ) 01100000 C, ( chiffre 1 ) 11011010 C, ( chiffre 2 ) 11110010 C, ( chiffre 3 ) 01100110 C, ( chiffre 4 ) 10110110 C, ( chiffre 5 ) 10111110 C, ( chiffre 6 ) 11100000 C, ( chiffre 7 ) 11111110 C, ( chiffre 8 ) 11110110 C, ( chiffre 9 ) 11101110 C, ( lettre A ) 00111110 C, ( lettre b ) 10011100 C, ( lettre C ) 01111010 C, ( lettre d ) 10011110 C, ( lettre E ) 10001110 C, ( lettre F ) 00000010 C, ( signe - ) 00000001 C, ( point ) 00111000 C, ( lettre v ) 00111010 C, ( lettre o ) 00001100 C, ( lettre l ) 00001110 C, ( lettre t ) CONSTANT TABLE_SYMBOLES ( Definition des variables: ------------------------- ) DECIMAL 0 VARIABLE ANGLE 0 VARIABLE TENSION ( Gestion de l'affichage angulaire (moteur pas a pas): ---------------------------------------------------- Simulation d'un moteur de 120 pas soient 3 degres par pas ) DECIMAL ( Bits[15..4]: 111111111111 a l'angle 0, 000000000000 pour les autres angles Bits[3..0]: Phase_4 Phase_3 Phase_2 Phase_1 ) : PAS ( n --> - avec 0<=n<=7 ) CASE 1 OF 3 ENDOF 2 OF 2 ENDOF 3 OF 6 ENDOF 4 OF 4 ENDOF 5 OF 12 ENDOF 6 OF 8 ENDOF 7 OF 9 ENDOF 1 ENDCASE CW_MOTEUR CW! ; TACHE: T_MOTEUR 49 T_MOTEUR T_ACTIVE TENSION @ 3 / ANGLE @ - ?DUP IF 0< IF -1 ELSE 1 THEN ANGLE DUP >R @ + DUP R> ! 7 AND PAS THEN ; : RAZ_MOTEUR T_MOTEUR T_RETIRE 1 BEGIN CW_MOTEUR CW@ 0< NOT WHILE DUP PAS 1- 7 AND 20 TEMPO REPEAT DROP ; ( Programme principal: -------------------- La tension issue du CAN est mesuree toutes les 333 ms et affichee sous differentes formes: - en binaire sur les discrets du port B, - en decimal sur les afficheurs 7 segments, - en angle sur e moteur pas a pas, - en tension sur le CNA. ) TACHE: T_MESURE_TENSION 332 T_MESURE_TENSION T_ACTIVE CW_ANALOG CW@ DUP TENSION ! DUP CW_ANALOG CW! DUP CW_PORT_B CW! DUP 0< IF NEGATE 16 TABLE_SYMBOLES + C@ ELSE 0 THEN CW_AFF_0 CW! 10 /MOD 10 /MOD TABLE_SYMBOLES + C@ 1+ CW_AFF_1 CW! TABLE_SYMBOLES + C@ CW_AFF_2 CW! TABLE_SYMBOLES + C@ CW_AFF_3 CW! CW_AFF_4 TABLE_SYMBOLES 18+ DUP >R 4+ R> DO I C@ OVER CW! 1+ LOOP DROP ; : TENSION_ON RAZ_MOTEUR 0 ANGLE ! 0 CW_ECHANT CW! 49152 T_MOTEUR DUP >R T_AJOUTE 10 R> T_ACTIVE 49152 T_MESURE_TENSION DUP >R T_AJOUTE 10 R> T_ACTIVE ; : TENSION_OFF T_MESURE_TENSION T_RETIRE T_MOTEUR T_RETIRE RAZ_MOTEUR 0 CW_ANALOG CW! 0 CW_PORT_B CW! CW_AFF_0 DUP 8+ SWAP DO 0 I CW! LOOP ; TENSION_ON ( FIN )