Vous êtes sur la page 1sur 78

Informatique industrielle

Microcontrôleurs
Pr. Mohamed Hamlich
Sige.ensam@gmail.com
Cours multimédia disponible sur la chaine Youtube:
Mohamed Hamlich
https://www.youtube.com/channel/UCHg0qBfcUnqqowoYyYfzmdQ

Pr. Mohamed Hamlich 1


Plan
1. Structure interne des microcontrôleurs
1.1 Microprocesseur
1.2 Mémoires
1.3 Ports d’entrées sorties
a) Configuration
b) Programmation

2. Timers et interruptions
2.3 Interruptions
2.4 Timers
3. Ports analogiques
3.1 Description
3.2 Configuration et programmation
3.3 Applications
4. Ports séries
4.1 Description
4.2 Configuration et programmation
4.3 Applications

Pr. Mohamed Hamlich 2


Structure interne des microcontrôleurs

Structure interne du microcontrôleur PIC 16F887


Pr. Mohamed Hamlich 3
Structure interne des microcontrôleurs

1. Microprocesseur

 Circuit intégré qui charge, décode et exécute les instructions.

 Contient une UAL, une UC , des registres, etc…

 Critères de choix :

Type

Fréquence d’horloge

Mémoire cache

Pr. Mohamed Hamlich 4


Structure interne des microcontrôleurs
2. Mémoires
 Circuit intégré qui sert à stocker les données et les instructions.
 L’élément binaire est le bit; 1octet=8bits, 1Ko=1024octets
2.1 Mémoire RAM (Random access Memory)
 A accès aléatoire, dynamique, volatile et à lecture et écriture
 Critères de choix :
Type
Temps d’accès
Taille; capacité= 2˄k *n (bits) ; cs : sélection de boitier

Pr. Mohamed Hamlich 5


Structure interne des microcontrôleurs

2.2 Mémoire cache

 Mémoire statique plus rapide que la RAM

Capacité

Rapidité

Pr. Mohamed Hamlich 6


Structure interne des microcontrôleurs

2.3 Mémoire morte (ROM)

 Mémoire à lecture seule permanente

 Variantes:
 EPROM

 EEPROM

Pr. Mohamed Hamlich 7


Ports
PORTS d’entrées sorties
DU PIC 16F887

 Le nombre d’entrées sorties est parmi les critères de choix d’un


microcontrôleurs . Le PIC 16F887 possède 35 broches d’E/S ce qui est
suffisant pour la plus part des applications.

 Il possède des ports sur 8 bits nommés A,B,C,D et E.

 Chaque port est accompagné par le registre correspondant TRISX: -


TRISA, TRISB, TRISC- qui détermine la configuration, mais pas le
contenu des bits de port.
0 = Sortie, 1= entrée.

Pr. Mohamed Hamlich 8


Ports d’entrées sorties

Pr. Mohamed Hamlich 9


• Ecrire un programme qui allume toutes les leds.
Main()
{
TRISC=0B00000000; Configurer le port c en sortie
PORTC=0B11111111; Allumer toutes les leds
}
• Ecrire un programme qui
Allume et éteint alternativement
Les leds avec une temporisation
De 100ms.
RC0 220Ω
delay_ms(100): temporise de
100 ms.
RC1
Main() 220Ω
.
{ .
TRISC=0B00000000; .
PORTC=0B00000000;
While(1)
{
PORTC=~PORTC; PIC16F887
delay_ms(100); RC7 220Ω
}
}
Pr. Mohamed Hamlich 10
Ports d’entrées sorties

PORTA et le registre TRISA


 Le portA est un port bidirectionnel sur 8 bits. Les bits du registre
TRISA contrôlent les broches du portA, i.e. qui vont être comme des
entrées ou sorties:

Pr. Mohamed Hamlich 11


Ports d’entrées sorties
REGISTRE ANSEL
 Les bits du registre ANSEL déterminent si les broches du PORTA
doivent être configurés comme entrées analogiques ou entrées /
sorties numériques.

