CHAPITRE 5:
INTERFACES DU 68HC11 & GESTION DU TIMER
SUPPORT DE COURS S4-SMI IHSSANE OUADNOUNI E-MAIL: [email protected]
INTERFACE PARALLÈLE
Ce type d’interface, répartie sur plusieurs ports (maximum 8 bits), permet de prendre en compte des états logiques appliqués en entrée (état de capteurs) ou de générer des signaux binaires en sortie (commande d’actionneurs).
Les broches de ces ports peuvent donc être configurées en entrée ou en sortie.
On trouve généralement :
Un registre de direction pour une configuration en entrée ou en sortie,
Un registre de donnée recopiant les états logiques de chaque broche de port,
Un registre d’option permettant plusieurs configurations en entrée ou en sortie.
INTERFACE PARALLÈLE
INTERFACE PARALLÈLE
Caractérisée par un transfert simultané de tous le bits d’un même mot.
Nécessite autant de conducteurs qu’il y a de bits à transmettre et un conducteur commun (liaison asymétrique) ou autant de paires que de fils si la masse n’est pas commune (liaison symétrique).
Un conducteur supplémentaire peut être utilisé pour transmettre un signal qui assurera la synchronisation entre les intervalles d’émission et ceux de réception
Autorise une grande vitesse de transmission (débit).
Un coût élevé (nombre de conducteurs)
Une distance franchissable limitée réservent la transmission parallèle aux liaisons de processeur à processeur.
INTERFACE SÉRIE
Cette interface permet au microcontrôleur d’échanger des données avec des circuits périphériques utilisant une liaison série asynchrone (ordinateurs, tables traçantes, modem, instruments de musique…)
Les circuits internes de la SCI permettent :
Des échanges asynchrones bidirectionnels en full duplex
De choisir la vitesse de transmission
De choisir le format de transmission
De choisir le mode d’activation de la partie réception (« classique » ou « réveil »)
De gérer les erreurs de transmission
INTERFACE SÉRIE
Les données envoyées ou reçues se présentes sous la forme d’une succession temporelle (sur un seul bit) de valeurs binaires images d’un mot.
Nécessite une interface de conversion pour sérialiser les bits à l'émission (conversion parallèle/série) et les dé- sérialiser à la réception (conversion série/parallèle).
Ne nécessite, pour la transmission des données, que deux conducteurs, d’un coût moins important, elle est utilisé pour les transmissions sur des distances importantes.
Les vitesses de transmission et de réception doivent être identiques (bits/s ou bauds).
Modes simplex, half-duplex et full-duplex
INTERFACE SÉRIE
INTERFACE SÉRIE 68HC11
Le port D est un port d’entrées sorties 8 bits à usage général partagé avec les interfaces séries asynchrones (SCI) et synchrones (SPI).
le sens de travail des lignes du port est programmé par les bits correspondants du registre DDRD .
La sortie de données se fait par écriture de registre PORTD
Il est possible de programmer le port D pour fonctionner avec des sorties a drain ouvert en mettant à « 1 » le bit DWON du registre du contrôle SPCR de l’interface série synchrone
Dans certaines situations, le fonctionnement des lignes de la SPI est influencé par les bits correspondants du DDRD
INTERFACE SÉRIE
LE CONVERTISSEUR ANALOGIQUE NUMÉRIQUE:
Le CAN intégré dans les microcontrôleurs est généralement du type “Approximations successives”.
Il possède plusieurs entrées multiplexées accessibles via les broches des ports de l’interface parallèle.
Le CAN possède normalement 2 registres :
Un registre de données contenant le résultat de la conversion,
Un registre de contrôle permettant de lancer et de surveiller la conversion.
LE CONVERTISSEUR ANALOGIQUE NUMÉRIQUE 68HC11
Le convertisseur intégré dans le 68HC811F1 est un CAN à approximation successive. Il dispose de 8 entrées multiplexées vers un échantillonneur bloqueur permettant de diminuer les erreurs de conversion dues à la variation du signal d’entrée.
Les 8 entrées sont communes avec le port E.
Deux lignes spécifiques Vrefh et Vrefl sont utilisées comme référence de tension.
La précision de ce convertisseur est de ± ½ LSB sur toute la gamme de température, ces références de tension devront être stables par rapport aux variations de l’alimentation ou de la température pour conserver au convertisseur toute sa précision.
Il faut toujours garder Vrefh – Vrefl > 2,5 Volts.
LE CHIEN DE GARDE:
Ce dispositif est un système anti-plantage du microcontrôleur. Il s’assure qu’il n’y ait pas d'exécution prolongé d’une même suite d’instructions.
Un compteur pré-chargeable se décrémente régulièrement au rythme de la fréquence d’horloge.
Si aucun pré-chargement n’est effectué avant qu’il n’atteigne la valeur “0” un Reset est généré relançant ainsi le microcontrôleur.
NB: Il faut donc penser à pré-charger régulièrement ce chien de garde par programme lorsqu’il est activé.
TIMER
Le Timer permet de réaliser les fonctions suivantes :
Génération d’un signal périodique modulé ou non en largeur d’impulsion,
Génération d’une impulsion calibrée,
Temporisation,
Comptage d'événements.
Plusieurs registres associés au Timer permettent de configurer les différents modes décrits précédemment.
TIMER 68HC11
Les boucles d’attente ainsi que la gestion du signal PWM nécessitent l’utilisation du Timer.
Le cœur de ce dernier est un registre de 16 bits, TCNT, qui s’incrémente à chaque pulsation de l’horloge.
Le facteur prescale, défini par les bits PR1 et PR0, détermine combien de pulsations d’horloge sont nécessaires pour incrémenter d’une unité le registre TCNT.
Un programme de base dans lequel on utilise le système Timer est similaire aux autres programmes :
Il faut en premier lieu configurer les registres de contrôle,
écrire dans un registre de données si nécessaire ;
on attend qu’un indicateur soit mis dans un certain état,
TIMER 68HC11
Exemple : configuration du facteur prescale
Les b//its PR0 et PR1 se trouvent dans le registre interne TMSK2 dont l’adresse est $1024
$1024 TOI RTII PAOVI PAII 0 0 PR1 PR0 TMSK2
PR0 PR1 Fréquence Compteur
0 0 F/1
0 1 F/2
TIMER 68HC11
Dans le but d’avoir le temps de voir le compteur osciller, nous allons abaisser la fréquence du timer au 1/16 de sa valeur = (fréquence du quartz)/2, en mettant PR1 et PR0 du registre TMSK2 ($1024) à 1: PR0=PR1=1.
Si fréquence de quartz =4Mhz donc la fréquence d’oscillation = 2Mhz et donc la fréquence du compteur =2Mhz/16.
Configuration:
LDX #$1024 // Le registre d’indexe X pointe sur le TMSK2 BSET X,0 // configuration du bit PR0 du TMSK2 à 1
BSET X,1 // configuration du bit PR1 du TMSK2 à 1
TIMER 68HC11
Le module Output Compare, appartenant au système Timer, permet de générer des signaux carrés tel qu’un signal PWM.
On peut également déclencher une exécution d’une séquence sans pour autant générer un signal sur une sortie.
module Output Compare
TIMER 68HC11
Exemple : Calcul du temps de cycle On suppose que PR0=PR1=0
la fréquence du quartz = 8MHz
Le temps de cycle étant le temps nécessaire pour que le TCNT passe de (0000)Hex à (FFFF)Hex soit 216 périodes d’horloge:
TH= 1/(Fréquence d’oscillation)= 1/(4*106)=0,25 10-6 secondes Tcycle= 216 * TH= 216 * 0,25 10-6 =16,384 ms
TIMER 68HC11
On écrit dans le registre TOCx, le registre TCNT compte les pulsations de l’horloge.
Quand la valeur du registre TCNT atteint la valeur du registre TOCx:l’indicateur OCxF est mis à l’état haut.
Ces indicateurs sont situés dans le registre TFLG1.
L’indicateur OCxF est mis à l’état haut, il se passe un événement qui dépend des registres TCTL1 et TMSK1
Le bit d’interruption associé OCxI dans le registre TMSK1 détermine si une interruption est générée dans
TIMER 68HC11
Pour réaliser une temporisation de 5ms on aura pas besoin d’attendre un cycle en entier:
Tempo=5ms il faut donc charger un TOC on choisit le TOC1
Calcul de la valeur à charger au TOC1
Valeur = (tempo*216)/temps de cycle= (5.10-3*65536)/16,384.10-3 =20000
Donc la valeur à charger au TOC1 est 20000 une fois le TCNT arrive à 20000 le OC1F se mettra au niveau haut.
C’est-à-dire que le temps correspondant à la temporisation est écoulé.
$1016 15 14 13 12 11 10 9 8 TOC1
$1017 7 6 5 4 3 2 1 0 TOC1
TIMER 68HC11
Programme de la temporisation < Temps de cycle On considère l’exemple précédent
La temporisation =5ms et le Temps de cycle = 16,384ms (TCNT passe de 0000 à FFFF)
LDD #20000 // Charger dans un registre 16 bits la valeur à laquelle on compare le TCNT STD $1016 // Charger le TOC1 par cette valeur
LDX #$1023 // Le registre d’indexe pointe sur le TFLG1 siège du bit de comparaison OC1F B1 BRCLR X,7 B1 // Teste le 7ème bit de X s’il est égal à 0 dans ce cas il se branche à B1.
Une fois le OC1F passe à 1 on sort de la boucle et donc le temps de la temporisation est écoulé.
TIMER 68HC11
Programme de la temporisation > Temps de cycle
Dans ce cas de figure, la temporisation nécessite un ou plusieurs cycle de passage du TCNT de (0000)Hex à (FFFF)Hex
Prenons pour exemple une temporisation de 250ms pour un MC alimenté par un quartz de 2MHz:
on utilise le facteur de prescale, soit PR0=0 et PR1=1 ainsi on va diviser la fréquence d’oscillation par 8.
1ère étape : calculer le temps de cycle
Temps de cycle = 216 *1/8*(fréquence du quartz)/2 = 8,192ms.
TIMER 68HC11
2ème étape : calculer le nombre de fois que le TCNT doit passer de (0000)Hex à (FFFF)Hex Ratio = temporisation / temps de cycle = 250.10-3/8,192.10-3 = 30,52
Donc le TCNT doit passer de (0000)Hex à (FFFF)Hex 31 fois et programmer 0,52 d’un cycle comme dans l’exemple précédent.
3ème étape : observer le bit TOF du registre interne TFLG2 pour surveiller le débordement du TCNT et à chaque fois on le remis à 0 pour calculer le nombre de débordement correspondant au ration calculé:
$1025 TOF RTIF PAOVF PAIF 0 0 0 0 TFLG2
TIMER 68HC11
Exemple de programme de temporisation
LDX #$1024 // Le registre d’indexe X pointe sur le TMSK2 BCLR X,0 //Configuration du bit PR0 du TMSK2 à 1 BSET X,1 // Configuration du bit PR1 du TMSK2 à 1
LDAA #31 // Charger le compteur de nombre d’itération LDX #$1025 // Le registre d’indexe X pointe sur le TFLG2
B1 BRCLR X,7 B1 // Teste le 7ème bit de TFLG2 s’il est égal à 0 dans ce cas il se branche à B1.
DECA
BNE B1
LDD #33920 // Charger dans le registre D par la valeur = 0,52*216
STD $1018 // Charger le TOC2 par cette valeur (pour comparaison avec le TCNT) Prescale de division par 8