A la découverte des microcontrôleurs PIC (2/10)
Seconde partie

Nous voici comme promis dans notre dernier cours au coeur d'un microcontrôleur PIC, l'architecture présentée figure 6 est celle d'un microcontrôleur PIC 16 F 84 sur lequel notre étude portera.
Avant d' étudier l'architecture interne d'un PIC , nous allons faire un bref rappel sur les bascules , pour nous amener jusqu' au "circuit registre" constituant essentiel dans l 'architecture d'un PIC.
Il existe en logique combinatoire différentes bascules ayant chacune des caractéristiques et un mode de fonctionnement propre. Nous allons étudier ici le fonctionnement de l' une d' elles : la bascule D.
Une bascule D peut être construite à l'aide de 4 portes NAND et d'un inverseur tel que représenté sur la figure 1.

Représentation schématique d'une bascule D
Comment utiliser des bascules D pour former une mémoire statique ?
de la bascule à la mémoire ...
Nous venons de voir le fonctionnement d'une bascule D unique , celle-ci peut être assimilée à une cellule mémoire de 1 bit ( en effet on ne mémorise qu'une seule information binaire ), pour réaliser par exemple une mémoire 8 bits ( 1 octet ), on pourra juxtaposer 8 bascules D comme représenté sur le schéma de la figure 5.
La donnée à mémoriser est présentée via les interrupteurs sur les entrées Data des bascules D ( D0 à D7 ) puis lorsque l'on veut mémoriser l' état de ces 8 entrées, il suffit d'appliquer une impulsion sur la broche de validation H ( remarquez que toutes les entrées de validation H sont reliées ensembles ). Les 8 leds connectées sur les sorties Q donnent l' état du contenu de chaque bascule . Le montage ci-après peut se réaliser à l'aide d'un circuit TLL comportant 8 bascules D tel que le 74374.
Histoire des microcontrôleurs
Mode de fonctionnement

· Tant que l' entrée de validation H est au niveau logique bas ( 0v ) la sortie des portes NAND ( 3 et 4 ) est au niveau logique haut , en effet un 0v appliqué sur une des entrées d'une porte NAND provoque la mise au niveau logique "1" de la sortie de cette porte, on dit que le "0" est l 'élément absorbant sur une NAND
( voir la table de vérité figure 3 ). La sortie des portes 3 et 4 restera "bloquée" au niveau logique "1" tant que l'entrée H est à 0 , ce qui signifie que le signal présent sur l' entrée D ( data ) ne modifiera pas les sorties des portes 3 et 4 ( sortie R et sortie S ). La sortie Q de la bascule D restera donc dans l' état précédent, on peut dire que la bascule D à mémorisé l'état antérieur ( voir la table de vérité ) .
Passons maintenant l 'entrée H au niveau logique "1" , pour une porte NAND le niveau logique "1" sur l'une de ses entrées représente "l ' élément neutre" , c'est à dire que la sortie de la porte ne dépendra alors que de l 'état de la deuxième entrée logique ( figure 3 ). Si l' entrée D est au niveau logique 1 la sortie de la porte 4 ( S ) passe au niveau logique "0" ce qui provoque une mise au niveau logique "1" de la sortie de la porte 1 appelée "Q".
Un inverseur est inséré entre le signal d'entrée D et la porte 3 de ce fait, sachant que nous avons mis précédemment D à 1 cela signifie que la sortie de la porte 3 est au niveau logique "1". La deuxième entrée de la porte 2 est connectée sur la sortie de la porte 1 qui est au niveau logique "1", de ce fait la sortie Q barre de la porte 2 est donc au niveau logique "0".
Conclusion : On peut dire que la sortie Q d'une bascule D recopie l 'état de l' entrée D tant que le signal de validation H est au niveau logique "1". Si le signal H est au niveau logique "0 ", alors la bascule peut être assimilée à une cellule mémoire de 1 bit , car elle mémorise l 'état antérieur de la sortie Q.
Cette mémoire 8 bits peut également s'appeler registre 8 bits. Dans l'architecture interne d'un microcontrôleur PIC nous retrouverons de nombreux registres semblables à celui-ci. Le PIC 16F84 possède 15 registres ayant chacun une fonction bien définie.

· Architecture interne simplifiée du PIC 16 F 84
· 1 - Mémoire programme
· 2 - Registre compteur de programme
· 3 - Port A et Port B d' entrées - sorties
· 4 - Unité Arithmétique et logique
· 5 - RAM
· 6 - E²PROM
· 7 - Horloge système
· 8 - Registre de décodage des instructions
· 9 - Registre d' état
· 10 - Registre de travail
· 11 - Registre d' instruction
· 12 - Timer
· 13 - Pointeur de pile
· 14 - Bus internes
· 15 - Reset ; Watch dog ; Alimentation

