LES MICROCONTROLEURS...

___ Va-t-on faire de l'électronique ou de l'informatique ???
___ Rep : les 2, mon général !!!


Avant-propos :

Dans les exemples, j'utiliserai les
microcontrôleurs de la famille ST62xx
( SGS THOMSON ) et ceux de la famille
des PIC16Cxx ( MICROCHIP ).
Je sais, il y en a beaucoup d'autres,
mais je préfère parler de ceux que
j'ai effectivement déjà pratiqués.

Avant de me lancer à fond dans le sujet
( les microcontrôleurs ), je ferai tout d'abord
quelques rappels sur les ordinateurs, les
microprocesseurs, le codage des informations,
l'algèbre de Boole, les circuits logiques, etc..

Pour que tout soit bien clair ensuite.
Certains pourront "sauter" allègrement tous ces rappels !


PLAN :


Généralités:

Qui a inventé l'ordinateur ? Les mathématiciens ?
Les ingénieurs ? Je ne me risquerai pas à donner
une réponse. Je dirai simplement que de 1935 à 1950
deux mathématiciens ont joué un rôle important dans
l'invention de l'ordinateur. Il s'agit de l'anglais Alan
TURING et de l'américain John von NEUMANN. Ce dernier
a donné son nom à l'architecture des ordinateurs
modernes. Elle fut définie dans un texte qu'il écrivit
en 1945.
Je vais m'appuyer sur l'architecture de Von Neumann,
par la suite, pour décrire de facon simple ( du moins je
l'espère ) le fonctionnement d'un ordinateur, d'un système
à microprocesseur, ou d'un microcontrôleur. Bien que
cette architecture ne soit pas la seule mise en oeuvre
de nos jours, elle permet d'avoir une vision simple des
choses.

N.B. Autre architecture : architecture de Harvard .
Les instructions du programme, les données, se trouvent dans des
mémoires séparées. ( ordinateur MARK 1 - 1944 ).

DEFINION : INFORMATIQUE = traitement automatique de l'information.
( information : pris au sens large = nombres, caractères, sons,
images, grandeurs analogiques,...)

Structure d'un ordinateur.


Un ordinateur est donc constitué :

- d' Une Unité Centrale ( UC ou CPU en anglais)
C'est l'unité centrale de traitement des
informations. Son rôle est d'aller chercher,
automatiquement les instructions du programme
en mémoire et de les exécuter.

- d' Une Mémoire Centrale, qui sert au stockage
des données et des programmes.

- de Périphériques : ou unités d'Entrées/Sorties
qui servent à communiquer avec l'extérieur.
( ex : clavier, écran, souris, ...)

Le système ainsi constitué doit respecter les 4 règles suivantes :

-1) Les instructions et les données sont dans une mémoire unique,
banalisée, accessible en lecture/écriture.
-2) Les contenus de la mémoire sont accessibles par leurs adresses.
-3) La commande de l'ensemble, l'exécution des opérations se fait
de manière séquentielle (sauf indication expresse). L'exécution
d'une opération doit être terminée avant le lancement de la
suivante.
-4) L'unité de traitement contient un jeu complet des opérations
de l'algèbre de Boole. ( au minimum ).

REMARQUES : L'Unité Centrale est le coeur du système. C'est un système
électronique, mais, seule, l'Unité Centrale ne peut rien faire, il faut lui
donner un programme à exécuter. ( Ce n'est pas un poste radio qui
fonctionne des que l'on tourne le bouton !)
Il faut donc de la mémoire pour contenir le programme à exécuter et les
données sur lesquelles on désire travailler.
L'ensemble Unité Centrale et Mémoire peut déjà fonctionner, mais cela
ne servirait à rien : il faut que l'on puisse donner des ordres au programme
et récupèrer des résultats. Il faut que le système communique avec
l'extérieur, d'où la présence indispensable des périphériques.

Unité Centrale.

Elle peut être décomposée en 2 sous ensembles :

.1. L'Unité de Contrôle ( ou unité de commande, ou automate) :
Son rôle est d'aller chercher une instruction en mémoire centrale,
d'analyser cette instruction (décodage de l'instruction ), d'exécuter
cette instruction, de localiser l'instruction suivante ( opération
souvent implicite : adresse immédiatement supérieure à celle de
l'instruction en cours d'exécution, sauf pour les instructions de
branchement ). L'Unité de Contrôle contient donc :
------ un décodeur d'instruction.
------ un séquenceur et des circuits de commandes.

