Principe de fonctionnement

Documents pareils
MICROCONTROLEURS PIC PROGRAMMATION EN C. V. Chollet - cours-pic-13b - 09/12/2012 Page 1 sur 44

La programmation des PIC en C. Les fonctions, les interruptions.

PIC 16F84. Philippe Hoppenot

PIC EVAL Dev Board PIC18F97J60

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Cours de Systèmes d Exploitation

1. PRESENTATION DU PROJET

Flowcode - Mode d'emploi

Carte ARDUINO UNO Microcontrôleur ATMega328

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Informatique Industrielle

ENREGISTREUR DE TEMPERATURE

Equipement. électronique

Kit pédagogique RFID-EDUC

Algorithmique et structures de données I

République Tunisienne Ministère de l'education. Sciences Techniques. Manuel d activités. Les auteurs. Ali ZITOUNI Inspecteur des lycées et collèges

Infos. Indicateurs analogiques encastrables pour installation à courants forts. Série M W/P/ LSP BWQ BGQ TP TG WQ /0S WQ /2S FQ /2 W BI BIW DFQ

Temps Réel. Jérôme Pouiller Septembre 2011

La conversion de données : Convertisseur Analogique Numérique (CAN) Convertisseur Numérique Analogique (CNA)

! analyse du fonctionnement

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

VIII- Circuits séquentiels. Mémoires

J AUVRAY Systèmes Electroniques TRANSMISSION DES SIGNAUX NUMERIQUES : SIGNAUX EN BANDE DE BASE

Accessibilité ERP Guide des obligations liées à l accessibilité des personnes handicapées dans les bâtiments ERP existants.*

TP4 : Installer configurer un contrôleur de domaine

Étape 3 : Afin d'approfondir vos connaissances sur le bit d'archivage, vous apprendrez l'effet d'une modification d'un fichier sur celui-ci.

Architecture des ordinateurs

Tp 1 correction. Structures de données (IF2)

Cours Informatique Master STEP

SYSTEMES ELECTRONIQUES NUMERIQUES

ARCEAU DE PARKING MOTORISÉ VIGIPARK

PROGRAMMATION D'UN MICROCONTRÔLEUR

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

TS 35 Numériser. Activité introductive - Exercice et démarche expérimentale en fin d activité Notions et contenus du programme de Terminale S

PIC : COURS ASSEMBLEUR

TP Modulation Démodulation BPSK

Programmation C++ (débutant)/instructions for, while et do...while

TP_Codeur_Incrémental

FORMULAIRE D AUTO-EVALUATION POUR PATIENTS SLA

Fiche technique CPU 314SC/DPM (314-6CG13)

CAISSE ENREGISTREUSE ELECTRONIQUE SE-G1

MANUEL D INSTRUCTION

Conférence sur les microcontroleurs.

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE UNIVERSITE M HAMED BOGARA DE BOUMERDES

Modules d automatismes simples

PARAGON SYSTEM BACKUP 2010

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE

Etude de FP3 commande moteur et électroaimant. Déplacement carte et connexion

Cours de Programmation Impérative: Zones de mémoires et pointeurs

KN 800. N Azur SYSTEME D ALARME ANTI-INTRUSION RADIO TRANSMETTEUR TELEPHONIQUE KN 800 CET. Notice d'installation et de programmation

Initiation à LabView : Les exemples d applications :

SUR MODULE CAMÉRA C38A (OV7620)

Spécialité Professionnelle. Patrick Boulandet

TABLE DES MATIÈRES 1. DÉMARRER ISIS 2 2. SAISIE D UN SCHÉMA 3 & ' " ( ) '*+ ", ##) # " -. /0 " 1 2 " 3. SIMULATION 7 " - 4.

L'accessibilité des bâtiments d'habitations collectifs neufs

COMMISSION DES JEUNES ROYAL STADE WAREMMIEN FOOTBALL CLUB U.R.B.S.F.A. Matricule FB: Royal Stade Waremmien

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Programme de réhabilitation respiratoire

