Vous êtes sur la page 1sur 9

 Exercice I

Quelle est la différence entre les 2 modes de fonctionnement du Timer0 :

1- Le mode timer  : Pour configurer le module TMR0 en mode timer, il faut au préalable que :
T0CS = 0 (bit 5 du registre OPTION_REG)
Le contenu du registre TMR0 est alors incrémenté à chaque cycle de l'horloge interne.
1 cycle correspond à une durée de 1 µs pour un oscillateur à quartz de 4 MHz (1 cycle = 4 / F OSC).
En toute rigueur, cela est vrai si le taux de prédivision (prescaler) est réglé à 1 (bit 3 du registre OPTION_REG = PSA = 1).
Avec un taux de prédivision de 128 (PSA = 0, PS2 = 1, PS1 = 1, PS0 = 0), le contenu du registre TMR0 est incrémenté tous les 128 cycles (ou 128 µs).
Notez que si le contenu du registre TMR0 est 255 (0xFF), il passera à 0 (0x00) à la prochaine incrémentation.
 
En conclusion, le mode timer est utilisé pour mesurer des durée
2- Le mode compteur  : Pour configurer le module TMR0 en mode compteur, il faut au préalable que :
T0CS = 1 (bit 5 du registre OPTION_REG)
Le contenu du registre TMR0 est alors incrémenté à chaque front du signal présent sur la broche RA4/T0CKI :
front montant si T0SE = 0 (bit 4 du registre OPTION_REG)
front descendant si T0SE = 1
En toute rigueur, cela est vrai si le taux de prédivision (prescaler) est réglé à 1 (bit 3 du registre OPTION_REG = PSA = 1).
Avec un taux de prédivision de 32 (PSA = 0, PS2 = 1, PS1 = 0, PS0 = 0), le contenu du registre TMR0 est incrémenté tous les 32 cycles du signal
présent sur la broche RA4/T0CKI.
En conclusion, le mode compteur est utilisé pour faire du ... comptage.

3 - Interruption
On peut activer une interruption quand le registre TMR0 déborde (passage de 0xFF à 0x00).

- Indiquer le(s) bit(s) permettant de distinguer ces modes  : (bit 5 du registre OPTION_REG)

Pour Timer : T0CS = 0 ,  (bit 3 du registre OPTION_REG = PSA = 1).

 Pour compteur : T0CS = 1

front montant si T0SE = 0 (bit 4 du registre OPTION_REG)

front descendant si T0SE = 1

- Dans le cas de la configuration compteur quel autre bit est-il concerné ?


T0SE

PSA

PS

Les registres impliqués dans la configuration du Timer0 sont :


OPTION_REG c’est un registre 8 bits qui contient la valeur du prescaler

X X T0CS T0SE PSA PS2 PS1 PS0

Les trois premiers bits correspondent à la valeur du prescaler.


Le bit PSA peut être égale soit à 0 si le prescaler est lié au TMR0 soit à 1 s'il est lié au
WDT.
Le bit T0SE est configuré à partir d’un front montant (T0SE = 0) ou descendant (T0SE
= 1) sur la broche RA4 dans le cas où le Timer0 se comporte comme un compteur
d’évènements.

Le bit T0CS permet de faire le choix entre deux fonctionnements du Timer0 soit
un fonctionnement compteur (T0CS = 1) soit un fonctionnement temporisation
(T0CS =0).
Les bits non concernés ont par défaut la valeur 1.
Le deuxième registre impliqué est le registre INTCON, ce registre contient le
drapeau T0IF.

INTCON

X X X X X T0IF X X

La différence entre la fonction compteur et Timer:

La fonction compteur (T0CS = 1) : à partir d’un signal sur la broche RA4, le


TMR0 compte soit en fonction d’un front montant ou descendant.

Dans ce fonctionnement le bit T0SE du registre OPTION_REG égale à 1 si c’est en


fonction d’un front descendant et égale à 0 dans le cas d’un front montant.
La fonction temporisation (T0CS = 0) : à partir d’un signal d’horloge le Timer0 permet
de déterminer une base du temps.
 Exercice II

Soit l'instruction suivante :


OPTION_REG |= 0x38;
- Donner le câblage de telle sorte que le registre TMR0 s'incrémente lorsque l'on relâche un bouton
poussoir. Expliquer clairement et justifier vos réponses.

- Quelles modifications doit-on apporter pour que le registre TMR0 s'incrémente au terme du 4ième
relâchement ?
- Donner les instructions correspondant à cette modification en utilisant des masques.
TD 3

Module du Timer0, gestion du temps, temporisations et fonction compteur.


Documents :
Documentation du PIC16F628A ( page 23 OPTION_REG et page 45-46 Timer0 )

 Exercice I : Gestion duTimer0

