Computing">
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
100% ont trouvé ce document utile (1 vote)
83 vues35 pages

Cours 4 ASP GBM3-LMD

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1/ 35

Institut Supérieur des Technologies Médicales

de Tunis

Cours : Architecture des


systèmes à processeurs
3ème année Licence Appliquée en GBM

Cours Préparé par :


M. Hedi ABDELKRIM
M. Slim BEN OTHMAN
M. Ahmed Karim BEN SALEM
M. Taoufik Majoul
(Classés par ordre alphabétique de noms)
2021/2022
Chapitre 4
Programmation Avancée des microcontrôleurs

 4.1 Le CAN
 4.2 La liaison série
 4.3 Le watchdog
Le Convertisseur Analogique Numérique

 Dans les microcontrôleurs, les canaux de conversion


analogique/numérique sont souvent multiplexés.
 Ceci signifie que la fréquence maximale de conversion analogique
numérique est divisée par le nombre de voies utilisées.

 Très souvent, il faut configurer les entrées de conversion en « entrée


analogique »
 car celles-ci peuvent aussi être utilisées en entrées numériques.

3
Illustration du fonctionnement d’un CAN
Etude du CAN du 16F877a

D’après le document technique du 16F877a :


 Quel est le nombre de bits du Convertisseur AN ?
 Dans quels registres est stocké le résultat ?
 Combien possède t-on de voies multiplexées ?
 A quoi correspondent Vref+ et Vref- ?
 Comment configure-t-on une entrée en analogique ?

5
Bloc diagramme du CAN du 16F87XA

6
Exemple d’application
Sur l’application ci-dessous, quelle est la résolution maximale possible ?

 Donner l’expression de la résolution en fonction de Vref+, Vref- et du nombre


de bits du convertisseur.
 Exprimer la valeur analogique en fonction de Vref+, Vref- et de la valeur 7

numérique donnée par le convertisseur.


Récupération des valeurs converties
Donner le code C permettant d’obtenir un entier représentatif de la valeur de
conversion en fonction des valeurs de ADRESH et ADRESL.
#Byte ADRESL=0x9E
#Byte ADRESH=0x1E

8
Les tensions de références
Le schéma représente les plages de valeurs possibles pour Vref+ et Vref-.

9
Etude de cas pratique

La tension d’une batterie est celle d’une cellule lithium-ion qui possède les
caractéristiques suivantes :
Umin=2,5 V Umax= 4,3V
Danger si en dehors de cette zone

Udéchargée=3 V Un=3,6 V Uchargée=4,2 V

Donner les valeurs de votre choix pour les tensions de références


Donner la résolution de la conversion
Donner l’expression de la tension en fonction de la valeur numérique de la
conversion.
10
Vitesse maximale du convertisseur

11
Exemple de codes
#include <16F877A.h>
#device ADC=10 //N=10bits pour le CAN interne
#use delay(clock=8000000) //Horloge à 8 MHz
#fuses HS,NOWDT,NOLVP

void main()
{
int16 valeur; //Déclaration d’une variable valeur en entier 16 bits
int tension;
setup_adc_ports(ALL_ANALOG); //Configuration des 8 voies du CAN en analogique
setup_adc(ADC_CLOCK_INTERNAL); //Utilisation de l’horloge interne
while(1) //Boucle infinie
{ set_adc_channel(1); //Utilisation de la voie 1 du micro-contrôleur (broche A1)
valeur=read_adc(); //Lecture de la broche A1, dans la variable valeur
Tension=(int)(5/1023)*valeur;
}
} 12
Chapitre 4
Programmation Avancée des microcontrôleurs

 4.1 Le CAN
 4.2 La liaison série
 4.3 Le watchdog
La liaison série
La liaison série USART (Universal Synchronous Asynchronous Receiver Transmitter)
est le mode le plus répondu pour communiquer (et aussi le plus vieux).

Une liaison série


permet de
transmettre des
données sur un
nombre limité de fils

14
Principe
Connexions (1)
d’une communication série
 Cette liaison peut être « half duplex » (liaison synchrone) ou « full duplex » (liaison
asynchrone).

 Sur
le microcontrôleur PIC16F877A, la liaison série asynchrone peut être mise en
œuvre à l’aide des pins RxD et TxD. Elle est réalisée par un USART :
- RxD, signal de réception de l’USART
- TxD, signal de transmission de l’USART

15
Détails des connexions de la liaison série
1ère étape : Configurer la transmission
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

2ème étape : Envoyer et recevoir des données

printf("Hello World!"); // Affichage Message sur port série


val = gethex(); // Lecture d’une valeur hexadécimale sur 8 bits
dir=getc(); // Lecture d’un caractère
putc(carac); // Affichage d’un caractère
16
Exemple de codes
#include <16F877A.h>
#use delay(clock=8000000) //Horloge à 8 MHz
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#include <input.c>
void main()
{ BYTE speed, steps;
char dir;
while(1) //Boucle infinie
{ printf("\n\r Speed (hex): "); //Affichage de message avec retour à la ligne
speed = gethex(); //Lecture d’une valeur hexadécimale
printf("\n\rDirection (F,R): ");
dir=getc(); //Lecture d’un caractère
putc(dir); //Affichage d’un caractère
printf("\n\rSteps (hex): ");
steps = gethex();
cmd_moteur(speed,dir,steps); 17

}
}
Liaison SPI (Serial Peripheral Interface)
- Protocole de communication série proposé par Motorola dans les années 1980