NAGRA VI Enregistreur numérique six pistes

CA 3000 CA 3000 PROGRAMMATION PAR MINITEL

Tuto pour connecter une source RVB RGB à un moniteur Commodore / Amiga

Filtres passe-bas. On utilise les filtres passe-bas pour réduire l amplitude des composantes de fréquences supérieures à la celle de la coupure.

Java Licence Professionnelle CISII,

DTS MOBATime's Distributed Time System

Ordinateurs, Structure et Applications

Indicateur. IDé 500. Descriptif indicateur. Schéma/Encombrement

JUNGHANS DIE DEUTSCHE UHR

EVM. Entry Voice Mail. Siemens France SAS Information and Communication Networks Système de Communication d'entreprise P.1

Unité centrale de commande Watts W24

WinTask x64 Le Planificateur de tâches sous Windows 7 64 bits, Windows 8/ bits, Windows 2008 R2 et Windows bits

C est à vous qu il appartient de mettre en place des conditions optimales pour permettre la meilleure réalisation possible.

Le signal GPS. Les horloges atomiques à bord des satellites GPS produisent une fréquence fondamentale f o = Mhz

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Système M-Bus NIEVEAU TERRAIN NIVEAU AUTOMATION NIVEAU GESTION. Domaines d'application

Créer et modifier un fichier d'importation SAU avec Excel

Guide Mémoire NETRAM

SYSTEMES ELECTRONIQUES NUMERIQUES

Régler les paramètres de mesure en choisissant un intervalle de mesure 10µs et 200 mesures.

Guide Représentante.

NOTICE D INSTALLATION CENTRALE 260

FONCTION COMPTAGE BINAIRE ET DIVISION DE FRÉQUENCE

Manuel d aide à la pose

2013 Nos nouveaux outils basés sur Arduino

Caractéristiques des ondes

Etudier l influence de différents paramètres sur un phénomène physique Communiquer et argumenter en utilisant un vocabulaire scientifique adapté

TP N 7 «ALARME INTRUSION» TP découverte «Alarme intrusion filaire LEGRAND»

Réalisation d un réseau de capteurs de température sans fil basé sur le protocole ZigBee

EXERCICES DE REVISIONS MATHEMATIQUES CM2

Programmation linéaire

Commission Polydog Règlement de compétition SportPlaisir Catalogue des disciplines catégorie adresse niveau B

Samuel Bassetto 04/2010

Séverine Marien Maxime Ringard. 2 ème année GEII. Régulateur de charge pour station de recharge photovoltaïque

Séquence de découverte de SparkAngels Logiciel d entraide numérique

Contraintes, particularités. 1. Généralités Gestion de la mémoire a. Type des variables et constantes... 2

Exécutif temps réel Pierre-Yves Duval (cppm)

Algorithmique I. Algorithmique I p.1/??

Transcription:

Les Timers 1

Principe de fonctionnement Rôle : Réaliser une temporisation Élément essentiel : Compteur qui s'incrémente à chaque front montant du signal qui lui est appliqué : 2

Principe de fonctionnement Lorsque le compteur dépasse la valeur maximale qu'il peut contenir (par exemple : 256 pour un compteur sur 8 bits), un drapeau (flag en anglais) se lève. 253 254 255 0 3

Principe de fonctionnement Ce drapeau a pour but d'indiquer au programme que le compteur a débordé (c'est à dire qu'il a fini de compter). De la même manière que pour la boîte aux lettres, c'est au programme de rebaisser le drapeau pour recommencer un cycle de comptage (ça ne se fait pas tout seul!). Ré-initialisation du drapeau 4

Méthodes de configuration Un Timer doit pouvoir compter un temps défini par le programme (par exemple 1ms, 10ms, 50ms, etc). Pour cela, 2 paramètres peuvent être modifiés : La fréquence du signal appliqué au compteur Le compteur s'incrémentera ainsi plus ou moins vite. Le nombre d'impulsions à compter Le drapeau se lève toujours lorsqu'il y a débordement, on peut donc faire partir le compteur d'une valeur non nulle pour réduire le temps de comptage. 5