RA0 = AN0 (déterminé par le bit ANS0 du registre ANSEL)


RA1 = AN1 ( déterminé par le bit ANS1 du registre ANSEL)
RA2 = AN2 (déterminé par le bit ANS2 du registre ANSEL)
RA3 = AN3 (déterminé par le bit ANS3du registre ANSEL)
RA5 = AN4 (déterminé par le bit ANS4 du registre ANSEL)
Pr. Mohamed Hamlich 12
Ports d’entrées sorties
PORTB et le registre TRISB
 Le portB est un port bidirectionnel sur 8 bits. Les bits du registre
TRISB contrôlent les broches du portB, i.e. qui vont être comme des
entrées ou sorties:

Pr. Mohamed Hamlich 13


Ports d’entrées sorties
PORT ANSELH
 Les bits du registre ANSELH déterminent si les 6 broches du PORTB
doivent être configurés comme entrées analogiques ou entrées /
sorties numériques.

RB0 = AN12 (déterminé par le bit ANS12 du registre ANSELH)


RB1 = AN10 ( déterminé par le bit ANS10 du registre ANSELH)
RB2 = AN8 (déterminé par le bit ANS8 du registre ANSELH)
RB3 = AN9 (déterminé par le bit ANS9du registre ANSELH)
RB4 = AN11 (déterminé par le bit ANS11 du registre ANSELH)
RB5 = AN13 (déterminé par le bit ANS13 du registre ANSELH)
Pr. Mohamed Hamlich 14
Ports d’entrées sorties

 Tous les broches du port B ont des résistances de rappel


internes qui rendent ces broches idéales pour être connectés
à des interrupteurs.
 Pour connecter une résistance de rappel à une broche Rbi il
suffit de mettre le bit i du registre WPUB à 1.

 Un autre bit (RBPU) du registre OPTION_REG permet


d’activer tous les résistances de rappel du PORT B

Pr. Mohamed Hamlich 15


Ports d’entrées sorties

Pr. Mohamed Hamlich 16


Application
 Main()
 {
 TRISC.B0=0;
 PORTC.B0=0;
 While(1)
 {
 PORTC.B0=!PORTC.B0;
 delay_ms(200);
 }
 }

Pr. Mohamed Hamlich 17


Exercice 1:
• Si le BP est fermé alors toutes les leds clignotent avec temporisation=100ms
• Si le BP est ouvert alors clignotement des 4 leds alternativement de poids fort et
poids faible
Exercice 2:
• Si le BP est fermé alors chenillard avec temporisation=50ms
. …….
. .……
• Si le BP est ouvert alors clignotement des 4 leds alternativement de poids fort et
poids faible
• 1)10= 00000001)2
• 2)10=00000010)2
• 4)10=00000100)2
• 8)10=00001000)2
• 16)10=00010000)2
• 32)10=00100000)2
• 64)10=01000000)2
• 128)10=10000000)2 Pr. Mohamed Hamlich 18
LES INTERRUPTIONS DU PIC 16F887
 Une interruption provoque l’arrêt du programme principal pour aller
exécuter une procédure d'interruption.

 A la fin de cette procédure, le microcontrôleur reprend le programme


principal à l’endroit où il l’a laissé.

 A chaque interruption sont associés deux bits:


 un bit de validation : permet d'autoriser ou non l'interruption,
 un drapeau : permet au programmeur de savoir de quelle interruption il s'agit.
Exemple: l’interruption INT lui sont associé deux bits: INTE, INTF
RBI lui sont associés les bits: RBIE, RBIF

 Les interruptions sont classées en deux catégories, les interruptions


primaires et les interruptions périphériques. Elles sont gérées par les
registres :
Pr. Mohamed Hamlich 19
LES INTERRUPTIONS DU PIC 16F887

 Toutes les interruptions peuvent être validées/interdites par le bit


INTCON.GIE
 Toutes les interruptions périphériques peuvent être
validées/interdites par le bit INTCON.PEIE
 Chaque interruption peut être validée/interdite par son bit de
