EX Embarqué
EX Embarqué
Durée : 1h 30 mn
Examen
Matière : Electronique Embarquée Classe : AII2
Documents : Non autorisés Enseignants : A. HMIDENE & L. TOUIL Nb. Pages : 6
1
Description du registre du port série :
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
OCT3 OCT2 OCT1 OCT0 DAC9 DAC8 DAC7 DAC6 DAC5 DAC4 DAC3 DAC2 DAC1 DAC0 CNF1 CNF0
𝑂𝐶𝑇[3 : 0] et 𝐷𝐴𝐶[9 : 0] : Valeurs numériques obtenues à partir des équations (1) et (2).
𝐶𝑁𝐹[1: 0] : Configuration des sorties 𝐶𝐿𝐾 et ̅̅̅̅̅̅
𝐶𝐿𝐾 selon le tableau suivant :
#include <SPI.h>
int spi_ss = 10;
void setup()
{
pinMode(spi_ss, OUTPUT);
digitalWrite(spi_ss, HIGH);
2
Exercice N°2 (14 points)
On désire réaliser un thermomètre numérique à base d’une carte Arduino Uno. Le système comporte
un capteur de température TC1047A, un amplificateur à gain programmable MCP6S21, un
convertisseur analogique numérique LTC2451 et une carte Arduino Uno. La valeur numérique est
envoyée à un PC via une liaison série RS232. (Figure 2).
5V
0,2V
?
MCP6S21 Arduino Uno
2,2k
VRef
VRef+
Vout SDA SDA TXD
TC1047A VI VO VIN
SCL SCL RXD
V Ref-
SDI SCK CS SS SCK MOSI
LTC2451
Figure 2
Le TC1047A est un capteur de température linéaire à sortie tension, conçu pour fonctionner sur une
plage de −40°𝐶 à 125°𝐶, avec une pente de 10 𝑚𝑉/°𝐶. Le TC1047A fournit une tension de 0,1𝑉 à
−40°𝐶.
La sortie du TC1047A est connectée à l’entrée du circuit MCP6S21. Ce circuit est un amplificateur
analogique à gain programmable. La tension de sortie 𝑉𝑂 de l’amplificateur est régit par l’équation
suivante :
𝑉𝑂 = 𝐺 ∙ 𝑉𝐼 − (𝐺 − 1)𝑉𝑟𝑒𝑓
Avec :
𝑉𝐼 : Tension d’entrée,
𝑉𝑟𝑒𝑓 : Tension de référence (0 ≤ 𝑉𝑟𝑒𝑓 ≤ 𝑉𝐷𝐷 = 5𝑉),
𝐺 : Gain programmable via le port série SPI. Il peut être fixé à l’une des valeurs suivantes : 1, 2, 4, 5,
8, 10, 16 ou 32.
La séquence de programmation du gain via le port SPI est donnée par le chronogramme suivant :
Figure 3
3
G2 G1 G0 Valeur du Gain (G)
0 0 0 1
0 0 1 2
0 1 0 4
0 1 1 5
1 0 0 8
1 0 1 10
1 1 0 16
1 1 1 32
Figure 4
10. Compléter le programme proposé à la page 5 (Ecrire sur vos copies les instructions à compléter
uniquement).
4
#include <SPI.h>
#include <Wire.h>
int LTC2451Adr = 0x14;
int spi_ss = 10;
float Theta;
void setup()
{
pinMode(spi_ss, OUTPUT);
digitalWrite(spi_ss, HIGH);
[Link](9600);
[Link]() ;
[Link]();
[Link](MSBFIRST);
[Link](SPI_CLOCK_DIV4);
5
ANNEXE
I2C
[Link]() : configure le module I2C en mode maître
[Link](Adresse) : Génère la condition de start et transmet l’adresse de l’esclave en mode écriture
[Link](Valeur) : Ecriture dans le buffer
[Link]( ) : Envoie du contenu du buffer et termine la session de transmission
[Link](Adresse,Nombre) : permet au maître de demander des données à un esclave.
nombre = [Link]() : permet de connaître le nombre d’octets disponibles à lecture après l’appel de la
fonction « [Link] ».
donnee = [Link]() : permet au maître de lire un octet transmis par l’esclave après une fonction
«[Link] ».
SPI
Mode SPI Conditions Front d’envoi Front de lecture
0 CPOL=0, CPHA=0 descendant montant
1 CPOL=0, CPHA=1 montant descendant
2 CPOL=1, CPHA=0 montant descendant
3 CPOL=1, CPHA=1 descendant montant
[Link](dataOrder) : définie le sens de transfert, c-à-d, le bit à transférer en premier MSB ou LSB. Ce
paramètre peut être : MSBFIRST ou LSBFIRST.
[Link](speedMaximun) : l’horloge de bus SPI est dérivée de la fréquence système. La fréquence du
système peut être divisée par : 2, 4, 8, 16, 32, 64 ou 128. Le paramètres speedMaximun peut être :
SPI_CLOCK_DIV2, SPI_CLOCK_DIV4, SPI_CLOCK_DIV8, SPI_CLOCK_DIV16, SPI_CLOCK_DIV32,
SPI_CLOCK_DIV64 ou SPI_CLOCK_DIV128.
[Link](dataMode) : définie le mode SPI. Ce paramètre peut être : SPI_MODE0, SPI_MODE1,
SPI_MODE2, ou SPI_MODE3.
[Link]() : Initialise le bus SPI :
- SCK, MOSI et SS en sortie,
- SCK et MOSI au niveau bas,
- SS au niveau haut.
[Link]() : Désactive le bus SPI (en laissant les modes de broche inchangés).
receiveVal = [Link](val) : Le transfert SPI est basé sur un envoi et une réception simultanée : la donnée
reçue est renvoyée dans receiveVal.