Méthodes de configuration Modification de la fréquence du signal appliqué au compteur : le pré-diviseur (prescaler en anglais) Exemple : pour compter 4 fois moins vite 6

Méthodes de configuration Modification du nombre d'impulsions à compter Si le compteur démarre à 0, il mettra beaucoup de temps à atteindre sa valeur maximale. Pour réduire le temps de comptage, on peut donc charger une valeur initiale non nulle dans le compteur. Exemple : Valeur initiale égale à 250 Chargement du compteur à une valeur initiale de 250 250 251 252 253 254 255 0 6 impulsions 7

Les Timers du PIC 16F887 Composition générale d'un Timer sur un microcontrôleur PIC : Calcul du temps mis par le Timer pour faire lever son drapeau : T =T quartz Valeur du pré-compteur fixe Valeur du pré-compteur réglable Nombre d'impulsions à compter 8

Les Timers du PIC 16F887 Les Timers sont internes au microcontrôleur. Le 16F887 en compte 3 : Timer0 et Timer2 sur 8 bits Timer1 sur 16 bits 9

Le Timer0 du 16F887 Composition du Timer0 Le pré-diviseur peut prendre une valeur parmi la liste suivante : 1, 2, 4, 8, 16, 32, 64, 128 ou 256 La valeur initiale peut prendre n'importe quelle valeur entière comprise entre 0 et 255. 10

Le Timer0 du 16F887 Calcul du temps maximum : Pour que le drapeau se lève le plus tard possible, il faut que la fréquence du signal appliqué au compteur soit la plus faible possible. Il faut donc configurer le pré-diviseur le plus grand : 256 Il faut également faire démarrer le compteur avec la valeur la plus petite possible pour qu'il compte le nombre d'impulsion le plus grand : valeur initiale = 0 T MAX =T quartz Valeur du pré-compteur fixe Valeur du pré-compteur réglable max Nombre d'impulsions à compter max T MAX = 1 4 256 (256 0)=65,536 ms 6 4.10 11

Le Timer0 du 16F887 Calcul d'un temps de 10 ms : T =10.10 3 = 1 4 X Y 6 4.10 avec X =valeur du pré-compteur Y = valeur à compter= 256 - valeur initiale soit X Y =10000 Pré-diviseur = 64 Valeur à compter = 156 Soit valeur initiale = 100 64 156= 9984 128 78= 9984 256 39=9984 X Y Y arrondi Valeur initiale (256 Y arrondi) 1 10 000 Impossible 2 5 000 Impossible 4 2 500 Impossible 8 1 250 Impossible 16 625 Impossible 32 312,5 Impossible 64 156,25 156 256 156 = 100 128 78,125 78 256 78 = 178 256 39,0625 39 256 39 = 217 12

Le Timer0 du 16F887 13

Le Timer0 du 16F887 Registre de configuration du Timer0 : OPTION_REG /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0???????? 14

Le Timer0 du 16F887 Registre de configuration du Timer0 : OPTION_REG /RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0 X (1) X (0) 0 X (0) 0 1 0 1 Pré-diviseur = 64 Si pré-diviseur 1:1 alors PSA = 0 15

Le Timer0 du 16F887 Registres associés au Timer0 : TMR0 : c'est le registre de comptage. C'est donc dans ce registre que nous allons rentrer la valeur de départ de notre compteur. INTCON seuls les bits 7, 6, 5 et 2 sont utiles pour le Timer 0 (ce sont les seuls non grisés). Dans ce chapitre, nous ne nous intéresserons qu'au bit 2 appelé T0IF et qui correspond au flag permettant de tester la fin du comptage. Les bits 7, 6 et 5 seront vus lors du chapitre sur les interruptions. OPTION_REG : Nous venons de le voir... 16