validation individuel
 En résumé, pour valider une interruption périphérique (par
exemple), il faut positionner 3 bits, GIE, PEIE et le bit individuel de
l’interruption.
Pr. Mohamed Hamlich 20
Déroulement d’une interruption

 Lorsque l'événement déclencheur d'une interruption intervient, alors


son drapeau est positionné à 1 (levé). Si l'interruption a été validée
(bits de validations = 1), elle est alors déclenchée : le programme
arrête ce qu'il est en train de faire et va exécuter la procédure
d'interruption (fonction interrupt()) qui se trouve à l'adresse 4 en
exécutant les étapes suivantes :

 l'adresse contenue dans le PC (Program Counter) est sauvegardée


dans la pile, puis remplacée par la valeur 0004 (adresse de la
routine d'interruption).

 Le bit GIE est placé "0" pour inhiber toutes nouvelles


interruptions.

Pr. Mohamed Hamlich 21


Déroulement d’une interruption

A la fin de la procédure d'interruption


 le bit GIE est remis à 1 (autorisant ainsi un autre événement)
 le contenu du PC est rechargé à partir de la pile ce qui permet au
programme de reprendre là où il s'est arrêté

Deux remarques importantes sont à faire :


 Le drapeau reste à l’état haut même après le traitement de l’interruption.
Par conséquent, il faut toujours le remettre à "0" à la fin de la routine
d'interruption sinon l'interruption sera déclenchée de nouveau juste après
l'instruction RETFIE
 Seul le PC est empilé automatiquement. Si cela est nécessaire, les registres
W et STATUS doivent être sauvegardés en RAM puis restaurés à la fin de la
routine pour que le microcontrôleur puisse reprendre le programme
principal dans les mêmes conditions où il l'a laissé.

Pr. Mohamed Hamlich 22


Les sources d’interruptions

Pr. Mohamed Hamlich 23


L'interruption RBI (RB0 A RB7 du portB)
Cette interruption est provoquée par un changement d'état sur l'une
des entrées RB0 à RB7 du port B, Le front n'a pas d'importance. Les
bits associés sont RBIE (validation) et RBIF (drapeau).
 Le changement d’état sur la broche en question provoque une
interruption.
 Pour autoriser l’interruption sur la broche Rbi le bit i du registre
IOCB doit être mis à 1

Pr. Mohamed Hamlich 24


L'interruption INT (Entrée RB0 du port B)
C’est une entrée qui déclenche une interruption si un front
descendant ou montant arrive sur RB0.
 La nature du front est programmé par le bit INTEDG du registre
OPTION_REG; 1=montant, 0=descendant
 Cette interruption est provoquée par un changement d'état sur
l'entrée RB0 du port B quand elle est programmée en entrée.
 Elle est gérée par son bit de validation INTE et son drapeau INTF,

Pr. Mohamed Hamlich 25


Application
• Le programme principal doit faire clignoter la Led avec temporisation=30ms.
• Si l’interruption INT arrive (appuie sur BP) alors comptage de 0 à 9 sur l'afficheur BCD 7
segments puis retour au programme principale.
• Donner le programme complet (SPI et PP)

Pr. Mohamed Hamlich 26


Application
 Void interrupt()  Void main()
 { int i;  {TRISB.B0=1;
 ANSELH=0;
 for(i=0;i<10;i++)
 TRISD.B7=0;
 {  TRISC=0;
 PORTC=i;  INTCON.GIE=1; Autoriser l’interruption
 delay_ms(100);  INTCON.INTE=1;
 }  OPTION_REG.INTEDG=1;
 while(1)
 INTCON.INTF=0;
 {
 }  PORTD.B7=!PORTD.B7;
 delay_ms(30);
 }
 }

Pr. Mohamed Hamlich 27


Le Timer TMR0
C’est un compteur 8 bits ayant les caractéristiques suivantes :
 Il est incrémenté en permanence soit par l’horloge interne Fosc/4
(mode timer) soit par une horloge externe appliquée à la broche RA4
du port A (mode compteur).
– T0CS = 0 alors horloge interne
– T0CS = 1 alors horloge externe appliquée à RA4
– T0SE = 0 alors incrémentation sur fronts montants
– T0SE = 1 alors incrémentation sur fronts descendants

Pr. Mohamed Hamlich 28


Le Timer TMR0
 Quelque soit l'horloge choisie, on peut la passer dans un diviseur de
fréquence programmable (prescaler) dont le rapport est fixés par les
bits PS0, PS1 et PS2 du registre OPTION_REG (tableau).
– PSA = 0; on utilise le prédiviseur
– PSA = 1; pas de prédiviseur (affecté au chien de garde)

Pr. Mohamed Hamlich 29


Le Timer TMR0
 Le contenu du timer TMR0 est accessible par le registre qui porte le
même nom. Il peut être lu ou écrit à n'importe quel moment.
 Au débordement de TMR0 (FF à 00), le drapeau T0IF est placé à 1.
Ceci peut déclencher l'interruption T0I si celle-ci est validée

Pr. Mohamed Hamlich 30


Application : clignoter LED/TMR0
On veut réaliser un signal carré de période 100ms à
l'aide de TMR0 (horloge Fosc=4Mhz)
1) Par scrutation du drapeau T0IF (pas d'interruption)
2) En utilisant l'interruption T0I

