Vous êtes sur la page 1sur 13

- TP Arduino : Etude de la carte UNO –

1 – Présentation du système de développement


Arduino :

Voir documents dans ressources / ARDUINO, notamment le schéma de la carte UNO


(ArduinoUno.pdf) et la datasheet de l’ATMEGA328.

Le système de développement ARDUINO se compose de :

- Une carte (UNO),

- Logiciel ARDUINO (saisie, compilation et téléchargement (téléversement) des


programmes sur la carte),

- Bibliothèques de routines permettant la mise en œuvre rapide des périphériques sans


avoir à configurer les registres.
Lire les nombreux documents ressources pour des explications sur le fonctionnement du
logiciel et l’analyse d’exemples élémentaires de programmes.

Sur l’outil de développement de l’Arduino, le terminal de dialogue avec l’Arduino via cette
liaison série se trouve dans : Outils
Moniteur Série

Le but de ce TP est de :

- Analyser le schéma de la carte UNO

- Faire le bilan des périphériques intégrés dans l’ATMEL et de leurs rôles


- Remplir un tableau de correspondance entre les noms, n° des broches de l’ATMEL et
les noms, n° des connecteurs de la carte UNO.

2 – Analyse du schéma de la carte UNO :


Ouvrir le schéma Arduino Uno Rev3-schematic.pdf
1. Donner les références :
o Du microcontrôleur Atmel
ATMEGA328P
o Du microcontrôleur Atmel (circuit intégré adaptateur USB)
ATMEGA16U2
2. Rôle du Bouton poussoir sur la carte UNO ? Le repérer sur le schéma et indiquer le n°
de la broche du microcontrôleur sur laquelle il est connecté.
Connecté à la broche 1 RESET, il sert à reset la carte UNO.

Page 1/13
TP1 arduino
3. Quel est le composant qui fournit la tenson continue 3V3 ?
C’est le LP2985
4. Quel est le composant qui fournit la tenson continue 5V à partir du jack PWRIN ?
C’est U1
5. Indiquer les 3 façons d’alimenter la carte.
Par USB, avec le 3.3V et avec le 5V.

6. Remplir le tableau de correspondance :

Nom du port Atmel N° broche Atmel Nom broche N° broche


connecteur connecteur
PB5 19 SCK 13
PB4 18 MISO 12
PB3 171 MOSI 11
PB2 16 SS 10
PB1 15 OC1 9
PB0 14 ICP 8
PD7(AIN1) 13 AIN1 7
PD6(AIN0) 12 AIN0 6
PD5 (T1) 11 T1 5
PD4(T0) 6 T0 4
PD3(INT1) 5 INT1 3
PD2(INT0) 6 INT0 2
PD1(TxD) 3 TxD 1
PD0(RxD) 2 RxD 0
PC5(ADC5) 28 ABC5 A5
PC4(ADC4) 27 ABC4 A4
PC3(ADC3) 26 ABC3 A3
PC2(ADC2) 25 ABC2 A2
PC1(ADC1) 24 ABC1 A1
PC0(ADC0) 23 ABC0 A0

3 – Etude du microcontrôleur ATMEGA328 :


7. A partir de la datasheet de l’ATmega328 datasheet2 p8, rechercher et résumer sur
votre compte-rendu les explications concernant le rôle des diverses broches dédiées à
des périphériques, ainsi le rôle des périphériques eux-mêmes.

Nom affecté Nom du Description du rôle de cette broche vis-à-vis du


à la broche : périphérique périphérique associé :
associé :
SCK SPI 0 Serial Clock, Horloge générée par le Master

MISO SPI 0 Master Input, Slave Output générée par le Master

MOSI SPI 0 Master Output, Slave Input générée par le Slave

Page 2/13
TP1 arduino
SS SPI 0 Slave Select, actif à l’état bas généré par le Master

AIN1 AC

AIN0 AC

T1 TC 1

