La gestion des sorties



Documents pareils
ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Bien commencer avec un LaunchPad MSP430G et un Breadboard

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Carte ARDUINO UNO Microcontrôleur ATMega328

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

Conférence sur les microcontroleurs.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

PIC EVAL Dev Board PIC18F97J60

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

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

PIC 16F84. Philippe Hoppenot

Tout savoir sur le matériel informatique

FONCTION COMPTAGE BINAIRE ET DIVISION DE FRÉQUENCE

Éléments d'architecture des ordinateurs

Mesure de performances. [Architecture des ordinateurs, Hennessy & Patterson, 1996]

PROGRAMMATION EVENEMENTIELLE sur EXCEL

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

1 Architecture du cœur ARM Cortex M3. Le cœur ARM Cortex M3 sera présenté en classe à partir des éléments suivants :

MANUEL D INSTRUCTION

RENOVER LES FEUX TRICOLORES

Prototypage électronique

1. PRESENTATION DU PROJET

PROGRAMMATION D'UN MICROCONTRÔLEUR

Manipulations du laboratoire

Débuter avec PsoC ou PsoC niveau 0

DimNet Gradateurs Numériques Evolués Compulite. CompuDim 2000

Importantes instructions de sécurité

Fiche technique CPU 315SN/PN (315-4PN33)

ICPR-212 Manuel d instruction.

Flowcode - Mode d'emploi

IV- Comment fonctionne un ordinateur?

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

Une carte pour vos projets

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

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

NOTICE D INSTALLATION CENTRALE 260

Conception et réalisation d'une pédale MIDI

Mentions légales (non traduites) Introduction Légendes Schémas de raccordement Configuration de la S16...

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

VIII- Circuits séquentiels. Mémoires

NOTICE D UTILISATION ET D'EXPLOITATI ET D EXPLOITATION. Bloc Autonome d'alarme Sonore type Sattelite avec ou sans Flash

Clavier Déporté Sans Fil NOTICE RFID SOS

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

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Informatique Générale

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

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Configuration de TCPIPconfig.h

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

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

Manual de l utilisateur

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Guide de l utilisateur. Calibreur de Courant / Voltage Modèle A

Notice Technique 01.Type4.NT001.rév.A0 IROISE-T4P+ Equipement d'alarme incendie type 4 autonome à pile. . Conforme selon la norme NFS 61936

Traitement de texte : Quelques rappels de quelques notions de base

Relais statiques SOLITRON MIDI, Commutation analogique, Multi Fonctions RJ1P

Notice d'utilisation Afficheur multifonctions et système d'évaluation FX 360. Mode/Enter

CHRONOGRAPHE DEUX COMPTEURS OS11

Cours de Génie Logiciel

Java - la plateforme

Cours 7 : Programmation d une chaîne d acquisition

Modules d automatismes simples

Electronique Automatisme Informatique Electricité

Evco S.p.A. Code 104X201F314 page 1/8 Série EVX Dispositifs de contrôle numérique pour les armoires réfrigérées statiques et ventilées version 3.

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

Présentation et installation PCE-LOG V4 1-5

ACTIVITÉ DE PROGRAMMATION

NUGELEC. NOTICE D'UTILISATION DU B.A.A.S. du type Ma - STI / MaME - STI. pages. 1 introduction 2. 2 encombrement 3 fixation

HAM841K CENTRALE D'ALARME POUR SYSTEMES DE SECURITE COMMERCIAUX ET D'HABITATION

Astra Elite AM/3 Manuel d'installation

Structure et fonctionnement d'un ordinateur : hardware

Pilotec confort 10/Pilotec confort 20 réf réf

CONSOLE D ALARME AUTONOME POWERGUARD 2000

TP_Codeur_Incrémental

IFT1215 Introduction aux systèmes informatiques

1 Savoirs fondamentaux

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Matériel & Logiciels (Hardware & Software)

Leçon 1 : Les principaux composants d un ordinateur

ALIMENTATION PORTABLE 9000 AVEC DEMARRAGE DE SECOURS POUR VOITURE

Système de sécurité sans fil

Configuration d'un GSM pour une transmission de données via une centrale de mesure de Campbell Scientific

