Académique Documents
Professionnel Documents
Culture Documents
Support de Cours
Réalisé par :
L. BOUHOUCH
L.bouhouch@uiz.ac.ma
Lahoussine BOUHOUCH
l.bouhouch@uiz.ac.ma 2016-2017
19/09/2016
Plan
PARTIE 1
• Systèmes de numération
• Introduction
• 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
• Interruptions
l.bouhouch@uiz.ac.ma 2016-2017 2
L.bouhouch@uiz.ac.ma 1
Plan
PARTIE 2
• 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 (UART ou Port Série)
• Bus CAN
• Bus I2C
• Aperçu sur le module Arduino
l.bouhouch@uiz.ac.ma 2016-2017 3
Systèmes de numération
EXEMPLES
X=0
=[?]10 2x …, 0.125, 0.25, 0.5, 1, 2, 4, 8, 16, 32, 32, 64, 128, 256, 512, 1024, 2048, …
l.bouhouch@uiz.ac.ma 2016-2017 4
L.bouhouch@uiz.ac.ma 2
Systèmes de numération
• Rappels :
Nombres Binaires Signés sur 8 Bits C2
+7 0000 0111
+6 0000 0110
l.bouhouch@uiz.ac.ma 2016-2017 5
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
l.bouhouch@uiz.ac.ma 2016-2017 6
L.bouhouch@uiz.ac.ma 3
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 2016-2017 7
Systèmes de numération
• Opérations en Binaire :
– Soustraction (Exemple) :
(12 - 07)10 = (05)10 = (0000 1100 - (0000 0111))2
= (0000 1100 + C2(0000 0111))2
L.bouhouch@uiz.ac.ma 4
Architecture des systèmes à processeurs
l.bouhouch@uiz.ac.ma 2016-2017 9
Introduction
• Familles de processeurs :
– Microprocesseur (Généraliste)
l.bouhouch@uiz.ac.ma 2016-2017 10
L.bouhouch@uiz.ac.ma 5
Introduction
• Où trouve-t-on les processeurs ?
l.bouhouch@uiz.ac.ma 2016-2017 11
1993 Pentium 3 100 000 0,8 à 0.28 60 à 233 MHz 32 bits/64 bits bus 100
1997 Pentium II 7 500 000 0,35 à 0.25 233 à 450 MHz 32 bits/64 bits bus 300
1999 Pentium III « !!! » 9 500 000 0,25 à 0.13 450 à 1400 MHz 32 bits/64 bits bus 510
2000 Pentium 4 42 000 000 0,18 à 0.065 1,3 à 3.8 GHz 32 bits/64 bits bus 1 700
Pentium 4D
2004 125 000 000 0,09 à 0.065 2.66 à 3.6 GHz 32 bits/64 bits bus 9 000
« Prescott »
2006 Core 2™ Duo 291 000 000 0,065 2,4 GHz (E6600) 64 bits/64 bits bus 22 000
2007 Core 2™ Quad 2*291 000 000 0,065 3 GHz (Q6850) 64 bits/64 bits bus 2*22 000 (?)
Core 2™ Duo
2008 410 000 000 0,045 3,16 GHz (E8500) 64 bits/64 bits bus ~24 200
(Penryn)
Core 2™ Quad
2008 2*410 000 000 0,045 3,2 GHz (QX9770) 64 bits/64 bits bus ~2*24 200
(Penryn)
l.bouhouch@uiz.ac.ma 2016-2017 12
L.bouhouch@uiz.ac.ma 6
Microsystèmes
Modem Interfaces
Écran
Horloge
Informatique
Clavier
Souris
µP RAM
Imprimante
Mémoire de masse ROM
Informatique Industrielle
CNA Commande
Capteurs CAN
…
l.bouhouch@uiz.ac.ma 2016-2017 13
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 2016-2017 14
L.bouhouch@uiz.ac.ma 7
Microsystèmes simplifié
Interruption
µP
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 2016-2017 16
L.bouhouch@uiz.ac.ma 8
Modèle générique des microprocesseurs
* Addition ;
* Soustraction ;
* Décalage ;
* ET logique ;
* OU logique ;
l.bouhouch@uiz.ac.ma 2016-2017 17
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 2016-2017 18
L.bouhouch@uiz.ac.ma 9
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 2016-2017 19
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
l.bouhouch@uiz.ac.ma 2016-2017 20
L.bouhouch@uiz.ac.ma 10
Microcontrôleurs PIC
l.bouhouch@uiz.ac.ma 2016-2017 21
Microcontrôleurs PIC
l.bouhouch@uiz.ac.ma 2016-2017 22
L.bouhouch@uiz.ac.ma 11
Architectures des PIC
Bus d’adresses
Coupleur Sorties
Micro- Mémoire
processeur
d’entrée/
données Entrées
sortie
Adresses
Instructions Programme
Commandes
Mémoire
programme
l.bouhouch@uiz.ac.ma 2016-2017 24
L.bouhouch@uiz.ac.ma 12
Architectures des PIC
l.bouhouch@uiz.ac.ma 2016-2017 25
L.bouhouch@uiz.ac.ma 13
Fonctions intégrées aux PIC
l.bouhouch@uiz.ac.ma 2016-2017 27
– Spécificités par µC :
• 1 ou 2 Timer 16 bits
• ADC 8 ou 10 bits
• 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 2016-2017 28
L.bouhouch@uiz.ac.ma 14
Référence des µC PIC
PIC16 F 84 - 4
Familles :
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 2016-2017 29
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.
– Avantages :
• Coût réduit.
• 1000 cycles d'effacement/écriture pour la mémoire flash,
10.000.000 pour la mémoire de donnée EEPROM.
l.bouhouch@uiz.ac.ma 2016-2017 30
L.bouhouch@uiz.ac.ma 15
Architectures du PIC16F84
• Architecture interne (Structure)
l.bouhouch@uiz.ac.ma 2016-2017 31
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 2016-2017 32
L.bouhouch@uiz.ac.ma 16
Horloges du PIC16F84
l.bouhouch@uiz.ac.ma 2016-2017 33
Horloges du PIC16F84
2. Horloge Externe
GBF, NE555,
Oscillateur 74LS...
l.bouhouch@uiz.ac.ma 2016-2017 34
L.bouhouch@uiz.ac.ma 17
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" ROM 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 2016-2017 35
Mémoires du PIC16F84
• Mémoire de programme
Organisation de la mémoire
programme et de la pile.
l.bouhouch@uiz.ac.ma 2016-2017 36
L.bouhouch@uiz.ac.ma 18
Mémoires du PIC16F84
• Mémoires de données décomposée en 2
• La RAM avec ces 2 parties :
– La 1ère contient les SFR (Special Function Registers) :
Pour le contrôler les opérations sur le circuit.
• et 1 zone EEPROM :
– Contient 64 octets.
Organisation de la
RAM de données.
l.bouhouch@uiz.ac.ma 2016-2017 37
Registres du PIC16F84
– Registres Spéciaux - SFR :
l.bouhouch@uiz.ac.ma 2016-2017 38
L.bouhouch@uiz.ac.ma 19
Registres du PIC16F84
– Registres Spéciaux - SFR :
l.bouhouch@uiz.ac.ma 2016-2017 39
Registres du PIC16F84
l.bouhouch@uiz.ac.ma 2016-2017 40
L.bouhouch@uiz.ac.ma 20
Registres du PIC16F84
Registres du PIC16F84
– Registres Spéciaux - SFR :
L.bouhouch@uiz.ac.ma 21
Registres du PIC16F84
– Registres Spéciaux - SFR :
l.bouhouch@uiz.ac.ma 2016-2017 43
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 2016-2017 44
L.bouhouch@uiz.ac.ma 22
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 2016-2017 45
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 2016-2017 46
L.bouhouch@uiz.ac.ma 23
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 2016-2017 47
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 2016-2017 48
L.bouhouch@uiz.ac.ma 24
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 à 1 Autorise les interruptions sur RB4 à RB7.
* RBIF (RB Interupt Flag) Mis à 1 si changement d'état sur lignes RB4 à RB7.
l.bouhouch@uiz.ac.ma 2016-2017 49
L.bouhouch@uiz.ac.ma 25
Eléments de programmation MikroC for PIC
– Structure du programme C :
Header de la bibliothèque standard in/out.
#include <stdio.h> (pour printf). Rarement utilisée pour les PIC
#define pi 3.14 Equivalence : Le préprocesseur
remplacera tous les pi par 3.14
float x, y ; Déclaration de deux variables réelles globales
L.bouhouch@uiz.ac.ma 26
Eléments de programmation MikroC for PIC
– Types de données standard :
Type Longueur (bits) Domaine de valeurs
unsigned char
8 0 à 255
unsigned short (ou int)
char ou signed char
8 -128 à 127
signed short
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 2016-2017 54
L.bouhouch@uiz.ac.ma 27
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 2016-2017 55
l.bouhouch@uiz.ac.ma 2016-2017 56
L.bouhouch@uiz.ac.ma 28
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 2016-2017 57
l.bouhouch@uiz.ac.ma 2016-2017 58
L.bouhouch@uiz.ac.ma 29
Eléments de programmation MikroC for PIC
– Instruction conditionnelle : if … else
if (Condition) Action1 ;
Fausse
else Action2 ; Condition
?
l.bouhouch@uiz.ac.ma 2016-2017 59
l.bouhouch@uiz.ac.ma 2016-2017 60
L.bouhouch@uiz.ac.ma 30
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 a+b, Sort case '+' :resultat = a+b ; break ;
Si = '-' : resultat a-b , Sort case '-' : resultat = a-b ; break ;
Si = '*' : resultat a*b , Sort case '*' : resultat = a*b ; break ;
Si = '/' : resultat a/b , Sort case '/' : resultat = a/b ; break ;
Par defaut : resultat a+b default : resultat = a+b ;
Fin Selon }
l.bouhouch@uiz.ac.ma 2016-2017 61
Action(s) à effectuer en
dernier dans la boucle
Initialisation
Action(s) à effectuer dans la boucle
…; Sortie de
la boucle
}
Action
Action(s) de départ
Condition pour rester dans la boucle Modification
l.bouhouch@uiz.ac.ma 2016-2017 62
L.bouhouch@uiz.ac.ma 31
Eléments de programmation MikroC for PIC
– Boucle : for
Exemples :
2 boucles identiques : Action exécutée 5 fois. // Version 2 simplifiée
// 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 exécutée
Traduction Version 1 : tant que x>0
x0
Tant que (x < 5))
faire action
x x+1
Répéter Tant que
l.bouhouch@uiz.ac.ma 2016-2017 63
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 2016-2017 64
L.bouhouch@uiz.ac.ma 32
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 2016-2017 65
l.bouhouch@uiz.ac.ma 2016-2017 66
L.bouhouch@uiz.ac.ma 33
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 == 0)
buzzer
{
Led1 = 1;
buzzer();
}
else Led1 = 0;
}
}
l.bouhouch@uiz.ac.ma 2016-2017 67
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 2016-2017 68
L.bouhouch@uiz.ac.ma 34
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 220W.
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 2016-2017 69
L.bouhouch@uiz.ac.ma 35
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 2016-2017 71
L.bouhouch@uiz.ac.ma 36
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 2016-2017 73
L.bouhouch@uiz.ac.ma 37
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 2016-2017 75
L.bouhouch@uiz.ac.ma 38
Bibliothèques intégrées à MikroC for PIC
– Fonctions essentielles des bibliothèques :
l.bouhouch@uiz.ac.ma 2016-2017 77
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 2016-2017 78
L.bouhouch@uiz.ac.ma 39
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 2016-2017 79
L.bouhouch@uiz.ac.ma 40
Contrôleur LCD
– Utilisation de l’afficheur LCD :
Programme :
/*********************************************************
AFFICHAGE D'UN TEXTE A L’ECRAN LCD
=========================
Afficheur LCD relié au PIC16F876A (RS-4, EN-5, D4-0, D5-1, D6-2, D7-3).
Programme affichant textes "AFFICHAGE" sur 1 ère ligne et
"display_LCD_4bit" sur 2ème ligne.
Oscillateur : HS, 8 Mhz
*********************************************************/
// Connections du LCD
sbit LCD_RS at RB4_bit ;
sbit LCD_EN at RB5_bit ;
sbit LCD_D4 at RB0_bit ;
sbit LCD_D5 at RB1_bit ;
sbit LCD_D6 at RB2_bit ;
sbit LCD_D7 at RB3_bit ;
sbit LCD_RS_Direction at TRISB4_bit ;
sbit LCD_EN_Direction at TRISB5_bit ;
sbit LCD_D4_Direction at TRISB0_bit ;
sbit LCD_D5_Direction at TRISB1_bit ;
sbit LCD_D6_Direction at TRISB2_bit ;
sbit LCD_D7_Direction at TRISB3_bit ;
// Fin de connections
l.bouhouch@uiz.ac.ma 2016-2017 81
Contrôleur LCD
– Utilisation de l’afficheur LCD :
Programme (Suite) :
…
char txt1[] = "--- AFFICHAGE ---" ;
char txt2[] = "Display_LCD_4bit" ;
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 --") ;
Lcd_Out(2, 1, txt2) ; // Ecrire 2ème texte sur l-c. 2-1
//Ou Lcd_Out(2, 1, “Display_LCD_4bit") ;
}
l.bouhouch@uiz.ac.ma 2016-2017 82
L.bouhouch@uiz.ac.ma 41
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 2016-2017 84
L.bouhouch@uiz.ac.ma 42
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 Parity + 1 Stop.
Parité
Paire
Parité
Impaire
l.bouhouch@uiz.ac.ma 2016-2017 85
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
*************************************************************/
char Octet_Lu ; // Variables globales
void main()
{
TRISC = 0x80 ; // 1000 0000 --> PORTC en sortie sauf bit 7
PORTC.F0 = 1 ; // Led reliée à RC0 éteinte
L.bouhouch@uiz.ac.ma 43
Module USART
– Utilisation de l’UART :
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 2016-2017 87
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 2016-2017 88
L.bouhouch@uiz.ac.ma 44
Modules CCPx
– Utilisation du PWM :
Programme (Suite) :
…
while (1) // Boucle sans fin
{
// Si le BP est pressé ==> Incrémente RappCyclique
if (Button(&PORTC, 7,1,0)) RappCyclique++ ;
//Ou if (PORTC.F7 == 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 2016-2017 89
l.bouhouch@uiz.ac.ma 2016-2017 90
L.bouhouch@uiz.ac.ma 45
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 2016-2017 91
– 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 2016-2017 92
L.bouhouch@uiz.ac.ma 46
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 2016-2017 94
L.bouhouch@uiz.ac.ma 47
Acquisition et Transmission Série de données
l.bouhouch@uiz.ac.ma 2016-2017 95
Généralités
– Exemples de Bus Série :
Serial-SCSI, SATA, PCI Express, IEEE1984, Ethernet , RS485, RS422,
RS232, I2C, SPI, I2S, CAN, USB, Firewire ou IEEE1394, 1 WIRE,
DMX512, DCC, …
RS232 :
- Bus Lent (9600 – 115200 bps), Full-duplex, Point à Point
- Usuel sur les vieux PC, rare mais trouvable dans les PC récents
- Courant dans les systèmes embarqués
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 48
Généralités
– Exemples de Bus Série :
l.bouhouch@uiz.ac.ma 2016-2017
Généralités
– Bus courants dans les systèmes embarqués :
I2C (Philips) :
- Relativement Lent (400 Kbps), Half-duplex, Multi-Maîtres,
Multipoint, …
- Variante : SMBUS, DDC, TWI, …
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, …
CAN :
- Bus Semi-rapide (1 Mbps), Multi-maîtres, …
- Peu sensible au bruit, …
- Variante : LIN, FlexRay, …
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 49
Généralités
– Bus courants dans les systèmes embarqués :
USB :
- Bus multi-vitesse (LS, FS, HS), Différentiel, …
- 1 Maitre - n Esclaves, …
- Très courant
Firewire ou IEEE1394 :
- Haut débit (100-800 Mbps), Multi-Maitres, Point à Point, …
- 1 Maitre - n Esclaves (Mélange Point à Point & Multipoints), …
- Plus efficace que l’USB, …
RS232
– Signaux du Port série (Protocole RS232) :
Un port série en RS232 utilise le connecteur DB9 (9 voies).
L.bouhouch@uiz.ac.ma 50
RS232
– Paramètres du Protocole RS232 :
USART (Port Série) Interface de communication (Asynchrone) séries entre 2 app.
2 fils (Rx et Tx) plus la Masse sont nécessaires.
RS232
– Paramètres du Protocole RS232 :
Exemple de trame envoyée en série :
1 Start + 8 Data + 0 Parity + 1 Stop.
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 51
RS232
– Paramètres du Protocole RS232 :
Exemple de trame de caractère "A" envoyée en série :
1 Start + 8 Data + 0 Parity + 1 Stop.
Parité
Paire
Parité
Impaire
l.bouhouch@uiz.ac.ma 2016-2017
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 52
Programme de l’UART en MikroC
– Utilisation de l’UART :
l.bouhouch@uiz.ac.ma 2016-2017
void main()
{
TRISC = 0x80 ; // 1000 0000 --> PORTC en sortie sauf bit 7
PORTC.F0 = 1 ; // Led reliée à RC0 éteinte
L.bouhouch@uiz.ac.ma 53
Programme de l’UART en MikroC
– Utilisation de l’UART :
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 2016-2017
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.
L.bouhouch@uiz.ac.ma 54
Bus CAN
– Introduction au Bus CAN :
Contrôle Suspension
Moteur Clim
Réduction des Sièges
coûts de câblage Tableau
et de maintenance de Bord Plafonnier
Boite de
ABS Centralisation
Vitesses
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 109
l.bouhouch@uiz.ac.ma 2016-2017
Bus CAN
– Description :
L.bouhouch@uiz.ac.ma 55
Bus CAN
– Topologie du réseau :
Bus CAN
– Topologie du réseau :
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.
112
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 56
Bus CAN
– Topologie du réseau :
n = Nombre de nœuds
L = Longueur maximum du support de transmission.
113
l.bouhouch@uiz.ac.ma 2016-2017
Bus CAN
– Format des Trames de données du Bus CAN :
Norme CAN 2 formats de protocole :
Standard (Version 2.0 A) et
Extended (Version 2.0 B).
• 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. 114
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 57
Bus CAN
– Format des Trames de données du Bus CAN :
Composition de la trame :
115
l.bouhouch@uiz.ac.ma 2016-2017
Bus CAN
– Format des Trames de données du Bus CAN :
Composition de la trame :
2.0A
2.0B
116
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 58
Bus CAN
– Format des Trames de données du Bus CAN :
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.
117
l.bouhouch@uiz.ac.ma 2016-2017
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).
118
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 59
Bus CAN
– Format des Trames de données du Bus CAN :
2.0A
2.0B
Champ de Contrôle :
Bus CAN
– Format des Trames de données du Bus CAN :
2.0A
2.0B
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. 120
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 60
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.
121
l.bouhouch@uiz.ac.ma 2016-2017
Bus CAN
– Principe d’Arbitrage :
122
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 61
Bus CAN
– Principe d’Arbitrage :
Définitions :
"État Dominant" : État logique 0
"État Récessif" : État logique 1
En cas de Conflit ( Émission Simultanée) : 0 écrase 1.
123
l.bouhouch@uiz.ac.ma 2016-2017
Bus CAN
– Principe d’Arbitrage :
Exemple : 3 stations émettent en même temps :
Qui gagne l’arbitrage ?
Station 1 1 1 0 0 1 0 1 1 1 0écoute
1 1
Station 2 1 1 0 0 1 1 0 0 écoute
1 0 1 0
Station 3 1 1 0 0 1 0 1 1 0 1 0 1
Signal
sur le 1 1 0 0 1 0 1 1 0 1 0 1
bus
L.bouhouch@uiz.ac.ma 62
Bus CAN
– Principe d’Arbitrage :
Autre exemple :
1
0
Bus I2C
– Présentation :
I2C (Inter-Integrated Circuit-Communication) Bus de communication série synchrone.
Electriquement :
2 fils (SCL "Serial Clock" / SDA "Serial Data"), collecteur ouvert.
Repos (Etat 1) : 3.3 à 5V Niveau électrique Récessif.
Actif (Etat 0) : 0V Niveau électrique Dominant.
Bus libre : Les 2 fils sont au Niveau 1.
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 63
Bus I2C
– Protocole :
Le maître impose l'horloge sur la ligne SCL et transmet les adresses
Condition de départ et d’Arrêt :
- Si Transition sur SDA lorsque SCL = 1 Start ou Stop
Remarque :
Les conditions de départ et d’arrêt sont toujours générées par le maître du bus.
l.bouhouch@uiz.ac.ma 2016-2017
Bus I2C
– Protocole :
Echange de trames de données:
- Transition possible sur SDA uniquement lorsque SCL = 0 Donnée
Les esclaves ne font que répondre par le mécanisme de requête/réponse.
Après Start 7 bits d’Adresse unique
Ensuite le 8ème bit = R/W : Indique la direction du transfert
Adresse : Partie fixe (Firmware) + Partie configurable (User Address)
R/W = 0 Ecriture Maitre Parleur et Esclave Écouteur : Donnée envoyée à
esclave par le Maître.
R/W = 1 Lecture Maitre Écouteur et Esclave Parleur : Esclave revoie une
donnée au Maître.
La transmission se fait MSB first.
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 64
Bus I2C
– Protocole :
Exemple :
En général chaque CI possède 3 broches A2, A1 et A0 de sélection d‘adresse basse.
Broches de sélection Placer jusqu'à 8 CI de fonction identique sur le bus.
Cas d'EEPROM I2C 64 Kbits type 24C64 possède l'adresse 1010xxx.
Adresse choisie en fonction des niveaux logiques appliqués sur broches A2, A1, A0.
Exemple : En reliant A0 à 5V et A1 et A2 à 0V, le CI répondra à l'adresse I2C
1010001.
(Firmware) (User Address)
l.bouhouch@uiz.ac.ma 2016-2017
Bus I2C
– Transmission d'un octet :
A chaque impulsion sur SCL, 1 bit est transmis correspondant au niveau de SDA.
Cette opération est répétée pour les 8 bits.
Le bit de poids fort est transmis en premier.
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 65
Bus I2C
– Acquittement :
Après les 8 bits transmis, le récepteur acquitte la transmission au 9ème bit.
L’émetteur met sa ligne SDA au niveau Haut.
Le récepteur met sa ligne au niveau Bas.
Or sorties à collecteur ouvert Le récepteur l’emporte, SDA sera au niveau Bas.
Au coup d’horloge suivant, 2 possibilités :
- Le maitre voit un niveau Bas Octet bien reçu.
- Le maitre voit un niveau Haut Erreur de transmission donc arrêt.
l.bouhouch@uiz.ac.ma 2016-2017
Bus I2C
– Exemple de Trame :
Envoi de l’octet 0xB5 = (1011 0101)
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.
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 66
Bus I2C
– Transmission d'une adresse :
1ier octet transmis est une adresse correspondant à l’esclave choisi.
Bit A0 de l’adresse est réservé :
- Si R/W = 1 Maître demande une Lecture à l'esclave.
- Si R/W = 0 Maître demande une Ecriture à l'esclave.
l.bouhouch@uiz.ac.ma 2016-2017
Bus I2C
– Écriture d'une donnée :
Si bit R/W de l’adresse = 0 Maître doit transmettre 1 ou plusieurs octets de
données.
Après chaque bit ACK valide, le maître peut soit :
- Continuer d'envoyer des octets à l'esclave.
- Décider de terminer le dialogue par une condition d'arrêt.
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 67
Bus I2C
– Lecture d'une donnée :
Si bit R/W de l’adresse = 1 Maître veut lire des données issues de l'esclave.
Toujours maître génère signal d'horloge SCL.
Esclave prend le contrôle de la ligne SDA.
Après que l'esclave ait transmis les 8 bits de données Maître génère le bit ACK.
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).
l.bouhouch@uiz.ac.ma 2016-2017
Bus I2C
– Restart :
Possible d'enchaîner écriture et lecture de l'esclave sans passer par condition arrêt.
Restart permet de lire une donnée après écriture sans générer de stop entre les 2.
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 68
Bus I2C
– Présentation et connexions :
Certains PIC possèdent une interface I2C intégrée.
Lignes SCL et SDA sont connectées respectivement à RC3 et RC4.
l.bouhouch@uiz.ac.ma 2016-2017
Bus I2C
– Eléments constitutifs de la trame :
Octet d'identification (devsel) :
1ier octet émis par le maître : Permet de sélectionner le circuit ainsi que la nature
des opérations à effectuer (R/W).
- Bits 7 à 2 : ID du circuit (partie fixe = 1010 (bits 7 à 4) et partie variable (bits 3 et 2)
fixée par les états logiques des broches E2 et E1.
- Bit 1 : Accès à un des 2 blocs de 256 Ko.
- Bit 0 : Sélectionne le mode Lecture (1) ou mode Ecriture (0).
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.
L.bouhouch@uiz.ac.ma 69
Bus I2C
– Algorithme d'écriture (mode direct) :
Donnée rangée à l'adresse spécifiée par l'octet addr
Trame envoyée par le maître :
l.bouhouch@uiz.ac.ma 2016-2017
Bus I2C
– Algorithme de lecture (mode direct) :
Lecture : D’abord envoyer l'adresse au circuit en mode écriture. Puis
repositionner le circuit en mode lecture afin d'obtenir la (les) donnée(s).
l.bouhouch@uiz.ac.ma 2016-2017
L.bouhouch@uiz.ac.ma 70
Module Arduino
L.bouhouch@uiz.ac.ma 71
Arduino UNO
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 volatile) : 1 KB
Vitesse d’horloge : 16 MHz
Dimensions : 53 mm x 68 mm
Port I2C *
A4 – A5
Entrée DC 7-12 V
2,1 mm
L.bouhouch@uiz.ac.ma 72
Description E/S : ATMEGA 328
Vérifier / Compiler
Nouveau code
Sauver fichier
L.bouhouch@uiz.ac.ma 73
Programmation Arduino
Fonctions du code Arduino :
Essentiellement dans le code Arduino on trouve 2 fonctions :
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()
{
Programmation Arduino
Types de variables les plus répandus :
Quel nombre il Valeurs maximales Nombre sur 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 sur 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 Entier non négatif 0à1 8 1
l.bouhouch@uiz.ac.ma 2016-2017 148
L.bouhouch@uiz.ac.ma 74
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 :
• for
Opérateurs composés :
• && (ET booléen)
• switch … case • ++ (incrémentation)
• || (OU booléen)
• while • -- (décrémentation) (à revoir)
• ! (NON booléen)
• do ... while • += (addition composée)
• break Opérateurs bit à bit : • -= (soustraction composée)
• continue • *= (multiplication composée)
• return • & (ET bit à bit)
• /= (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 2016-2017 149
Programmation Arduino
– Références (Suite) :
Variables et constantes Types des variables
Variables utilisées pour stocker des valeurs Peuvent être de type variés décrits ci-dessous :
Exemple: Tension de sortie d'un capteur présente • boolean
sur une broche analogique. • char
• byte
Constantes prédéfinies du langage Arduino : • int
Valeurs particulières ayant • unsigned int
une signification spécifique. • long
• 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()
L.bouhouch@uiz.ac.ma 75
Programmation Arduino
– Références (Suite) :
Fonctions
Entrées/Sorties Numériques Temps Trigonométrie
• pinMode(broche, mode) • unsigned long millis() • sin(rad)
• digitalWrite(broche, valeur) • unsigned long micros() • cos(rad)
• int digitalRead(broche) • delay(ms) • tan(rad)
• delayMicroseconds(us)
Entrées analogiques Nombres randomisés
• int analogRead(broche) Math (hasard)
• min(x, y) • randomSeed(seed)
Sorties "analogiques" • max(x, y) • long random(max)
(Génération d'impulsion PWM) • abs(x) • long random(min, max)
• constrain(x, a, b)
• analogWrite(broche, valeur)
• map(valeur, toLow, fromHigh, Communication
toLow, toHigh) • Serial
Entrées/Sorties Avancées • pow(base, exposant)
• tone() • sq(x)
• noTone() • sqrt(x)
• shiftOut(broche, BrocheHorloge,
OrdreBit, valeur)
• unsigned long pulseIn(broche,
valeur)
Programmation Arduino
– Libraires (Micros programmes) :
Pour chaque interface il existe des librairies facilitant l’élaboration d’applications.
Librairies à télécharger et copier dans le dossier arduino/libraries/
#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>
L.bouhouch@uiz.ac.ma 76
Programmation Arduino
– Exemple : Lecture d’Entrées digitales avec
Ecriture sur des Sorties digitales
const int Led1 = 2 ; // Broche 2 nommée Led1
const int Led2 = 3 ; // Broche 3 nommée Led2
const int Led3 = 4 ; // Broche 4 nommée Led3
const int BP1 = 10 ; // Broche 10 nommée BP1
const int BP2 = 11 ; // Broche 11 nommée BP2
const int BP3 = 12 ; // Broche 12 nommée BP3
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 2016-2017 153
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);
}
L.bouhouch@uiz.ac.ma 77
Programmation Arduino
– Exemple : Ecriture sur une sortie analogique pour commander une
LED multicolore (SUITE)
Programmation Arduino
– Exemple : Ecriture sur une sortie analogique pour commander une
LED multicolore (SUITE)
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);
analogWrite(led_verte, 255);
analogWrite(led_bleue, 255);
break;
}
}
L.bouhouch@uiz.ac.ma 78
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) ;
Programmation Arduino
Affichage sur écran LCD (16x2)
L'afficheur LCD utilise 6 à 10 broches ((D0 à D7) ou (D4 à D7) + RS + E) et 2 pour
l'alimentation (+5V et masse).
L.bouhouch@uiz.ac.ma 79
Programmation Arduino
– Exemple 1 : Affichage sur écran LCD (16x2)
Montage à 6 broches : 4 bits de données + 2 bits de commande
// 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, … ,d7)
void setup()
{
lcd.begin(16,2) ; // Utilisation d'un écran 16 colonnes et 2 lignes
lcd.write("Salut !") ; // Test de vérification
}
Programmation Arduino
– Exemple 2 : Affichage sur écran LCD (16x2)
Montage à 6 broches : 4 bits de données + 2 bits de commande
// Affichage des nombres 0, 1, 2, …, 9 sur la 2eme ligne du LCD de manière infinie.
// 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,…, d7)
void setup()
{
lcd.begin(16,2) ; // Utilisation d'un écran 16 colonnes et 2 lignes
}
L.bouhouch@uiz.ac.ma 80
Annexes Microchip PIC
SFR du PIC 16F84 :
Registre d'état
STATUS IRP RP1 RP0 /TO /PD Z DC C
1 Entrée et 0 Sortie.
TRISB b7 b6 b5 b4 b3 b2 b1 b0
Registres de travail
PORTB b7 b6 b5 b4 b3 b2 b1 b0
/RBPU : Résistances de tirage (Pull-Up) à Vdd des entrées du port B (0 active le Pull-Up interne).
INTEDG : Définit front actif (1 = montant) provoquant l'interruption RB0 (Si interruptions activées).
T0CS : Définit la source utilisée par le Timer (0 pour horloge interne, 1 pour externe sur RA4).
T0SE : Définit le front actif sur RA4 qui fait avancer le compteur Timer0 (0 pour front montant).
PSA : Si 0 ==> Pré-diviseur assigné au Timer0. Si 1 ==> Pré-diviseur assigné au Watch Dog.
PS2 ... PS0 : Valeur du Diviseur de fréquence pour les TMR0 et le WDT, selon le tableau :
L.bouhouch@uiz.ac.ma 81
Effet de certaines opérations sur le registre d'état :
Bits de STATUS
Opération Description Notation
affectées
+ Addition c=a+b; C, DC, Z
- Soustraction c=a-b; C, DC, Z
& ET logique entre bits c=a&b; Z
| OU logique entre bits c=a|b; Z
^ OU Exclusif entre bits c=a^b; Z
~ Complémentarité a = ~a ; Z
++ Incrémentation k++ ; Z
-- Décrémentation k-- ; Z
<< Décalage gauche : c = a << b ; C
>> Décalage droite : c = a >> b ; C
L.bouhouch@uiz.ac.ma 82