.2. Un ensemble de circuits électroniques, commandés par l'unité
de contrôle et permettant :
** d'échanger des informations avec la mémoire centrale et avec
le monde extérieur ( avec les périphèriques ).
** d'effectuer des opérations sur les données ( Unité Arithmétique
et logique : U.A.L. ou A.L.U. en anglais ).
** de mémoriser l'adresse de la prochaine instruction dans un
registre particulier PC ( Compteur de programme (Program Counter)).
** de mémoriser le résultat d'opérations dans des mémoires spéciales
: les Registres de travail.

EXEMPLE : L'unité centrale lit l'instruction LD A,100 en mémoire centrale.
Elle décode l'instruction : il faut charger le registre A avec la valeur contenue
dans la case mémoire n° 100. L'unité centrale lance l'exécution : demande de
lecture de la mémoire à l'adresse 100. Elle récupère la valeur lue et enfin
range cette valeur dans A. Elle met à jour le compteur de programme PC,
et l'on continue : lecture de l'instruction suivante ...

Une horloge ( un circuit oscillateur délivrant des impulsions
à une certaine fréquence) sera nécessaire pour exécuter les opérations
séquentiellement. Plus la fréquence sera grande, plus l'unité centrale
travaillera vite ! ( N.B.: Fréquence = 8 MHz se lit 8 Mega Hertz et
veut dire 8 millions d'impulsions par seconde.)

Mémoires.

Les programmes, les données, vont être stockés en binaire,
(suite de 0 et de 1) on y reviendra un peu plus loin !

Les différents types de mémoires :

-1) Les mémoires mortes ( à lecture seule ) :

Ces mémoires ont la caractéristique importante de conserver l'information
même lorsqu'elles ne sont pas alimentées, et ceci pendant des années et
même indéfiniment pour certaines.

------R.O.M. : de Read Only Memory. On en peut que les lire. Ces mémoires
sont écrites et mises en place par le constructeur ( BIOS des PCs, par ex.)

------P.R.O.M. : Programmable Read Only Memory. On les appelle aussi
mémoires fusibles, ou encore OTP ( One Time Programmable). On achète
ces mémoires vierges ( vides de tout programme ) et on peut les programmer
à l'aide d'un programmateur ( une simple carte électronique) relié à un PC
via un port série ( COM1, COM2,...) ou via le port parallèle.
On les place ensuite sur le système auquel elle sont destinées. Si l'on a
fait une erreur dans le programme, ou si l'on désire le modifier, la mémoire
est bonne pour la poubelle, on ne peut pas la programmer une deuxième
fois ! Il faut en prendre une nouvelle.
La programmation de ce type de composant consiste a faire "claquer" des
fusibles ( qui sont en fait des jonctions semi-conductrices). On comprend
que lorsque le fusible est détruit il est impossible de faire machine arrière !
On les utilise donc lorsque l'on a un programme parfaitement au point,
définitif. Elles ont l'avantage d'être peu couteuses.

------E.P.R.O.M. : Erasable Programmable Read Only Memory. Comme les
PROM, on peut écrire dans ces mémoires ( avec un dispositif similaire ),
mais, si le programme n'est pas correct, il est possible d'effacer le
programme, puis de l'écrire à nouveau ( ceci un tres grand nombre de fois)
C'est bien sur tres intéressant, et ce sont ces mémoires que l'on va utiliser
pour faire du développement.
Ces mémoires ont une petite fenêtre transparente par laquelle on voit la
puce. Cette fenêtre sert à effacer la mémoire. On éclaire le composant
avec des UV, dans une boite ( effaceur à UV ), pendant une quinzaine de
minutes environ. ( Attention aux yeux !!!).
Il faut noter que l'effacement ( environ 15 min) et l'écriture ( quelques minutes)
sont des opérations relativement longues.
(Principe utilisé : utilisation de transistors FAMOS : Floating gate Avalanche
injection Metal Oxide Silicium.)