Certificat Informatique et internet Niveau 1 TD D1. Domaine 1 : Travailler dans un environnement numérique évolutif. 1. Généralités : Filière

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Système d alarme GSM XMD-3200.pro avec connexion via radio et réseau de téléphonie mobile

Table des matières. 1. Description du matériel : Données techniques : Présentation de la serrure :... 4

Caractéristiques techniques INVERTER 9 SF INVERTER 9 HP INVERTER 12 SF INVERTER 12 HP

CIRCUIT DE CHARGE BOSCH

Guide abrégé ME301-2

ORDONNANCEMENT CONJOINT DE TÂCHES ET DE MESSAGES DANS LES RÉSEAUX TEMPS RÉELS 4. QUELQUES EXEMPLES DU DYNAMISME ACTUEL DU TEMPS RÉEL

DU BINAIRE AU MICROPROCESSEUR - D ANGELIS CIRCUITS CONFIGURABLES NOTION DE PROGRAMMATION

Spécialité Professionnelle. Patrick Boulandet

Système d alarme sans fil GSM / SMS / RFID.

Merci d'avoir choisi notre système d'alarme intelligent. Veuillez lire ce manuel avant l'installation afin de la faire fonctionner correctement.

SOCIETE NATIONALE DES CHEMINS DE FER BELGES SPECIFICATION TECHNIQUE

Guide Rapide d'utilisation

Transcription:

La gestion du temps par programmation La gestion des sorties Pierre-Yves Rochat Les Microcontrôleurs disposent d'un outil matériel très puissant permettant la gestion du temps : les Timers, associés généralement aux interruptions. Ces sujets feront partie de la suite du cours. Mais il est possible dès maintenant de résoudre de nombreux problèmes demandant une gestion du temps, avec les connaissance de programmation que nous avons déjà vues. La durée d'une instruction Le processeur qui se trouve dans un microcontrôleur exécute en permanence des instructions. La durée de chaque instruction est très courte : même dans un petit microcontrôleur, une instruction ne dure souvent qu'une fraction de micro-seconde (μs = 10-6 secondes). Mais ce temps n'est pas infiniment court et il peut être utilisé pour gérer le temps qui s'écoule. Sur beaucoup de microcontrôleurs, une instruction dure un certain nombre de cycles élémentaires de l'horloge-mère du processeur, ce nombre pouvant varier selon les instructions. Par exemple les AVR possèdent une horloge interne, souvent à une fréquence de 8 MHz, calibrée à la production. En ajoutant un Quartz externe, cette fréquence peut monter à 20 MHz, en offrant en plus une précision beaucoup plus grande. Les processeurs AVR ont la particularité que presque toutes les instructions ne durent qu'un cycle d'horloge. Une instruction dure donc généralement 125 ns. Sur ces processeurs, il est possible de demander, par un fanion non-volatile de passer à une fréquence 8 fois plus basse que l'horloge de base. Son intérêt est de limiter la consommation de courant, vu que la technologie C-MOS utilisée implique une consommation qui comporte un facteur proportionnel à la fréquence. Les MSP430 ont aussi une horloge interne. Elle peut fonctionner jusqu'à 16 MHz. Il est possible à tout moment de modifier la fréquence du processeur, en cours d'exécution. Deux fréquences calibrées à la production (1MHz et 16MHz) peuvent être facilement choisies. Attente active Il n'est pas toujours facile de prévoir avec exactitude la durée d'une instruction. Les processeurs complexes ont par exemple des mécanismes d'accélération du type pipe-line qui optimisent le temps d'exécution en fonction de l'environnement. Mais la durée d'une instruction est répétitive. Il est donc simple d'écrire des boucles d'attentes active, dont la durée sera répétitive. Prenons par exemple la procédure suivante : #define BaseTempsMs 460 void AttenteMs (int duree) { volatile int j; // variable de comptage pour l'unité de temps int i; // variable de comptage du nombre d'unités de temps for (i=0; i<duree; i++) {

