Vous êtes sur la page 1sur 132

Cours Microcontrôleurs

Iset de Nabeul

Leçon N°1

PRESENTATION DE L’INFORMATIQUE INDUSTRIELLE ET DES SYSTEMES MICRO-PROGRAMMES

I – L’INFORMATIQUE INDUSTRIELLE

1. Définition

« L'informatique industrielle est une branche de l'informatique appliquée qui couvre l'ensemble des techniques de conception et de programmation, de systèmes informatisés à vocation industrielle, qui ne sont pas des ordinateurs. »

(Source : Wikipédia)

2. Domaines d'applications

Alarme, automobile, aviation, instrumentation, médicale, téléphonie mobile, terminaux de paiement pour carte bancaire, etc.

mobile, terminaux de paiement pour carte bancaire, etc. Applications Automates, robotique, Mesures de grandeurs

Applications

Automates, robotique,

Mesures de grandeurs physiques,

Systèmes temps-réel,

Systèmes embarqués.

Cours Microcontrôleurs

Iset de Nabeul

II- LES DIFFERENTS SYSTEMES PROGRAMMABLES

1. Les circuits spécialisés ou ASIC (Application Specific Integrated Circuit)

Les circuits spécialisés sont des circuits spécialisés dès leur conception pour une application donnée.

Exemples :

- DSP (Digital Signal Processing),

- co-processeur arithmétique,

- processeur 3-D,

- contrôleur de bus,

arithmétique, - processeur 3-D, - contrôleur de bus, Avantages - Très rapide - Consommation moindre -
arithmétique, - processeur 3-D, - contrôleur de bus, Avantages - Très rapide - Consommation moindre -

Avantages

- Très rapide

- Consommation moindre

- Optimisé pour une application

Inconvénients

- Faible modularité

- Possibilité d'évolution limité

- Coût

2. Les systèmes en logique programmée

Ils sont connus sous la désignation de PLD (programmable logic device, circuit logique programmable)

- FPGA (field-programmable gate array, réseau de portes programmables),

- PAL (programmable array logic, réseau logique programmable),

- Etc.

Cours Microcontrôleurs

Iset de Nabeul

Cours Microcontrôleurs Iset de Nabeul « Un circuit logique programmable, ou réseau logique programmable, est un
Cours Microcontrôleurs Iset de Nabeul « Un circuit logique programmable, ou réseau logique programmable, est un

« Un circuit logique programmable, ou réseau logique programmable, est un circuit intégré logique qui peut être reprogrammé après sa fabrication. Il est composé de nombreuses cellules logiques élémentaires pouvant être librement assemblé. »

Avantages

- Forte modularité

- Rapidité

Inconvénients

- Mise en oeuvre plus complexe

- Coûts de développement élevé

(Wikipédia)

3. Les systèmes micro-programmés

Les micro-contrôleurs sont typiquement des systèmes micro-programmés.

Un micro-contrôleur est un :

« Circuit intégré comprenant essentiellement un microprocesseur, ses mémoires, et des éléments personnalisés selon l'application. »

Un micro-contrôleur contient un microprocesseur.

Avantages

- Mise en oeuvre simple

- Coûts de développement réduits

Inconvénients

- Plus lent

- Utilisation sous optimale

III – ÉVOLUTION ET LOI DE MOORE

Intel 8086 (1978)

architecture interne 16 bits

Cours Microcontrôleurs

Iset de Nabeul

bus 16 bits fréquence d'horloge 4,77/10 Mhz 39 000 transistors, gravés en 3µm 0,33/0,75 MIPS

Mhz 39 000 transistors, gravés en 3 µ m 0,33/0,75 MIPS Intel Pentium 4 Northwood C

Intel Pentium 4 Northwood C (2002) architecture interne 32 bits fréquence d’horloge 2,4/3,4 Ghz (bus processeur : 200Mhz) plus de 42 millions de transistors, gravés en 0,13 µm 450 MIPS

42 millions de transistors, gravés en 0,13 µ m 450 MIPS Intel Core i7 Gulftown (2011)

Intel Core i7 Gulftown (2011) architecture interne 64 bits 4/6 coeurs fréquence d'horloge 3,46 Ghz Fréquence de bus: 3,2 GHz Fréquence de transfert des données 25.6 Gb/sec.

Cours Microcontrôleurs

Iset de Nabeul

1,17 Milliards de transistors, gravés en 32nm

6000 MIPS

1,17 Milliards de transistors, gravés en 32nm 6000 MIPS IV – LES DIFFERENTS BUS D’UN SYSTEME
1,17 Milliards de transistors, gravés en 32nm 6000 MIPS IV – LES DIFFERENTS BUS D’UN SYSTEME

IV – LES DIFFERENTS BUS D’UN SYSTEME MICRO-PROGRAMME

« Un bus est un jeu de lignes partagées pour l’échange de mots numériques. »

1. Définition

Un bus permet de faire transiter (liaison série/parallèle) des informations codées en binaire entre deux points. Typiquement les informations sont regroupées en mots : octet (8 bits), word (16 bits) ou double word (32 bits).

2. Caractéristiques d'un bus

- Nombres de lignes,

Cours Microcontrôleurs

Iset de Nabeul

- Fréquence de transfert.

Iset de Nabeul - Fréquence de transfert. Issu de la documentation technique du PIC16F628 Il existe

Issu de la documentation technique du PIC16F628

Il existe 3 Types de bus :

- Bus de données : permet de transférer entre composants des données,

Exemple : résultat d'une opération, valeur d'une variable, etc.

- Bus d'adresses : permet de transférer entre composants des adresses,

Exemple : adresse d'une case mémoire, etc.

- Bus de contrôle : permet l'échange entre les composants d'informations de contrôle [bus rarement représenté sur les schémas].

Exemple : périphérique prêt/occupé, erreur/exécution réussie, etc.

Cours Microcontrôleurs

Iset de Nabeul

Leçon N°2

INTRODUCTION SUR LES MICROCONTROLEURS

I – INTRODUCTION

Dans la chaîne de traitement de l’information, le programme informatique (firmware ou microcode) réalise une fonction importante et est toujours associée à un composant programmable (hardware) équipé d’éléments de sauvegarde ou de mémorisation : le microcontrôleur.

de sauvegarde ou de mémorisation : le microcontrôleur . II – MICROPROCESSEUR ET MICROCONTROLEUR Il y

II – MICROPROCESSEUR ET MICROCONTROLEUR

Il y a une différence fondamentale entre un microprocesseur et un microcontrôleur :

- le microcontrôleur intègre dans un même boîtier, un microprocesseur, de la mémoire, et des interfaces entrées/sorties.

- le microprocesseur se présente sous la forme d’un boîtier qui nécessite des éléments externes, comme de la mémoire et des circuits d’interfaces.

Ils sont présents dans la plupart des systèmes électroniques embarqués ou dédiés à une application unique (exemple : téléphone portable).

Cours Microcontrôleurs

Iset de Nabeul

Cours Microcontrôleurs Iset de Nabeul Il en existe de nombreux modèles : - 68HC11 de Motorola,

Il en existe de nombreux modèles :

- 68HC11 de Motorola,

- 8051 de Intel,

- les ARM qui sont très utilisés en électronique embarquée

- et les PIC de Microchip.

III – GENERALITES SUR LES PIC 1. Trois grandes familles

- Base-Line (mots d’instructions de 12 ou 14 bits comme les 12Cxxx, 12Fxxx),

- Mid-Range (mots de 14 bits comme le 16F628, 16F877, etc.),

- High-End (mots de 16 bits).

2. Identification

Prenons l’exemple du PIC : PIC16F877A-I/P., 07514KQ

Les 2 premiers chiffres indiquent la catégorie du PIC : 16 = Mid-Range.

F indique que la mémoire programme est de type FLASH ; on retrouve CR pour ROM (ROM : Read Only Memory) et C pour EPROM (EPROM : Erasable ROM) ou EEPROM EEPROM : Electrical Erasable ROM).

Remarque :

Un composant qu’on ne peut reprogrammer est appelé OTP pour One Time Programming.

Cours Microcontrôleurs

Iset de Nabeul

Les mémoires de type FLASH et EEPROM peuvent être écrites et effacées mais pas la ROM.

877A indique le modèle du PIC.

 

Parfois, un suffixe supplémentaire comme 20 est indiqué. Il s’agit de la fréquence d’horloge maximale. 20 pour 20 MHz. Les PIC sont des composants statiques, ainsi, on peut abaisser

la

fréquence

d’horloge

jusqu’à

l’arrêt

complet

sans

perte

de

données

et

sans

dysfonctionnement.

 

I est la gamme de température industrielle (-40°C à +85°C).

 

P est le type de boîtier PDIP, boîtier 40 broches Plastique DIL (Dual In Line).

 

07 est l’année de fabrication 2007 et 51, la semaine 51, donc fin décembre. 4KQ est un code de traçabilité.

3. Architecture interne

Tous les microcontrôleurs utilisent l’une des 2 architectures nommées Harvard et Von Neumann.

Elles représentent les différentes manières d’échange de données entre le CPU (microprocesseur interne) et la mémoire.

3.1. Architecture Von Neumann

L’architecture VON NEUMANN employée par la plupart des microcontrôleurs actuels (INTEL80XX, Motorola HC05, HC08 et HC11, ou ZILOG Z80) est basée sur un bus de données unique. Celui-ci véhicule les instructions et les données.

1 bloc mémoire et 1 bus de données sur 8 bits (1 octet). Toutes les données sont échangées sur ce bus qui, surchargé, rend la communication très lente.

ce bus qui, surchargé, rend la communication très lente. 3.2. Architecture Harvard L’architecture HARVARD

3.2. Architecture Harvard

L’architecture HARVARD utilisée par les microcontrôleurs PIC est basée sur deux bus de données. Un bus est utilisé pour les données et un autre pour les instructions.

2 blocs mémoire distincts et 2 bus différents : 1 bus 8 bits pour communiquer avec la RAM, 1 bus 14 bits pour communiquer avec la ROM, qui contient le programme.