------E.E.P.R.O.M. : Electrically Erasable PROM, ou aussi mémoires FLASH
ces mémoires sont effaçables par impulsion électriques. L'effacement est plus
rapide que lors d'une exposition aux UV, et il est possible d'effacer et de
ré-écrire la mémoire in situ.

-2) Les mémoires vives ( à lecture et écriture ) :

On les appelle, de façon impropre, R.A.M. ( Random Access Memory : mémoire
à accès aléatoire ). Les PROMs, EPROMs, ... sont, elles aussi à accès aléatoires !
Ces mémoires perdent les informations contenues dès que l'on coupe leur
alimentation. ( sauf s'il s'agit de mémoires secourues (pile, accu) ).

On distingue : les Mémoires Statiques (S.R.A.M.) , les Mémoires Dynamiques
(D.R.A.M.) . Les mémoires statiques sont réalisées à l'aide de circuits bistables
( ou bascules RS ). Les mémoires dynamiques conservent l'information, 0 ou 1,
dans une petite capacité, qui se décharge au cours du temps. ( courants de fuite )
Ces mémoires nécessitent donc un dispositif de rafraichissement pour maintenir
l'information. Ce sont les plus utilisées car elles permettent une grande densité
d'intégration.

* CARACTERISTIQUES IMPORTANTES des MEMOIRES :