Tosc x 4 x 256 x Pr = 0,05


Pr≈195 2) Void interrupt()
Nous allons prendre Pr=256 et nous recalculons le modulo {PORTC.B0=!PORTC.B0;
du TMR0. INTCON.TMR0IF=0;
Modulo= 195, donc il faut charger le TMR0 par TMR0=61;
256-195= 61 pour avoir ce modulo.
}
1) main()
{ TRISC.B0=0;
main()
OPTION_REG=0B00000111;
{ TRISC.B0=0;
while (1)
OPTION_REG=0B00000111;
{INTCON.TMR0IF=0;
INTCON.GIE=1;
TMR0=61;
while(INTCON.TMR0IF==0);
INTCON.TMR0IE=1;
PORTC.B0=!PORTC.B0;
TMR0=61;
}} while (1);
}

Pr. Mohamed Hamlich 31


Le Timer TMR1
 TMR1 est un Timer/Compteur 16 bits accessible en lecture/écriture
par l'intermédiaire des registres 8 bits TMR1H et TMR1L qui
constituent sa partie haute et sa partie basse.

Pr. Mohamed Hamlich 32


Le Timer TMR1
 A son débordement (FFFFh à 0000h) le drapeau TMR1IF est positionné ce
qui peut déclencher l'interruption périphérique TMR1I si elle est validée.

 TMR1 peut fonctionner dans 3 modes différents :


 Timer Synchrone (horloge interne)
 Compteur Synchrone (horloge externe)
 Compteur Asynchrone (horloge externe)

 Le bit de contrôle TMR1CS détermine le fonctionnement en Timer ou en


Compteur et le bit T1SYNC détermine le mode de fonctionnement en
synchrone ou en asynchrone

 TMR1 peut être RAZ à l'aide du module de capture/comparaison CCP

 TMR1 peut être précédé d'un prédiviseur (Prescaler) qui peut diviser la
fréquence par 1, 2, 4 ou 8 selon la valeur des bits T1CKPS1 et T1CKPS0

Pr. Mohamed Hamlich 33


Le Timer TMR1

 Le mode TIMER: Dans ce mode, TMR1 est incrémenté par l’horloge


système Fosc/4 éventuellement prédivisée.

 Le mode Compteur: Dans ce mode, TMR1 est incrémenté à chaque


front montant de l'horloge externe T1CKI (RC0) ou l'horloge interne
générée par l’oscillateur dédié T1OSC à condition de positionner le bit
T1OSCEN à 1 et de brancher un quartz entre les broche RC0 et RC1.

 En mode compteur, RC0 et RC1 sont automatiquement configurées


en entrée, on n’a pas besoin de les configurer.

Pr. Mohamed Hamlich 34


Le Timer TMR1