Cours Microcontrôleurs

Iset de Nabeul

Cours Microcontrôleurs Iset de Nabeul Le CPU peut lire une instruction (en ROM) et accéder à

Le CPU peut lire une instruction (en ROM) et accéder à la mémoire de données (en RAM) en même temps.

Remarque : la mémoire RAM (Random Access Memory) est utilisée pour stocker temporairement les données utilisées dans le programme ; ces données sont en effet perdues lors d’une coupure de courant.

Avantages et inconvénients

   

VON NEUMANN

HARVARD

(MOTOROLA, INTEL, ZILOG

)

(MICROCHIP PICs)

Avantages

- Jeu d’instructions riches

 

Jeu d’instructions pauvre, mais facile à mémoriser.

-

- Accès à la mémoire facile.

 

Le codage des instructions est facile, chaque instruction est codée sur un mot et dure un cycle machine.

-

-

Le code est plus compact.

Inconvénients

Le temps pour exécuter une instruction est variable.

-

- Le codage des instructions se fait sur plusieurs octets.

Le jeu d’instruction est très pauvre, par exemple pour effectuer une comparaison il faut faire une soustraction.

-

Les accès aux registres internes et la mémoire sont très délicats.

-

4. Jeu d’instructions

Toutes les instructions compréhensibles par les microcontrôleurs forment ce que l’on appelle le jeu d’instructions.

On distingue 2 types :

Cours Microcontrôleurs

Iset de Nabeul

composants dits RISC (Reduced Instructions Set Computer), par exemple les PIC. Dans ce cas, le microcontrôleur reconnaît et exécute seulement des opérations simples (addition, soustraction, etc.) et des opérations plus complexes sont réalisées en les combinant.

Tous les PIC Mid-Range ont un jeu de 35 instructions.

composants dits CISC (Complex Instructions Set Computer).

Les microcontrôleurs de ce type possèdent 200 instructions différentes et peuvent réaliser de nombreuses opérations à grande vitesse. Les instructions sont plus complexes.

Remarque :

La taille mémoire spécifiée pour un PICs s’exprime en Kilo Mots (14 bits pour la famille 16F87X) et non en kilo octets. Comme chaque instruction est codée par un mot de 14 bits, comparées aux microcontrôleurs classiques (1, 2 ou 3 octets par instruction), les PICs ont un code plus compact et ils utilisent moins de mémoire.

5. Nombre d’instructions par secondes

Les PIC stockent et exécutent chaque instruction en 1 cycle d’horloge. On peut atteindre de très grandes vitesses. L’horloge est la fonction qui cadence le fonctionnement des microcontrôleurs en délivrant un signal de fréquence fixe. On utilise généralement un quartz.

Exemple :

Avec un quartz de 4MHz, la fréquence du signal est d’abord divisée par 4 ; c’est ce signal de 1MHz qui cadence les opérations et qui permet d’obtenir la durée d’1 cycle, soit 1 million de cycles par seconde.

Pour 1 instruction par cycle, cela donne une puissance de traitement de 1 million d’instructions par seconde, soit 1MIPS.

Cours Microcontrôleurs

Iset de Nabeul

6. Quelques caractéristiques importantes

Family

ROM

RAM

Pins

Clock

A/D Inputs

Resolution

Comp-

8/16 – bit Timers

Serial

PWM

Others

[Kbytes]

[bytes]

Freq.

of A/D

arators

Comm.

Output

[MHz]

Converter

   

s

 

Base-Line 8 - bit architecture, 12-bit Instruction Word Length

 

PIC10FXXX

0.375 - 0.75

16

- 24

6 - 8

4

- 8

0

- 2

8

0

- 1

 

1 x 8

-

 

-

-

PIC12FXXX

0.75

- 1.5

25

- 38

 

8

4

- 8

0

- 3

8

0

- 1

 

1 x 8

-

 

-

EEPROM

PIC16FXXX

0.75 - 3

25

- 134

14

- 44

20

0

- 3

8

0

- 2

 

1 x 8

-

 

-

EEPROM

PIC16HVXXX

1.5

 

25

18

- 20

20

 

-

-

 

-

 

1 x 8

-

 

-

Vdd = 15V

 

Mid-Range 8 - bit architecture, 14-bit Instruction World Length

 

PIC12FXXX

1.75

- 3.5

64

- 128

 

8

20

0

- 4

10

 

1

1 - 2 x 8 1 x

-

0

- 1

EEPROM

           

16

 

PIC12HVXXX

1.75

 

64

 

8

20

0

- 4

10

 

1

1 - 2 x 8 1 x

-

0

- 1

-

         

16

 

PIC16FXXX

1.75 - 14

64

- 368

14

- 64

20

0

- 13

8 or 10

0

- 2

1

- 2 x 8 1 x

USART

0

- 3

-

         

16

I2C SPI

 

PIC16HVXXX

1.75

- 3.5

64

- 128

14

- 20

20

0

- 12

10

 

2

2

x 8 1 x 16

USART

 

-

-

         

I2C SPI

 
 

High-End 8 - bit architecture, 16-bit Instruction Word Length

 

PIC18FXXX

4

- 128

256

-

18

- 80

32

- 48

4

- 16

10 or 12

0

- 3

0

- 2 x 8 2 - 3

USB2.0

0

- 5

-

3936

         

x

16

CAN2.0

 
 

USART

I2C SPI

PIC18FXXJXX

8

- 128

1024 -

28 - 100

40

- 48

10

- 16

10

 

2

0 - 2 x 8 2 - 3

USB2.0

2

- 5

-

3936

       

x

16

USART

 
 

Ethernet

I2C SPI

PIC18FXXKXX

8 - 64

768

-

28

- 44

64

10

- 13

10

 

2

1 x 8 3 x 16

USART

   

3936

     

I2C SPI

Cours Microcontrôleurs

Iset de Nabeul

IV – PIC 16F877A 1. Synoptique simplifié

Iset de Nabeul IV – PIC 16F877A 1. Synoptique simplifié Le CPU exécute les instructions du

Le CPU exécute les instructions du programme (codées sur 14 bits), traite et produit des opérations sur des informations numériques.

La mémoire vive (RAM) de 368 octets est utilisée pour le stockage temporaire des données et résultats.

Cours Microcontrôleurs

Iset de Nabeul

La mémoire morte (EEPROM) de 256 octets permet de conserver des données très utiles de manière semi-permanente.

La mémoire FLASH de 8k x 14bits permet de stocker le programme (les instructions).

L’horloge génère le signal qui cadence l’exécution des instructions.

Les ports (A – E) bidirectionnels permettent de communiquer avec l’extérieur ; les lignes de chaque port peuvent être programmées en entrée ou en sortie.

Les timers (3), modules programmables dont les fonctions sont : astable (signaux périodiques), monostable (impulsion), compteur, signaux PWM (commande de moteurs à courant continu).

Le CAN convertisseur analogique/numérique 10 bits – 8 entrées disponibles de 0 à 5V ; les résultats des conversions sont stockés dans des registres internes.

2. Brochage physique des différentes versions de µC

PDIP, SOIC

dans des registres internes. 2. Brochage physique des différentes versions de µ C PDIP, SOIC Mr

Cours Microcontrôleurs

Iset de Nabeul

3. Synoptique complet

Cours Microcontrôleurs Iset de Nabeul 3. Synoptique complet Mr Nizar TOUJENI 1 5

Cours Microcontrôleurs

Iset de Nabeul

Cours Microcontrôleurs Iset de Nabeul Mr Nizar TOUJENI 1 6

Cours Microcontrôleurs

Iset de Nabeul

Cours Microcontrôleurs Iset de Nabeul Mr Nizar TOUJENI 1 7

Cours Microcontrôleurs

Iset de Nabeul

Cours Microcontrôleurs Iset de Nabeul Mr Nizar TOUJENI 1 8

Cours Microcontrôleurs

Iset de Nabeul

Cours Microcontrôleurs Iset de Nabeul Mr Nizar TOUJENI 1 9

Cours Microcontrôleurs

Iset de Nabeul

4. Les éléments de choix d’un µC

4.1. Architecture

- ALU (8, 16, 32, 64 bits)

- Structure du processeur (Harvard, Von Neumann)

- Type de processeur (RISC, CISC)

- Taille des mémoires programme et donnée

- Nombre de ports d’entrée/sortie

4.2. Fonctionnalités

 

-

Fonctions analogiques : CAN, CNA, Comparateur, etc.

-

Fonctions de timing : Timer, Watchdog, etc.

-

Fonctions de communication : UART (Communication série), USB, I2C, etc.

-

Facilité de programmation : In-Circuit Serial Programming, Self Programming, etc.

4.3.

Caractéristiques électriques :

 

-

Fréquence d’horloge

-

Tensions d’alimentation

-

Consommation d’énergie, modes faible consommation d’énergie, etc.

4.4.

Caractéristiques physiques :

 

-

Type de boîtier : DIL, PLCC, etc.

V – LA PROGRAMMATION

Le microcontrôleur exécute le programme chargé dans sa mémoire FLASH. Les mots binaires (sur 14 bits pour le PIC16F877A) sont considérés par le CPU comme une commande.

mots binaires (sur 14 bits pour le PIC16F877A) sont considérés par le CPU comme une commande.

Cours Microcontrôleurs

Iset de Nabeul

Mais programmer en binaire ou même en hexadécimal est impossible. Les programmeurs utilisent des langages comme l’assembleur ou le C, qui utilise des abréviations.

Le passage de ce code plus lisible en code binaire prêt à être mis en mémoire s’appelle la compilation.

Remarque :

L’assembleur est un langage bas niveau étroitement lié au type de microcontrôleur. Le C est
L’assembleur est un langage bas niveau étroitement lié au type de microcontrôleur.
Le C est un langage de plus haut niveau que l’assembleur et permet en théorie d’être
portable, donc de s’adapter à n’importe quel microcontrôleur.
permet en théorie d’être portable, donc de s’adapter à n’importe quel microcontrôleur. Mr Nizar TOUJENI 2