Le Timer0 du 16F887 Exemple de programme : void tempo_timer0 ( void ); // tempo de 10ms avec le timer0 void init ( void ); // initialisation des périphériques void main ( void ) { init(); // initialisation des périphériques } while ( 1 ) // boucle infinie { PORTB.1 =!PORTB.1; // on change l'état de RB1 tempo_timer0(); // tempo de 10 ms } void tempo_timer0 ( void ) // tempo de 10ms avec le timer0 { TMR0 = 100; // initialisation du registre de comptage T0IF = 0; // initialisation du drapeau lié au timer0 while ( T0IF == 0 ); // attente de la levée du drapeau } void init ( void ) // initialisation des périphériques { TRISB.1 = 0; // RB1 configuré en sortie OPTION_REG = 0x85; // configuration du timer0 : pré-diviseur à 64 } 17

Le Timer0 du 16F887 Attention! : Que se passe-t-il si on ne recharge pas le registre de comptage (TMR0) à chaque début de temporisation? Par exemple : void tempo_timer0 ( void ) { } // tempo de 10ms avec le timer0 T0IF = 0; // initialisation du drapeau lié au timer0 while ( T0IF == 0 ); // attente de la levée du drapeau void init ( void ) // initialisation des périphériques { TRISB.1 = 0; // RB1 configuré en sortie OPTION_REG = 0x85; // configuration du timer0 : pré-diviseur à 64 TMR0 = 100; // initialisation du registre de comptage } À ne pas faire en TP! (c'est pour illustrer ce qu'il ne faut pas faire...) La 1ère tempo est correcte mais toutes les autres comptent de 0 à 255 au lieu de 100 à 255 faites donc attention à cela! 18

Le Timer0 du 16F887 Exercice 1 : Temporisation de 1 ms avec le timer 0. Question 1 : Quels sont les registres du TIMER0 qu'il est nécessaire de configurer? Question 2 : Calculer les valeurs du prescaler et du compteur nécessaire pour obtenir une temporisation de 1 ms. Question 3 : Donner la configuration des registres du TIMER0. Question 4 : Ecrivez la fonction void Tempo_Timer0_1ms (void) qui permet d'utiliser le Timer 0. 19

Le Timer0 du 16F887 Exercice 2 : Temporisation de 8 ms avec le timer 0. Question 1 : Re-calculer les valeurs du prescaler et du compteur nécessaires pour obtenir cette fois une temporisation de 8 ms. Question 2 : Donner la configuration des registres du TIMER0. 20

Le Timer0 du 16F887 Exercice 3 : Temporisations variables avec le timer 0. La temporisation maximale avec le Timer 0 est de 65 536 μs. Pour réaliser des temporisations plus longues nous allons faire des boucles. Pour cela, nous allons écrire une fonction appelée TempoX10 qui lance X fois une temporisation de 10 ms. X sera une valeur passée en paramètre. Par exemple, pour faire une temporisation de 1,5s, nous écrierons tempox10(150). Question : Écrire la fonction void tempox10('x') en n'oubliant pas de configurer correctement le passage de paramètre qui lancera X fois une temporisation de 10ms. 21

Le Timer2 du 16F887 Il est légèrement différent du Timer 0 puisque le début de comptage est en principe 0x00 et que la fin de comptage est la valeur à entrer. Il possède comme le Timer 0 un pré-compteur fixe et un pré-compteur variable (3 valeurs possibles : 1, 4 et 16). C'est aussi un compteur 8 bits. 22

Le Timer2 du 16F887 Calcul de la durée de comptage T MAX =T quartz Valeur du pré-compteur fixe Valeur du pré-compteur réglable max (Valeur définie + 1) Durée de comptage max : T MAX = 1 4 16 256=4,096 ms 6 4.10 23

Le Timer2 du 16F887 Originalité de ce Timer : Le flag ne se lève pas systématiquement à chaque fin de comptage. Existance d'un post-compteur. Ce post-compteur peut prendre chaque valeur entière entre 1 et 16. Exemple pour un post-compteur de 4 : 24

