Vous êtes sur la page 1sur 3

INSA HdF - UPHF 3ème année 2020-2021

Examen celect7 :
Applications des microcontrôleurs
mardi 10 novembre 2020
15h30-17h00 (17h30 si tiers-temps)
Tous documents autorisés

Traiter l’ensemble des questions suivantes en justifiant vos réponses lorsque cela est demandé
(une bonne réponse sans justification n’apportera qu’une partie des points). Pensez à vous servir
des ressources documentaires utilisées pendant les séances, lorsque cela s’avère nécessaire (c’est à
vous de trouver les ressources qu’il vous faut).
1. (3pts) On souhaite interfacer le microcontrôleur ATmega 328p d’une carte arduino uno
avec deux périphériques via deux liaisons UART. Le premier périphérique est un capteur
de température qui communiquera avec les broches 0 (RX) et 1 (TX) de la carte uno. Le
deuxième périphérique est un capteur de pression qui communiquera avec les broches 3 (RX)
et 4 (TX) de la carte uno. Ces deux capteurs sont configurés pour envoyer régulièrement les
valeurs mesurées sur leur interface série.
Donner un code arduino du programme à téléverser dans le microcontrôleur afin qu’il vienne
lire les valeurs reçues (après avoir vérifié qu’une donnée reçue est bien disponible) sur chaque
UART alternativement, avec un délai de 100 ms entre deux lectures. Le débit des UARTs sera
de 115200 bauds et les valeurs reçues seront stockées dans des variables globales nommées
pression et temperature.
2. (0,5 pt) Vrai ou Faux : afin de stocker les octets à envoyer et reçus, l’interface UART du
microcontrôleur ATmega 328p possède deux registres disctincts : un registre d’émission et
un registre de réception.
3. On désire paraméter l’UART du microcontrôleur ATmega 328p de telle manière que :
— l’interface soit utilisée en mode asynchrone
— les bits soient transmis par paquet de 7 bits auxquels s’ajoutent un bit de parité et 2
bits de stop. Le bit de parité sera calculé conformément à l’exemple suivant : si les 7 bits
de données valent 1100010 alors le bit de parité vaut 1.
— le débit de transmission soit de 19200 bauds
(a) (0,5 pt) Indiquer le code de la fonction setup() qui permet de réaliser ce paramétrage,
en utilisant l’abstraction arduino.
(b) (3 pts) Idem mais cette fois-ci en agissant directement sur les registres appropriés de
l’interface UART et donc sans utiliser les fonctions de l’abstraction arduino. Vous expli-
querez votre démarche, en faisant références aux éléments appropriés de la datasheet de
l’ATmega 328p.
4. (3 pts) Soit le code arduino ci-après :

void setup ( ) {
S e r i a l . begin (115200);
DDRD = 9 6 ;
PORTD = 1 6 0 ;
S e r i a l . p r i n t (PIND>>5,BIN ) ;
}

(a) Ré-écrire le code en utilisant des fonctions de la couche d’abstraction arduino de façon à
ce que les noms des registres DDRD, PORTD et PIND de l’ATmega328p n’apparaissent
plus dans le code. Vous expliquerez de manière détaillée votre démarche.
(b) Quelle valeur sera affichée sur le terminal série (expliquer votre raisonnement).

1
INSA HdF - UPHF 3ème année 2020-2021

5. (2 pts) On désire configurer un réseau local pour maximum 20 machines. L’adresse réseau
est 192.168.3.0.
(a) quelle est la valeur du masque de sous-réseau à paramétrer ?
(b) Quelles seront les adresses IP des 20 machines ?
(c) jusqu’à combien de machines ce réseau pourra-t-il finalement accepter ?
(d) quelle est la valeur de l’adresse broadcast ?
Vous justifierez vos réponses.
6. (0,5 pt) Vrai ou Faux : l’esp8266 est un SoC constitué d’un module radio WiFi et d’un
microcontrôleur.
7. (1 pt) Quelle syntaxe HTTP minimale faut-il envoyer au serveur du domaine www.celect7.fr
afin de lui demander d’envoyer la page web d’adresse www.celect7.fr/data ?
8. (3 pts) Soit ci-après le relevé à l’oscilloscope de la ligne TX correspondant à une commande
arduino d’envoi d’un octet de données sur la liaison UART :

Proposer plusieurs alternatives de commandes arduino qui permettent d’envoyer ces données
sur la lignes :
(a) une commande avec la foncion write en supposant que l’option SERIAL_8N1 a été passée
à Serial.begin()
(b) une commande avec la fonction print en supposant que l’option SERIAL_8N1 a été passée
à Serial.begin()
(c) une commande avec la fonction write en supposant que soit l’option SERIAL_8E1 soit
l’option SERIAL_8O1 a été passée à Serial.begin() (déterminer et précicer dans votre
réponse l’option qui convient)
9. Soit le code arduino ci-dessous permettant au microcontrôleur de récupérer une donnée du
capteur MPU9250 :
#i n c l u d e <Wire . h> 1
int16_t data ; 2
void setup () { 3
Wire . b e g i n ( ) ; 4
Wire . b e g i n T r a n s m i s s i o n ( 0 x69 ) ; 5
Wire . w r i t e ( 0 x6B ) ; 6
Wire . w r i t e ( 0 x00 ) ; 7
Wire . e n d T r a n s m i s s i o n ( ) ; 8
} 9
void loop () { 10
Wire . b e g i n T r a n s m i s s i o n ( 0 x69 ) ; 11
Wire . w r i t e ( 0 x45 ) ; 12
Wire . e n d T r a n s m i s s i o n ( ) ; 13
Wire . r e q u e s t F r o m ( 0 x69 , 2 ) ; 14
d a t a = ( Wire . r e a d () < <8); 15
d a t a |= Wire . r e a d ( ) ; 16
} 17

2
INSA HdF - UPHF 3ème année 2020-2021

(a) (1,5 pt) Écrire la structure de la trame I2C correspondant aux lignes 11 à 16 du code
(faire apparaître les noms des champs parmi S, Sr, P, ACK, NACK, SLA+R, SLA+W,
DATA, et souligner ceux qui sont transmis par le maître).
(b) (2 pts) Écrire sans utiliser l’abstraction arduino le code correspondant aux lignes de code
11 à 13.

Vous aimerez peut-être aussi