Rôle et description des principaux blocs constituants l'architecture d'un PIC

· La mémoire de programme :
Sur le PIC présenté ( 16F84 ) on retrouve une mémoire de type flash EPROM ayant une capacité de 1024 instructions ( rep: 1 ) . Le constructeur donne environ 1000 cycles d'effacement et d'écriture pour cette mémoire, ce qui nous laisse une marge assez confortable pour mettre au point un programme .Chaque instruction est codée sur 14 bits cela signifie que la mémoire programme du PIC 16F84 à une capacité de 1024x14 bits.
C'est dans cette mémoire que sera stocké votre programme ( compilé ) qui correspondra aux instructions que devra effectuer le microcontrôleur .Les 1024 ( 1k ) instructions possibles semblent un peu dérisoires face aux "méga-octets" d'aujourd'hui , mais vous verrez par la suite que cela suffit largement pour une application "grand public", il ne faut pas oublier également que dans chaque case mémoire on peut stocker 14 bits , ce qui permet d'utiliser des instructions plus "puissantes" que dans une mémoire traditionnelle 8 bits.

Largeur d'une case mémoire
Organisation de la mémoire de programme
A la mise sous tension c'est la case située à l'adresse 0 qui sera lue ( c'est ce que l 'on appel le vecteur reset ). Nous verrons par la suite lors d'une application que le PIC 16F84 peut travailler également en mode interruption ( selon 4 sources différentes ), dans ce cas la case mémoire qui sera pointée se trouve à l'adresse 4 ( c'est le vecteur interruption ).

· Le compteur de programme ( CP ou PC en anglais pour Programm Counter )
Nous venons de voir que la mémoire programme contient les codes binaires du programme que nous avons définit. Nous avions également vu dans le premier cours que le microcontrôleur exécute une à une les instructions stockées dans la mémoire.
Un registre interne nommé "compteur de programme" ( rep : 2 ) va être chargé de pointer ( sélectionner ) chaque case mémoire une à une, afin que le microcontrôleur puisse exécuter l 'instruction correspondante au code binaire stocké dans la case mémoire concernée .Le contenu du registre du pointeur de programme augmentera au grès de l ' exécution des instructions , le PC pointe toujours la prochaine instruction à exécuter.

Dés que le microcontrôleur est alimenté le contenu du registre compteur de programme est remis à zéro ce qui fait que c'est case mémoire située à l'adresse 0 qui va être pointée la première ( vecteur RESET ).
Le compteur de programme possède une largeur 13 bits, il peut donc adresser une mémoire de 8 k ( 2 13 = 2 10 x 2 3 soit 1 k x 8 = 8 k ) .
Le compteur de programme s'est incrémenté alors que l' exécution de l' instruction précédente est en cours.
Cheminement d'une instruction







· Le registre de contrôle et décodage des instructions
Le programme binaire correspondant à votre source est maintenant dans la mémoire programme du microcontrôleur PIC , le compteur de programme pointe l 'instruction a exécuter , cette instruction est analysée par un registre de contrôle et de décodage des instructions véritable analyseur logique , qui est chargé de définir ce que le microcontrôleur devra effectuer comme opération. Le contrôleur et décodeur d' instruction définit la stratégie des actions à accomplir en interne pour effectuer l 'instruction demandée.

· L ' unité arithmétique et logique
L ' unité arithmétique et logique est considérée souvent comme étant le coeur de
l 'unité centrale ( UC ) , en effet c'est elle qui va être chargée d 'effectuer toutes les opérations de type arithmétique ( addition , soustraction etc... ) ou bien de type logique ( rotation , décalage , complément etc... ) .
Selon l 'opération à effectuer le contrôleur et décodeur d ' instruction enverra les signaux nécessaires à l ' unité arithmétique et logique pour pouvoir accomplir
l 'opération demandée.

Exemple : Nous voulons soustraire deux nombres, comment l 'unité centrale va elle procéder ?

- Dans un premier temps la première valeur à soustraire va être stockée dans le registre de travail W, remarquez que le registre de travail est relié sur une des entrées de l Unité Arithmétique et Logique .

- Puis la deuxième valeur à soustraire est dirigée vers une autre entrée de l ' Unité Arithmétique et Logique . Ensuite un code indiquant qu' une soustraction doit être effectuée est envoyé vers l ' Unité Arithmétique et Logique qui exécute cette instruction.

- Le résultat de la soustraction est stockée dans le registre de travail qui lui même est relié au bus de donnée interne, cela veut dire que le résultat peut être transféré en interne vers n 'importe quel registre.
Le registre de travail ( registre W rep : 10 )

L Unité Arithmétique et Logique est en étroite relation avec un registre nommé W, ( work register ) c'est un registre de travail qui correspond aux anciens "accumulateurs" sur les microprocesseurs et par lequel vont transiter un bon nombre d' informations que ce soit une donnée à traitée ( pour réaliser par exemple une addition , une soustraction etc ... ) ou bien pour stocker le résultat
d 'une opération ou d' un traitement.

Nous verrons par la suite lorsque nous réaliserons des programmes que ce registre est très important, en effet l 'accès à certain registre du PIC ne peut se faire directement, nous sommes obligés de "passer" la valeur à lire ou à écrire par ce fameux registre de travail. Le fait que le registre de travail soit relié au bus de données interne permet à celui-ci d 'être en relation avec le reste de l 'architecture du PIC ( RAM , E²PROM , TIMER , PORTS A et B , etc... ).
Le registre d état ( ou registre status )

A chaque fois que l 'on devra faire un test au cours d 'un programme nous allons utiliser sans le savoir un registre interne appelé registre d' état qui est en relation avec le résultat de la dernière opération demandée au microcontrôleur PIC. C ' est un registre qui contient 8 bits ayant chacun un rôle bien particulier.
Exemple d 'un test au cours d 'un programme :
Nous avons réalisé une temporisation et nous devons tester si celle-ci est terminée pour passer à la suite du programme, comment le microcontrôleur va t' il gérer ce programme ?

- Pour réaliser une temporisation nous allons "charger une valeur dans un registre du PIC, puis nous allons décrémenter cette valeur jusqu ' à atteindre la valeur 0 ce qui définira la fin de notre temporisation. Pour pouvoir dire que le registre que nous avons utilisé est bien à 0, nous allons utiliser une instruction de test qui va nous avertir quand le contenu du registre sera égal à 0. Cette instruction de test contrôle l ' état d 'un bit du registre d' état , le bit Z ( comme zéro ) qui passera à 1 lorsque le résultat de la dernière opération effectuée vaudra 0.
Cela peut paraître assez difficile au premier abord mais avec l ' habitude.. on se fait à tout. ( figure 13 )
Chronogramme de la temporisation
Les bits du registre d 'état
Bit C ( carry ) : Ce bit du registre d' état va passer à "1" lorsque le résultat de la dernière opération arithmétique à provoqué une retenue.

· Bit DC ( digit carry ) : Ce bit du registre d' état va passer à "1" lorsque le résultat de la dernière opération arithmétique à provoqué une retenue sur les quatre premiers bits, ce bit ( ou bien flag ... pour drapeau ) sera utilisé lorsque l 'on travaillera en BCD ( binaire codé décimal ) .

· Bit Z ( zéro ) : Ce bit du registre d' état va passer à "1" lorsque le résultat de la dernière opération est égal à zéro. Dans l 'exemple de la temporisation précédente on utilise ce bit zéro.

· Bit PD/ ( power down ) : Ce bit du registre d' état va passer à "0" lorsque le microcontrôleur rencontre l 'instruction particulière "Sleep" ( mise en sommeil ) qui détermine le mode de mise en veille PIC en bloquant les impulsions d 'horloge nécessaires au cadencement de tous les échanges, le PIC attend alors un événement pour "repartir".

· Bit TO/ ( time out ) : Ce bit du registre d' état va passer à "0" lorsque le chien de garde interne ( nous reviendrons ultérieurement sur son fonctionnement ) à atteint la fin de comptage que le programmeur lui à définit. Le chien de garde ( ou watch dog ) peut être désactivé, il ne servira que lorsque nous voudrons savoir si le programme se déroule correctement.

· RP0 et RP1 sont deux bits qui permettent d' accéder à deux zones mémoire RAM différentes ( bank 0 et bank 1 ), le prochain cours détaille le fonctionnement de ces deux bits

· IRP : Bit de réserve pour application future , en ce qui concerne le PIC que nous étudions c'est à dire le PIC 16F84 ce bit ne sert pas.

Pour terminer cette deuxième partie ...
Nous avons passer en revue certains registres constituant l 'architecture d'un PIC , dans le prochain cours nous allons continuer notre "voyage" dans l 'architecture interne afin de pouvoir débuter notre cours sur la programmation et donc notre premier programme.


P.MAYEUX
[Retour]
[Cours 1] [Cours 2] [PDF complet des cours]
Présentation de mes livres sur les PIC