Le Timer2 du 16F887 La temporisation max de ce Timer est donc : T MAX = 16 * 4,096 ms soit 65,536 ms La formule permettant de calculer la durée de la temporisation est donc : T =Valeur du post-compteur 1 F quartz 4 Valeur du pré-compteur réglable (Valeur définie + 1) 25

Le Timer2 du 16F887 26

Le Timer2 du 16F887 27

Le Timer2 du 16F887 Attention, en TP : pour choisir un prescaler de 16, mettez T2CKPS<1:0> = 10, sinon un bug de MPLABSIM vous donnera des résultats inchohérents 28

Le Timer2 du 16F887 void tempo_timer2 ( void ); // tempo avec le timer2 void init ( void ); // initialisation des périphériques void main ( void ) { init(); // initialisation des périphériques void tempo_timer2 ( void ); // tempo avec le timer2 void init ( void ); // initialisation des périphériques void main ( void ) { init(); // initialisation des périphériques } while ( 1 ) // boucle infinie { PORTB.1 =!PORTB.1; // on change l'état de RB1 tempo_timer2(); // tempo de 50 ms } } while ( 1 ) // boucle infinie { PORTB.1 =!PORTB.1; // on change l'état de RB1 tempo_timer2(); // tempo de 50 ms } void tempo_timer2 ( void ) // tempo de 50ms avec le timer2 { PR2 = 239; // Valeur définie de fin de comptage T2CON = 0x66; // configuration du timer2 TMR2IF = 0; // initialisation du drapeau lié au timer2 while ( TMR2IF == 0 ); // attente de la levée du drapeau } void init ( void ) { TRISB.1 = 0; } // initialisation des périphériques // RB1 configuré en sortie void tempo_timer2 ( void ) // tempo avec le timer2 { TMR2IF = 0; // initialisation du drapeau lié au timer2 while ( TMR2IF == 0 ); // attente de la levée du drapeau } void init ( void ) // initialisation des périphériques { TRISB.1 = 0; // RB1 configuré en sortie PR2 = 239; // Valeur définie de fin de comptage T2CON = 0x66; // configuration du timer2 } Ces 2 programmes fonctionnent mais la solution de droite est plus intelligente 29

Le Timer1 du 16F887 Particularités de ce Timer 1 : Principe de fonctionnement similaire au Timer0 Le pré-compteur ne peut prendre que quatre valeurs : 1, 2, 4 ou 8. Le compteur est un compteur 16 bits : Registre de comptage composé de deux registres de 8 bits : TMR1H et TMR1L 30

Fonctions particulières des Timers Les Timers 0 et 1 peuvent être utilisés en compteur d événements extérieurs. Exemples : Timer 0 : Compteur de pièces dans une machine industrielle Affichage de la vitesse d un véhicule Signal à appliquer sur la broche RA4/T0CKl (Il faut bien sûr penser à mettre la ligne RA4 en entrée avec TRISA.4) Bit T0CS à mettre à 1 31

Timer 0 en compteur d'évènements T0SE = 0 : les fronts montants attaquant le Timer0 correspondent aux fronts montants de RA4 / T0CKI T0SE = 1 : les fronts montants attaquant le Timer0 correspondent aux fronts descendants de RA4 / T0CKI 32

Timer 1 en compteur d'évènements La broche du PIC associée au Timer 1 est la ligne RC0/T1OSO/T13CKI : La ligne RC1 / T1OSI est aussi associée au Timer 1, mais ne joue pas de rôle dans le comptage d'événements extérieurs. Compte tenu de la remarque ci-dessus, il faut déconnecter la ligne RC1 / T1OSI en invalidant la porte logique inverseuse. bit T1OSCEN = 0 33

Timer 1 associé à un quartz Il est possible de connecter un quartz sur le Timer 1 et de compter les impulsions de celui-ci pour générer des temps plus précis comme par exemple pour créer une horloge de secondes, minutes, heures ou un chronomètre. Très utile pour gérer le mode sommeil du micro-controleur. En général, on prend un quartz dit d' horloger de 32768 Hz (on divise ensuite par 2 15 pour avoir 1s) T1OSCEN = 1 34