Microcontrôleurs

Iset de Nabeul

Leçon N°3

LE COMPILATEUR MIKROC ET LE SIMULATEUR ISIS

I. LE COMPILATEUR MIKROC ET LES PIC

Un microcontrôleur est un circuit électronique encapsulé dans un circuit de haut niveau d’intégration. Les microcontrôleurs sont commercialisés par différents fabricants comme Motorola, Intel, Philips, Microchip, etc.

Microchip en particulier, est un fabricant des circuits électroniques. Dans leurs lignes de production, on trouve les microcontrôleurs PIC, qui sont disponibles dans des différentes familles, certaines d'entre elles sont : 12F, 16F, 18F, 24F, 30F, 33F etc. Le promoteur du projet choisit la famille et la référence qui répondent à ses besoins, comme un PIC12F675 ; microcontrôleur 8 broches avec des modules intégrés de base tels que le Timer et l’ADC. Un microcontrôleur comme le 16F877 dispose de 40 broches et des modules tels que : Timer, ADC, USART, I2C, PWM, entre autres. On peut facilement voir la différence entre ces deux PIC.

On peut facilement voir la différence entre ces deux PIC. Figure 1 La documentation technique, la

Figure 1

La documentation technique, la commercialisation massive et l'incroyable quantité d'informations publiées sur les microcontrôleurs PIC, les rendent idéals pour l’enseignement. L’entreprise Microchip a le portail web www.microchip.com où on peut télécharger des informations et des applications logicielles qui facilitent le développement avec ses microcontrôleurs.

Le développement d’une application à base de microcontrôleur PIC consiste à identifier les problèmes de développement, éditer, déboguer le programme machine et programmer le microcontrôleur avec un programmateur spécifique pour PICmicro. Microchip fournit des programmateurs spécialisés dans différentes échelles, peut-être le plus populaire est le PICSTART plus, mais il y a d'autres comme PICkit2, PICkit3. Bien qu'il existe des programmateurs commerciaux, un développeur peut construire ou acheter un programmateur éducatif à faible coût.

Un microcontrôleur a une architecture de base similaire à celle d'un PC, dispose d'un bloc OTP ou mémoire Flash dans lequel sont stockées les instructions du programme, cette section est similaire au disque dur de l'ordinateur, le PICmicro a une RAM, qui joue le même rôle de la mémoire vive d'un ordinateur personnel, le microcontrôleur possède des ports d'entrée et de sortie qui sont similaires aux périphériques d'entrée et de sortie pour ordinateur tel que souris, une imprimante, un écran, un clavier, et autres.

Microcontrôleurs

Iset de Nabeul

Microcontrôleurs Iset de Nabeul Figure 2 Ces caractéristiques du microcontrôleur le rendent idéal pour la création

Figure 2

Ces caractéristiques du microcontrôleur le rendent idéal pour la création de petites applications qui ont une interface utilisateur, comme des claviers, des boutons, des lecteurs de la mémoire de stockage de masse, et des capteurs de différentes grandeurs telles que la température, l'humidité, la pression, la lumière, la proximité, etc. De même, il est possible de créer des environnements de visualisation avec des afficheurs numériques, alphanumériques et graphiques. Les ports série comme USART et l'USB peuvent créer des communications série et des communications sans fil avec d'autres appareils. En bref, les possibilités sont sans fin.

II. LE COMPILATEUR MIKROC PRO

La programmation des microcontrôleurs est basée sur le code machine, qui est connu comme code assembleur, ce code contient les instructions du programme, le code assembleur est bien détaillé et difficile à écrire. Le programme en code assembleur est très long et difficile à comprendre.

La création des compilateurs de haut niveau a rendu facile la création et l'édition de programmes, bien entendu les microcontrôleurs ne font pas exception. Dans le commerce, il y a plusieurs variétés de compilateurs des différents fabricants et avec différents langages de haut niveau.

On peut acheter les compilateurs PICC, CCS, PIC Basic, entre autres. Ce cours se concentre sur le compilateur MikroC PRO, qui est un compilateur de langage C pour les microcontrôleurs PICmicro famille 12F, 16F, 18F etc.

MikroC PRO est un logiciel avec une grande variété des helps, supports et d'outils, qui facilite la création des projets et des applications pour les microcontrôleurs PICmicro.

L'étude de cet environnement de développement est possible, parce que l'étudiant peut télécharger une démo ou version étudiant, qui a les mêmes caractéristiques que la version complète, la seule limite est la taille du code machine ne peut pas excéder 2Koctets, une capacité suffisante pour un premier apprentissage. La version de démonstration peut être téléchargée à partir du site Web :

www.mikroe.com.

La figure suivante montre l'aspect visuel de l'environnement de développement.

Le compilateur de haut niveau en langage C utilise des structures, facilitant la programmation, optimisant les opérations mathématiques, et les processus grâce à l'utilisation de fonctions prédéfinies et des fonctions que le développeur peut créer et l'utilisation d'un ensemble de variables, caractère, nombre entier, et réel. Le compilateur crée automatiquement le code assembleur et un

Microcontrôleurs

Iset de Nabeul

code enregistré dans un fichier avec l'extension *. Hex, ce fichier est le résultat principal de la compilation, avec lequel le microcontrôleur sera programmé électriquement ou pour être utilisé pour une simulation sur ordinateur.

ou pour être utilisé pour une simulation sur ordinateur. Figure 3 III. LE SIMULATEUR ISIS PROTEUS

Figure 3

III. LE SIMULATEUR ISIS PROTEUS

Le simulateur ISIS de Proteus est un logiciel puissant, développé par la compagnie électronique Labcenter, qui s'est positionné pour plus de 10 ans comme l'un des outils les plus utiles pour simuler les microcontrôleurs PIC.

L'ISIS permet la simulation des familles des PIC les plus populaires. En plus des PIC, ISIS peut simuler une variété de dispositifs numériques et analogiques, comme les afficheurs sept segments, les LCD des caractères et graphiques, les capteurs de température, d'humidité, la pression, etc. Il peut aussi simuler les actionneurs tels que des moteurs à courant continu, les servomoteurs, les lampes à incandescence, etc. Il est possible de simuler des périphériques d'entrée et de sortie comme les claviers, ordinateur et les ports physiques tels que RS232 et USB. Ce simulateur a une grande variété d'instruments de mesure tels que voltmètres, ampèremètres, oscilloscopes et analyseurs de signaux.

En conclusion, ces caractéristiques font d'ISIS de Proteus, un outil idéal pour la conception et l'étude des PIC. Une version de démonstration du logiciel peut être téléchargée à partir du site web :

www.labcenter.com. Sur la photo suivante, on peut voir la page d’accueil de l'environnement de développement d'ISIS :

Microcontrôleurs

Iset de Nabeul

Microcontrôleurs Iset de Nabeul Figure 4 IV. CREATION DU PREMIER PROGRAMME EN MIKROC PRO Le processus

Figure 4

IV. CREATION DU PREMIER PROGRAMME EN MIKROC PRO

Le processus suivant doit être appris par cœur, pour mettre en œuvre à chaque fois des nouveaux projets ou programmes pour les PIC. En lançant MikroC PRO, on identifie dans le menu supérieur l’outil Project, et on choisit New Project… avec cette action, le programme affiche un assistant facile à utiliser pour créer un nouveau projet.

action, le programme affiche un assistant facile à utiliser pour créer un nouveau projet. Figure 5

Figure 5

Microcontrôleurs

Iset de Nabeul

La prochaine action est de cliquer sur le bouton Next, à cette étape de l'assistant affiche une case pour sélectionner la référence de PIC, qu’on souhaite utiliser. Dans ce champ, on sélectionne le PIC

P16F84A.

L'étape suivante est de définir la fréquence d'oscillation avec laquelle travaillera le PIC ; dans cet exemple on sélectionne 4.000000 MHz. L'option suivante permet de définir le répertoire où le développeur enregistrera le projet, dans ce répertoire le programme enregistrera tous les fichiers nécessaires, parmi lesquels le code source qui sera archivé avec l’extension .c, et l’exécutable du PIC avec l’extension. hex.

Enfin, la configuration est terminée et le projet est créé, à la fin la fenêtre doit apparaître comme suit :

créé, à la fin la fenêtre doit apparaître comme suit : Figure 6 A chaque modification

Figure 6

A chaque modification effectuée sur le code du programme, on doit compiler le code. Cette action produit des résultats de la compilation qu’on trouve dans la partie inférieure de la fenêtre du programme. Les messages doivent se terminer par un texte « Finished successfully ».

Pour commencer l’édition d’un projet, on configure les ports du PIC, puis on insère le programme dans une boucle infinie. Le PIC 16F84A dispose de deux ports A et B, on manipule le registre TRIS pour configurer les ports en sortie ou entrée.

Les registres TRIS ont le même nombre de bits que les ports, par exemple le port B ou PORTB de ce PIC est de 8 bits, donc le TRISB comporte également 8 bits. Les bits des registres TRIS correspondent à ceux des ports, et définissent bit à bit l'état du port.

- Si un bit du TRIS est 0, le même bit du port est en sortie,

- et Si un bit du TRIS est 1 le même bit du port est en entrée ou en haute impédance.

Microcontrôleurs

Iset de Nabeul

Pour voir ce concept plus clairement, on observe et on analyse l'exemple suivant. Cet exemple utilise un bouton et deux LED pour afficher le comportement du programme. On observe et on analyse le programme ci-dessous :

void main ( void )

{

 

unsigned int COMPTEUR=0;

TRISB = 0b11110000;

PORTB=0b00000000;

while( 1 )

{

if( PORTB.F7==0 )

{

if( PORTB.F0==1 )

PORTB.F0=0;

else

PORTB.F0=1;

while( PORTB.F7==0 );

}

COMPTEUR++;

if(COMPTEUR&0x0100 )

PORTB.F1=1;

else

PORTB.F1=0;

}

}