Gestion du temps par programmation : La gestion des sorties - 2 - for (j=0; j<basetempsms; j++){ Le volatile est indispensable, sinon le compilateur va optimiser le code et supprimer la seconde boucle. Cette procédure permet donc de laisser passer un certain temps. Si on souhaite par exemple que ce temps soit exprimé en millisecondes (ms), il faudra calibrer la procédure. On exécutera le programme suivant : while (1) { // boucle de test, censée durer 10 secondes AttenteMs (10000); PORTB ^= (1<<0); // fait changer d'état une LED sur PB0 Au moyen d'un chronomètre, on mesurera le temps de clignotement, qui devrait durer 10 secondes. On ajustera ensuite la constante BaseMs. Je l'ai souvent mise à 460 avec un AVR à 8 MHz. Arduino : delay Encore une fois, l'environnement Arduino (ou Energia pour le MSP430) offre une procédure similaire : delay (int duree); Elle avait déjà été utilisée lors du premier exemple du cours, qui faisait clignoter une LED : void loop () { digitalwrite (LED_ROUGE, HIGH); delay (500); digitalwrite (LED_ROUGE, LOW); delay (500); Rappel : cette procédure est bloquante. Une faible précision On comprend que cette manière de gérer le temps n'est pas très précise. Elle ne convient visiblement pas à gérer l'heure et la date, pour lesquels même une précision de 0.001 % génère des erreurs de plus d'une seconde par jour. Dans ce cas, on utilise des circuits spécialisés (RTC = Real Time Clock) associés à un quartz (généralement de 32'768 Hz, donc 2 15 hertz) et une petite pile pour être indépendant de l'alimentation. Dans la suite du cours, nous verrons comment ces circuits communiquent avec un microcontrôleur (par ligne série, I2C ou SPI). Mais de nombreux problèmes pratiques ne nécessitent pas d'une mesure précise du temps. Réalisation d'un séquenceur Nous avons dans les mains tout ce qu'il faut pour programmer des séquenceurs, en

faisant succéder des assignations de sorties et des délais. Gestion du temps par programmation : La gestion des sorties - 3 - On peut ainsi réaliser un générateur de mélodie (par actions successives sur la membrane d'un haut-parleur), la commande d'une enseigne lumineuse (ce sujet sera détaillé dans la suite du cours) et bien d'autres applications. La commander par Modulation de Largeur d'impulsion (PWM) peut aussi être mise en œuvre de cette manière. Exemple des feux tricolores Voici une application, qui réalise une commande de feux tricolores pour un carrefour, en laissant passer successivement les voitures sur un axe, puis sur l'autre. enum {Rouge, Orange, Vert; // Définitions des couleurs // Allume une couleur sur le feu de l'axe 1 : void FeuAxe1 (int couleur) { digitalwrite(bitrougeaxe1, LOW); // éteint les 3 couleurs... digitalwrite(bitorangeaxe1, LOW); digitalwrite(bitvertaxe1, LOW); switch (couleur){ //...allume la bonne : case Rouge : digitalwrite(bitrougeaxe1, HIGH); case Orange : digitalwrite(bitorangeaxe1, HIGH); case Vert : digitalwrite(bitvertaxe1, HIGH); // Allume une couleur sur le feu de l'axe 2 : void FeuAxe2 (int couleur) {... FeuAxe2(Rouge); FeuAxe1(Vert); // passage sur l'axe routier 1 AttenteSec(20); FeuAxe1(Orange); AttenteSec(3); // fin du passage FeuAxe1(Rouge); AttenteSec(1); // bloque l'axe 1 FeuAxe2(Vert); AttenteSec(20); // passage sur l'axe routier 2 FeuAxe2(Orange); AttenteSec(3); // fin du passage FeuAxe2(Rouge); AttenteSec(1); // bloque l'axe 2 En observant ce programme, on remarque que la boucle principale dure 48 secondes. On écrira de manière très similaire un feu pour passage piétons. Il sera alors souvent déclenché par le bouton par lequel les piétons peuvent demander le passage. Gérer plusieurs tâches Il faut toujours garder à l'esprit que le processeur ne peut rien faire d'autre durant l'exécution d'une boucle d'attente. Il est simple de faire clignoter une LED à 2 Hz. Mais faire clignoter en même temps une seconde LED à 3 Hz n'est déjà pas si simple!

Gestion du temps par programmation : La gestion des sorties - 4 - A vrai dire, la programmation de processus multiples est tout un chapitre de l'informatique technique, qui dépasse le cadre de ce cours. Mais quelques solutions simples peuvent être appliquées avec les microcontrôleurs. Dans un programme comme celui des feux tricolores, la boucle principale s'exécute une fois par cycle. Une solution intéressante est de travailler avec une boucle principale qui a une durée courte, par exemple une ms. On utilisera alors des variables et des tests pour actionner les sorties. Voici par exemple comment réaliser le double clignotant à fréquences inégales : #define ToogleRedLed {P1OUT ^=(1<<0); // inverse la LED rouge #define ToogleRGreenLed {P1OUT ^=(1<<6); // inverse la LED verte int compteur1=0; int compteur2=0; if (compteur1==0) {ToggleRedLed; compteur1++; if (compteur1==250) compteur1=0; // 2Hz, demi période : 250ms if (compteur2==0) {ToggleGreenLed; compteur2++; if (compteur2==166) {compteur2=0;// 3Hz, demi période : 166ms AttenteMs(1); Dans ce cas, on va considérer que le temps pour exécuter les premières instructions contenue dans la boucle while (1) est négligeable par rapport au temps d'exécution de la routine AttenteMs(1). Et il est possible d'ajouter ainsi d'autres instructions, pour d'autres processus. Temps «absolu» Dans les exemples que nous avons vu, le temps a toujours été traité de manière relative. Il est aussi possible d'utiliser le temps de manière «absolue». Il faut une horloge précise pour avoir la date et l'heure, mais il est facile de connaître le temps écoulé depuis le début de l'exécution du programme, donc généralement depuis que le dispositif comportant le microcontrôleur est allumé : long int TempsMs=0; AttenteMs (1); TempsMs++; Pour ne pas avoir un fonctionnement périodique de 65'536 ms, soit seulement à peine plus d'une minute, on peut utiliser ici une variable long int, utilisant 64 bits. Pour être certain que le temps soit toujours un nombre positif, on utilise plutôt unsigned long int, qu'on peut écrire simplement unsigned long. La variable TempsMs ne reviendra alors à zéro qu'après plus d'un mois! A tout moment, il est possible de consulter la variable TempsMs et effectuer des calculs sur ces valeurs. L'exemple précédent pourrait s'écrire de cette manière :

long int TempsMs=0; if ((temps%250) ==0) {ToggleRedLed; if ((temps%166) ==0) {ToggleGreenLed; AttenteMs(1); TempsMs++; Gestion du temps par programmation : La gestion des sorties - 5 - Rappelons que le signe % correspond au reste de la division entière. Cette solution peut paraître élégante, vu que le programme est plus court, en ce qui concerne les lignes en langage C. Mais le résultat de la compilation pourrait être décevant : la division, même entière, nécessite beaucoup d instructions en assembleur, donc de la place en mémoire de programme (flash) et du temps d'exécution! Arduino : millis et micros Une fois de plus, l'environnement Arduino (ou Energia pour le MSP430) offre une fonctionnalité similaire. La procédure : unsigned long millis() rend le nombre de milli-secondes depuis le début du programme. Ce qui est plus étonnant, c'est qu'il existe aussi une procédure similaire pour les µs : unsigned long micros() Elle ne pourrait pas être réalisée avec la technique que nous venons de voir. La durée d'une ou de quelques instructions ne peut plus alors être considérée comme négligeable par rapport à une µs. C'est donc en utilisant les Timers et les interruptions, que nous étudierons prochainement dans le cours, que la procédure micros() a été réalisée, tout comme aussi la fonction millis(). Rappel : ces deux procédures ne sont pas bloquantes. Les sorties et les entrées! Dans la pratique, les applications utilisant seulement les sorties d'un microcontrôleur et le temps qui s'écoule sont rares, bien qu'elles ils existent : feu tricolore à cycle, boîte à musique, afficheur matriciels à LED, enseignes lumineuses animées, etc. Il est évident que la grande majorité des programmes utilisent aussi les entrées! Nous verrons dans le chapitre suivant comment gérer les entrées en fonction du temps qui s'écoule. 2013/09/15 Pierre-Yves ROCHAT pyr@pyr.ch Version du 2013/11/16