T0

INT1

INT0

TxD

RxD

ADC5

ADC4

ADC3

ADC2

ADC1

ADC0

Les mémoires de l’Atmega328

8. Donner la définition de :
Pour les RAM
SRAM: Static RAM (Random Access Memory) doesn’t need to be refreshed to
remember the data being stored.
DRAM: Dynamic RAM. No energy = lost data.

Pour les ROM


EEPROM: Mémoire morte effaçable électriquement et programmable
FLASH: A kind of memory that retains data when power is turned off and that can be
electronically erased and reprogrammed without being removed from the circuit board.

9. Indiquer les mémoires contenues dans l’Atmega328 et donner leur capacité

Type de mémoire Capacité en bits Capacité en octets Capacité en K octets


EEPROM 8 000 1 000 1
FLASH 256 000 32 000 32

Page 3/13
TP1 arduino
SRAM 16 000 2 000 2

Les entrées/sorties (E/S) de l’Atmega328

10. Donner la définition d’un signal logique. Sur quelles broches (E/S) peut-on les
connecter sur le kit Arduino. Vous indiquerez aussi le n° de broche de l’Atmega328.
Signal logique = Low ou High ; 0 ou 1. On peut les connecter sur

11. Donner la définition d’un signal analogique. Sur quelles broches (E/S) peut-on les
connecter sur le kit Arduino. Vous indiquerez aussi le n° de broche de l’Atmega328.
4 – Programmes simples d’Entrée / Sortie :

4 – 1 – Notions sur les Entrées Sorties TOR :


Les broches d’Entrée Sortie d’un microcontrôleur sont regroupées en ports (8 bits pour notre
Atmel) : Port B, Port C, Port D.

Pour chaque port, l’utilisation des broches en entrées / sorties TOR se fait par l’intermédiaire
de 3 registres. Pour le Port B par exemple :