- Expliquer le principe de fonctionnement du module Timer0 et indiquer les différents registres impliqués
dans la
configuration de ce Timer0 (aidez-vous d'un schéma pour expliquer le rôle des différents registres).
- Donner la différence entre la fonction compteur et la fonction temporisation, quels sont les registres et bits
impliqués dans la fonction compteur.
- Quel est le rôle du Prescaler pour chacune de ces fonctions.
- Comment paramétrer le registre OPTION_REG pour ne pas appliquer de diviseur de fréquence à fosc ?

 Exercice II - Temps mort

- Expliquer cette notion, quels sont les registres et les bits concernés.
- Illustrer avec un schéma le principe et distinguer les deux cas possibles en fonction de la fréquence du
PIC et
de la durée du temps mort souhaité : Tu > Tdesiré, Tu < Tdesiré.
Pour chacun des cas suivants :
- Déterminer le Prescaler.
- Déterminer la valeur des registres incriminés.
- Ecrire la fonction MPLAB
Temporisation Fréquence du quartz
750 μs 4 MHz
1 s 48 KHz
1 s 4 MHz
100ms A déterminer

 Exercice III - Signaux périodiques


Utiliser la fonction précédente tps_mort_1s ( ) pour générer un signal d'environ 0.5Hz, une LED devra
clignoter
à cette fréquence.

- Faire le schéma.
- Ecrire la fonction init ( ).
- Ecrire la fonction main ( ).
- Ecrire le programme complet MPLAB.
- Quels sont les deux inconvénients majeurs de ce type de programmation ?

 Exercice IV - Compteur
Déterminer la valeur de OPTION_REG pour les cas suivants et indiquer le schéma correspondant :

- réaliser un compteur qui compte tous les 4 fronts montants de RA4 correspondant à une relâche du bouton
poussoir.
- réaliser un compteur qui compte tous les fronts descendants de RA4, correspondant à un appui du bouton
poussoir.
- Ecrire le programme principal permettant d'afficher la valeur de ce compteur sur écran LCD ainsi que la
fonction init ( ).
TD 4
- Documentation du PIC16F628A,
page 23 OPTION_REG
page 24 INTCON
page 62 CMCON
page 107-110 Interruption
 Exercice I : Interruption

- Donner la définition d'une interruption, quelles sont les différentes sources internes et externes possibles
d'interruption pour le PIC 16F628A.
- Indiquer les différents registres impliqués dans la configuration des interruptions.
- Expliquer de façon générale la gestion des interruptions.
- Donner la forme de la fonction d'interruption sous MPLAB.

 Exercice II - RB0

- Préciser le fonctionnement de l'interruption liée à l'entrée RB0 du PIC.


- Quels sont les bits et registres impliqués, détailler le fonctionnement jusqu'à l'appel de la fonction interrupt.
- Proposer un schéma et écrire le programme complet de telle sorte qu'un bouton poussoir relié à RB0 puisse
allumer et éteindre une LED.

 Exercice III - Timer et interruptions

- Préciser le fonctionnement des interruptions dans le cas du Timer0, quels sont les bits et registres impliqués,
détailler le fonctionnement jusqu'à l'appel de la fonction interrupt.

 Exercice IV - Interruption, page 107 - 109 de la doc

On souhaite simuler le fonctionnement d'un feu tricolore, on choisira les temps suivants :
Vert 3s, Rouge 2s et Orange 1s.
- Expliquer le principe de fonctionnement par un schéma.
- Donner l'ensemble des registres impliqués.
- Donner l'algorithme du programme.
- Ecrire la fonction init ( ) permettant de configurer le PIC,
- détermination des E/S
- autorisation des interruptions, voir le registre INTCON au verso (page 24)
- inhibition des entrées analogiques, voir page 62
- Ecrire la fonction d'interruption,
- test du type de l'interruption
- modification de l'état de la LED
- On souhaite modifier le montage tel que l'appui sur un bouton poussoir rende le feu orange clignotant
(simulation feu en panne), un nouvel appui replacera le feu en fonctionnement normal

 Exercice 1 : Gestion de l'écran LCD, voir documentation jointe.


- Ecrire la fonction d'affichage d'une chaîne de caractères sur un écran LCD, expliquer le code.
- Expliquer de quelle façon peut-on afficher un nombre sur l'écran LCD.
- Quel effet produit la commande 0x08, indiquer les autres instructions nécessaire pour envoyer cette commande
à l'écran LCD.
Soit le schéma suivant :
- Ecrire le code permettant de modifier la valeur d'un nombre en fonction de l'appui sur les boutons poussoirs, la
modification devra se faire lors du relâchement du bouton.

Expliquer le code suivant :


void fonc (short a, short b)
{
RS = 0; // commande
if (a == 1)
PORTB = 0x80 + b - 1 ;
else
PORTB = 0xC0 + b - 1 ;
validation ();
}

 Exercice 2 : Compteur

Déterminer la valeur de OPTION_REG pour les cas suivants et indiquer le schéma électrique
correspondant :
- réalisation d'un compteur qui compte tous les fronts descendants de RA4 correspondant à un appui du
bouton poussoir.
- réalisation d'un compteur qui compte tous les 4 fronts montants de RA4 correspondant à une relâche du
bouton poussoir.

 Exercice 3 : Temporisation
- Calculer les valeurs des différents registres utilisés pour obtenir une temporisation de 22ms avec un quartz
de
4MHz, expliquer tous les détails des calculs et justifier vos résultats.
- Ecrire la fonction tempo_22ms
- Quelle précision obtient-on, justifier votre réponse.
- Expliquer la raison pour laquelle l'appel à cette fonction provoque une temporisation supérieure à celle
calculée.
- Quel type d'oscillateur doit-on choisir ? Pourquoi.

 Exercice 1 : Compteur

Déterminer la valeur du registre OPTION_REG pour les cas suivants


- réalisation d'un compteur qui compte tous les 2 fronts descendants de RA4 correspondant à un appui du
bouton poussoir, donner le schéma électrique correspondant.
- réalisation d'un compteur qui compte tous les 8 fronts montants de RA4 correspondant à une relâche du
bouton poussoir, donner le schéma électrique correspondant.

Problème : Arrosage automatique

On souhaite réaliser un arroseur automatique réglable, un menu de configuration doit permettre de régler
différentes variables, ce menu est accessible par appui sur un bouton poussoir BP :
- réglage de la période d’arrosage PA
- réglage de la durée d’arrosage DA
- possibilité de forcer le mode de fonctionnement soit en marche (événement M) si la pompe est à l’arrêt,
soit en arrêt (événement A) si elle est en marche.
- sortie du menu
Le décompte des durées est bloqué tant que l’on est dans le menu (entre les deux instants t me et tms
correspondant aux événements liés à l'entrée et à la sortie du menu) et reprend lorsque l’on quitte le menu.
- Déterminer les instants t2 et t3 en fonction de t1 de PA de DA de tme et de tms
- Donner le chronogramme dans le cas où l'on entre dans le menu alors que la pompe est en
fonctionnement et que l'on force le moteur à s'arrêter pendant 2.DA avant de le redémarrer.
- Que se passe-t-il si lors de la sortie du menu, la pompe est toujours arrêtée ? Indiquer la date du
prochain arrêt.

 Exercice 2 : Interruption

Soient les instructions suivantes de la fonction d’initialisation d’un PIC 16F628A :


OPTION_REG &= 0xF4 ;
OPTION_REG |= 0xC4 ;
INTCON = 0xA0 ;

- Expliquer ces instructions.


- En déduire le fonctionnement.
- Ecrire l'instruction qui modifie l'état d'une variable binaire appelée ETAT,

- Ecrire le code de la fonction d'interruption qui modifie la valeur de la variable ETAT ainsi que celle
d'une variable VAR, en fonction des interruptions liées au Timer0. La modification de VAR consiste à
permuter sa valeur entre 12 et 22 à chaque appel, écrire cette unique instruction.
- On souhaite modifier l'état d'une deuxième variable ETAT2 en fonction de l'état de ETAT et d'un
bouton poussoir BP : l'appui sur le bouton poussoir BP provoque le changement d'état de la variable
ETAT2 uniquement si ETAT = 1.
- Ecrire l'algorithme
Le changement d'état de ETAT2 doit se faire par interruption
- On souhaite que l'appui sur BP se traduise par un front montant, en déduire le câblage de BP.
- Ecrire les instructions permettant de prendre en compte cette condition (par masque) justifier.
- Ecrire le code complet de la fonction d'interruption

 Question I : Configuration 

a) Expliquer les différents types d'oscillateurs que peut accepter le PIC 16F628A.
b) Expliquer la signification du bit 3 du registre PCON, (voir document page 3).
c) Faire le schéma électrique correspondant à l'utilisation du bit RA4 en sortie, justifier votre choix.
d) Expliquer le rôle du bit INTEDG (voir document page 3).

 Question II : Interruption