L’étape suivante est de faire la simulation sur ISIS, les résistances des LED doivent être changées à 330, l’entrée Master CLeaR, MCLR doit être connecté à Vcc pour que le PIC ne redémarre pas, à la fin on devrait voir la forme suivante :

Microcontrôleurs

Iset de Nabeul

Microcontrôleurs Iset de Nabeul Figure 7 Avant de lancer la simulation, on doit charger le fichier.

Figure 7

Avant de lancer la simulation, on doit charger le fichier. Hex. Pour procéder, on double clique sur le PIC, et une fenêtre qui permet de rechercher le fichier. Hex et on peut également ajuster la fréquence d'oscillation. Par défaut, cette valeur est de 1 MHz. Cette fenêtre se présente comme suit :

Par défaut, cette valeur est de 1 MHz. Cette fenêtre se présente comme suit : Figure

Figure 8

Microcontrôleurs

Iset de Nabeul

Leçon N°4

INTRODUCTION AU LANGAGE MIKROC

I. STRUCTURE D’UN PROGRAMME EN MIKROC

La structure la plus simple d'un programme en mikroC, c’est le programme représenté dans le code- source 4.1, qui nous permettra de faire clignoter une LED connectée au PORTB (par exemple bit 0 du PORTB) du microcontrôleur PIC avec une période de 2 secondes (1 seconde allumée et une seconde éteinte).

1. Règles générale d’écriture en mikroC

Les instructions propres au langage mikroC doivent être écrites en minuscule (void main (void)). Les instructions particulières aux microcontrôleurs doivent être écrites en majuscule (TRISB). Les retours à la ligne et les espaces servent uniquement à aérer le code Toutes instructions ou actions se terminent par un point virgule « ; ».

Code-source 4.1 (LED.c)

/********************************************************************

LED clignotante

==============

Ce programme fait clignoter une LED connectée à la broche RB0 du PIC 16F84A

********************************************************************/

void main( )

{

for( ; ; )

// Boucle sans fin

{

TRISB = 0;

// Configuration du PORTB en sortie

PORTB.F0 = 0;

// RB0 = 0

Delay_Ms(1000);

// Pause d’une seconde

PORTB.F0 = 1;

// RB0 = 1

Delay_Ms(1000);

// Pause d’une seconde

}

// Fin de la boucle

}

Examinons le fichier LED.c du code-source

Microcontrôleurs

Iset de Nabeul

2. Commentaires

En mikroC, les commentaires de programmes peuvent être de deux types : de longs commentaires, s’étendant sur plusieurs lignes, et de courts commentaires, occupant une seule ligne.

Comme montre le Code-source 4.1 les longs commentaires commencent par le caractère « /* » et se terminent par le caractère « */ ». De même, de courts commentaires commencent par le caractère « // » et il n’a pas besoin d'un caractère de terminaison.

3. Début et fin d'un programme

En mikroC, un programme commence avec les mots-clés :

void main()

Après cela, une accolade ouvrante est utilisée pour indiquer le début du corps de programme. Le programme se termine par une accolade fermante. Ainsi, comme indiqué dans le Code-source 4.1, le programme a la structure suivante :

void main()

{

// Votre code ici

}

II. ELEMENTS DE PROGRAMMATION EN MIKROC 1. Les variables

Une variable est une portion réservée d’une mémoire à laquelle on a donné un nom. Toute variable utilisée dans un programme doit auparavant être définie.

La définition d’une variable consiste à la nommer et lui donnée un type et éventuellement lui donner une valeur initiale (initialiser). C’est cette définition qui réserve (alloue) la place mémoire nécessaire en fonction du type.

La position de la déclaration ou de la définition d’une variable détermine sa portée c’est-à-dire sa durée de vie et sa visibilité.

Les variables globales sont déclarées en dehors de toute fonction. Les variables locales sont déclarées à l’intérieur des fonctions et ne sont pas visible à l’extérieur de la fonction dans laquelle celle-ci est définie.

Les noms des variables ne peuvent contenir que des lettres de a à z et à partir de A à Z, le trait de soulignement "_" et les chiffres de 0 à 9.

Les noms des variables dans mikroC n'est pas sensible à la casse, de sorte que Som, som et soM représente le même identifiant.

Certains noms sont réservés pour le compilateur lui-même et ne peut pas être utilisés comme noms de variables dans un programme. Le tableau 4.1 donne une liste alphabétique de ces noms réservés.

Microcontrôleurs

Iset de Nabeul

Tableau 4.1 Noms réservés en mikroC

ASM

ENUM

SIGNED

AUTO

EXTERN

SIZEOF

BREAK

FLOAT

STATIC

CASE

FOR

STRUCT

CHAR

SWITCH

CONST

IF

TYPEDEF

CONTINUE

GOTO

INT

UNION

LONG

DEFAULT

UNSIGNED

DOUBLE

RETURN

VOLATILE

DO

REGISTER

VOID

ELSE

SHORT

WHILE

2. Les constantes

Les constantes représentent des valeurs fixes (numérique ou caractère) dans des programmes qui ne peuvent pas être changées. En mikroC, les constantes peuvent être entiers, flottants, caractères, chaînes ou des types énumérés.

2.1. Integer Constants

Les constantes entières (Integer Constants) peuvent être en décimal, hexadécimal, octal ou binaire. Le suffixe u ou U force la constante d'être non signé (unsigned) et le suffixe l ou L force la constante d'être longue (long). L’utilisation de U (ou u) et L (ou l) oblige la constante d'être unsigned long.

Les constantes sont déclarées en utilisant le mot-clé const et sont stockées dans le flash de mémoire du microcontrôleur PIC. Par exemple, MAX est déclaré comme la constante 100 :

const MAX =100;

Les constantes hexadécimales commencent par les caractères 0x ou 0X et peuvent contenir des données numériques de 0 à 9 et les caractères hexadécimaux de A à F. Dans l'exemple suivant, TOTAL est la constante de la valeur hexadécimale FF:

const TOTAL = 0xFF;

Les constantes octales ont un zéro au début du nombre et peuvent contenir des données numériques de 0 à 7. Dans l'exemple suivant, une constante CNT est affectée une valeur octale 17 :

const CNT = 017;

Les constantes binaires commencent par 0b ou 0B et ne peuvent contenir que 0 ou 1. Par exemple une constante nommée Min est déclarée comme ayant la valeur binaire 11110000 :

const Min = 0b11110000

2.2. Floating Point Constants

Les constantes à virgule flottante (Floating Point Constants) se compose de :

Entier décimal Point décimal Partie décimale fractionnaire

Microcontrôleurs

Iset de Nabeul

e ou E et l'ordre du signe

Dans l'exemple suivant, une constante nommée TEMP est déclarée comme ayant la valeur fractionnelle 37.50 :

const TEMP = 37.50 ou const TEMP = 3.750E1

2.3. Character Constants

Une constante de caractère (Character Constants) est un caractère renfermé dans des guillemets simples. Par exemple, une constante nommée First_Alpha est déclarée comme ayant la valeur du caractère ‘A’:

const First_Alpha = ‘A’;

2.4. String Constants

Les constantes de chaîne (String Constants) sont des séquences fixes de caractères stockées dans la mémoire flash du microcontrôleur. La chaîne doit commencer et se terminer par un guillemet « " ». Un exemple d’une constante de type chaîne est la suivante :

"Il s'agit d'un exemple de chaine constante"

2.5. Enumerated Constants

Les constantes énumérées (Enumerated Constants) sont de type entier et sont utilisées pour faire un programme plus facile à suivre. Dans l'exemple suivant, une constante nommée couleur stocke les noms de couleurs. Le premier élément de couleur a la valeur 0:

enum couleur {noir, marron, rouge, orange, jaune, vert, bleu, gris, white};

3. Séquences d'échappement

Les séquences d'échappement sont utilisées pour représenter les caractères ASCII non imprimables. Par exemple, la combinaison de caractères « \n » représente le caractère de nouvelle ligne.

4. Les Tableaux

Les tableaux sont utilisés pour stocker des éléments liés dans le même bloc de mémoire. Un tableau est déclaré en spécifiant son type, le nom, et le nombre d’éléments à stocker. Par exemple :

unsigned int Total [5] ;

Dans le langage de programmation mikroC, nous pouvons aussi déclarer des tableaux aux dimensions multiples. Tableaux unidimensionnels sont généralement appelés vecteurs, et des tableaux bidimensionnels sont appelés matrices. Un réseau bidimensionnel est déclaré en spécifiant le type de données de la matrice, le nom de tableau, et la taille de chaque dimension.

Dans l'exemple suivant, réseau bidimensionnel Q a deux rangées et deux colonnes, ses éléments diagonaux sont mis à 1, et de ses éléments non diagonaux sont remis à 0 :

unsigned char Q[2][2] = { {1,0}, {0,1} };

Microcontrôleurs

Iset de Nabeul

5. Les Pointeurs

5.1. Notion de pointeur

Les pointeurs (Pointers) sont une partie importante du langage mikroC, car ils occupent les adresses mémoire des autres variables. Les pointeurs sont déclarés de la même manière que d’autres variables, mais avec le caractère « * » en face du nom de variable.

Dans l'exemple suivant, un pointeur de caractère non signé du nom pnt est déclaré :

unsigned char *pnt;

Quand un nouveau pointeur est créé, son contenu est d'abord indéterminé et il ne tient pas l'adresse d'une variable. Nous pouvons attribuer l'adresse d'une variable à un pointeur à l'aide le « & » :

pnt = &Count;

Maintenant pnt affecte l'adresse de variable Count. La variable Count peut être affectée à une valeur en utilisant le caractère « * » en avant de son pointeur. Par exemple, le Count peut être attribuée à 10 à l'aide de son pointeur :

* pnt = 10; // Count = 10

c’est la même chose que

Count = 10; // Count = 10

ou, la valeur du Count peut être copié à la variable Cnt en utilisant son pointeur :

Cnt = *pnt; // Cnt = Count

5.2. Pointeurs et tableaux

Dans le langage mikroC, le nom d'un tableau est aussi un pointeur de tableau. Ainsi, pour le tableau :

