Atelier Systèmes Temps Réels

TP1: Montre Electronique 


1- Fire le montage ci-dessous :



2- Ecrire un programme qui permet d'afficher le nombre 48 sur deux afficheurs :

3- Modifier le programme en utilisant la fonction affiche_minute():

4- Ecrire un programme qui permet d'afficher un nombre entré en paramètre dans la fonction affiche_minute(int m) :

5- Ecrire la fonction affiche_heure (int h) :

6- Ecrire le programme d'une montre en utilisant les fonctions affiche_minute(int m) et  affiche_heure (int h).

***********************************************


TP2: Timer 0


Le PIC 18F4520 contient 4 modules TIMER. Deux modes d’interruptions sont possibles : interruption logicielle et interruption matérielle

Les Timers ou compteurs de temps écoulé permettent :

·         De réaliser des temporisations précises puisqu’ils utilisent des oscillateurs de référence à quartz.

·         De générer des signaux électriques 0V / 5V.

·         De mesurer des durées.

·         De compter des évènements extérieurs sur des fronts montants ou descendants

Principe de fonctionnement (mode 8 bits)

Le registre T0CON (FD5h)



Le registre INTCON . (FF2h)



Calcul du temps avec TIMER0

Le calcul du temps se fait avec cette formule :

T=[1 /(Fosc/4)]*[Vcount - Vinit]*Presc

Avec   Fosc : fréquence de l’horloge.

Vcount=2Débordement du Timer0

Vinit : valeur initiale a ajouté dans le registre pour corriger l’erreur du temps

Presc : c’est le pré-diviseur utilisé pour ralentir ou accélérer le comptage

 

Travail à faire

 Mode interruption Logicielle  

1.      Faire un montage contenant un PIC18F4520 et une diode LED. Configurer le pic avec une fréquence de 4MHz

2.      Tester le programme suivant 

void main()

{

   T0CON=0b11000101;

  TRISC = 0;

  LATC.RC0=1;

               while(1)

{

                                if(INTCON.TMR0IF==1)

                                               {

                                                LATC.RC0=!LATC.RC0;

                                               INTCON.TMR0IF=0;

 }

}}

3.    Déterminer la fréquence de clignotement de la diode de deux méthodes :

       - Pratique, en utilisant l'oscilloscope dans Isis

       - Théorique, en utilisant la formule de calcul de temps 

4. Programmer le pic pour faire clignoter la diode avec une de fréquence de 20 Hz.

5. Même question avec une fréquence de 3,8 Hz.

6. Nous voulons maintenant commander un servomoteur. Le signale PWM permet la commande de servomoteur. (voir la figure suivante)


Programmer le pic pour qu'il positionne le servomoteur à la position 0°

Mode interruption Matérielle 

Le système, illustré par la figure suivante, est un odomètre. Ce dernier est un instrument de mesure, permettant de connaître la distance parcourue par un vélo.

Le système est composé :

D’un capteur effet hall qui permet de détecter si un aimant est à proximité. Lorsqu’il n'y a pas de champ magnétique, le capteur à effet Hall n'est pas activé et par conséquent le signal fourni par le capteur est à l’état logique bas. Ce dernier passe à l’état logique haut en présence d'un champ magnétique.

Le capteur à effet hall génère un signal carré si la roue de bicyclette est en mouvement comme le montre la figure suivante.  Le capteur est positionné à l’extrémité de la roue. Le rayon de la roue est de 3,99 cm.

1.      Réaliser le montage électronique suivant ci-dessus ?


2.   Écrire un programme qui permet d’afficher la distance parcourue par la bicyclette ?

3.   Refaire le même travail avec un afficheur LCD (Montage ci-après)

4.   Afficher la vitesse en m/s.


     On vous donne le code suivant :

sbit LCD_RS at LATC0_bit;

sbit LCD_EN at LATC1_bit;

sbit LCD_D7 at LATC5_bit;

sbit LCD_D6 at LATC4_bit;

sbit LCD_D5 at LATC3_bit;

sbit LCD_D4 at LATC2_bit;

sbit LCD_RS_Direction at TRISC0_bit;

sbit LCD_EN_Direction at TRISC1_bit;

sbit LCD_D7_Direction at TRISC5_bit;

sbit LCD_D6_Direction at TRISC4_bit;

sbit LCD_D5_Direction at TRISC3_bit;

sbit LCD_D4_Direction at TRISC2_bit;

void main()

{  LCD_INIT(); 

    while (1)

    {    }

}



Exercice Bonus 

1- Soit un microcontrôleur fonctionne à une fréquence de 16 MHz. Ecrire un code qui permet de clignoter une diode LED connectée à la broche RC0 à une fréquence de 0,03 Hz.

2- Créez une fonction appelée 'positionnerServo' avec un paramètre 'angle' qui permet de régler l'angle auquel le servomoteur doit se positionner.