a) Expliquer le rôle d'une interruption.


b) Quels sont les deux bits principaux dans la gestion d'une interruption.
c) A partir du document page 3 indiquer tous les registres impliqués dans la gestion de l'interruption
liée au
bit RB0, donner les différents bits utilisés et illustrer avec un schéma en expliquant succinctement leur
rôle.

 Exercice I : temps mort

Sachant que l'oscillateur est un quartz de 32.768KHz, que la valeur du Prescaler vaut 011, déterminer
la
durée du temps mort lorsque la valeur d'initialisation du Timer0 vaut 86.
- Donner la valeur du registre OPTION_REG en justifiant vos réponses
- Faites un schéma du principe du temps mort
- Ecrire la fonction correspondant à ce temps mort

 Exercice II : LCD

- Donner le principe de câblage d'un écran LCD sur un PIC 16F628A,


- Expliquer les rôles des entrées RS, E, R/W de l'écran LCD
- Dans le cas où l'on ne fait que des affichages sur l'écran, quelle simplification peut-on faire sur le
câblage
de l'écran LCD ? Quel avantage en retire-t-on ?
- Ecrire la fonction Validation ( ) qui permet de valider une instruction sur l'écran LCD.

Exercice III : Chronogrammes


A)
- Expliquer les chronogrammes suivants :