unsigned int Total[10];

Le nom Total est également un pointeur de ce tableau, et il contient l'adresse du premier élément de la matrice. Ainsi, les deux énoncés suivants sont égaux :

Total[2] = 0;

et

*(Total + 2) = 0;

6. Les Structures

Une structure peut être utilisée pour recueillir des éléments connexes, qui sont ensuite traités comme un seul objet. Contrairement à un tableau, une structure peut contenir un mélange de types de données. Par exemple, une structure permet de stocker les données personnelles (nom, prénom, âge, date de naissance, etc.) d'un étudiant.

Une structure est créée en utilisant le mot-clé struct, suivi d'une structure de nom et d’une liste des déclarations de membre. Éventuellement, des variables de même type que la structure peuvent déclarer à l'extrémité de la structure.

L'exemple suivant déclare une structure nommée Personne :

Microcontrôleurs

Iset de Nabeul

struct Personne

{

 

unsigned char nom[20];

unsigned char prenom[20];

unsigned char nationalite[20];

unsigned char age;

}

Nous pouvons attribuer des valeurs aux élements d'une structure en spécifiant le nom de la structure, suivi d'un point «.» et le nom de l'élément.

III. OPERATEURS ET EXPRESSIONS EN MIKROC

Les opérateurs sont appliqués aux variables et d'autres objets dans les expressions pour assurer certaines conditions ou des calculs.

Une expression est un objet syntaxique obtenu en assemblant des constantes, des variables et des opérateurs.

1. Opérateur d’affectation

L’opérateur la plus importante dans un langage de programmation est celle qui consiste à donner une valeur à une variable. Cette opération est désignée par le symbole « = ».

2. Les opérateurs arithmétiques

Opérateur

Nom

Notation

+

addition

x

+ y

-

soustraction

x

- y

*

multiplication

x

* y

/

division

 

x/y

%

modulo

x%y

Les opérateurs +, -, *, fonctionnent comme en arithmétique. Par contre, l’opérateur / (division) se comporte de manière différente selon que les opérandes sont des entiers ou des nombres flottants.

3. Autres opérateurs unaires d’affectation

Opérateur

Equivalent

Notation

++

x

= x + 1

x++ ou ++x

--

x

= x - 1

x-- ou --x

Microcontrôleurs

Iset de Nabeul

4. Les autres opérateurs binaires d’affectation

Opérateur

Equivalent

Notation

+=

x

= x + y

x

+= y

-=

x

= x - y

x

-= y

*=

x

= x * y

x

*= y

/=

x

= x / y

x

/= y

%=

x

= x % y

x

%= y

=

 

x = x y

 

x = y

<<=

x = x << y

x <<= y

&=

x

= x & y

x

&= y

|=

x

= x | y

x

|= y

^=

x

= x ^ y

x

^= y

5. Les opérateurs de comparaison

Opérateur

Nom

Notation

==

test d’égalité

x

== y

!=

test de non égalité

x

!= y

<=

test inférieur ou égal

x

<= y

>=

test supérieur ou égal

x

>= y

<

test inférieur strict

x

< y

>

test supérieur strict

x

> y

En mikroC, le résultat d’une comparaison est 1 (!= 0) ou 0 selon que cette comparaison est vraie ou fausse. Il n’existe pas de type booléen en mikroC : la valeur entière 0 sera considérée comme équivalente à la valeur faux et toute valeur différente de 0 équivalente à la valeur vraie.

6. Les opérateurs logiques

Une variable booléenne est une variable pouvant prendre la valeur vrai ou faux. La valeur d’une expression booléenne est, comme le résultat des comparaisons, une valeur entière.

Microcontrôleurs

Iset de Nabeul

Opérateur

Nom

Notation

&&

ET

x && y

||

OU

x

|| y

!(unaire)

NON

 

!x

7. Les opérateurs de manipulation de bits

Opérateur

Nom

Notation

&

ET bit à bit

x & y

|

OU bit à bit

x

| y

^

OU exclusif bit à bit

x

^ y

! (unaire)

NON bit à bit

 

! x

>>

décalage à droite

>> x

<<

décalage à gauche

<< x

8. Opérateur de dimension

Cet opérateur donne l’occupation mémoire (en octets) d’une variable ou d’un type de donné.

Opérateur

Equivalent

Notation

sizeof

opérateur de dimension

sizeof (e)

Exemple :

La valeur de l’expression sizeof(c) est 1 si c est une variable de type char.

IV. LES STRUCTURES DE CONTROLE

Les instructions sont normalement exécutées séquentiellement à partir du début à la fin d’un programme. Nous pouvons utiliser des instructions de contrôle pour modifier ce flux séquentiel normal dans un programme C. Les instructions de contrôle suivantes sont disponibles dans les programmes en mikroC :

De sélection if et switch D'itération ou bouclage for Modifications inconditionnels d’exécution Instructions de sélection if et switch

Microcontrôleurs

Iset de Nabeul

1. Instruction if

Cette instruction conditionnelle permet d’exécuter des instructions de manière sélective en fonction du résultat d’un test. La déclaration du format général de l’instruction if est la suivante :

if (expression)

instruction1

else

instruction2

Si l’expression est vraie, l’instruction1 s’exécute sinon, dans le deuxième cas, c’est l’istruction2 qui s’exécute.

Exemple:

if (x> 0 && x <10)

{

 

Total + = Sum;

Sum++;

}

else

{

 

Total = 0;

Sum = 0;

}

2. Instruction switch

L'instruction switch est utilisée pour assurer la commutation entre des différentes déclarations si un certain nombre des conditions est vrai ou faux.

La syntaxe de commutation :

switch (condition)

{

 

case condition1: Instructions1; break;

case condition2: Instructions2; break;

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

case conditionN: InstructionsN; break;

default: InstructionsN+1;

}

Microcontrôleurs

Iset de Nabeul

Exemple:

switch (Cnt)

{

case 1: A=1; break;

case 10: B=10; break ;

case 100: C=100; break;

default: D=1;

}

3. Instructions d'itération for, while, do, goto, continue et break

Les instructions d'itération nous permettent d'effectuer des boucles dans un programme, où une partie d'un code doit être répétée un certain nombre de fois. Dans mikroC, l'itération peut être effectuée de quatre façons :

Utilisation de for Utilisation de while Utilisation de do Utilisation de goto, continue et break

3.1. Instruction for

La syntaxe d'une instruction for est :

for (expression initiale; expression de condition; expression increment)

{

}

Exemple:

Instructions;

for (i = 0; i < 3; i++)

{

 

for (j = 0; j < 4; j++)

Sum = Sum + M[i][j];

}

3.2. Instruction while

La syntaxe d'une instruction while est la suivante :

while (condition)

{

Instructions;

}

Microcontrôleurs

Iset de Nabeul

Ici, les instructions sont exécutées jusqu'à ce que la condition devienne fausse, ou les instructions sont exécutées de façon répétée aussi longtemps que la condition est vraie. Si la condition est fausse à l'entrée de la boucle, la boucle ne sera pas exécutée et le programme continue de l'extrémité de la boucle while. Il est important que la condition change à l’intérieur de la boucle, sinon une boucle sans fin sera formée.

Le code suivant montre comment mettre en place une boucle d'exécuter 10 fois :

// Une boucle qui s'exécute 10 fois

k = 0;

while (k <10)

{

Instructions;

k++;

}

Une boucle sans fin peut également être formée par réglage de la condition qui doit être toujours vrai

:

// Une boucle sans fin

while (k == k)

{

Instructions;

}

Il est possible d'avoir une déclaration while sans corps. Une telle déclaration est utile, pour par exemple, si nous attendons un port d'entrée pour changer sa valeur.

Voici un exemple où le programme va attendre aussi longtemps que le bit 0 de PORTB (PORTB.0) est au niveau logique 0. Le programme se poursuivra jusqu’au changement à la valeur logique 1 sur les broches du port.

while (PORTB.F0 == 0); // Attendre jusqu'a ce que PORTB.0 devient un

ou

while (PORTB.F0);

3.3. Instruction do

Une déclaration do est similaire à une déclaration while sauf ce que la boucle s’exécute jusqu'à ce que la condition devienne fausse, ou, la boucle s'exécute tant que la condition est vraie. La condition est testée à la fin de la boucle. La syntaxe d'une déclaration do est la suivante :

do

{

Instructions;

Microcontrôleurs

Iset de Nabeul

} while (condition);

La première itération est toujours effectuée si la condition est vraie ou fausse. Il s'agit de la principale différence entre une déclaration while et une déclaration do.

Le code suivant montre comment mettre en place une boucle d'exécuter 10 fois en utilisant la déclaration do :

/*Exécution 10 fois */

k = 0;

do

{

 

Instructions;

k++;

}

while (k <10);

La boucle commence avec k = 0, et la valeur de k est incrémenté à l’intérieur de la boucle après chaque itération. À la fin de boucle k est testé, et si k n'est pas inférieur à 10, la boucle termine.

Une boucle sans fin peut également être créée si la condition est réglée pour être vrai tout le temps:

/* Une boucle sans fin */

do

{

Instructions;

} while (k == k);

3.4. Instructions goto, continue et break

Une instruction goto peut être utilisée pour modifier le flux normal de contrôle dans un programme. Elle provoque le programme à sauter à une étiquette spécifiée.

Une étiquette peut être n'importe quel jeu de caractères alphanumériques commençant par une lettre et se terminant par le caractère « : ».

L’instruction goto peut être utilisée conjointement avec une instruction if.

L'exemple suivant montre comment mettre en place une boucle pour l’exécuter 10 fois en utilisant goto et if :

/ * Exécution 10 fois * /

k = 0;

Boucle:

Instructions;

k++;

if (k < 10) goto Boucle;

Microcontrôleurs

Iset de Nabeul

La boucle commence par l’étiquette Boucle et la variable k = 0. Les instructions sont exécutées à l'intérieur de la boucle et k est incrémenté de 1. La valeur de k est alors comparée à 10 et le programme retourne à l’étiquette Boucle si k <10. Ainsi, la boucle est exécutée 10 fois jusqu'à ce que la condition à la fin devienne fausse. À la fin de la boucle la valeur de k est 10.