- Leur CAPACITE : c'est la quantité d'information que le composant peut
contenir. ATTENTION, cette capacité est souvent donnée en bits.
( Mémoire 8k = mémoire 8k bits = 1 k octets ).
- ORGANISATION, ADRESSAGE : comment récupère-t-on l'information ?
En parallèle ( tous les bits d'un coup), en série ( bit a bit ) ?
L'adresse est donnée en une fois, en 2 fois ( adressage multiplexé ) ?
- TEMPS D' ACCES : c'est le temps qui s'écoule entre la demande
d'une valeur en mémoire et l' instant où cette valeur est disponible.

Les périphèriques d'entrées/sorties.

Les périphèriques vont permettre la communication avec le système
Unité Centrale + Mémoires. On distingue 3 types de périphèriques :
les périphèriques d'Entrées, les périphèriques de Sorties, et ceux
qui font les 2 (Entrées/Sorties).
Les périphèriques d'entrées sont ceux qui apportent des informations
au système ; les périphèriques de sorties envoient des informations
à l'extérieur du système.

--> Périphèriques d'entrées :
le clavier ( indispensable ), la souris,
un light pen, une table à digitaliser,
un scanner, un lecteur de cartes, un
lecteur de codes barre,...
N.B. Pour un petit système à
microcontrôleur, un interrupteur, un inverseur,
un bouton poussoir, un rotacteur, sont des
périphèriques d'entrées !


--> Périphèriques de sorties : les classiques :
un écran ( ou moniteur ), une imprimante, une table traçante, ...
N.B. Pour un petit système à microcontrôleur, un voyant, une LED,
des afficheurs 7 segments, un HP ( haut Parleur ), sont des périphèriques
de sorties !


--> Périphèriques d'entrées / sorties ou mémoires de masse : car ils vont servir
à stocker des masses d'informations. On mettra dans cette catégorie les lecteurs
de disquette, les disques durs, les lecteurs enregistreurs de bande magnétique, ...

N.B. Les périphèriques ne sont pas reliés directement à l'ensemble Unité
Centrale / Mémoires, il faut passer par une INTERFACE . ( carte interface, circuit
interface, coupleur de périphèrique ). Il y a quelques années, une interface était
une carte électronique qui pouvait être de taille importante, de nos jours, une
interface se réduit souvent à un seul circuit intégré, programmable.
L' interface se charge de l'adaptation des signaux électroniques, de gèrer le
dialogue entre le système et le périphèrique ( protocole d'échanges).

On peut donc détailler un peu le diagramme de Von Neumann, de la façon
suivante :


Les "Bus".

L'Unité Centrale doit pouvoir communiquer avec les mémoires et les
périphèriques. Par exemple, pour écrire une donnée en mémoire, l'U.C.
doit d'abord spécifier l'adresse de la mémoire, puis envoyer la donnée,
et, en dernier lieu, envoyer un signal d'écriture qui validera la
mémorisation de la donnée. Tous ces signaux seront véhiculés par les
"Bus", ensembles de "conducteurs", sur lesquels viennent se brancher les
mémoires, les interfaces des périphèriques.

On distingue 3 types de "bus" :
... Le bus d'adresses.
... Le bus de données.
... Le bus de contrôle ( pour les signaux de service ).


Les Langages en Informatique.

Il y a une très grande quantité de langages.
On distingue :

- Les langages de bas niveau :
- - > Langage Machine, Assembleur, Macro Assembleur.
-Les langages évolués :
- - >BASIC, FORTRAN, COBOL, ALGOL, PASCAL, C, ...

Un langage est défini par :
.. Un lexique : ensemble des mots valides ( mots clefs, identificateurs, ...)
.. Une syntaxe : Règles d’écriture des instructions.Ensemble des règles
d’écriture des phrases appartenant au langage (grammaire du langage).
.. Une sémantique : signification associée à chaque construction
syntaxique valide.

Un langage permet de définir des objets manipulables ( entiers,
caractères, chaines, réels, adresses, ...) et d’exprimer des opérations
sur ces objets ( par des ordres, des instructions qui vont constituer le
PROGRAMME.)

- Le Langage Machine : ou binaire, ou Hexa, ou BNPF ...
C'est le seul langage compris par l'électronique ( Unité Centrale),
mais il est très fastidieux de travailler directement en langage
machine, en binaire ou en hexadecimal.( On s'en doute ! ).
L'assembleur, les langages évolués vont permettre une écriture
plus facile, plus cool, et eux vont se charger de la traduction du
programme en langage machine, juste avant l'exécution du
programme.
Le langage Machine est différent d'un circuit ( d'une UC) à l'autre,
sauf dans des familles de circuits issus d'un même fabricant.

- Le Langage Assembleur : C'est une transcription symbolique du langage
machine ( Mnémonique) - La sémantique est identique à celle du
langage machine et l'Assembleur sera aussi différent d'un circuit à l'autre.
Exemple : LDI A,10 en assembleur ST6
veut dire : charger le registre A avec la valeur 10 en décimal.
LDI de LOAD Immediate ( charger immédiatement, en anglais ).
Cette instruction sera traduite en langage machine par:
00010111 00001010 en binaire,ou 17 0A en hexa.

Un Macro-Assembleur autorise les macro-instructions (suite d'instructions
que l'on peut insérer en plusieurs endroits d'un programme).

- Les Langages évolués : permettent une écriture rapide des
programmes, ils sont, en général, plus "lisibles" que les programmes en
assembleur. Ils permettent de plus l'introduction d’objets nouveaux,
d'opérations nouvelles.Ils sont adaptés à certains domaines.
( Ex: on utilisera le COBOL pour un programme de gestion.)

- Différence : Interprèteur / Compilateur.
- Programme réalisé avec un interprèteur : au moment de l'exécution
chaque instruction est "interprètée" ( traduite en langage machine) et
exécutée. Ce processus est recommencé à chaque exécution.
- Un compilateur, lui, interprète toutes les instructions du programme
que l'on a écrit ( le programme source), et construit un programme en
langage machine. Ce programme sera ensuite exécuté, autant de fois
que l'on voudra, sans avoir à repasser par la phase d'interprètation.
Les corrections, les modifications sont plus faciles sur un programme
interprèté, mais un programme compilé sera plus rapide à l'exécution.



Naissance du MICROPROCESSEUR.

Le processeur, ou UC (Unité Centrale), ou CPU (Central Process
Unit) contient essentiellement ( on l'a vu ) :
- l'U.A.L. (Unité Arithmétique et Logique).
- Un décodeur d'instructions.
- Un séquenceur.
- Des registres ( généraux et particuliers).
- Des "Bus" ( données, adresses, contrôle).
- Une "horloge" ( plus souvent externe).

En 1971, INTEL loge toutes ses composantes dans une seule
PUCE, dans un seul circuit, c'est le 1er MICROPROCESSEUR !

Il s'agit de l'Intel 4004 ! Il n'a encore rien d'un foudre de guerre :
C'est un microprocesseur 4 bits, il n'utilise que 2300 transistors et la fréquence
de son horloge est de 108 kHz. ( On est bien loin de la densité d'intégration
actuelle, et des centaines de MHz du moindre PC ! ).
( Peu de temps avant, un 1er microprocesseur était breveté par TEXAS Instruments,
le TMS 1000.)
Pour ma part, j'ai découvert les microprocesseurs avec le 8008, dans les années 70.
C'était passionnant, mais un peu laborieux...

Apres le 8008, Intel a sorti le 8080. Quelques ingénieurs de chez Intel
ont quitté alors cette société pour fonder ZILOG et sortir le Z80, copie
améliorée du 8080. J'ai beaucoup travaillé avec le Z80...
Intel a continué avec le 8085, le 8086 (1er 16 bits), le 8088,...
80286, 80386, 80486,... le Pentium II ( avec plus de 5 millions de
transistors !).

N.B. Le Pentium IV : 24 millions de transistors.

Exemple d'architecture d'un microprosesseur.
Exemple de carte Microprocesseur.


Les MICROCONTROLEURS.

Un système minimal, pour fonctionner, a besoin :

   . d'une Unité Centrale.
   . de Mémoire morte, pour le programme ( PROM, EPROM, ...).
   . de Mémoire vive, pour les calculs, pour stocker les données.
   . de circuits Interfaces, pour connecter les périphèriques qui vont
      permettre la communication avec l' extérieur.

D' où l'apparition des Microcontrôleurs ( ou Monochip ) :
Dans un seul circuit, on va trouver :
   . Une Horloge ( oscillateur ).
   . Un Processeur ( Unité Centrale ).
   . De la Mémoire Vive ( RAM ).
   . De la Mémoire Morte ( PROM, EPROM ou EEPROM ).
   . Des Interfaces, qui vont dépendre, en général, du type
     de microcontrôleur choisi :
      . Compteurs /timer.
      . Convertisseur Analogique/Numérique ( C.A.N. ).
      . chien de Garde ( "Watch Dog").
      . Gestion d' un "port" parallèle.
      . Gestion d' une liaison série RS232.
      . Gestion d' interruptions..
      . Gestion de moteurs en PWM.
      . Gestion d' écran LCD.
      . Gestion de Bus I2C.
      . etc ...

Il suffit de choisir le microcontrôleur le mieux adapté à l' application que
l'on doit réaliser !


Exemple d'architecture des microcontrôleurs ST62xx.


MICROCONTROLEURS de la famille ST62xx ( THOMSON).

Les microcontrôleurs que l'on va étudier !

Désignation R.O.M. ou E.P.R.O.M.Entrées/sorties
ST6210 2 K octets12
ST6215 2 K octets20
ST6220 4 K octets12
ST6225 4 K octets20

N.B.

    . ST62Exx = version E.P.R.O.M. ( effaçable )
    . ST62Txx = version OTP ( One Time Programmable).
     ( mémoire fusible ).

PRINCIPALES CARACTERISTIQUES :

  . Microcontrôleurs 8 bits.
  . Horloge de 0,01 à 8 MHz.
  . Alimentation de 3 à 6V.

  . E.P.R.O.M. ou R.O.M. : 2 ou 4K.
  . R.A.M. : 64 octets.
  . Entrées / sorties : 12 ou 20 , programmables.
  . 1 compteur / Timer.
  . 1 dispositif Chien de garde ( Watch Dog ).
  . 1 Convertisseur Analogique Numérique 8 bits ( C.A.N.) inclu.
  . Gestion d'interruptions. ( 5 vecteurs d' IT ).
  . Oscillateur interne

Remarque : Il y a peu de mémoire R.A.M. ( c'est souvent le cas
pour les microcontrôleurs ).

Brochage du ST62E20.
Brochage du ST62E25.


LA PROGRAMMATION.

La carte de test que l'on va utiliser - schéma.   Vue de la carte -->


... LIENS ...


Bientot la suite ...