Académique Documents
Professionnel Documents
Culture Documents
Support - C - 19-20 - ORIG - Impr - PPT
Support - C - 19-20 - ORIG - Impr - PPT
Lahoussine BOUHOUCH
l.bouhouch@uiz.ac.ma 2019-
20/09/2019
Plan
PARTIE 1
• Systèmes de numération
• Introduction aux systèmes à processeurs
• Microsystèmes
• Microsystèmes simplifiés
• Modèle générique des microprocesseurs
• Notion de microcontrôleur
• Microcontrôleurs PIC
• Architectures des PIC
• Différentes familles de PIC
• Fonctions intégrées aux PIC
• Référence des µC PIC
• Architectures du PIC16F84
• Horloges, Mémoires, Registres du PIC16F84
l.bouhouch@uiz.ac.ma 2019- 2
Plan
PARTIE 2
• Interruptions
• Interfaces graphiques de MikroC for PIC
• Eléments de programmation MikroC for PIC
• Fonctions intégrées à MikroC for PIC
• Bibliothèques intégrées à MikroC for PIC
• Conversion Analogique Numérique (ADC)
• Contrôleur LCD
• Module USART (UART)
• Modules CCP (PWM)
• Timer & Interruptions
• Généralités sur les Bus d’acquisition et de transmission de données
• Bus RS232 (USART ou UART ou Port Série)
• Bus CAN
• Bus I2C
• Aperçu sur le module Arduino
l.bouhouch@uiz.ac.ma 2019- 3
Systèmes de numération
• Rappels :
Nombres Binaires Signés sur 8 Bits
+7 0000 0111
C2 +6 0000 0110
+5 0000 0101
Avantage du C2
+4 0000 0100
par rapport aux MSB = 0 pour les positifs
autres +3 0000 0011
+2 0000 0010
+1 0000 0001
+0 0000 0000
Un seul '0'
est représenté -0 -----
-1 1111 1111
-2 1111 1110
-3 1111 1101
-4 1111 1100
-5 1111 1011 MSB = 1 pour les négatifs
-6 1111 1010
-7 1111 1001
-8 1111 1000
l.bouhouch@uiz.ac.ma 2019- 4
Systèmes de numération
• Opérations en Binaire :
– Addition (Règle) :
0+0=0
0+1=1
1+0=1
1+1=0 avec
Retenue = 1
– Exemple : (12 + 07)10 = (19)10
= (0000 1100)2
+ (0000 0111)2
= (0001 0011)2 = (13)16
Remarque : Pour les nombres signés, si le MSB = 1 alors
le nombre est Négatif
l.bouhouch@uiz.ac.ma 2019- 5
Systèmes de numération
• Opérations en Binaire :
– Soustraction (Notion de Complément) :
• Complément à 1 "C1"
:
C1(0) = 1
C1(1) = 0
• Complément à 2 : "C2"
C2(x) = C1(x) + 1
– Soustraction (Règle) :
• X–Y X + C2(Y)
l.bouhouch@uiz.ac.ma 2019- 6
Systèmes de numération
• Opérations en Binaire :
– Soustraction (Exemple) :
(12 - 07)10 = (05)10 (0000 0111))2
= (0000 1100 + C2(0000 0111))2
= (0000 1100 -
l.bouhouch@uiz.ac.ma 2019- 8
Introduction aux systèmes à processeurs
• Familles de processeurs :
Famille Fonction
Microprocesseur Généraliste
Microcontrôleur Applications Embarquées
Processeur de Signal (DSP) Spécialisé Traitement du signal
ASIC Spécifique à une application
FPGA Laboratoire configurable par l’utilisateur
l.bouhouch@uiz.ac.ma 2019- 9
Introduction aux systèmes à processeurs
• Où trouve-t-on les processeurs ?
l.bouhouch@uiz.ac.ma 2019- 10
Microsystèmes
Modem Interfaces
Écran
Horloge
Informatique
Clavier
Souris
µP RAM
Imprimante
Mémoire de masse ROM
Informatique Industrielle
CNA Commande
Capteurs CAN
Bus CAN Commande
l.bouhouch@uiz.ac.ma 2019- 11
Microsystèmes
• Horloge
L'horloge marque le temps et toute l'activité du microprocesseur.
Le µp utilise l’horloge pour exécuter les tâches selon une séquence préétablie
programme
instruction
Cycle bus
Période d'horloge
Fréquence d'horloge, c’est la fréquence de l'horloge interne du µP, ce qui explique qu'on
l'appelle aussi parfois « Fréquence interne ».
Elle conditionne la rapidité à laquelle le processeur peut traiter les données.
l.bouhouch@uiz.ac.ma 2019- 12
Microsystèmes simplifié
Bus de contrôle Horloge
µP
(Interruption)
Bus d’adresses
16 bits
Coupleur
d’interface
Bus de Données
8 bits
ALU ou UAL
Registres de données
Registres d’adresse
Pointeurs de pile
l.bouhouch@uiz.ac.ma 2019- 14
Modèle générique des microprocesseurs
* Addition ;
* Soustraction ;
* Décalage ;
* ET logique ;
* OU logique ;
• …
l.bouhouch@uiz.ac.ma 2019- 15
Modèle générique des microprocesseurs
Exemple :
1 0 1 1 0 0 1 1 1 1 0 1 0 0 0 1 PC
Bus d’adresses
Mémoire
Instructions du programme
centrale
l.bouhouch@uiz.ac.ma 2019- 16
Modèle générique des microprocesseurs
Il contient des bits qui ont chacun une affectation bien particulière tel
que :
… … … … … … Z DC C STATUS
l.bouhouch@uiz.ac.ma 2019- 17
Notion de microcontrôleur
Structure générale
Bus adresses
décodage
Micro- Sorties
Périphériques
Processeur ROM RAM
(Interfaces) Entrées
Bus données
Horloge
l.bouhouch@uiz.ac.ma 2019- 18
Microcontrôleurs PIC
l.bouhouch@uiz.ac.ma 2019- 19
Architectures des PIC
l.bouhouch@uiz.ac.ma 2019- 21
Différentes familles de PIC
l.bouhouch@uiz.ac.ma 2019- 22
Fonctions intégrées aux PIC
l.bouhouch@uiz.ac.ma 2019- 23
Fonctions intégrées aux PIC
– Spécificités par µC :
• EEPROM (Mémoire reprogrammation) : Exemple PIC16C84
• 1 ou 2 Timer 16 bits
• ADC 8 ou 10 bits (Entrées Analogiques)
• DAC 8 bits
• Comparateur Analogique
• Tensions de référence
• CCP (Capture Compare PWM)
• ECCP (PWM à 4 canaux)
• Contrôleur de LCD
• Communications : I2C, SPI, USART, Bus CAN, USB, …
l.bouhouch@uiz.ac.ma 2019- 24
Référence des µC PIC
PIC16 F 84 - 4
Catégorles :
10, 12, 16, 17 ou 18
Fréquence Max
Type de Mémoire & d’Alimentation
F Flash 4,5 à 6V
C EEPROM ou EPROM 4,5 à 6V Référence à 2 à 4 chiffres
CR ROM 4,5 à 6V
LF Flash 2 à 6V
LC EEPROM ou EPROM 2,5 à 6V
LCR ROM 2,5 à 6V
l.bouhouch@uiz.ac.ma 2019- 25
Architectures du PIC16F84
• Introduction
– Le PIC16F84 de Microchip :
• Architecture Harvard.
• Famille Middle-Range (Instructions codées sur 14 bits).
• Type RISC :
– Jeu d 'instruction réduit : que 35 instructions, et
– Temps d'exécution réduit.
• Vitesse Typique 4 MHz.
• Données sur 8 bits.
• 13 Entrées - Sorties configurables individuellement.
l.bouhouch@uiz.ac.ma 2019- 26
Architectures du PIC16F84
• Architecture interne (Structure)
l.bouhouch@uiz.ac.ma 2019- 27
Architectures du PIC16F84
• Architecture externe
– Le microcontrôleur est réalisé en Technologie CMOS.
– Les signaux sont Compatibles TTL.
– Broches du PIC16F84 :
• Vss et Vdd alimentation :
– De 3 à 5,5 V.
• OSC1, OSC2 : signaux d’Horloge
– Circuit RC ou un Quartz.
• MCLR (Master CLear) : Reset ou Vpp.
• CLKIN peut être connectée à Horloge externe :
– 0 à 4 ou 20 MHz.
• RA0 ... RA4 :
– 5 Entrées/Sorties du Port A.
• RB0 ... RB7 :
– 8 E/S du port B.
• T0CKI : Entrée d’Horloge externe du Timer TMR0.
• INT : Entrée d’Interruption externe.
l.bouhouch@uiz.ac.ma 2019- 28
Horloges du PIC16F84
1. Horloge Interne
l.bouhouch@uiz.ac.ma 2019- 29
Horloges du PIC16F84
2. Horloge Externe
GBF, NE555,
Oscillateur 74LS...
l.bouhouch@uiz.ac.ma 2019- 30
Mémoires du PIC16F84
• Mémoires du PIC16F84 :
– La Mémoire de programme (Mémoire non volatile) :
– Le PIC16F84 Intègre mémoire de programme du type "Flash EEPROM" EEPROM
rapide ("F"de 16F84):
– La Mémoire de données :
• La RAM (Mémoire Volatile) :
– Là où le µC, lorsque un programme "Tourne", stocke les résultats de
calculs intermédiaires (Exemple un décomptage pour une temporisation …).
l.bouhouch@uiz.ac.ma 2019- 31
Mémoires du PIC16F84
• Mémoire de programme
Organisation de la mémoire
programme et de la pile.
l.bouhouch@uiz.ac.ma 2019- 32
Mémoires du PIC16F84
• Mémoires de données (2 zones)
• Zone 1 : La RAM avec ces 2 parties :
– La 1ère : les SFR (Special Function Registers) :
Pour le contrôler les opérations sur le circuit.
• Zone 2 : 1 EEPROM :
– Contient 64 octets.
Organisation de la Zone 1
de mémoire de données.
l.bouhouch@uiz.ac.ma 2019- 33
Registres du PIC16F84
– Registres Spéciaux - SFR :
l.bouhouch@uiz.ac.ma 2019- 34
Registres du PIC16F84
– Registres Spéciaux - SFR :
l.bouhouch@uiz.ac.ma 2019- 35
Registres du PIC16F84
l.bouhouch@uiz.ac.ma 2019- 36
Registres du PIC16F84
l.bouhouch@uiz.ac.ma 2019- 39
Registres du PIC16F84
– Registres Spéciaux - SFR : registre OPTION_REG
• /RBPU (RB Pull Up) : Résistances de tirage à Vdd des entrées du port B (Validé par 0)
l.bouhouch@uiz.ac.ma 2019- 40
Registres du PIC16F84
– Registres Spéciaux - SFR : registre OPTION_REG
• /RBPU (RB Pull Up) : Résistances de tirage à Vdd des entrées du port B (Validé par 0)
Si Appui PB0=0
Si Relâché PB0=1
/RBPU = 0 active toutes les résistances de pull-up des broches en Entrées du Port B.
Le Port A ne dispose pas de cette option.
l.bouhouch@uiz.ac.ma 2019- 41
Registres du PIC16F84
– Registres Spéciaux - SFR : registre OPTION_REG
OPTION_REG : Bits de configuration pour divers périphériques.
• INTEDG (Interrupt Edge) : Front actif (1 pour montant) qui provoquera une interruption
sur la borne RB0 (si interruption activée).
• T0CS (TMR0 Clock Source) : Source utilisée par le Timer (0 : horloge interne, 1 : RA4).
• T0SE (TMR0 Source Edge) : Front actif sur RA4 qui fait avancer le compteur
(0 : front montant)
• PSA (Prescaler assignment) : 0 pour Timer0 et 1 pour chien de garde WDT.
• PS2 ... 0 (Prescaler) : Valeur du Diviseur de fréquence pour les Timers.
l.bouhouch@uiz.ac.ma 2019- 42
Interruptions
Interruption:
Mécanisme d'un microcontrôleur lui permettant de répondre à certains
événements au moment où ils se produisent, indépendamment de ce qu’il
fait à cette époque.
l.bouhouch@uiz.ac.ma 2019- 43
Interruptions
PIC16F84 4 sources d'interruption:
1. Fin d'écriture de données sur EEPROM.
2. Interruption TMR0 Cause débordement du Compteur/Temporisateur.
3. Interruption due aux transition sur les broches RB4, RB5, RB6 et RB7.
4. Interruption externe sur la broche RB0/INT.
l.bouhouch@uiz.ac.ma 2019- 44
Interruptions
– Registre INTCON
INTCON : Masque d'interruptions.
* GIE (Global lnterrupt Enable) Mis à 1 Autorise toutes les interruptions non
masquées par leur bit individuel.
* EEIE (EEprom write completed lnterrupt Enable) Mis à 1 Autorise les
interruptions de fin d'écriture dans l'EEprom.
* T0IE (Timer 0 lntmupt Enable) Mis à 1 Autorise les interruptions dues au
débordement du Timer 0.
* T0IF (Timer 0 lnterrupt Flag) Mis à 1 si débordement du Timer 0.
* INTE (lNTerrupt Enable) Mis à 1 Autorise les interruptions sur RB0/INT.
(Front montant si bit INTEDG du registre OPTION est à 1; sinon front
descendant).
* INTF (lNTerrupt Flag) Mis à 1 si interruption externe est générée sur
RB0/INT.
* RBIE (RB lnterulpt Enable) Mis à 12019-
l.bouhouch@uiz.ac.ma Autorise les interruptions sur RB4 à 45
Interfaces graphiques de MikroC for PIC
Accès rapide à un endroit Fenêtre principale de Barre des menus et Explorateur
spécifique du code saisie du code source d’outils de projet
l.bouhouch@uiz.ac.ma 2019- 49
Eléments de programmation MikroC for PIC
– Séquences d'échappement (Escape Sequences) :
Caractères ASCII non imprimables.
Ou également en précisant son code hexadécimal, après une barre oblique inverse (\x).
Séquence
Valeur Hexa Caractère
d'échappement
\a 0x07 BEL (Sonne)
\b 0x08 BS (Backspace ou Retour arrière)
\t 0x09 HT (Tabulation horizontale)
\n 0x0A LF (Saut de ligne)
\v 0x0B VT (Tabulation verticale)
\f 0x0C FF (Saut de page)
\r 0x0D CR (retour chariot)
l.bouhouch@uiz.ac.ma 2019- 50
Eléments de programmation MikroC for PIC
– Déclaration exemples :
Remarque:
- Nombre entier Hexadécimal est précédé de 0x ou 0X. (Exemple 0x1FB9)
- Nombre entier en Décimal n'a pas de préfixe.
- Nombre Réel se note 13.145 ou 1.3145e+1.
- Dans les compilateurs pour µC : Notation binaire 0b11010001
l.bouhouch@uiz.ac.ma 2019- 51
Eléments de programmation MikroC for PIC
– Affectations et Auto-affectations :
Symbole Description Notation
l.bouhouch@uiz.ac.ma 2019- 52
Eléments de programmation MikroC for PIC
– Opérateurs binaires :
* Multiplication c = a*b ;
/ Division c = a/b ;
+ Plus binaire c = a+b ;
-= Moins binaire c = a-b ;
<< Décalage à gauche c = a<<b ;
>> Décalage à droite c = a>>b ;
& ET entre bits c=a&b;
^ OU exclusif entre bits c = a ^b ;
| OU entre bits c=a|b;
l.bouhouch@uiz.ac.ma 2019- 53
Eléments de programmation MikroC for PIC
– Tests :
l.bouhouch@uiz.ac.ma 2019- 54
Eléments de programmation MikroC for PIC
– Instruction conditionnelle : if … else
if (Condition)
Fauss
Action1 ; else Condition
? e
Action2 ;
Si la Condition est vrai Vra
i
• Faire l’Action 1 Action Action 2
1
• Sinon faire l’Action 2
l.bouhouch@uiz.ac.ma 2019- 55
Eléments de programmation MikroC for PIC
– Instruction conditionnelle : if … else
Exemples :
Action1 et Action2 sont Action1 et Action2
une seule instruction sont un bloc d’instructions
if( a > b ) c=c–a; if( a > b )
else c = c- b ; { c
=c–a;d
=c–a;
ELSE n’existe pas
}
if( a > b )
else { c=c–b;
{ c
d=c–b;
=c–a;d
}
=c–a; Condition multiples
} if( (a > b) && ( b > 0) ) c=c–a;
else c=c-b;
l.bouhouch@uiz.ac.ma 2019- 56
Eléments de programmation MikroC for PIC
– Instruction conditionnelle : switch … case
Structure équivalente à la structure Si ... Alors … Sinon mais permet une
meilleur compacité du code.
Exemples :
Selon la valeur de (c ) switch (c )
Début Selon {
Si = '+' : resultat case '+' : resultat = a+b ;
a+b, Sort Si = '-' : resultat break ; case '-' : resultat = a-b ;
a-b , Sort Si = '*' : resultat break ; case '*' : resultat = a*b ;
a*b , Sort Si = '/' : resultat break ; case '/' : resultat = a/b ;
a/b , Sort Par defaut : break ; default : resultat = a+b ;
resultat a+b }
Fin Selon
l.bouhouch@uiz.ac.ma 2019- 57
Eléments de programmation MikroC for PIC
– Boucle : for
Action(s) à effectuer en
dernier dans la boucle
Initialisation
Action(s) à effectuer dans la boucle
} Action
Action(s) de départ
Condition pour rester dans la boucle Modification
l.bouhouch@uiz.ac.ma 2019- 58
Eléments de programmation MikroC for PIC
– Boucle : for
Exemples :
2 boucles identiques : Action exécutée 5 // Version 2 simplifiée
fois.
// Version 1 // Version 2
for( x = 5 ; x ; x-- )
for( x = 0 ; x < 5 ; x++ ) for( x = 5 ; x > 0 ; x-- ) {
{ { action ;
action ; action; }
} } x est vrai si x > 0
donc la boucle sera
Traduction Version 1 : exécutée tant que x>0
x0
Tant que (x <
5)) faire
action
x x+1
Répéter Tant
que
l.bouhouch@uiz.ac.ma 2019- 59
Eléments de programmation MikroC for PIC
– Boucle : while
Tant que condition faire ...
vraie
while
(condition)
{
action ;
…; Condition
?
}
Sortie de
while(1) : Boucle la
boucle
exécutant indéfiniment
un bloc d’instructions. Action
while ( 1 )
{
action ;
…;
}
l.bouhouch@uiz.ac.ma 2019- 60
Eléments de programmation MikroC for PIC
– Boucle : while
Exemples :
Boucle dont l’action ne sera jamais Boucle identique
exécutée car la condition est à une boucle FOR
fausse dès le départ. x=0;
x = 10 ; while ( x < 5 )
while ( x < 5 ) {
{ action ;
action ; x++ ;
x++ ; }
}
l.bouhouch@uiz.ac.ma 2019- 61
Eléments de programmation MikroC for PIC
– Boucle : do … while
Faire ... tant que condition Action toujours
vraie exécutée au
moins une fois que
do la condition soit
vraie ou fausse.
{
Action
action ;
…;
Condition } while
? (condition) ;
x=0;
total = 0 ;
Nombre d’exécutions de la boucle : 5 do
Sortie de
la A la sortie de la boucle total = 10 {
boucle
total = total + x ;
x++ ;
} while ( x < 5 ) ;
l.bouhouch@uiz.ac.ma 2019- 62
Eléments de programmation MikroC for PIC
– Les fonctions :
void buzzer (void)
{
…
Début …
}
Initialisation
des ports void init_port (void)
{
Led1 éteinte …
…
}
BP
activé ?
void main (void)
{
init_port();
Led1 éteinte Led1 allumée Led1 = 0;
while(1)
{
Gestion du
if(bp
buzzer
==
0)
{
L
e
d
1
=
l.bouhouch@uiz.ac.ma 2019- 1 63
Fonctions intégrées à MikroC for PIC
– Quelques fonctions :
Fonction Description
Higher Renvoie le 3ème plus faible octets (bits 16 à 23) d'un nombre
Highest Retourne le 4ème plus faible octets (bits 24 à 31) d'un nombre
l.bouhouch@uiz.ac.ma 2019- 64
Fonctions intégrées à MikroC for PIC
– Utilisation de la fonction Delay_ms :
Exercices :
Une LED est connectée au PORTB (broche RB0) du µC PIC16F84A à travers
une résistance R de limitation de 220.
Ecrire un programme qui fera clignoter la LED (ON et OFF) en permanence dans
un intervalle d'une seconde.
Procédure :
Une LED peut être connectée à un µC de deux façons : "Source de courant" et
"Absorption de courant".
En mode "Absorption de courant" (voir figure) une broche de la LED est reliée
à +5 V à travers la résistance R et l'autre broche est reliée à une broche du port de
sortie du µC. La LED sera allumée lorsque le port de sortie du µC est au niveau
logique 0 (0 V).
En mode "Source de courant" (voir figure) une broche de la LED est reliée au port
de sortie du µC et l'autre broche est reliée à la masse à travers la résistance R.
La LED sera allumé lorsque le port de sortie du µC est au niveau logique 1 (+5 V).
l.bouhouch@uiz.ac.ma 2019- 65
Fonctions intégrées à MikroC for PIC
– Utilisation de la fonction Delay_ms :
Programme version 1 (LED Clignotante) :
/******************************************** ********
LED CLIGNOTANTE
================
Programme faisant clignoter une LED connectée au port RB0 du µC
PIC16F84A avec l’intervalle d’une seconde. La fonction intégré
Delay_ms Crée un délai de 1 seconde entre les clignotements.
Oscillateur : XT, 4 Mhz
*****************************************************/
void main ()
{
TRISB = 0 ; // Configurer tout le PORTB en sortie
for (;;) // Boucle sans fin
{
PORTB.F0 = 1 ; // Allume la LED avec un « 1 »
Delay_ms (1000) ; // Retard 1 seconde
PORTB.F0 = 0 ; // Éteint la LED avec un « 0 »
Delay_ms (1000) ; // Retard de 1 seconde
}
}
l.bouhouch@uiz.ac.ma 2019- 66
Fonctions intégrées à MikroC for PIC
– Utilisation de la fonction Delay_ms :
Programme version 2 (LED Clignotante) :
/****************************************************
LED CLIGNOTANTE (PIC16F84A)
================
Utilisation des commandes du préprocesseur #define
==> Le programme est plus facile à suivre.
*****************************************************/
#define LED PORTB.F0 // LED reliée au port RB0 du PORTB
#define ON 0 // « 0 » allume la LED
#define OFF 1 // « 1 » éteint la LED
#define Retard Delay_ms(1000)
void main ()
{ TRISB = 0 ; // Configurer tout le PORTB en sortie
for (;;) // Boucle sans fin
{
LED = ON ; // LED allumée (ON)
Retard ; // Retard de 1 seconde
LED = OFF ; // LED éteinte (OFF)
Retard ; // Retard 1 seconde
}
}
l.bouhouch@uiz.ac.ma 2019- 67
Fonctions intégrées à MikroC for PIC
– Utilisation de la fonction Delay_ms :
Programme version 1 (Afficheur 7 segments) :
/****************************************** **********
Contrôle d'un afficheur 7 segments (PIC16F876A)
========================
Afficheurs AC (Anode Commune) et CC (Cathode Commune)
AC --> Diodes allumées par « 0 » et pour les CC par l'état « 1 »
==> Afficher un chiffre Présenter sur les broches le code 7
segment
Sur MikroC ==> Code Menu "Touls / Seven Segment Editor"
Pour Aff. AC
**************************************************
void main () Sorties
***/
{
TRISB = 0x80 ; // Configuration PORTB (1000 0000)
while (1) // Boucle sans fin Entrée
{
PORTB = 0xB0 // Code 7 seg du chiffre 3
; // Temporisation
Delay_ms(300 // Code 7 seg du chiffre 4
); // Temporisation
PORTB = 0x99
; 2019- 68
Fonctions intégrées à MikroC for PIC
– Utilisation de la fonction Delay_ms :
Programme version 2 (Afficheur 7 segments) :
/***********************************************************
Contrôle d'afficheur 7 segments (AC) avec 2 boutons poussoir BP1 (RC0)
et BP2 (RC7). L’appuis sur BP1 ou sur BP2 affiche successivement 3 ou 4.
Si aucun --> Affiche 0. (PIC16F876A)
***********************************************************/
void main ()
{
TRISB = 0x80 ; // Configuration PORTB (1000 0000)
PORTB = 0 ;
TRISC = 0x81 ; // (RC0, RC1) Entrées, les autres Sorties
PORTC = 0 ;
while (1) // Boucle sans fin
{
if (PORTC.F0 == 0) // Si BP1 est mis à la masse
PORTB = 0xB0 ; // Code 7 seg du chiffre 3
else if (PORTC.F7 == 0) // Sinon Si BP2 est mis à la masse
PORTB = 0x99 ; // Code 7 seg du chiffre 4
else PORTB =0xC0 ; // Si aucun ==> Affiche 0
}
}
l.bouhouch@uiz.ac.ma 2019- 69
Fonctions intégrées à MikroC for PIC
– Utilisation de la fonction Delay_ms :
Programme version 3 (Afficheur 7 segments) :
/****************************************************
Contrôle d'afficheur 7 segments (AC) (PIC16F876A)
Afficher des chiffres de 0 à 9 à une cadence de 100ms, en
déclarant un
tableau Tab[10] contenant les 10 codes 7 seg.
Boucle for repère dans table le code à envoyer au Port B toutes
les 100 ms.
*****************************************************
/
int i;
char TRISB
Tab[10] ==0x80 ;
{0xC0, 0xF9, 0xA4, // Configuration
0xB0, PORTB
0x99, 0x92, (1000
0x82, 0xF8,0000)
0x80,PORTB
0x90}=;0 ;
void while
main (1)() // Boucle sans fin
{ {
for (i=0; // Boucle balayant les chiffres 0 à 9
i<=9; i+
+) // Code 7 seg du chiffre i
{ // Temporisation
POR
} TB =
} Tab[i
l.bouhouch@uiz.ac.ma ]; 2019- 70
Bibliothèques intégrées à MikroC for PIC
– Bibliothèques fréquemment utilisées :
• ADC, LCD, UART, PWM, EEPROM, …
Bibliothèque Description
l.bouhouch@uiz.ac.ma 2019- 71
Bibliothèques intégrées à MikroC for PIC
– Fonctions essentielles des bibliothèques :
l.bouhouch@uiz.ac.ma 2019- 72
Bibliothèques intégrées à MikroC for PIC
– Fonctions essentielles des bibliothèques :
l.bouhouch@uiz.ac.ma 2019- 73
Conversion Analogique Numérique
– Utilisation de l’ADC :
Programme :
/***********************************************************
CONVERTISSEUR A/D du PIC16F876A
=========================
Signal analogique variable appliqué à la broche AN0 du PIC16F876, tandis que le résultat
de conversion sur 10 bits est visible sur les PORTB et PORTC (8 LSB sur le PORTB et 2
MSB sur le PORTC). Ou uniquement 8 bits sur le PORTB. (Vref- --> GND et Vref+ --> 5V)
Oscillateur : HS, 8 Mhz
******************************************************** ***/
int temp_res ;
void main()
{
A DCON1 = 0x00 ; // AN0 … AN4(A), Vref+(Vdd), Vref-(Vss)
TRISB = 0 ; // PORTB en sortie
TRISC = 0 ; // PORTC en sortie
while(1) // Boucle sans fin
{
temp_res = ADC_Read(0) ; // Résultat de conversion copié dans temp_res
PORTB = temp_res ; // Envoyer 8 bits LSB au PORTB
PORTC = temp_res >> 8 ; // 2 bits MSB copiés sur RC1, RC0 du PORTC
// Ou PORTB = (int)(temp_res/4) ; // Envoyer les 8 bits sur le PORTB sans PORTC
}
}
l.bouhouch@uiz.ac.ma 2019- 74
Conversion Analogique Numérique
– Utilisation de l’ADC :
Programme :
/***********************************************************
CONVERTISSEUR A/D du PIC16F876A
=========================
Signal analogique variable appliqué à la broche AN0 du PIC16F876, tandis que le résultat
de conversion sur 10 bits est visible sur les PORTB et PORTC (8 LSB sur le PORTB et 2
MSB sur le PORTC). Ou uniquement 8 bits sur le PORTB. (Vref- --> GND et Vref+ --> 5V)
Oscillateur : HS, 8 Mhz
***********************************************************/
int temp_res ;
void main()
{
ADCON1 = 0x00 ; // AN0 … AN4(A), Vref+(Vdd), Vref-(Vss)
TRISB = 0 ; // PORTB en sortie
TRISC = 0 ; // PORTC en sortie
while(1) // Boucle sans fin
{
temp_res = ADC_Read(0) ; // Résultat de conversion copié dans temp_res
PORTB = temp_res ; // Envoyer 8 bits LSB au PORTB
PORTC = temp_res >> 8 ; // 2 bits MSB copiés sur RC1, RC0 du
PORTC
// Ou PORTB = (int)(temp_res/4) ; // Envoyer les 8 bits sur le PORTB sans PORTC
}
}
l.bouhouch@uiz.ac.ma 2019- 75
Paramètres du contrôleur LCD
– Signaux du contrôleur LCD HD44780 (14 broches) :
Broche Appellation Fonction
1 VSS Masse
2 VDD +5 V
3 VEE Contraste
4 RS Registre de sélection
5 R/W Lecture / Ecriture
6 EN Validation
7 D0 bit 0 (Donnée)
8 D1 bit 1 (Donnée)
9 D2 bit 2 (Donnée)
10 D3 bit 3 (Donnée)
11 D4 bit 4 (Donnée)
12 D5 bit 5 (Donnée)
13 D6 bit 6 (Donnée)
14 D7 bit 7 (Donnée)
l.bouhouch@uiz.ac.ma 2019- 76
Paramètres du contrôleur LCD
– Commandes les plus courantes LCD :
Commande LCD Description
void main ()
{
TRISB = 0 ; // Tout le PORTB en sortie
PORTB = 0xFF ;
Lcd_Init() ; // Initialisation du LCD
Lcd_Cmd(_LCD_CLEAR) ; // Effacer l’écran LCD
Lcd_Cmd(_LCD_CURSOR_OFF) ; // Curseur est Off
Lcd_Out(1, 1, txt1) ; // Ecrire 1ier texte sur l-c. 1-2
//Ou Lcd_Out(1, 2, "-- AFFICHAGE
--") ; // Ecrire 2ème texte sur l-c. 2-1
Lcd_Out(2,
//Ou 1, txt2)
Lcd_Out(2, ;
1, “Display_LCD_4bit") ;
}
l.bouhouch@uiz.ac.ma 2019- 79
Paramètres du module USART
– Signaux du Port série (Protocole RS232) :
Un port série en RS232 utilise le connecteur DB9 (9 voies).
l.bouhouch@uiz.ac.ma 2019- 81
Paramètres du module USART
– Paramètres du Protocole RS232 :
Exemple de trame de caractère "A" envoyée en série :
1 Start + 8 Data + 0 ou 1 Parity + 1 Stop.
(01000001)2 = 0x41 = Code ASCII de "A"
Après "Start", le bit envoyé = le LSB de la donnée "01000001".
Parité
<Non>
Parité
Paire
Parité
Impaire
l.bouhouch@uiz.ac.ma 2019- 82
Module USART
– Utilisation de l’UART :
Programme :
/*************************************************************
LECTURE ET ÉCRITURE DE PORT SERIE
=========================
PIC16F876A : Tx RC6 et Rx RC7. Débit de transmission = 9600 Bps.
Caractère reçu à partir du terminal est renvoyé vers le terminal.
En plus Led sur RC0 s’allume puis s’éteint pour chaque frappe au clavier.
Oscillateur HS : 8 Mhz
*************************************************************/
void main()
{
TRISC = 0x80 ; // 1000 0000 --> PORTC en sortie sauf bit 7
PORTC.F0 = 1 ; // Led reliée à RC0 éteinte
void main()
{
TRISC = 0x80 ; // 1000 0000 --> PORTC en sortie sauf bit 7
PORTC.F0 = 1 ; // Led reliée à RC0 éteinte
Programme (Suite) :
…
while(1) // Boucle infinie
{
if (UART1_Data_Ready() == 1) // Si la connexion est établie
{
PORTC.F0 = 0 ; // Led reliée à RC0 allumée
Delay_ms(100) ;
Octet_Lu = UART1_Read() ; // Données reçues via UART
UART1_Write(0x20) ; // Espace (SP 0x20)
UART1_Write(Octet_Lu) ; // Renvoyer la donnée reçus
UART1_Write(0x0D) ; // Retour chariot (CR 0x0D)
} // Fin de If
Delay_ms(100) ;
PORTC.F0 = 1 ; // Led reliée à RC0 éteinte
} // Fin de Boucle while
} // Fin du main
l.bouhouch@uiz.ac.ma 2019- 85
Modules CCPx
– Utilisation du PWM :
Programme :
/*************************************************************
Utilisation du module CCP1 du PIC16F876A en mode PWM
====================================
Générateur du signal PWM par le module CCP1.
La largeur des impulsions à la sortie du CCP1 (RC2) peut être variée avec le
bouton poussoir BP marqué "AUGMENTER".
Oscillateur HS : 8.0000 Mhz
******** **************************************** *************/
void main ()
{
unsigne d short RappCyclique ; // Déclaration deble RappCyclique
TRISC = varia sortie sauf le bit 7
PWM1_I 0x80; // PORTC configuré en ule PWM (2 KHz)
RappCycnit(2000); // Initialisation du modble RappCyclique
PWM1_S lique = 100 ; // Initialisation de variale CCP1
… tart() ; // Démarrage du modu
l.bouhouch@uiz.ac.ma 2019- 86
Modules CCPx
– Utilisation du PWM :
Programme :
/*************************************************************
Utilisation du module CCP1 du PIC16F876A en mode PWM
====================================
Générateur du signal PWM par le module CCP1.
La largeur des impulsions à la sortie du CCP1 (RC2) peut être variée avec le
bouton poussoir BP marqué "AUGMENTER".
Oscillateur HS : 8.0000 Mhz
*************************************************************
/
void main()
{ unsigned short RappCyclique ; // Déclaration de variable RappCyclique
TRISC = 0x80; // PORTC configuré en sortie sauf le bit 7
PWM1_Init(2000); // Initialisation du module PWM (2 KHz)
RappCyclique = 100 ; // Initialisation de variable RappCyclique
PWM1_Start() ; // Démarrage du module CCP1
…
l.bouhouch@uiz.ac.ma 2019- 87
Modules CCPx
– Utilisation du PWM :
Programme (Suite) :
…
while (1) // Boucle sans fin
{
// Si le BP est pressé ==> Incrémente RappCyclique
if (PORTC.F7 == 0) RappCyclique++ ;
// Ou bien if (Button(&PORTC, 7,1,0))
RappCyclique++ ;
PWM1_Set_Duty(RappCyclique) ; // Charger PWM avec nvlle. valeur
if (RappCyclique > 255) RappCyclique=0 ; // Raz de RappCyclique
Delay_ms(20); // Tempos de 20ms
} // Fin de boucle while
} // Fin de main
l.bouhouch@uiz.ac.ma 2019- 88
Rappels sur Interruption Timer
PIC16F84 Sources d'interruption TMR0
Cause débordement du
Compteur/Temporisateur.
l.bouhouch@uiz.ac.ma 2019- 89
Rappels sur Interruption Timer
– Registres OPTION_REG
OPTION_REG : Bits de configuration pour divers périphériques.
• INTEDG (Interrupt Edge) : Front actif (1 pour montant) qui provoquera une interruption
sur la borne RB0 (si interruption activée).
• T0CS (TMR0 Clock Source) : Source utilisée par le Timer (0 : horloge interne, 1 : RA4).
• T0SE (TMR0 Source Edge) : Front actif sur RA4 qui fait avancer le compteur
(0 : front montant)
• PSA (Prescaler assignment) : 0 pour Timer0 et 1 pour chien de garde WDT.
• PS2 ... 0 (Prescaler) : Valeur du Diviseur de fréquence pour les Timers.
l.bouhouch@uiz.ac.ma 2019- 90
Rappels sur Interruption Timer
– Registre INTCON
INTCON : Masque d'interruptions.
* GIE (Global lnterrupt Enable) Mis à 1 Autorise toutes les interruptions non
masquées par leur bit individuel.
* T0IE (Timer 0 lntmupt Enable) Mis à 1 Autorise les interruptions dues au
débordement du Timer 0.
* T0IF (Timer 0 lnterrupt Flag) Mis à 1 si débordement du Timer 0.
l.bouhouch@uiz.ac.ma 2019- 91
Timer & Interruptions
– Utilisation de TMR0 :
Programme :
/**********************************************************************
Chenille à LEDs (PIC16f876A - Version AVEC INTERRUPTIONS)
===================================
8 LEDs connectées au PORTC et qui s'allument en alternance. Oscillateur XT : 4 Mhz
**********************************************************************/
Programme (Suite) :
…
void main()
{
TRISC = 0 ; // PORTC en sortie
PORTC = 0 ; // Eteindre Leds
// Autoriser Interruptions Timer (GIE PEIE T0IE INTE RBIE T0IF INTF
R0IF)
INTCON = 0b10100000 ;
// Pré-diviseur Tmr0 = 16 (RBPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
)
OPTION_REG = 0b00000011 ;
while (1)
{ /* effectuer ce qu’on veut */ }
}
l.bouhouch@uiz.ac.ma 2019- 93
Acquisition et Transmission Série de données
l.bouhouch@uiz.ac.ma 2019- 94
Généralités
Multipoints
Point à Point
l.bouhouch@uiz.ac.ma 2019- 95
Généralités
RS232 :
- Bus Lent (9600 – 115200 bps), Full-duplex, Point à Point
- Courant dans les systèmes embarqués
RS485 :
- Rapide, Différentiel, Half-duplex, Multipoints
CAN :
- Bus Semi-rapide (1 Mbps), Multi-maîtres, …
- Peu sensible au bruit, …
- Variante : LIN, FlexRay, …
I2C (Philips) :
- Relativement Lent (400 Kbps), Half-duplex, Multi-Maîtres,
Multipoint, …
- Variante : SMBUS, DDC, TWI, …
l.bouhouch@uiz.ac.ma 2019- 96
Généralités
– Bus courants dans les systèmes embarqués :
SPI :
- Bus Assez rapide (10 Mbps), Full-duplex, …
- 1 Maitre - n Esclaves (Mélange Point à Point & Multipoints), …
- Variante : I2S, …
- Utilisation : Flash EEPROM, EEPROM, MMC/SD, Ethernet, Son,
LCD, Capteurs, …
1 WIRE (Dallas Semiconductor) :
- Bus Lent (16 ou 144 Kbps), Half-duplex, …
- 1 Maitre - n Esclaves (Mélange Point à Point & Multipoints),
…
- peu sensible au bruit, …
- Utilisation : Domotique, Thermométries, Instruments de mesure
météorologiques, Horloge temps-réel, Circuits de gestion de l'énergie,
Batteries, Onduleurs, …
USB :
- Bus multi-vitesse (LS, FS, HS), Différentiel, …
- 1 Maitre - n Esclaves, …
- Très courant
l.bouhouch@uiz.ac.ma 2019- 97
RS232
– Signaux du Port série (Protocole RS232) :
Un port série en RS232 utilise le connecteur DB9 (9 voies).
Parité
<Non>
Parité
Paire
Parité
Impaire
l.bouhouch@uiz.ac.ma 2019- 101
Bibliothèque UART de MikroC for PIC
– Fonctions essentielles des bibliothèques :
Bibliothèque Fonction Description
Spécifie le débit y de communication série choisi.
UARTx_Init(y)
C’est la première fonction appelée sur le module x.
Le module x Reçoit 1 octet à partir de la broche Rx
UARTx_Read()
du port série.
UART
Le module x Transmet un octet à travers la broche
UARTx_Write
Tx du port configuré en série.
=1 Si données prêtes pour la lecture
UART_Data_Ready()
=0 Si pas de données dans le registre de réception
void main()
{
TRISC = 0x80 ; // 1000 0000 --> PORTC en sortie sauf bit 7
PORTC.F0 = 1 ; // Led reliée à RC0 éteinte
Programme (Suite) :
…
while(1) // Boucle infinie
{
if (UART1_Data_Ready() == 1) // Si la connexion est établie
{
PORTC.F0 = 0 ; // Led reliée à RC0 allumée
Delay_ms(100) ;
Octet_Lu = UART1_Read() ; // Données reçues via UART
UART1_Write(0x20) ; // Espace (SP 0x20)
UART1_Write(Octet_Lu) ; // Renvoyer la donnée reçus
UART1_Write(0x0D) ; // Retour chariot (CR 0x0D)
} // Fin de If
Delay_ms(100) ;
PORTC.F0 = 1 ; // Led reliée à RC0 éteinte
} // Fin de Boucle while
} // Fin du main
l.bouhouch@uiz.ac.ma 2019- 105
Bus CAN
– Introduction au Bus CAN :
Bus CAN (Controller Area Network) :
Bus de communication série développé à la fin des années 80 par
l'entreprise Robert Bosch.
Objectif :
Fournir à l'industrie automobile un Bus peu coûteux pour
l'électronique embarquée (éviter les encombrants des câbles).
Efficacité et Robustesse du protocole Bus CAN :
Utilisé dans plusieurs applications industrielles nécessitant un débit
important jusqu'à 1 Mbits/s avec un très faible taux d'erreur.
Tableau
Contrôle Suspension
de Bord
Moteur Clim Sièges
Contrôleur Contrôleur
Contrôleur CAN Contrôleur CAN CAN CAN Contrôleur CAN Contrôleur CAN
Question câblage :
R25 (fin 80’s) : 2 km de câbles cuivre ! >80kg
Conséquences de réduction du câblage
40% de poids pour une portière Mercedes
40% de longueur de câble pour les Peugeot 306 et 307
l.bouhouch@uiz.ac.ma 2019- 107
Bus CAN
– Description :
Longueur du médium
• Longueur max. dépend du retard accumulé lors de transmission :
Temps de Propagation + Temps de Traitement matériel.
Configurations recommandées
en fonction de la Vitesse de transmission.
n = Nombre de nœuds
L = Longueur maximum du support de transmission.
• Différence :
longueur ID (Identificateur) : 11 bits de base
18 bits supplémentaires en mode Extended.
Augmenter le nombre de variables échangées, et
Nombre de stations sur le réseau.
l.bouhouch@uiz.ac.ma 2019- 112
Bus CAN
– Format des Trames de données du Bus CAN :
Composition de la trame :
2.0A
2.0B
2.0A
2.0B
Zone d’Arbitrage :
Format « Standard » (Version 2.0A) :
11 Bits +
1 Bit RTR (Remote Transmission Request) :
• RTR = 0 Si Trame de Données ou
• RTR = 1 Si Trame de Demande de message.
l.bouhouch@uiz.ac.ma 2019- 115
Bus CAN
– Format des Trames de données du Bus CAN :
2.0A
2.0B
Zone d’Arbitrage :
Format « Étendu » (Version 2.0B) :
29 Bits (11+18) +
1 Bit SRR (Substitute Remote Request) ;
se substitue au bit RTR en Standard.
1 Bit RTR (Remote Transmission Request).
l.bouhouch@uiz.ac.ma 2019- 116
Bus CAN
– Format des Trames de données du Bus CAN :
2.0A
2.0B
Champ de Contrôle :
Champ de Données :
0 à 8 Octets : Longueur de Donnée
Champ du CRC (Cyclic Redundancy Code) :
16 Bits Recalculés à la Réception et Comparés aux bits Reçus.
Si différents Erreur CRC est déclarée.
Champ ACK (ACKnowledge) ou ACQ (ACQuitement) :
1 Bit à l'état récessif +
1 Bit séparateur ou Délimiteur.
Champ EOF (End Of Frame) :
7 Bits identifiant la Fin de Trame.
l.bouhouch@uiz.ac.ma 2019- 118
Bus CAN
– Principe d’Arbitrage :
Traiter les données en Temps réel Transmission rapide.
Voie physique de transmission atteignant 1 Mbit/s +
Assignation rapide du bus s’il y a des conflits.
Définitions :
"État Dominant" : État logique 0
"État Récessif" : État logique 1
En cas de Conflit ( Émission Simultanée) : 0 écrase 1.
1 1 0 0 1 0 1 1 1 0 1 1
Station 1
1 1 0 0 1 1 0 0 1 0 1 0
Station 2
1 1 0 0 1 0 1 1 0 1 0 1
Station 3
Signal 1 1 0 0 1 0 1 1 0 1 0 1
sur le
bus
La station 2 perd la compétition
La station 1 perd la compétition
La station 3 gagne la compétition donc l’accès au
bus
l.bouhouch@uiz.ac.ma 2019- 122
Bus CAN
– Principe d’Arbitrage :
Exemple : 3 stations émettent en même
temps :
Qui gagne l’arbitrage ?
1 1 0 0 1 0 1 1 1 0 1 1
Station 1
1 1 0 0 1 1 0 0 éc1 oute0 1 0
Station 2
1 1 0 0 1 0 1 1 0 1 0 1
Station 3
Signal 1 1 0 0 1 0 1 1 0 1 0 1
sur le
bus
La station 2 perd la compétition
La station 1 perd la compétition
La station 3 gagne la compétition donc l’accès au
bus
l.bouhouch@uiz.ac.ma 2019- 123
Bus CAN
– Principe d’Arbitrage :
Exemple : 3 stations émettent en même
temps :
Qui gagne l’arbitrage ?
1 1 0 0 1 0 1 1 1 0 écou
1 te1
Station 1
1 1 0 0 1 1 0 0 éc1 oute0 1 0
Station 2
1 1 0 0 1 0 1 1 0 1 0 1
Station 3
Signal 1 1 0 0 1 0 1 1 0 1 0 1
sur le
bus
La station 2 perd la compétition
La station 1 perd la compétition
La station 3 gagne la compétition donc l’accès au
bus
l.bouhouch@uiz.ac.ma 2019- 124
Bus CAN
– Principe d’Arbitrage :
Autre exemple :
1
0
1 0 1 1 0 1 0 1
SDA doit être stable aussi longtemps que le signal SCL est actif.
Changement d'état de SDA pendant que SCL est au niveau Haut Condition de
départ ou d'arrêt.
2 possibilités d’acquittement :
- Bit ACK = 0 Maître désire lire des octets supplémentaires.
- Bit ACK = 1 Maître décide que lecture terminée.
(ACK = 1 Pas d'erreur mais fin de transfert).
Exemple :
Soit à écrire dans le bloc 0 d'un circuit 24C04 dont les pattes E2 et E1 sont
connectées respectivement à 1 et à 0. 1ier mot à envoyer sera 10101000.
Microcontrôleur : ATmega328P
Tension de fonctionnement : 5V
Tension d'alimentation (Recommandée) : 7-12V
Tension d'alimentation (Limites) : 6-20V
Broches E/S numériques : 14 (dont 6 disposent de sortie PWM)
Broches d'entrées analogiques : 6
Intensité maxi disponible par broche E/S (5V) : 20 mA
Intensité maxi disponible par broche E/S (3.3V) : 50 mA
Mémoire Programme Flash : 32 KB dont 0.5 KB utilisés par le Bootloader
Mémoire SRAM (mémoire volatile) : 2 KB
Mémoire EEPROM (mémoire non 1 KB
volatile) : 16 MHz
Vitesse d’horloge : 53 mm x 68 mm
Dimensions :
AREF
Tension de
Port SPI*
référence
analogique D10 – D13
Port
E/S digitales D0 – D13 Série
D0 – D1
(Tx &
Port USB de Programmation Rx)
permettant d’alimenter
l’Arduino. Max 500 mA
Port de
Programmation
ISP
Port I2C*
A4 – A5
Entrée DC 7-12 V
2,1 mm
* I2C : A4 (SDA), A5 (SCL)
Vérifier / Compiler
Nouveau code
Sauver fichier
Configuration
La fonction setup() exécutée en 1ier, une seule fois dès que le programme
fonctionne. On appelle cette fonction : "Fonction d'initialisation ou de
configuration".
Mise en place des différentes Entrées et/ou Sorties et autres réglages.
void setup()
{
void loop()
{
}
l.bouhouch@uiz.ac.ma 2019- 149
Programmation Arduino
Types de variables les plus répandus :
Quel nombre il Valeurs maximales Nombre de Nombre
Type
stocke ? du nombre stocké X bits d'octets
Si une variable ne prend jamais de valeur négative, alors utiliser un type non-
signé.
unsigned
Quel nombre il Valeurs maximales Nombre de Nombre
Type
stocke ? du nombre stocké X bits d'octets
unsigned char Entier non négatif 0 à 255 8 1
unsigned int Entier non négatif 0 à 65 535 16 2
unsigned long Entier non négatif 0 à 4 294 967 295 32 4
byte Entier non négatif 0 à 255 8 1
word Entier non négatif 0 à 65 535 16 2
boolean
houch@uiz.ac.ma Entier non négatif 0 à 12019-2020 8 1
l.bou 150
Programmation Arduino
– Références :
Structure
Fonctions de base : Opérateurs arithmétiques : Opérateurs de comparaison :
2 fonctions obligatoires dans tout • = (égalité) • == (égal à)
programme en C Arduino: • + (addition) • != (différent de)
• void setup() • - (soustraction) • < (inférieur à)
• void loop() • * (multiplication) • > (supérieur à)
• / (division) • <= (inférieur ou égal à)
Structures de contrôle : • %(modulo) • >= (supérieur ou égal à)
• if
• if ... else Opérateurs booléens : Opérateurs composés :
• for • && (ET booléen)
• switch … case • ++ (incrémentation)
• || (OU booléen)
• while • --(décrémentation) (à revoir)
• ! (NON booléen)
• do ... while • += (addition composée)
• break • -= (soustraction composée)
•
Opérateurs bit à bit :
continue • *= (multiplication composée)
• • & (ET bit à bit)
return • /= (division composée)
• goto • | (OU bit à bit)
• &= (ET bit à bit composée)
• ^ (OU Exc. bit à bit)
• |= (OU bit à bit composée)
Syntaxe de base : • ~ (NON bit à bit)
• ; (point virgule) • << (décalage à gauche)
• {} (accolades) • >> (décalage à droite)
• // (commentaire sur 1 ligne)
• /* … */ (commentaire sur
plusieurs lignes)
• #define
• #include
l.bouhouch@uiz.ac.ma 2019- 151
Programmation Arduino
– Références (Suite) :
Variables et constantes Types des variables
Variables utilisées pour stocker des valeurs Exemple: Peuvent être de type variés décrits ci-dessous :
Tension de sortie d'un capteur présente sur une broche • boolean
analogique. • char
• byte
• int
Constantes prédéfinies du langage Arduino : • unsigned int
Valeurs particulières ayant une • long
signification spécifique. • unsigned long
• float (nombres à virgules)
• HIGH | LOW • double (nombres à virgules)
• INPUT | OUTPUT • Chaînes de caractères
• true | false • Tableaux de variables
• void (fonctions)
Conversion de types
• char()
• byte()
• int()
• long()
• float()
#include <byteordering.h>
#include <fat.h>
#include <FAT16.h>
#include <fat_config.h>
#include <partition.h>
#include <partition_config.h>
#include <sd-reader_config.h>
#include <sd_raw.h>
#include <sd_raw_config.h>
void setup()
{
pinMode(Led1, OUTPUT) ; // Led1 est une broche de sortie
pinMode(Led2, OUTPUT) ; // Led2 est une broche de sortie
pinMode(Led3, OUTPUT) ; // Led3 est une broche de sortie
pinMode(BP1, INPUT); // BP1 est une broche d’entrée
pinMode(BP2, INPUT); // BP2 est une broche d’entrée
pinMode(BP3, INPUT); // BP3 est une broche d’entrée
}
void loop()
{
if(digitalRead(BP1)==HIGH) digitalWrite(Led1, LOW) ; // Si BP1 est enfoncé Allume Led1
else digitalWrite(Led1, HIGH) ; // Sinon on éteint Led1
// Temporisation de 50 millisecondes
delay(50) ;
}
l.bouhouch@uiz.ac.ma 2019- 155
Programmation Arduino
– Exemple : Ecriture sur une sortie analogique pour commander une
LED Tricolore
// Définition des broches utilisée
const int led_verte = 9 ;
const int led_bleue = 10 ;
const int led_rouge = 11 ;
void setup()
{
// Définition des broches en sortie
pinMode(led_rouge, OUTPUT) ;
pinMode(led_verte, OUTPUT) ;
pinMode(led_bleue, OUTPUT) ;
}
void loop()
{
couleur(compteur_defilement) ; // Appel de la fonction d'affichage
compteur_defilement++ ; // Incrémentation de la couleur à afficher
if(compteur_defilement > 6)
compteur_defilement = 0 ; // Raz Si le compteur dépasse 6 couleurs
delay(500);
}
case 4 : // Violet
analogWrite(led_rouge, 0);
analogWrite(led_verte, 255);
analogWrite(led_bleue, 0);
break;
case 5 :
// Bleu ciel
analogWrite(led_rouge,
255);
analogWrite(led_verte, 0);
analogWrite(led_bleue, 0);
break;
case 6 :
// Blanc
analogWrite(led_rouge,
0);
analogWrite(led_verte, 0);
analogWrite(led_bleue, 0);
break;
default :
// "Noir"
analogWrite(led_rouge,
255);
l.bouhouch@uiz.ac.ma
analogWrite(led_verte, 2019- 158
Programmation Arduino
– Exemple : Lecture de tension appliquée sur une broche analogique
const int potar = 0 ; // Potentiomètre branché sur la broche analogique 0
int valeurLue ; // Variable pour stocker la valeur lue après conversion AN
float tension ; // On convertit cette valeur en une tension
void setup()
{
// Démarrage de la liaison série pour visualiser la valeur
Serial.begin(9600) ;
}
void loop()
{
// On convertit en nombre binaire la tension lue en
sortie du potentiomètre
valeurLue = analogRead(potar) ;
// Configuration du branchement
LiquidCrystal lcd(11,10,5,4,3,2) ; // Liaison 4 bits data OU (11,10,9,8,7,6,5,4,3,2) pour 8 bits
// (RS, E,d0, … ,d4,
void setup() … ,d7)
{
lcd.begin(16,2) ; // Utilisation d'un écran 16 colonnes et 2 lignes
lcd.write("Salut !") ; // Test de vérification
}