Les instructions continue et break peuvent être utilisés à l'intérieur d’itérations pour modifier le flux de commande. Une instruction continue est généralement utilisée avec une instruction if et provoque le saut de la boucle d’itération.

Voici un exemple qui calcule la somme des nombres de 1 à 10, sauf le nombre 5 :

/* Calculer la somme des nombres 1, 2, 3, 4, 6, 7, 8, 9, 10 */

Sum = 0;

i = 1;

for (i = 1; i <= 10; i++)

{

 

if (i == 5) continue;

// Passer le numéro 5

Sum = Sum + i;

}

De même, une instruction break peut être utilisé pour mettre fin à une boucle à l'intérieur de la boucle.

Dans l'exemple suivant, la somme des nombres de 1 à 5 est calculée, même si les paramètres de la boucle sont mis à parcourir 10 fois :

/ * Calculer la somme des nombres 1, 2, 3, 4, 5 * /

Sum = 0;

i = 1;

for (i = 1; i <= 10; i++)

{

if (i > 5) break; // Stopper la boucle si i > 5

}

Microcontrôleurs

Iset de Nabeul

Leçon N°5

AFFICHAGE DES DONNEES

I- INTRODUCTION

La conception des systèmes à microcontrôleurs implique parfois l’affichage des données à l’utilisateur. A cet effet, on peut utiliser des afficheurs 7 segments, l’afficheur de caractère à cristaux liquides LCD et l’afficheur LCD à écran graphique. Dans ce chapitre, on étudie et on illustre ces dispositifs par des exemples.

II- AFFICHAGE 7 SEGMENTS

Un afficheur 7 segments est un dispositif qui permet de visualiser un nombre limité de caractères essentiellement numériques, mais il est possible de visualiser quelques caractères comme : A, B, C, D, E ou F. L'afficheur 7 segments est un ensemble de LED, disposées de sorte qu’on visualise les caractères en activant les segments convenables. A chaque segment, on attribue une lettre de "a" jusqu’à "g". La description et l'apparence physique de ces afficheurs sont illustrées sur les images suivantes :

ces afficheurs sont illustrées sur les images suivantes : Figure 1 Les afficheurs 7 segments sont

Figure 1

Les afficheurs 7 segments sont fabriqués en deux formats ; anode commune et cathode commune. Ils existent également dans un format dynamique. Ces derniers utilisent deux chiffres ou plus dans un seul boitier reliant tous les segments en parallèle, mais avec des bornes communes séparées. Les figures suivantes montrent des afficheurs 7 segments dans leur forme dynamique :

Les figures suivantes montrent des afficheurs 7 segments dans leur forme dynamique : Figure 2 Mr

Figure 2

Microcontrôleurs

Iset de Nabeul

L’entrée DP, qu’on peut voir sur la figure ci-dessus, est le huitième segment. Il est mis en œuvre dans certains affichages et correspond à la virgule, il est utilisé si la demande l'exige.

1. Contrôle de l'affichage à 7 segments

Pour effectuer le premier exemple avec cet afficheur, on doit savoir comment réaliser l’affectation des broches du PIC. A chaque segment de l'afficheur, on doit relier une broche du PIC. Pour faire une conception optimale, on peut attribuer les broches en ordre consécutif d’un port, par exemple le segment "a" est relié à la broche RB0, le "b" à la broche RB1, et ainsi de suite, jusqu'au segment "g" à la broche RB6. Cependant, le développeur peut faire l’affectation des broches d’une manière arbitraire.

Il est important de connaitre un outil contenu dans le logiciel MikroC PRO qui permet d’éditer les digits de l’afficheur. Pour cela, on utilise Tools dans la barre de menu, et on choisit l’outil Seven Segment Editor.

Avec cette action, ressort une nouvelle fenêtre où on peut éditer d’une manière simple les segments de l'afficheur à 7 segments.

simple les segments de l'afficheur à 7 segments. Figure 3 L’utilisation de cet outil signifie que

Figure 3

L’utilisation de cet outil signifie que toutes les broches de l’afficheur sont attribuées au même port, et dans un ordre consécutif comme on a vu ci-dessus. Pour la visualisation des chiffres dans l’afficheur, on doit organiser les informations de ces digits dans un ordre consécutif, dans le cas de cet exemple de 0 à 9. A cette fin, la forme la plus simple est l'utilisation d'un tableau de données contenant les codes des 10 chiffres. Dans l'exemple suivant, on déclare un tableau constant avec les codes des 10 chiffres, et on utilise un afficheur à cathode commune.

const unsigned short DIGITS[] =

{

0x3F, //Code du digit 0

0x06, // Code du digit 1

0x5B, // Code du digit 2

Microcontrôleurs

Iset de Nabeul

0x4F, // Code du digit 3

0x66, // Code du digit 4

0x6D, // Code du digit 5

0x7D, // Code du digit 6

0x07, // Code du digit 7

0x7F, // Code du digit 8

0x6F, // Code du digit 9

};

Pour afficher les chiffres dans l'afficheur à 7 segments, cet exemple va utiliser le port B du PIC 16F84A. La visualisation des numéros est contrôlée par une routine, qui change le chiffre après une temporisation réalisée par une fonction delay_ms, cette fonction qui est prédéfinie dans les bibliothèques du compilateur. Cette fonction a pour paramètre d’entrée un entier représentant le temps en millisecondes, pendant lequel le PIC effectue un retard, de la même manière on peut utiliser la fonction delay_us, qui est identique à delay_ms mais en microsecondes.

Alors, le code source du PIC pour cet exemple est le suivant :

const unsigned short DIGITS[] =

{

 

0x3F, //Code du digit 0

0x06, //Code du digit 1

0x5B, //Code du digit 2

0x4F, //Code du digit 3

0x66, //Code du digit 4

0x6D, //Code du digit 5

0x7D, //Code du digit 6

0x07, //Code du digit 7

0x7F, //Code du digit 8

0x6F, //Code du digit 9

};

void main ( void )

{

unsigned short COMPTEUR=0;

TRISB = 0; // Configuration du port B en sortie

while (1)

//Boucle infinie

{

Microcontrôleurs

Iset de Nabeul

PORTB = DIGITS[COMPTEUR]; //Visualisation du chiffre correspondant

// à la valeur de la variable COMPTEUR.

COMPTEUR++; //Incrémentation la valeur de compteur.

delay_ms(1000); //Retard de 1 seconde.

}

}

L'étape suivante consiste à effectuer la simulation dans ISIS, pour cet effet, les dispositifs suivants sont découverts : 16F84A, RES, et 7SEG-COM-CATHODE. Pour la liaison entre le PIC et l'afficheur, on devrait utiliser les résistances de 330. Par la suite, on réalise le circuit suivant :

de 330 Ω . Par la suite, on réalise le circuit suivant : Figure 4 A

Figure 4

A l’exécution de la simulation, on doit voir sur l’afficheur un comptage des nombres de 0 à 9, avec une cadence d’une seconde entre chiffres et chiffre.

2. Contrôle de l'affichage dynamique 7 segments

La mise en œuvre des afficheurs dynamiques utilise la même théorie d'un seul afficheur. L’affichage dynamique consiste à afficher un seul chiffre à la fois. Par exemple, si on veut afficher quatre chiffres, on active l’afficheur des unités, ensuite on l’éteint et on active le chiffre des dizaines, puis on l'éteint et le chiffre des centaines est activé, enfin on fait la même chose avec l’afficheur des milliers.

Ce processus doit être effectué à une vitesse de manière à tromper l'œil humain, de sorte à voir comme si tous les chiffres ont été actifs. Cette gestion d’affichage minimise les connexions électriques et la consommation d'énergie, car en réalité un seul afficheur est actif à la fois.

Vue la perception de l’œil humain, les modifications doivent être de 25Hz ou plus. Donc, tous les chiffres doivent être montrés pendant une durée égale à l'inverse de 25Hz qui est 40ms.

Microcontrôleurs

Iset de Nabeul

Pour cet exemple, on utilise 4 afficheurs donc le temps d’affichage de chaque chiffre doit être un quart de la période qui est 10ms. Le moyen le plus efficace pour afficher les chiffres est d’utiliser une fonction.

On réalise la simulation sur ISIS avec les dispositifs suivants 16F84A, RES, 7SEG-MPX4-CC,7404. Le circuit est le suivant :

16F84A, RES, 7SEG-MPX4-CC,7404. Le circuit est le suivant : Figure 5 Pour des raisons pratiques, les

Figure 5

Pour des raisons pratiques, les inverseurs 7404 peuvent être remplacés par un réseau de transistors, comme on le voit dans l'image ci-dessous :

transistors, comme on le voit dans l'image ci-dessous : Figure 6 Lorsque la simulation est en

Figure 6

Lorsque la simulation est en marche, ce circuit devrait afficher un nombre de 0 à 9999 avec une cadence de 500ms entre chaque incrément.

Avec 4 digits, il est possible d’afficher un nombre de 0 à 9999, à ce nombre on associe une variable de type entier. Pour voir chaque chiffre séparément, il est nécessaire de calculer chacun des chiffres, par exemple pour déduire le chiffre des milliers on divise le nombre par mille, puis soustraire les

Microcontrôleurs

Iset de Nabeul

milliers du nombre entier, ce processus est répété jusqu'à atteindre les unités. L’activation des afficheurs doit se faire par un autre port, dans cet exemple elle est faite par le port A.

Pour comprendre ce processus, on observe et on analyse la fonction suivante :

// Déclaration des constantes pour l’afficheur.

const unsigned short DIGITS[] =

{

 

0x3F, //Code du digit 0

0x06, //Code du digit 1

0x5B, //Code du digit 2

0x4F, //Code du digit 3

0x66, //Code du digit 4

0x6D, //Code du digit 5

0x7D, //Code du digit 6

0x07, //Code du digit 7

0x7F, //Code du digit 8

0x6F, //Code du digit 9

};