- DDRB (Data Direction Register portB) permet de définir pour chaque bit du port s’il
on veut le configurer en Entrée ou bien en Sortie. (« 1 » : Sortie ; « 0 » : Entrée =
valeur par défaut à l’initialisation.

- PORTB : l’écriture dans ce registre permet de sortir des « 0 » ou des « 1 » sur les
broches correspondantes du port.

- PINB : La lecture de ce port nous donne les niveaux logiques que les composants
extérieurs imposent aux broches configurées en entrées.

Syntaxe Arduino :

12. Analyser et commenter les lignes suivantes :

int BPPin=3 ;//


int ledPin=13;//
unsigned char toto; //
void setup()
{
pinMode(ledPin,OUTPUT) ; //
}
void loop()
{
digitalWrite(ledPin,HIGH); //
delay(1000); //
digitalWrite(ledPin,LOW); //

Page 4/13
TP1 arduino
delay(1000);
toto=digitalRead(BPPin); //
}

13. Saisir le programme dans le logiciel Arduino et tester le fonctionnement. La LED du


kit doit clignoter
1. Faire vérifier par le professeur

4 – 2 – Chenillard à 4 LEDs :

On demande de réaliser un chenillard à 4 LEDs en utilisant le connecteur “DIGITAL” de


l’UNO. On utilisera la fonction delay pour les temporisations nécessaires.

14. Effectuez la simulation sur Protéus en suivant les étapes suivantes :

1erétape : Utilisation du logiciel Protéus

- Ouvrir le logiciel PROTEUS à partir du répertoire logiciel SE ou sti2d du bureau


- Faire le schéma du câblage à effectuer sur Protéus. Vous devez utiliser la bibliothèque
Arduino Uno R3, RES, LED_RED et SWITCH.
- Dans le cas où vous n’avez pas Arduino Uno R3 faire : Mettre la bibliothèque
Arduino dans le répertoire PROTEUS de mes documents (compte perso).
Pour cela, copier les fichiers ARDUINO.BAK et ARDUINO.IDX qui se trouvent dans
ressources/PROTEUS/ puis les coller répertoire PROTEUS de mes documents
(compte perso).

2ième étape :
- Ouvrir le logiciel Arduino
- Saisir votre programme

- Compiler le programme et dans la fenêtre du bas sélectionner puis copier


(Ctrl+C) le chemin d’accès au fichier.cpp.hex.

NB : Si le chemin n’apparait pas dans la fenêtre, faire les étapes 1 et 2

Page 5/13
TP1 arduino
- Dans ISIS, clic droit sur le l’Arduino Uno puis faire Editer propriétés

Dans l’onglet Program File, coller (Ctrl+V) le chemin du fichier.hex copié précédemment.

- Simulation
Cliquer sur Play et vérifier le fonctionnement.

2. Faire vérifier par le professeur

Si le programme est conforme au cahier des charges passer à l’étape suivante.

3ième étape : câblage

- Effectuer le câblage sur plaque d’essai

- Tester le fonctionnement.

On pourra travailler par étapes, la 1ère étant de réaliser un clignotant à une Led.

3. Faire vérifier par le professeur

Compléter le compte rendu

4 – 3 – Entrées par Bouton poussoir :


Page 6/13
TP1 arduino
Pour chaque exercice vous devez faire les étapes précédentes : élaborer le programme, câble,
vérification et rédaction du compte rendu

Commande simple allumage :

15. Elaborer le programme permettant d’allumer la LED lorsqu’on appuie sur le BP et


s’éteint quand on le relâche. Tester le fonctionnement.

4. Faire vérifier par le professeur

Fonctionnement de type télérupteur :

16. Elaborer le programme permettant d’obtenir le fonctionnement en « flip flop » : une


action sur le BP allume la LED, l’action suivante éteint la LED et ainsi de suite. A
chaque action sur le BP, la LED change d’état.
NB : une action c’est un appui puis relâchement du BP

5. Faire vérifier par le professeur

On se propose de compter le nombre d’appui sur le bouton poussoir BP. A chaque action sur
BP, une variable est incrémentée (ajouter 1 à une variable). Utilisez les programmes
précédents pour le test d’appui sur le BP.
Pour vérifier le fonctionnement, on va afficher la valeur du compteur (variable compte) sur le
moniteur série.
Pour afficher sur le moniteur série vous devez ajouter dans le programme, dans le void setup
() la ligne suivante : Serial.begin(9600) ;
Puis dans le void loop () la ligne : Serial.println(compteur); pour afficher la variable
compteur
Pour lancer le moniteur, cliquez sur

 Effectuer le programme et faire les tests


Résultats sur le moniteur série pour 5 appuis

6. Faire vérifier par le professeur

Page 7/13
TP1 arduino
 Que remarquez-vous ?

Ce phénomène est dû aux rebonds

Les rebonds :
Vous avez constaté que lorsque vous appuyez une fois sur le BP, le programme comptabilise
plusieurs appuis. Cela vient du fait que lorsque vous appuyez sur le BP, il y a des rebonds au
niveau des contacts et donc cela peut générer plusieurs 0,1 avant de se stabiliser soit à 0 soit à

Il y a 2 méthodes pour résoudre ce problème :


 Méthode Hard : mettre un condensateur de 10µF et une résistance de 10KΩ

 Méthode Soft
Lors de la détection du premier changement d’état du BP, on attend une dizaine de ms
(attente de stabilisation du contact) avant de poursuivre le programme.

Tester la méthode soft


6. Faire vérifier par le professeur

Page 8/13
TP1 arduino
Compléter le compte rendu

Minuterie type cage d’escalier :


A chaque appui sur le BP, la Led s’allume et reste allumée pendant une durée de temporisation
(10 s par exemple).
7. Faire vérifier par le professeur
Il s’agit d’un monostable logiciel. Ce monostable est-il réarmable ?

Commande de type Marche/Arrêt :


Une action sur le BP Marche (BPM) allume la Led.
Une action sur le BP Arrêt (BPA) éteint la Led.
En cas d’action simultané sur les 2 BP, l’arrêt (extinction) est prioritaire.

8. Faire vérifier par le professeur


Gestion des résistances pull-up internes

En technologie MOS, une entrée "en l'air" a un état indéterminé.

1er fonctionnement :
On peut brancher les Boutons Poussoirs de façon à ramener l'entrée à 0 quand on ferme le
contact. Lorsque le contact est ouvert, l'état de l'entrée est ramené à 1 par des résistances de
tirage à 1 (pull-up).

2ième fonctionnement :
On peut brancher les Boutons Poussoirs de façon à ramener l'entrée à 1 quand on ferme le
contact. Lorsque le contact est ouvert, l'état de l'entrée est ramené à 0 par des résistances de
tirage à 1 (pull-down).

Cependant, les résistances de tirage (pull-up) existent aussi en interne du microcontrôleur, ce


qui évite d'avoir à les rajouter. Ces dernières ont une valeur de 20 kilo-Ohms.
Pour activer cette résistance, configurer la broche concernée en entrée et écrire un « 1 » sur
cette même broche

Le montage devient alors

=>

Avec résistance de tirage à l’extérieur Avec résistance de tirage en interne de l’Arduino

Exemple :

const int bouton1 = 2; //le bouton1 est connecté à la broche 2 de la carte Arduino

Page 9/13
TP1 arduino
void setup()
{
pinMode(bouton1, INPUT);
digitalWrite(bouton1, HIGH); //on active la résistance de pull-up en mettant la broche à l'état haut
}
void loop()
{…} //du loop
9. Faire vérifier par le professeur

4 – 4 – Envoi / Réception de mots de 8 bits


Dans le cas de la commande d’un afficheur sept-segments par exemple, on a besoin de définir
les 8 bits d’un port en sortie, et on envoie simultanément les 8 valeurs sur le port pour obtenir
l’affichage d’un chiffre sur l’afficheur (segments de a à g et le point).
L’utilisation des routines Arduino qui sont prévues pour agir sur un seul bit sont alors peu
pratiques. On peut toutefois agir directement sur les registres des ports d’Entrée / Sortie :
- Pour définir en une seule ligne la direction des 8 bits d’un port :
DDRB=0xFF // tous les bits du portB en sortie
DDRD=0xF0// Les 4 bits de poids fort en sortie, les autres en entrée

- Pour sortir un mot de 8 bits sur un port en une seule instruction :


PORTB=0x55 // Sortie de 0b01010101 sur les broches du PORTB

- Pour acquérir l’état des 8 bits d’un port configuré en entrée :


unsigned chat toto ;
toto=PINB ;
1. Vous devez saisir le schéma ci-dessous sur Protéus

2. Indiquer les Ports utilisés de l’Atmega328 pour commander l’afficheur : les ports 2, 3,
4, 6, 7, 8, 9.

Page 10/13
TP1 arduino
3. Compléter le tableau suivant :
Seg A Seg B Seg C Seg D Seg E Seg F Seg G
PD2 PD3 PD4 PB0 PB1 PD6 PD7

NB : le segment A est connecté sur le bit 2 du port D

4. Quel type d’afficheur a-t-on utilisé ? Justifier votre réponse. On a utilisé un afficheur
cathode, car en bas il y a la masse, et non VCC. Cela signifie que pour allumer un
segment on doit envoyer un 1, et non un 0.

5. Pour quel niveau logique en sortie de l’Arduino allume-t-on un segment ?


Pour un afficheur à anode commune : 0
Pour un afficheur à cathode commune : 1

6. Calculer la valeur de la résistance à mettre en série avec un segment si VF=2v et


IF=10mA. Choisir la résistance dans la série E12. R=U/I. Donc R=2 / (10*10^-3) =
200Ohm

7. Tester le programme 1 (voir programme page suivante) qui allume successivement


les 7 segments de l’afficheur utilisé (temps d’allumage d’un segment : 500ms)
NB : ce programme n’agit pas directement sur les registres des ports d’Entrée / Sortie
Effectuer les tests :
 En simulation
 En câblant directement l’afficheur sur plaque d’essai. Pour cela vous devez connaître
le brochage de l’afficheur.
Testez l’afficheur fourni avec le multimètre réglé en ohmmètre afin de retrouver son
câblage. Est-il à Anodes ou à Cathodes communes ? Indiquer sur le symbole à quoi est
relié chaque broche du composant ci-dessous :

Expliquez la manipulation effectuée :

Page 11/13
TP1 arduino
/* Le programme 1 met en œuvre l'utilisation d'un afficheur 7 segments allumant séquentiellement chacune des
LED*/
const int led_A = 2; // le segment A est branché sur la pin 2
const int led_B = 3;
const int led_C = 4;
const int led_D = 8;
const int led_E = 9;
const int led_F = 6;
const int led_G = 7;
const int led_DP = 5;

void allumer(int led){


digitalWrite(led, LOW);
}
void eteindre(int led){
digitalWrite(led, HIGH);
}
void eteindreToutesLesLED(){
eteindre(led_A); // eteint la LED du segment A
eteindre(led_B);
eteindre(led_C);
eteindre(led_D);
eteindre(led_E);
eteindre(led_F);
eteindre(led_G);
}
void allumerEtEteindreLED(int led){
allumer(led);
delay(500); // attente de 1/2 seconde
eteindre(led);
}
void setup() // setup est exécuté une seule fois après la remise à zéro
{
pinMode(led_A, OUTPUT); // la broche led_A (2) est initialisée en sortie
pinMode(led_B, OUTPUT);
pinMode(led_C, OUTPUT);
pinMode(led_D, OUTPUT);
pinMode(led_E, OUTPUT);
pinMode(led_F, OUTPUT);
pinMode(led_G, OUTPUT);
eteindreToutesLesLED();
}
void loop() // loop est exécuté indéfiniment
{
allumerEtEteindreLED(led_A);
allumerEtEteindreLED(led_B);
allumerEtEteindreLED(led_C);
allumerEtEteindreLED(led_D);
allumerEtEteindreLED(led_E);
allumerEtEteindreLED(led_F);
allumerEtEteindreLED(led_G)
}

8. Tester le programme 1

10. Faire vérifier par le professeur

Page 12/13
TP1 arduino
9. Réalisez et testez un programme 2 qui permet d’afficher successivement les 16
chiffres de la base hexadécimale sur l’afficheur en écrivant dans les registres de
l’Atmel : DDRB Data Direction Register portB et PORTB
DDRD Data Direction Register portD et PORTD
Le temps d’allumage des chiffres et lettres : 500ms

Vous devez :
1. Définir sur votre compte-rendu les segments à piloter pour afficher chaque chiffre et
lettre. On éteindra le point.

Afficheur à cathode
Chiffre Seg A Seg B Seg C Seg D Seg E Seg F Seg G
1 1 1 1 1 1 0
0 1 1 0 0 0 0
1 1 0 1 1 0 1
1 1 1 1 0 0 1
0 1 1 0 0 1 1
1 0 1 1 0 1 1
1 0 1 1 1 1 1
1 1 1 0 0 0 0
1 1 1 1 1 1 1
1 1 1 1 0 1 1
1 1 1 0 1 1 1
0 0 1 1 1 1 1
1 0 0 1 1 1 0
0 1 1 1 1 0 1
1 0 0 1 1 1 1
1 0 0 0 1 1 1

2. Testez le programme 2

10. Faire vérifier par le professeur

Page 13/13
TP1 arduino

Vous aimerez peut-être aussi