- Communication synchrone fonctionnant en full-duplex

- Communication maître-esclave (ex. entre un microcontrôleur et un périphérique : mémoires, cartes


SD, RTC, capteur, etc.)

- SPI : utilisation d’un signal de synchronisation entre maître et esclave et d’une ligne de données

- Le signal CLK parvient du maître à l’esclave

18
Principes de la communication SPI (1/2)
Bus SPI : un seul maître et au moins un esclave

Le bus SPI se base sur 4 signaux :

- Master – Out / Slave – In (MOSI) : données envoyées du maître vers l’esclave


- Master – In / Slave – Out (MISO) : données issues de l’esclave
- Serial Clock (SCLK) : signal d’horloge généré par le maître
- Chip Select (CS) ou Slave Select (SS) : selection de l’esclave par le maître

19
Principes de la communication SPI (2/2)
- La liaison SPI est une communication full-duplex : à chaque cycle d’horloge un bit
de donnée est échangé simultanément du maître vers l’esclave (ligne MOSI) et de
l’esclave vers le maître (ligne MISO)

- Après 8 cycles d’horloge 1 octet de données est échangé dans les deux sens

- Il est possible d’avoir plusieurs esclaves mais il n’est possible au maître que de
communiquer avec un seul d’entre eux, en utilisant la ligne CS (ou SS)

20
Configurations SPI
Dans un bus SPI, deux configurations sont possibles :
“Independent Slave Configuration” ou “Daisy Chain Configuration”

“Independent Slave” “Daisy Chain”

- Le maître réserve une ligne CS pour chaque esclave - Une seule ligne CS pour tous les esclaves
du bus SPI - Connexions MOSI-M/MOSI-E1, MISO-E1/MOSI-
- Toutes les lignes MOSI et MISO des esclaves sont E2,…, MISO-En/MISO-M
reliées aux lignes MOSI et MISO du maître

21
Commandes SPI (compilateur CCS)
Directive de configuration du bus SPI
#use spi (options)

Principales fonctions
setup_spi(mode), setup_spi2(mode) : configuration du mode SPI

spi_data_is_in(), spi_data_is_in2() : retourne TRUE si le buffer associé à la


reception SPI dispose d’un octet de données

spi_write(value), spi_write2(value) : transmet une valeur sur l’interface SPI

spi_read(value), spi_read2(value) : récupère une valeur sur l’interface SPI

22
Liaison série I2C (Inter-Integrated Circuit)
- Bus de communication développé par la société Philips dans les années 1980

- Bus série synchrone bifilaire : SDA (Serial Data Line) : ligne de données bidirectionnelle,
half-duplex et SCL (Serial Clock Line) : horloge de synchronisation bidirectionnelle

- Il est contrôlé par un maître (un microcontrôleur généralement) et possède au moins un


esclave, identifié par une adresse unique écrite sur 7 bits (fixée par le constructeur et donc
non modifiable)

23
Communication maître/esclave

- Le dialogue se fait uniquement entre LE maître et UN esclave

- Seul le maître peut initier (condition Start) ou terminer (condition Stop) le dialogue

- Le signal d’horloge est généré par le maître. 3 fréquences possibles :


• 100 KHz (standard mode),
• 400 KHz (Fast mode)
• 1 MHz (High-speed mode)

- La fréquence d’horloge du bus I2C est imposée par l’élément le plus lent

- Le maître et l’esclave utilisent la ligne SDA pour échanger les données


24
Spécificités du protocole I2C (1/2)
- Les données échangées présentent la disposition suivante :

- Condition Start : le maître fait passer la ligne SDA du niveau haut au niveau bas,
SCL étant au niveau haut.
- Condition Stop : une fois l’échange est terminée, le maître fait passer la ligne SDA
du niveau bas au niveau haut, SCL étant au niveau haut.

25
Spécificités du protocole I2C (2/2)

- Bits d ’adresse : l’adresse de l’esclave avec qui le maître échange (émet/reçoit) des
données. Elle est envoyée à tous les esclaves connectés au bus I2C
- Bit Read/Write : spécifie le sens des données échangées
(0 : maître vers esclave et 1 : esclave vers maître)
- Bit ACK/NACK : prend 0 si un esclave connecté au bus dispose de l’adresse diffusée par le
maître sinon prend 1 (valeur par défaut)
- 8 bits de données : présente l’information envoyée par l’émetteur (maître ou esclave). Le bit ACK
prendra 0 si le récepteur a reçu les données. La séquence 8 bits de données suivi par le Bit
ACK/NACK se répète jusqu’à ce que toutes les données sont envoyées 26
Commandes I2C (compilateur CCS)
Directive de configuration du bus I2C
#use I2C(options)
- #use i2c(master, fast, SCL=PIN_C3, SDA=PIN_C4, Force_HW)
master : déclaration du bus I2C pour un PIC fonctionnant en maître
fast : échange à une vitesse de 400 kHz. (Par défaut le bus fonctionne en mode slow :
100 kHz)
- #use i2c(slave, SCL=PIN_C3, SDA=PIN_C4, address=0xA0)
slave : déclaration du bus I2C pour un PIC fonctionnant en esclave