//Fonction pour l’un affichage dynamique.

void Affichage( int Nombre )

{

unsigned short U; //Variable pour les unités.

unsigned short D; //Variable pour les dizaines.

unsigned short C; //Variable pour les centaines.

unsigned short M; //Variable pour les milliers.

M

= Nombre/1000; //Calcul des milliers.

C

= (Nombre-M*1000)/100; //Calcul des centaines.

D

= (Nombre-M*1000-C*100)/10; //Calcul des dizaines.

U

= (Nombre-M*1000-C*100-D*10); //Calcul des unités.

PORTB = DIGITS[U]; //Visualisation des unités.

PORTA.F0=1; //Activer le premier afficheur

delay_ms(10); //Retard de 10ms

PORTA=0; //Désactiver tous les afficheurs.

Microcontrôleurs

Iset de Nabeul

PORTB = DIGITS[D]; // Visualisation des dizaines. PORTA.F1=1; //Activer le second afficheur delay_ms(10); // Retard de 10ms PORTA=0; // Désactiver tous les afficheurs. PORTB = DIGITS[C]; //Visualisation des centaines. PORTA.F2=1; //Activer le troisième afficheur delay_ms(10); // Retard de 10ms PORTA=0; // Désactiver tous les afficheurs. PORTB = DIGITS[M]; //Visualisation des centaines. PORTA.F3=1; // Activer le troisième afficheur delay_ms(10); // Retard de 10ms PORTA=0; // Désactiver tous les afficheurs.

}

void main ( void )

{

unsigned short N=0; //Variable de comptage. int Nombre=0;

TRISB = 0; //Configurer le port B en sortie TRISA = 0; // Configurer le port A en sortie PORTA = 0; //Désactiver tous les afficheurs while( 1 ) //Boucle infinie

{

//Visualiser la valeur du Nombre. Affichage(Nombre); //cette fonction dure approximativement 40ms. //On compte 12 incrémentations de N pour faire une incrémentation //du Nombre approximativement chaque 500ms. N++; if( N==12 )

{

N=0; //Initialiser le compteur N. Nombre++; //Incrémentation de la valeur Nombre. if(Nombre==10000 ) //Test si Nombre vaut 10000

Microcontrôleurs

Iset de Nabeul

Nombre=0; //Initialisation à 0 si nombre = 10000.

}

}

}

III. AFFICHEURS LCD

Les afficheurs de caractères à cristaux liquides LCD sont des modules préfabriqués qui contiennent des pilotes inclus. Ces écrans disposent d'un bus de données et un bus de commande, pour la manipulation de ces appareils, le compilateur MikroC PRO dispose d'une bibliothèque prédéfinie pour contrôler les LCD. L'apparence physique des LCD et celle dans ISIS sont présentées dans la figure suivante :

celle dans ISIS sont présentées dans la figure suivante : Figure 7 Les afficheurs LCD, permettent

Figure 7

Les afficheurs LCD, permettent de visualiser les caractères figurant dans le code ASCII. En plus du code ASCII, LCD affiche jusqu'à 8 caractères conçus par le développeur. Une autre caractéristique fondamentale des afficheurs LCD, tenant physiquement sur 8 bits, est la possibilité de configurer les connexions avec seulement 4 bits. La connexion 8-bit implique un plus grand nombre de fils à utiliser, pour une meilleure vitesse de travail, par conséquent les connexions de 4 bits réduits le nombre de fils, mais diminue la vitesse. La bibliothèque prédéfinie dans MikroC PRO fonctionne avec une configuration de 4 bits.

Pour voir la bibliothèque prédéfinie pour ce dispositif et d'autres, contenues dans MikroC PRO, on choisit View dans la barre de menu, et on appuie sur l’un onglet : Library Manager. Lorsqu’on appuie sur cet onglet un menu montrant les différentes bibliothèques qu’on peut utiliser avec les PIC.

Dans ce nouveau menu, on identifie la bibliothèque Lcd, par la suite on peut appuyer sur une des fonctions contenues dans la bibliothèque pour voir l'aide. L'aspect visuel de cet outil est illustré dans la figure suivante :

Microcontrôleurs

Iset de Nabeul

Microcontrôleurs Iset de Nabeul Figure 8 L'implémentation de l'afficheur LCD, requiert l'utilisation des

Figure 8

L'implémentation de l'afficheur LCD, requiert l'utilisation des instructions et des commandes séquentielles pour la configuration et l’utilisation de l’afficheur, cependant, la bibliothèque de MikroC PRO minimise ce travail, car elle se charge de faire tous ces réglages, ce qui rend beaucoup plus facile le travail développeur.

Comme première étape pour l'utilisation du LCD, il est nécessaire de définir les broches de connexion, puis l’exécution de la fonction d’initialisation du LCD : Lcd_Init(). La définition des broches de connexion est assurée par le développeur d’une façon arbitraire selon son choix. Pour répondre à cet objectif, on utilise la déclaration suivante des constantes :

//Broches de sortie du LCD

sbit LCD_RS at RB4_bit;

sbit LCD_EN at RB5_bit;

sbit LCD_D7 at RB3_bit;

sbit LCD_D6 at RB2_bit;

sbit LCD_D5 at RB1_bit;

Microcontrôleurs

Iset de Nabeul

sbit LCD_D4 at RB0_bit;

//Bits de configuration TRIS

sbit LCD_RS_Direction at TRISB4_bit;

sbit LCD_EN_Direction at TRISB5_bit;

sbit LCD_D7_Direction at TRISB3_bit;

sbit LCD_D6_Direction at TRISB2_bit;

sbit LCD_D5_Direction at TRISB1_bit;

sbit LCD_D4_Direction at TRISB0_bit;

Pour changer les broches, il suffit de changer les noms des sorties du port utilisé dans l'exemple précédent. Comme on peut le voir dans la présentation ci-dessus seulement 6 broches sont nécessaires pour faire fonctionner le LCD, avec 4 bits de données et 2 bits de contrôle.

A la fin, on doit appeler la fonction d’initialisation dans la fonction main après configuration des ports.

La fonction main doit être comme suit :

void main( void )

{

 

Lcd_Init(); //Initialisation du LCD.

while(1) //Boucle infinie.

{

}

}

Après l’édition du code ci-dessus, l'afficheur LCD est initialisé et devrait être prêt à commencer l’affichage des caractères, se positionnant dans la première ligne et la première colonne, montrant le curseur clignotant.

Les LCD sont fabriqués dans différentes formes et couleurs, ils sont disponibles avec des écrans verts, bleu et jaune, avec des distributions de caractères sous forme de matrice comme les LCD 2 lignes, 16 colonnes. Ceux-ci sont connus comme 2x16, de la même manière on peut trouver des 1x16, 2x16, 2x8, 2x20, 4x20, entre autres. Pour les exemples de ce chapitre, on utilisera l'afficheur

4x20.

Pour démarrer la simulation de l'afficheur LCD, on cherche le dispositif de LM044L, et PIC 16F84A dans le simulateur ISIS. La référence LM044L dans ISIS correspond à un LCD de 4x20. Enfin, on effectue les connexions comme indiqué dans le circuit suivant :

Microcontrôleurs

Iset de Nabeul

Microcontrôleurs Iset de Nabeul Figure 9 L’afficheur LCD a une broche nommée VEE, cette broche fonctionne

Figure 9

L’afficheur LCD a une broche nommée VEE, cette broche fonctionne comme contrôleur du contraste de l'écran, mais dans la simulation, elle n'a pas d'effet. Cette broche peut être reliée à la masse pour générer le contraste le plus élevé, certains grands écrans nécessitent une tension négative externe pour contrôler le contraste. Pour des raisons pratiques, le contraste peut être ajusté par l'intermédiaire d'un potentiomètre, comme indiqué dans le circuit suivant :

potentiomètre, comme indiqué dans le circuit suivant : Figure 10 La prochaine étape consiste à afficher

Figure 10

La prochaine étape consiste à afficher à l'écran des informations. A cet effet, on peut utiliser quatre fonctions. Deux de ces fonctions permettent d'afficher des caractères, et les deux autres des chaînes de caractères.

Microcontrôleurs

Iset de Nabeul

Pour afficher les caractères, on peut procéder de deux façons, la première affiche simplement les caractères dans l'ordre consécutif pris par l'afficheur et la seconde fonction imprime les caractères dans la ligne et la colonne désignées par le développeur.

1. Fonctions d’affichage des caractères

La première fonction d’affichage des caractères est Lcd_Chr_Cp (char out_char) ; lorsque cette fonction est invoquée affiche sur l'écran le caractère qui correspond au code ASCII, qui est le paramètre d'entrée out_char. Avec l'impression d'un nouvel caractère sur l’afficheur LCD, le curseur se déplace automatiquement d'une position. Pour voir le fonctionnement de cette fonction, on observe l'exemple suivant :

void main( void )

{

 

Lcd_Init(); //Initialisation du LCD.

Lcd_Chr_Cp(‘S’); //cette fonction affiche lettre à lettre le mot “Salut”.

Lcd_Chr_Cp(‘a’);

Lcd_Chr_Cp(‘l’);

Lcd_Chr_Cp(‘u’);

Lcd_Chr_Cp(‘t’);

while(1) //Boucle infinie.

{

}

}

Après l'exécution de la simulation, on devrait observer ce qui suit sur l'afficheur LCD :

on devrait observer ce qui suit sur l'afficheur LCD : Figure 11 Pour l'affichage des caractères

Figure 11

Pour l'affichage des caractères au moyen des cordonnées ligne, colonne, la fonction mise en œuvre :

Lcd_Chr(char row, char column, char out_char); cette fonction imprime le caractère out_char, dans la colonne column et la ligne row. Dans l'exemple ci-dessous, on peut voir comment utiliser cette fonction :

Microcontrôleurs

Iset de Nabeul

void main( void )