T1CKPS1,T1CKPS0 : Control du prescaler


00 : division par 1
01 : division par 2
10 : division par 4
11 : division par 8
T1OSCEN : Validation de l'Oscillateur associé à TMR1
0 : Oscillateur arrêté
1 : Oscillateur activé
T1SYNC : Synchronisation de l'horloge externe (ignoré en mode timer)
0 : Synchronisation
1 : pas de synchronisation
TMR1CS : Choix de l'horloge du Timer
0 : horloge système (Fosc/4) : mode timer
1 : Horloge externe : mode compteur
TMR1ON : Démarrer arrêter le timer
0 : Timer stoppé
1 : Timer en fonctionnement

Pr. Mohamed Hamlich 35


Le module de conversión A/N

Pr. Mohamed Hamlich 36


Le module de conversión A/N
 Convertisseur Analogique Numérique 10 bits. Les tensions de
références permettant de fixer la dynamique du convertisseur. Elles
peuvent être choisies parmi Vdd, Vss, Vr+ ou Vr-

Pr. Mohamed Hamlich 37


Le module de conversión A/N
 La conversion démarre quand on place le bit GO/DONE à 1.
 A la fin de la conversion, le résultat de conversion est recopié dans les
registres ADRESH et ADRESL, le bit GO/DONE repasse
automatiquement à 0 et le drapeau ADIF (situé dans PIR1) passe à 1
ce qui peut déclencher l’interruption associée si elle est validée.
 Le control du module se fait par les deux registres ADCON0 et
ADCON1

Pr. Mohamed Hamlich 38


Le module de conversión A/N

x = ADC_Read(2)

Pr. Mohamed Hamlich 39


Le module de conversión A/N
Fréquence d'échantillonnage: Si on veut échantillonner un signal variable, La période
d'échantillonnage Te doit être supérieur ou égale à Temin =TACQ + TCONV

Quelle est la relation entre la tension analogique convertie et le nombre N recueilli dans le
registre ADRES ?
Si on note :
• Q = pas de quantification = (Vref+ - Vref-)/1024
• Va = tension analogique à convertir
• N = valeur numérique obtenue,

Pr. Mohamed Hamlich 40


Le module de conversión A/N

Programmation:
 Configurer les E/S en Analogique/digital/Référence (ADCON1)
 Configurer les entrées analogiques en entrées (TRISA, TRISE)
 Définir l'horloge de conversion, Valider le module (ADCON0)
 Choisir le canal à convertir (ADCON0)
 Lancer la conversion, GO_DONE = 1 (ADCON0)
 Attendre fin de conversion, GO_DONE = 0 ou interruption si
validée
 Lire le résultat
 Arrêter le convertisseur ou recommencer au point 6

Pr. Mohamed Hamlich 41


Main()
{
TRISC=0;
TRISD=0;
ANSEL=0xFF;
TRISA.B0=1
ADCON0=0B11000001.
ADCON1=0;
While(1)
{
ADCON0.B1=1; go/done=1
While (ADCON0.B1==1);
PORTC=ADRESH;
PORTD=ADRESL;
}
}
Pr. Mohamed Hamlich 42
Le module de conversión A/N à l’aide de Mikroc
Fonction ADC_Read()
Cet exemple de code lit la valeur analogique du canal 2 et l'affiche sur PORTB et PORTC.
unsigned int x;
void main() {
ANSEL = 0xFF; // Configure AN2 pin as analog
ANSELH = 0; // Configure other AN pins as digital I/O
TRISA = 0xFF; // PORTA is input
TRISC = 0; // PORTC is output
TRISB = 0; // PORTB is output
do {
x = ADC_Read(2); // Get 10-bit results of AD conversion

}
while(1); }

43
GESTION D’UN AFFICHEUR LCD
EN MIKROC
• Le module vient dans différentes formes et tailles. Des
modules avec 8, 16, 20, 24, 32 et 40 caractères sont
disponibles.

• Selon le modèle, l'écran LCD est fabriqué avec 14 ou 16


pattes pour l'interface.

