Notre prochain objectif: faire clignoter des diodes façon K2000! J'ai une carte avec un pic18f256 et 3 diodes sur le port C (et plus exactement les pattes RC0, RC1 et RC2). Mais attention, comme je n'avais pas assez de place sur la carte, j'ai branché l'anode sur le pic et la cathode sur le VCC. Rien de grave, on en tiendra compte dans le programme... Accèdons à l'extérieurL'architecture PIC et les registres de contrôleCeux qui sont familiers avec les pics peuvent passer directement au paragraphe suivant, les autres ont le droit de ne pas s'affoler... et de lire la suite. Des ports, des latches et des tristatesLe pic est un microcontrôleur difficile d'accès, car chaque patte peut avoir plusieurs fonctions différentes. On va faire simple, pour l'instant on ne va pas utiliser les fonctions avancées. Chaque patte peut basiquement servir d'entrée ou de sortie. Lorsque la patte est configurée en sortie, le PIC peut connecter via un transistor (en fait 2) soit à la masse soit à l'alimentation. La patte est dite soit à 1 soit à 0, ou en LowZ. Lorsque la patte est configurée en entrée, la patte n'est connectée par le PIC ni à l'alimentation ni à la masse: La patte est dite en haute impédance (HighZ) , car la résistance entre la patte et les alimentations est suffisament forte pour qu'un montage extérieur puisse contrôler la tension sur la patte. En résumé :
Le contrôle de tout cela est fait au travers de trois registres pour chaque bloc de pattes (un port):
Modifier un registre avec rforth1Les registres sont définis dans rforth1 sous le même nom que dans la datasheet du PIC. Donc en cas de doute, on regarde la datasheet, et on connaît le nom du registre. On peut bien entendu écrire le registre d'un coup: ApplicationSoyons simpleMa première version est très bête: on a 3 leds, donc 4 étapes dans le chenillard K2000. ( Définition d'une attente de 10000 cycles de 10 instructions ) ( soit environ 0.01 seconde ) : wait ( -- ) 10000 begin 1 - dup 0= until drop ; ( On fait une attente un peu plus longue, grace à l'attente courte ) : wait-long ( -- ) 100 begin wait 1- dup 0= until drop ; : main ( -- ) ( Initialisation des bits 0 à 2 du port C en sortie ) 0xf8 TRISC c! begin 0x01 LATC c! wait-long 0x02 LATC c! wait-long 0x04 LATC c! wait-long 0x02 LATC c! wait-long again ;
|
|||