{

 

Lcd_Init(); //Initialisation du LCD

Lcd_Chr_Cp(‘S’); //Ces fonctions impriment lettre à lettre le mot “Salut”.

Lcd_Chr_Cp(‘a’);

Lcd_Chr_Cp(‘l’);

Lcd_Chr_Cp(‘u’);

Lcd_Chr_Cp(‘t’);

Lcd_Chr( 1, 6, ‘1’); //Imprime le caractère 1, dans la ligne 1, colonne 6

Lcd_Chr( 2, 7, ‘2’); // Imprime le caractère 2, dans la ligne 2, colonne 7

Lcd_Chr( 3, 8, ‘3’); // Imprime le caractère 3, dans la ligne 3, colonne 8

Lcd_Chr( 4, 9, ‘4’); // Imprime le caractère 4, dans la ligne 4, colonne 9

while(1) //Boucle infinie.

{

}

}

Après l'exécution de la simulation, on devrait observer ce qui suit sur l'afficheur LCD :

on devrait observer ce qui suit sur l'afficheur LCD : Figure 12 2. Fonctions d'affichage des

Figure 12

2. Fonctions d'affichage des chaînes de caractères

L'utilisation de chaînes est similaire aux deux fonctions précédentes, pour cela on peut afficher des chaines de caractères à un point arbitraire à l'aide des coordonnées ligne et colonne. Pour imprimer une chaîne de caractères à la position courante du curseur, on utilise la fonction suivante :

Lcd_Out_Cp (char * text) ; elle a un paramètre d'entrée unique qui est un pointeur vers la chaîne. Pour voir comment utiliser cette fonction, on observe l'exemple suivant :

void main( void )

Microcontrôleurs

Iset de Nabeul

{

 

Lcd_Init(); //Initialisation du LCD.

Lcd_Out_Cp(“salut tout le Monde”);

while(1) //Boucle infinie.

{

}

}

La mise en œuvre de cette fonction peut être faite avec des chaînes de caractères constantes ou variables, des chaines constantes sont indiquées par des guillemets au début et à la fin du texte, par exemple "Salut tout le Monde ", la forme variable est déclarée : char texte [20] = "Salut tout le Monde ". Après avoir exécuté la simulation, on a comme montré dans la figure suivante :

la simulation, on a comme montré dans la figure suivante : Figure 13 Pour imprimer une

Figure 13

Pour imprimer une chaîne de caractères avec une coordonnée comme point de départ, on implémente la fonction : Lcd_Out(char row, char column, char *text);. Cette fonction est similaire à la précédente, à la différence qu’on inclut les données row et column, qui font référence respectivement à la ligne et la colonne. Pour bien comprendre le fonctionnement de cette fonction d'observe et on analyse l'exemple suivant :

void main( void )

{

 

Lcd_Init(); //Initialisation du LCD.

Lcd_Out( 1, 1, “Ligne 1, Colonne 1” );

Lcd_Out( 2, 2, “Ligne 2, Colonne 2” );

while(1) //Boucle infinie.

{

}

}

Après la compilation et la simulation de cet exemple, on devrait observer sur l'écran LCD comme suit:

Microcontrôleurs

Iset de Nabeul

Microcontrôleurs Iset de Nabeul Figure 14 3. Affichage des valeurs numériques La visualisation des valeurs numériques

Figure 14

3. Affichage des valeurs numériques

La visualisation des valeurs numériques est indispensable dans de nombreux développements. Par exemple, lorsqu’on souhaite afficher l'état d'une variable, ou un capteur tel que : température, humidité, la pression, etc.

Pour atteindre cet objectif, on peut recourir aux fonctions de conversion prédéfinies par le compilateur. Pour cela, on peut utiliser la bibliothèque : Conversions, qui contient des fonctions qui convertissent une valeur numérique en une chaîne de caractères.

Si on veut afficher une valeur de type entier, on utilise la fonction : IntToStr(int input, char *output); cette fonction a deux paramètres d'entrée sont: input, qui est une valeur entière à afficher, et output, qui est un pointeur sur une chaîne où on veut écrire la forme texte de la valeur intput. Pour comprendre ce type de conversion, on observe et on analyse l'exemple suivant :

void main( void )

{

 

int ENTIER=123; //Déclaration d’une variable entière avec valeur initiale 123.

char Text[20]; //Chaine de caractères pour l’affichage des données.

Lcd_Init(); //Initialisation du LCD.

IntToStr( ENTIER,Text ); //Fonction de conversion.

Lcd_Out_Cp(Text); //Impression du texte dans l’écran LCD.

while(1) //Boucle infinie.

{

}

}

L’impression des nombres entiers en chaîne de caractères avec cette fonction, réserve toujours un champ fixe de 7 caractères, c'est à dire si le nombre est inférieur à 7 chiffres le reste du texte est complété par des espaces vides. Après compilation du programme et simulation sur ISIS, on a un résultat comme dans la figure suivante :

Microcontrôleurs

Iset de Nabeul

Microcontrôleurs Iset de Nabeul Figure 15 L’impression des nombres décimaux (avec virgule) peut être fait avec

Figure 15

L’impression des nombres décimaux (avec virgule) peut être fait avec la fonction : FloatToStr (float fnum, char *str);. La philosophie de fonctionnement de cette fonction est identique à la précédente, qui fait des conversions d'entiers. Pour réaliser l'exemple suivant, on doit modifier la référence du microcontrôleur, cela est dû à la capacité de mémoire du PIC 16F84A, qui n'est pas suffisante pour les exercices suivants.

void main( void )

{

 

int ENTIER=123; //Déclaration d’une variable entière avec la valeur initiale 123.

float DECIMAL=12.76543; //Déclaration d’une variable avec point décimal

//initialisation à 12,76543.

char Text[20]; // Chaine de caractères pour l’affichage des données.

Lcd_Init(); //Initialisation du LCD.

IntToStr( ENTIER,Text ); //Fonction de conversion entière .

Lcd_Out(1,1,Text); //Impression du texte en sur l’écran LCD.

FloatToStr( DECIMAL,Text ); //Fonction de conversion décimale.

Lcd_Out(2,1,Text); // Impression du texte en sur l’écran LCD.

while(1) //Boucle infinie.

{

}

}

Après la simulation, on a le résultat sur la figure suivante :

Microcontrôleurs

Iset de Nabeul

Microcontrôleurs Iset de Nabeul Figure 16 Le même processus peut être suivi pour autres types de

Figure 16

Le même processus peut être suivi pour autres types de variables telles que : short avec la fonction :

ShortToStr(short input, char *output);

Les variables long avec la fonction : LongToStr(long input, char *output);

Des variables unsigned short avec la fonction : ByteToStr(unsigned short input, char *output);

Variables unsigned long avec la fonction : LongWordToStr(unsigned long input, char *output);

Les variables unsigned int avec la fonction : WordToStr(unsigned int input, char *output);

Microcontrôleurs

Iset de Nabeul

Leçon N°6

SYSTEMES D’ENTREE DES DONNEES

I- INTRODUCTION

L'interaction de l’utilisateur avec les systèmes à microcontrôleurs nécessite des systèmes d’entrée de données. Pour ce faire, on utilise des périphériques tels que des interrupteurs, des claviers et même des claviers PS2 utilisés par les ordinateurs de bureau. Ce chapitre se concentre sur l'étude des boutons, interrupteurs et les Dip-Switch.

II- UTILISATION DES BOUTONS

La mise en œuvre des boutons est l'un des alternatives les plus populaires dans les interfaces avec les utilisateurs. Les boutons sont simples à utiliser, et ils ont un coût, de mise en œuvre, économique. Le bouton-poussoir peut être normalement ouvert ou normalement fermé. L’implémentation de ces dispositifs est sujette aux effets de rebonds ou de bruit, quand ils changent d'état. Compte tenu du traitement rapide des microcontrôleurs, ces effets de bruit, font que le PIC peut détecter des changements et des états logiques indéfinis. Pour comprendre ce concept, on regarde le graphique ci- dessous qui montre le comportement de ce bruit :

ci- dessous qui montre le comportement de ce bruit : Figure 1 Lorsque des changements de

Figure 1

Lorsque des changements de tension traversent la zone indéfinie, génèrent des rebondissements de l’état haut à l’état bas et vice versa. Le microcontrôleur les détecte comme des impulsions. Pour éviter l'effet du bruit ou des rebonds, on devrait faire une temporisation en attendant la stabilisation de l'état du signal. La durée moyenne d'un rebond est de 1 à 5 millisecondes, indique qu'un retard doit être effectué supérieur à ce temps pour attendre la stabilisation. Un retard convenable à cet effet est supérieur ou égal à 10 millisecondes. Ce délai devrait s'appliquer après la détection du premier changement sur le bouton.

Pour le traitement des boutons et l’élimination des rebondissements, le compilateur MikroC PRO dispose d’une bibliothèque Button, qui peut être trouvé dans la palette ou l'onglet des bibliothèques. Cette bibliothèque contient la seule fonction : unsigned short Button (unsigned short *port, unsigned short pin, unsigned short time, unsigned short active_state) ; port est le port où le bouton est connecté, pin est le bit du port où le bouton est connecté, time est le temps d'attente en millisecondes du bruit et active_state est l'état logique pour lequel on souhaite l'activation du bouton. La fonction retourne 0 si le bouton n'est pas actif et 255 si elle est active. Installation des boutons peut être effectuée de deux manières, actif à l’état haut ou actif à l’état bas, la figure suivante montre comment configurer les deux possibilités :

Microcontrôleurs

Iset de Nabeul

Microcontrôleurs Iset de Nabeul Figure 2 La décision d'utiliser l'activation à l’état haut ou bas, dépend

Figure 2

La décision d'utiliser l'activation à l’état haut ou bas, dépend du développeur qui doit analyser la manière la plus simple au moment de la conception. On rappelle que dans tous les cas l'activation finale peut être inversée avec la fonction de la bibliothèque. Pour analyser et étudier l'utilisation de cette bibliothèque, on crée un nouveau projet avec les composants : PIC 16F877A, BUTTON, RES, et LED-RED. Le circuit correspondant dans ISIS est le suivant :