• Le tableau suivant présente la configuration des pattes et


les fonctions des pattes d’un LCD à 14 pattes.
• VEE est désigné pour réglage du contraste de l'affichage et doit être
reliée à une alimentation en courant continu. Un potentiomètre est
généralement connecté à l'alimentation avec son curseur raccordé à
la patte VEE et l'autre patte du potentiomètre relié à la masse.
• De cette façon la tension à la patte VEE, et où le contraste de
l'affichage, peut être réglée à volonté.
• le registre de sélection (RS): indique s’il s’agit d’une commande ou
d’une donnée
• Lecture / écriture (R / W). Cette patte est reliée avec la masse (état
logique bas) afin d'écrire des données de caractères au module
LCD. Lorsque cette broche est à +5 V (états logique haut) donc
les informations sortants du module LCD peuvent être lues.
• la validation (EN), qui est utilisé pour initier le transfert de
commandes ou de données entre le module et le microcontrôleur.
Lors de l'écriture à l'écran, les données sont transférés
uniquement sur le front descendant (haut-bas) sur cette patte.

• Lors de la lecture de l’affichage, les données deviennent accessibles


après le front montant (bas-haut) de la patte de validation, et ces
données demeurent tant que la patte de validation est au niveau
logique haut.

• Les broches 7 à 14 sont les huit lignes de bus de données (D0 à D7).
Les données peuvent être transférées entre le microcontrôleur et le
module LCD à l'aide soit d'un seul octet de 8 bits soit de deux 4-bits.
Dans ce dernier cas, seuls les quatre lignes de données supérieures
(D4 à D7) sont utilisées. Le 4-bits mode a l'avantage de nécessiter
moins de lignes d'E / S pour communiquer avec l'écran LCD.
• Le mikroC LCD bibliothèque fournit un grand nombre de fonctions
pour contrôler du texte LCD avec 4-bits et les interfaces de données
8-bit, et pour les graphiques LCD. La plus courante sont les 4-bit
interface en mode texte sur écran LCD. Ce qui suit sont les fonctions
disponibles pour LCD 4-bit interface en mode texte LCD :

• Lcd_Config
• Lcd_Init
• Lcd_Out
• Lcd_Out_Cp
• Lcd_Chr
• Lcd_Chr_Cp
• Lcd_Cmd
• Lcd_Config

La fonction Lcd_Config est utilisée pour configurer l'interface LCD. La


connexion par défaut entre le LCD et le microcontrôleur est la suivante :

• LCD Patte du port de microcontroleurs


• RS → 2
• EN → 3
• D4 → 4
• D5 → 5
• D6 → 6
• D7 → 7
• Lcd_Init

La fonction Lcd_Init est appelée pour configurer l'interface entre


le microcontrôleur et l'écran LCD lorsque les connexions sont
faites par défaut que vient d'être illustré. Le nom du port doit
être spécifié en passant son adresse. Par exemple, en supposant
que LCD est reliée à PORTB et les connexions par défaut
précédentes sont utilisées, la fonction doit être appelée en tant
que :
Lcd_Init();
• Lcd_Out
La fonction Lcd_Out affiche du texte à la ligne indiquée et la
position des colonnes de l'écran LCD. La fonction doit être appelée avec
des paramètres dans l'ordre suivant :
ligne, colonne, texte
Par exemple, pour afficher du texte "Ordinateur" à la ligne 1 et la
colonne 2 de l'écran LCD nous devrions appeler la fonction comme suit :
Lcd_Out (1, 2, "Ordinateur");
• Lcd_Out_Cp
La fonction Lcd_Out_Cp affiche le texte à la position actuelle du
curseur.
Par exemple, pour afficher le texte "Ordinateur" à la position
actuelle du curseur, la fonction devrait être appelé en tant que :
Lcd_Out_Cp ("Ordinateur");
• Lcd_Chr
La fonction Lcd_Chr affiche un caractère à la ligne indiquée
et la colonne la position du curseur. La fonction doit être
appelée avec les paramètres dans le l'ordre suivant :
ligne, colonne, caractere
Par exemple, pour afficher caractère "K" à la ligne 2 et la
colonne 4 de l'écran LCD nous devrions appeler la fonction
de :
Lcd_Chr(2, 4, ‘K’);
• Lcd_Chr_Cp
La fonction Lcd_Chr_Cp affiche un caractère à la position actuelle du
courser. Par exemple, pour afficher le caractère "M" à la position
actuelle du curseur, la fonction doit être appelée en tant que :
Lcd_Chr_Cp ('M');