Principales fonctions
- i2c_start() : lancement (ou changement du sens) d’un dialogue I2C par un maître
- i2c _stop() : arrêt d’un dialogue I2C
- i2c _write(data) : envoie d’une information
- i2c _read() : réception d’une information
- i2c_poll() : retourne TRUE si le hardware a reçu un octet dans le buffer. Ne concerne que le
mode esclave.
27
Exemple : communication PIC16F877/DS1621 (1/2)
DS1621 : thermomètre numérique et thermostat

Trame de données échangée

28
Exemple : communication PIC16F877/DS1621 (1/2)
Adressage du DS1621
Ici A2, A1 et A0 seront reliées au GND
L’adresse du DS1621 est donc 0x90 en écriture(bit R/W=0) et 0x91 en lecture(bit R/W=1)
Commandes/Valeurs de contrôle

29
Liaison I2C PIC16F877/DS1621
U1
13 33
OSC1/CLKIN RB0/INT
14 34
OSC2/CLKOUT RB1
35
RB2
2 36
RA0/AN0 RB3/PGM
3 37
RA1/AN1 RB4
4 38
RA2/AN2/VREF-/CVREF RB5 R2 R1
5 39
RA3/AN3/VREF+ RB6/PGC 4.7k 4.7k
6 40
RA4/T0CKI/C1OUT RB7/PGD
7
RA5/AN4/SS/C2OUT
15
RC0/T1OSO/T1CKI
8 16
RE0/AN5/RD RC1/T1OSI/CCP2
9 17
RE1/AN6/WR RC2/CCP1
10 18
RE2/AN7/CS RC3/SCK/SCL
23
R 1
RC4/SDI/SDA
24
MCLR/Vpp/THV RC5/SDO
25
10k RC6/TX/CK
26
RC7/RX/DT
19 U2
RD0/PSP0
20 2 3
RD1/PSP1 SCL TOUT
21 1
RD2/PSP2 SDA
22 7
RD3/PSP3 A0
27 6
RD4/PSP4 A1
28 5 27.0
RD5/PSP5 A2
29
RD6/PSP6
30 DS1621
RD7/PSP7
PIC16F877A

SDA
30
SCL I2C
TRIG
Programme PIC 16F877a

#use i2c(master, SCL=PIN_C3, SDA=PIN_C4, Force_HW) while(1)


i2c_start(); // initialisation du bus I2C { i2c_start();
i2c_write(0x90); // adresse du DS1621 en écriture i2c_write(0x90);
delay_ms(10); i2c_write(0xAA); // dernière valeur convertie
i2c_write(0xAC); // écriture de la configuration de température
delay_ms(10); delay_ms(10);
i2c_write(0x09); // conversion en continu i2c_start();
i2c_stop(); //arrêt i2c_write(0x91);
i2c_start(); temp_high= i2c_read(0); // octet de poids fort
i2c_write(0x90); // adresse du DS1621 en écriture i2c_start();
delay_ms(10); i2c_write(0x91);
i2c_write(0xEE); // conversion de température en continu temp_low= i2c_read(0); // octet de poids faible
i2c_stop(); i2c_stop();
delay_ms(1000); // temps de conversion
}}
31
Récapitulatif : UART – SPI - I2C

Communication Nombre de PINs Description


UART 2 Simplex, Half-duplex ou Full-duplex
Liaison entre 2 éléments uniquement
Asynchrone, pas de contrôle
SPI 4 Full-duplex
Liaison entre 1 maître et 1 esclave
Possibilité de connecter plusieurs esclaves
Synchrone, mécanismes de contrôle
I2C 2 Half-duplex
Liaison entre 1 maître et 1 esclave
Possibilité de connecter plusieurs esclaves
Synchrone, mécanismes de contrôle
32
Chapitre 4
Programmation Avancée des microcontrôleurs

 4.1 Le CAN
 4.2 La liaison série
 4.3 Le watchdog
Le Watchdog (1)
Le chien de garde (watchdog) est un dispositif matériel et logiciel qui permet
de se prémunir contre les plantages accidentels.
L’idée est de provoquer un RESET du CPU afin de relancer l’application (les
données sont bien sur perdues).
Le plantage est défini lorsque le programme n’est pas venu à temps faire signe au
watchdog.
Instructions
« Clear Watchdog »

Si je reçoit rien,
j’appuie sur le
RESET!!!
Le Watchdog (2)

MICROCONTROLEUR

Vous aimerez peut-être aussi