• Lcd_Cmd
La fonction Lcd_Cmd est utilisée pour envoyer une commande à
l'écran LCD. Avec cette commande, nous pouvons déplacer le
curseur vers n'importe quelle ligne, désactiver l'écran LCD, faire
clignote le curseur, décaler l'affichage, etc. Une liste des plus
couramment utilisés commandes LCD est donnée dans Tableau ci-après:
Par exemple, pour effacer l'écran LCD nous devrions appeler la fonction
comme suit : Lcd_Cmd (Lcd_Clear);
Afficher variable int
• void main(){
• int j = -4220;
• char txt[7];
• IntToStr(j, txt);
• ANSEL = 0; // Configure AN pins as digital I/O
• ANSELH = 0;
• Lcd_Init();
• Lcd_Cmd(_LCD_CLEAR); // Clear display
• Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off
• Lcd_Out(1,6,txt); // Write text in first row
Informatique industrielle
Chapitre 6: Transmission de données

Pr. Mohamed Hamlich


Sige.ensam@gmail.com

Pr. Mohamed Hamlich 61


Transmission de données
Deux types de transmission de données :

Parallèle: Consiste à transmettre chaque


caractère par son code ASCII sur 8bits
(fils)

Série : Consiste à transmettre bit par bit


chaque caractère sur un seul fil.
Liaison série Liaison parallèle

Pr. Mohamed Hamlich 62


Transmission série : deux types
 Synchrone: L’émetteur et le récepteur sont synchronisés par
un signal d’horloge

 Asynchrone : Pas de signal d’horloge et donc l’émetteur et le


récepteur utilisent des bits redondants dans le signal de
données pour se synchroniser.

 Necessité de standards et normes pour communiquer


 Normes électriques
 Normes de protocole de communication

63
Pr. Mohamed Hamlich
Transmission série asynchrone
 les caractères sont émis de façon irrégulière,
comme par exemple des caractères tapés sur un
clavier, l’intervalle de temps entre deux caractères
est aléatoire, le début d’un caractère peut survenir
à n’importe quel moment.

 Le bit de départ (START) indique le début d’un


caractère et celui ou ceux d’arrêt (STOP) – il peut
y’en avoir ‘1’ ou ‘2’ – marquent la fin de caractère.

Pr. Mohamed Hamlich 64


Transmission série asynchrone
 Un bit de parité peut être utilisé pour détecter les erreurs
susceptibles d’apparaître pendant la transmission.
 Il existe deux types de contrôle de parité (pair et impair) et il est
indispensable que l’émetteur et le récepteur s’entendent sur le type à
utiliser pour l’ensemble de la transmission:
 Avec la parité paire, si le nombre de ‘ 1 ‘ dans les données envoyées est
impaire alors le bit de parité est égal à ‘ 1 ‘ de manière à ce que le
nombre total de ‘ 1 ‘ soit pair y compris le bit de parité, et si le nombre
de ‘ 1 ‘ est déjà pair alors le bit de parité vaudra ‘ 0 ‘.
 Une parité impaire correspond au système inverse.

Pr. Mohamed Hamlich 65


Transmission série asynchrone

Pr. Mohamed Hamlich 66


Informatique industrielle
Bus I2C

Pr. Mohamed Hamlich


Sige.ensam@gmail.com

Pr. Mohamed Hamlich 67


I2C : Introduction

 I2C est le sigle d'Inter-Integrated Circuit. À la fin des années 1970, la


division des semi-conducteurs de chez Philips (maintenant
devenue NXP) avait vu la nécessité de simplifier et standardiser les
échanges de données entre les différents circuits intégrés dans leurs
produits.

 Leur solution fut le bus I2C, elle réduisait le nombre de lignes


nécessaires à seulement deux lignes, SDA - Serial DAta, et SCL - Serial
CLock.

 Dans ce cours, nous allons décrire l'architecture physique du bus I2C,


le protocole de communication série et comment communiquer en
I2C
Pr. Mohamed Hamlich 68
I2C : Vitesse

 À l'origine, la communication était limitée à la vitesse de transfert de


100 kbit/s, et cela suffisait dans la majorité des cas.

 Pour des débits plus rapides, de nouvelles spécifications sont nées.


D'abord un Fast Mode à 400 kbit/s, puis un Fast Mode plus (FM+) à 1
Mbit/s.

 Depuis 1998, il y a une version High Speed à 3,4 Mbit/s. Le débit


maximal possible via un bus I2C est spécifié dans l'Ultra Fast mode à
5 Mbit/s, mais avec un fonctionnement un peu particulier.

Pr. Mohamed Hamlich 69


I2C : caractéristiques

 Seulement deux lignes (bidirectionnelles) sont nécessaires, - SDA -, -


SCK -;
 Transmission synchrone. Contrairement à la liaison RS232. Ici, le
périphérique maître (master) génère le signal d'horloge qui
synchronise et cadence les échanges ;
 La relation entre les périphériques du bus est de type maître-esclave
(master/slave).
 chaque périphérique sur le bus I2C possède une adresse unique;
 l'I2C gère le fonctionnement multimaître (multi-master),
Pr. Mohamed Hamlich 70
I2C : bit dominant

Sur le bus I2C le niveau logique dominant est le 0, le niveau récessif est
le 1. En absence de commande le niveau logique (repos) est donc 1. Le
bus doit être équipé de deux résistances de pull-up (4K à 10K)
Pr. Mohamed Hamlich 71
I2C : Contrôle du bus

• Les échanges commencent toujours par une condition START sur


SCL/SDA et finissent par une condition STOP

• Les bits sont transférés sur le front


descendant de SCL
• Le bus I2C pouvant accueillir plusieurs esclaves ceux-ci sont identifiés
par une adresse sur 7 bits, le 8 ième bits de l’octet indique s’il s’agit
d’une opération d’écriture dans l’esclave (0) ou de lecture (1).

Pr. Mohamed Hamlich 72


I2C : Transmission d’une adresse

• Le premier octet envoyé correspond à l’adresse de l’esclave choisi


suivi d’un bit de lecture ou écriture.
• Par exemple pour un circuit dont l’adresse est 0b1010000. L’adresse
I2C en écriture sera 0b10100000 (0xA0) et 0b10100001 (0xA1) en
lecture.

Pr. Mohamed Hamlich 73


I2C : Transmission d’un octet

• Le bit de pois fort est transmis en premier

• A chaque période de SCL, un bit de SDA est transmis

Pr. Mohamed Hamlich 74


I2C : Ecriture d’une donnée

• Le bit de R/W = 0;

• Après chaque bit ACK valide, il peut y avoir deux cas :


• Le maitre continue d’envoyer des octets à l’esclave
• Le maitre décide de terminer le dialogue en envoyant une
condition de stop.

Pr. Mohamed Hamlich 75


I2C : Lecture d’une donnée

• Le bit de R/W = 1;

• C’est toujours le maitre qui génère SCL.


• L’esclave prend le contrôle de SDA.
• C’est le maitre qui génère ACK après chaque octet envoyé par
l’esclave.

Pr. Mohamed Hamlich 76


I2C : Lecture et écriture
• Il est possible d’enchainer lecture et écriture sans passer par une
condition de stop ;
• Cela est possible grâce au bit « Repeat Start »
• Exemple d’application:

Pr. Mohamed Hamlich 77


I2C : Exemple d’application

Pr. Mohamed Hamlich 78

Vous aimerez peut-être aussi