Anda di halaman 1dari 93

Formation Arduino applique au monde radioamateur

F4GSC - Jean-Luc Levant - ARALA Nantes - 2014

6/8/2014

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

Plan de la formation

Objectifs de cette formation

Description de la carte ArduinoUNO R3

Description de quelques shields Arduino

Description du Mega328P

Quelques lments du language de programmation

Structure dun programme Arduino


Dfinition des variables et des constantes
Structures de rpitition
Structures de test

Description des interfaces numriques et analogiques


But de ces interfaces
Numriques
Analogiques

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

Plan de la formation

Description des entes/sorties numriques simples


Description et fonctionnement

Le convertisseur analogique numrique

Description et fonctionnement

Exemple 1 : Clignotant dune LED vitesse programmable.


Exemple 2 : Dcodage et envoi du message SMS en code morse.
Exemple 3 : Commande dun pont en H ( faire).

Exemple 1 : Ralisation dun voltmtre , 0-10v.


Exemple 2 : Ralisation dun capacimtre , Cx >2nF.

Le PWM (Pulse Width Modulation)

Description et Fonctionnement
Contrle de lintensit lumineuse dune diode LED

Contrle continu
A partir des touches + et -

Convertisseur Numrique/analogique

Exemple 1 : Gnration dune rampe.


Exemple 2 : Gnration dun signal triangulaire.
Exemple 3 : Gnration dun signal sinusodal.

Modulation tout ou rien

Gnrateur dappel gnral audio (CQ de F5KEQ).

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

Plan de la formation

Les Liaisons Sries Synchrones et Asynchrones


Srie Asynchrone
Description et Fonctionnement
Interface avec lHyperterminal

I2C Synchrone
Description et Fonctionnement

Les interruptions

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

Introduction

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

Introduction

Do vient le nom arduino?

En lan 1002, le roi Arduin (Arduino en italien) devint le seigneur de la petite ville
dIvrea.

Un bar dans une rue pave de la ville, honore sa mmoire, Bar di Re Arduino.

Massimo Banzi, un des fondateur de ce concept, a pour habitude dtancher sa soif


dans ce bar. Le nom du projet lectronique Arduino fait rfrence ce bar.

La philosophie

Populariser le dveloppement de llectronique et de linformatique industrielle.

Apprendre llectronique par la pratique au lieu de commencer par apprendre lalgbre


et les lois de llectronique (approche anglo-saxonne).

Disposer dune plateforme matrielle et logicielle bas cot.

Partager les dveloppements matrielles sous licence Creative Commons et logicielles


sous licence open source.
Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

Introduction

Les plus

Pouvoir rutiliser les dveloppements matriels et logiciels (librairies) crer par


dautres dveloppeurs.

Lhritage des librairies permet de rduire considrablement le temps dveloppement


des systmes.

La complexit de lassemblage de fonctions lectroniques et informatique est rduite(1).

Le dveloppeur peut se concentrer sur le dveloppement de son ide et facilite donc la


cration et linnovation.

Cette simplification permet tout un public nayant pas les comptences en lectronique
et informatique de crer et innover.

Note
(1) Le temps dapprentissage dun microcontrleur peut prendre quelques jours quelques mois en fonctions de la

complexit des priphriqes quil intgre. Les librairies open source permettent de saffranchir de cet apprentissage en utilisant
des fonctions logicielles qui intgrent la complexit de programmation des priphriques.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

Introduction

Les moins

Les optimisations logicielles (taille,temps dxcution) se sont possibles quaux


dveloppeurs ayant des connaissances approndies.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

Description de la carte Arduino Uno

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

Description de la carte Arduino UNO R3

Les interfaces dentres/sorties numriques et analogiques

AREF

IOREF RESET 3.3v 5v


Vin

Entre/sortie Numrique

Gnd

Gnd

vin

Entre Analogique/Numrique

: alimentation externe (7-12v)

AREF : source de rfrence de tension externe


IOREF : Fournit le 5v comme rfrence pour les cartes shields.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

10

Description de la carte Arduino UNO R3

Les Entres/Sorties Spciales


E/S Numrique Srie Synchrone (I2C)
E/S Numrique Srie Synchrone (SPI)

E/S Numrique Srie Asynchrone (UART)


E/S Numrique PWM

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

11

Exemples de quelques shields

Exemples de quelques shields

Attention la compatibilit des tensions dalimentation. 5v pas compatible avec le 3.3v.

shield thernet

shield GPS/GSM

shield zeebe

Shield prototype

Shield Afficheur graphique

shield audio

Shield Contrle moteur

Shield tlmtrie ultrason

Shield SD card

Description de lAtmega328P

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

14

Description de lATmega328P

Les fonctions embarques dans lATmega328P

CPU (Computing Processor Unit)

Processeur RISC 8-Bit


- Architecture Harward  les bus programme et donnes
sont spares. Une instruction et une donne peuvent tre
accdes en parallle.
- RISC (Reduced Instruction Set) avec 2 oprations
xcutes en paralle (20MIPS).
Lecture de linstruction xcuter  n
Excution de linstruction  n-1
- 32 registres internes pour acclrer les calculs et les accs
aux donnes.
- En charge une instruction est xcute en 1 cycle
dhorloge  Fcpu= 16MHz  Tcpu=66ns.
- 2 multiplieurs 16-bits
- Architecture optimise pour le langage C.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014 6/8/2014

15

Description de lATmega328P

Les fonctions embarques dans lATmega328P

Les ressource matrielles


Les plans mmoire
Mmoire

Taille

Opration dcriture/Lecture

Programme

- 32 kOctets de mmoire
Flash.

- Ecriture au chargemnt du programme.

Donnes Volatiles

- 2 koctets de mmoire RAM.

- Ecriture/lecture Accessible tout


moment.

Donnes non Volatiles

- 1 koctets de mmoire
EEPROM.

- Ecriture/lecture Accessible tout


moment.

- Plusieurs koctets de
mmoire
Flash.

- Ecriture au chargemnt du programme.


- Lecture tout moment.

Notes :
- FLASH : Propprit qui permet deffacer/crire rapidement une grande portion de la mmoire
-Technologie qui permet de raliser une mmoire qui peut tre crite/efface lectriquement.
- Le contenu de la mmoire est maintenu lorsque lalimentation est teinte.
- RAM

: Random Access Memory


- Technologie qui permet de lraliser une mmoire qui peut tre crite/efface lectriquement.
- Le contenu est perdu lorsque lalimentation est teinte.

- EEPROM : Electrically-Erasable Read Only-Memory


- Technologie qui permet de raliser une mmoire qui peut tre crite/efface lectriquement.
- Le contenu de la mmoire est mainetnu lorsque lalimentation est teinte.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

16

Description de lATmega328P

Les fonctions embarques dans lATmega328P

Les ressource matrielles (botier PDIP)


Les priphriques

Oscillateur RC interne calibr (8MHz).


Oscillateur externe (32KHz /0.4MHz - 16MHz).
2 x Timer/Compteur 8bits.
1 x Timer/Compteur 16bits.
1 x Timer/compteur temps rel.
1 x timer chien de garde avec oscillateur spar.
Pr-diviseur dhorloge 8bits.
6 x PWM.
6 x Entres analogiques 10-bits avec mesure de la temprature.
1 x UART.
1 x liaison srie synchrone SPI (Matre et esclave).
1 x liaison srie synchrone I2C.
1 x comparateur analogique.
26 x sources dinterruption internes et externes.
Tension dalimentation : 1.8v 5.5v.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

17

Description de lATmega328P

Les fonctions embarques dans lATmega328P


Les ressource matrielles
Les autres membres de la famille

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

18

Quelques lments du language de programmation C

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

19

Quelques lments du language de programmation C

Structure dun programme Arduino


Inclusion dun fichier comprenant les fonctions
logicielles permettant le pilotage des fonctions
lectroniques matrielles (shield).

//===========================================================
//-- La librairie LCD est utilise.
//===========================================================
#include <LiquidCrystal.h>

Affectation des noms symboliques au broches dE/S


de la carte Arduino.

//===========================================================
//-- La diode LED est connecte la broche 13.
//===========================================================
Int led=13;

Construction du priphrique lcd et prcise comment


ce prifrique se connnecte la carte arduino ( quels
signaux sont utiliss).

//===========================================================
//-- Construit un objet LCD et prcise que les broches 12,11,5,4,3,2 connecte
//-- le LCD la carte Arduino.
//-----------------------------------------------------------------------------------------------------//-- broche 12 : RS -11:Enable 5: D4 4:D5 -3 : D6 - 2 : D7
//===========================================================
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Boucle de programme xcute la mise soustension ou aprs une remise zro.

Boucle de programme principale xcute la mise sous


tension ou aprs une remise zro (boucle sans fin).

//===========================================================
void setup() {
//-- Dfinit le nombre de caractre par ligne ainsi que le nombre de ligne
lcd.begin(16, 2);
//-- Affiche le message Hello World.
lcd.print("hello, world!");
}
//===========================================================
void loop() {
Int compteur;
// set the cursor to column 0, line 1
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.print(millis() / 1000);
++compteur;
}
//===========================================================

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

20

Quelques lments du language de programmation C

Dfinition des variables et des constantes

Constante  FLASH, EPROM, RAM

Donne fixe qui ne change pas lors de lxcution du programme.

Variable  EPROM et RAM

Dfinition
Donne dont la valeur est modifie en fonction de lactivit du programme.

Type dune variable


Dfinie la nature de la donne ainsi que sa taille (dpend de larchitecture du microcontrleur
(8,16,32 ou 64-bits);
Dfinie le signe de la donne : signe  positive ou ngative, non signe  positive.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

21

Quelques lments du language de programmation C

Dfinition des variables et des constantes

Taille et dynamique de codage des donnes (variables, constantes)

Type (Atmega328)

boolean

char

int

long

float

double

Taille

1-bit

8-bits

16-bits

32-bits

32-bits

64-bits

-3.40282347e+38

+3.40282347E38

-1.79769313486231570e308

1.79769313486231570e308

float freq ;

double freq;

Nbre doctets
Dynamique de codage
(sign)

0

1

-127

+128

-32768

+32767

2 147 483 648



+2 147 483 647

Dynamique de codage
(non sign)

0

1

0

255

0

65535

0

4 294 967 295

Exemple

Boolean ON;

Char freq;

Int vitesse;

long distance;

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

22

Quelques lments du language de programmation C

Dfinition des variables et des constantes


Type dune variable (suite)
Occupation mmoire
Le type dtermine combien doctets seront utilises pour loger la variable ou la
constante dans le plan mmoire.
Plan mmoire
Flash, RAM, EPROM

4 octets

1 variables long

2 octets

1 variables int

1 octet
8 bits

1 variables char
8 variables boolennes

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

23

Quelques lments du language de programmation C

Dfinition des structures de rpitition conditionnelle

Structure qui permet de rpter plusieurs fois le mme traitement jusqu ce que la
condition de fin apparaisse.

Tant que la condition nest pas vrifie alors faire le traitement

int i;
.
for (i=1 ; i<=10 ; i++)
{
serial.print(I = ); serial.printl(i);
}

Le traitement est effectu 10 fois. La variable i est teste puis incrmente avant chaque
traitement. Le nombre de passage dans la boucle est dtermine ds le dpart.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

24

Quelques lments du language de programmation C

Dfinition des structures de rpitition conditionnelle

Structure qui permet de rpter plusieurs fois le mme traitement jusqu ce que la
condition de fin apparaisse.

Si la condition est vrifie alors rpter le traitement

int i;
.
i=1;
while (i<=10)
{
serial.print(I = ); serial.printl(i);
i=i+1;
}

Le traitement est effectu 10 fois. La variable i est dabord teste puis incrmente dans la
boucle de traitement si la condition de fin nest pas atteinte. Le nombre de passage dans la
boucle dpend de comment est gr la variable i.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

25

Quelques lments du language de programmation C

Dfinition des structures de rpitition conditionnelle

Structure qui permet de rpter plusieurs fois le mme traitement jusqu ce que la
condition de fin apparaisse.

Faire le traitement
si la condition est vrifie alors rpter le traitement

int i;
.
i=1;
do
{
serial.print(I = ); serial.printl(i);
i=i+1;
}
while (i<=10);
Le traitement est effectu au minum une fois puis rpt tant que I <= 10

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

26

Quelques lments du language de programmation C

Dfinition des structures de test conditionnelle

Ces structures permettent dappliquer un traitement logiciel particulier en fonction


dun vnement qui apparait ou en fonction de lvolution dune variable.

Si la condition est vrifie alors faire traitement1


sinon faire traitement2

int condition;
.
condition=10;
.
if (condition==1)
{
serial.print(condition = ); serial.println(condition);
}
else
{
serial.print(condition = ); serial.println(condition);
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

27

Quelques lments du language de programmation C

Dfinition des structures de test conditionnelle

Ces Structures permettent dappliquer un traitement logiciel particulier en fonc tion


dun vnement qui apparait ou en fonction de lvolution dune variable.

Si
la condition1 est vrifie
sinon si la condition2 est vrifie
sinon si la condition3 est vrifie
sinon si la condition4 est vrifie

alors faire traitement1


alors faire traitement2
alors faire traitement3
.

int condition;
.
condition=2;
.
if (condition==1)
{
serial.print(condition 1 = ); serial.printl(condition);
}
elseif (condition==2)
{
serial.print(condition 2 = ); serial.printl(condition);
}
elseif (condition==3)
{
serial.print(condition 3 = ); serial.printl(condition);
}
elseif (condition==4) {.}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

28

Quelques lments du language de programmation C

Dfinition des structures de test conditionnelle

Ces Structures permettent dappliquer un traitement logiciel particulier en fonc tion


dun vnement qui apparait ou en fonction de lvolution dune variable.

Test (var)
si var=condition1 alors faire traitement1
si var=condition2 alors faire traitement2

char var;
.
var = A;
.
Switch (var)
{
case A :
{
serial.print(var_A = ); serial.printl(var);break ;
}
case B :
{
serial.print(var _B= ); serial.printl(var);break ;
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

29

Description des fonctions dEntres/Sorties

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

30

Les Entres/Sorties Numriques Simples

Proprits

Ce sont des E/S qui ont deux tats et dont ceux-ci sont contrls par lutilisateur
(programme).

Celles qui ne sont pas des E/S simples sont des E/S analogiques et des E/S spcifiques.

Actions faire par programmation pour utiliser ces E/S.

Indiquer quelle broche est utilise.


int Signal1 =2;

Indiquer la direction de lE/S  est-ce que lutilisateur besoin dune Entre ou une Sortie?
pinMode( Signal1,OUTPUT); ou pinMode(Signal1,INPUT);

En fonction du besoin du programme, forcer la Sortie ltat haut(VDD) ou bas (GND) ou lire
lEntre.
Sortie : digitalWrite(Signal1,HIGH); ou digitalWrite(Signal1,LOW);
Entre : var = digitalRead(Signal1);

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

31

Les Entres/Sorties Numriques Simples

Exemple 1 Utilisation des entres/sorties

Faire clignoter la led associe la broche 13 avec une priode de 1 seconde si la broche
2 est ltat 1 (VDD=5v) et 2 secondes si elle est 0 (Gnd=0v).

Dclaration des broches utilises


int Led=13 ;
int Interrupteur= 2 ;

Indiquer la direction des broches 2 et 13


Void setup
{
pinMode(Led,OUTPUT);
pinMode(Interrupteur,INPUT);
}

Programme
Void loop()
{
boolean Toggle;
if (digitalRead(Interrupt)==1) delay(1000) ;
else delay(2000) ;
if (Toggle==1)
{
digitalWrite(Led,LOW) ; Toggle=0;
}
else
{
digitalWrite(Led,HIGH) ; Toggle=1;
}

C.F exprimentation_1

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

32

Les Entres/Sorties Numriques Simples

Exemple 2 Utilisation des sorties

Dcoder et Gnrer en code morse le message SMS


Dure point : tpoint = 200ms

trait : 3 x tpoint
Interval entre deux lettres : Interv1 = 3 x tpoint
Interval dentre deux mots : Interv2 = 7 x tpoint

1 x tpoint

3 x tpoint
1 x tpoint

7 x tpoint

3 x tpoint

C.F exprimentation_2

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

33

Les Entres/Sorties Numriques Simples

Exemple 2

Programme
int Led=13;

while(1){
//--- Dcodeur morse

//---- 0 : 1 point, 1: un trait, 2: sparation entre


//---deux lettres, 3 : sparation entre deux mots.
byte Morse_Tab[]={1,1,1,2,1,1,2,1,1,1,3};
int point=200;
void setup() {
pinMode(Led,OUTPUT);
}
void loop() {
byte code ;
int i;

switch (Morse_Tab[i]){
case 0: {
digitalWrite(Led,HIGH); delay(point);
digitalWrite(Led,LOW); delay(point);
break;
}
case 1: {
digitalWrite(Led,HIGH); delay(2*point);
digitalWrite(Led,LOW) ; delay(point);
break;
}
case 2:{
digitalWrite(Led,LOW); delay(3*point);
break;
}
case 3:{
digitalWrite(Led,LOW); delay(7*point);
break;
}
};
++i;
if (i>10)i=0;
}
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

34

Convertisseur Analogique/Numrique

Dfinition et fonctionnement
Fonction lectronique intgre dans CTRL qui asssure linterface entre me
monde analogique et le monde numrique  Conversion analogique/numrique
(CAN).
Monde numrique
Bit: chiffre binaire qui ne peut prendre que deux valeurs :
0 ou 1
0 ou VDD : Grandeur binaire au sens lectrique du terme  0 la masse  VDD
5v,3v,
Chiffre cod
4 bits
8 bits
16 bits

sur N bits
: codage de 16 valeurs
: codage de 256 valeurs
: codage de 65536 valeurs

Monde analogique
Grandeur qui peut prendre une infinit de valeur au cours du temps qui passe.
Il faudrait une infinit de bit pour coder une grandeur analogique  pas ralisable
physiquement.
Rsolution (la plus petite valeur que le CAN peut coder:
Res= Vref/2^Nbits, exemple Vref=5v , Nbits=8  Res = 5/256 =19mV.
Le convertisseur analogique numrique arrondit donc la grandeur analogique (troncature).
Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

35

Convertisseur Analogique/Numrique

Description et fonctionnement

Un convertisseur numrique/analogique 10-bits fournit une


tension de comparaison lentre V- du comparateur qui est
contrle par le compteur 10-bits.
Lorsque la tension de rfrence V- est gale la tension
analogique V+ le processus de conversion sarrte et fournit
la grandeur analogique convertie en numrique (ANxanalogique  ANx-Numrique).

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

36

Convertisseur Analogique/Numrique

Example 1: Ralisation dun voltmtre


Le principe consiste utiliser le CAN pour mesurer une tension analogique
comprise entre 0 et 10v. La lecture sera envoye sur le port de la liaison de
mise au point (Tool  Serial link).

const int voltMetrePin = A1;


float Tension;
void setup() {
Serial.begin(9600);
analogReference(DEFAULT);
}
void loop() {
Tension=analogRead(voltMetrePin)*10.0/1023;
Serial.print(" Tension (mV) = ");Serial.println(Tension);
}

C.F exprimentation_3

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

37

Convertisseur Analogique/Numrique

Exemple 2 : Ralisation dun capacimtre.

Le principe de la mesure de Cx consiste la charger lectriquement par lintermdiaire


dun chelon de tension et dune rsistance connue.
Le convertisseur analogique numrique poursuit la tension jusqu ce quelle ait atteinte
63% de sa valeur finale. Un compteur logiciel mesure le temps entre le dbut et la fin
de la charge.
Une fois Cx mesure, celle-ci est dcharge par la broche RAZ.
La fonction delay(1ms) est utilise comme base de temps de rfrence.

C.F exprimentation_4

Equation pour dterminer C en connaissant T et R :

T = RxC > C =

T
R

Exemple : T= 5ms et R=470kohms  C=10nF, Tmin= 1ms  Cmin=2nF


Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

38

Convertisseur Analogique/Numrique

Exemple 2 : Ralisation dun capacimtre.

//--- Impulsion de charge de la capacit mesurer


int const Pulse = A5;
//--- Entre de mesure de la tension de charge
int const Capa = A4;
//--- Entre/Sortie de dcharge de la capacit
int const RAZ = A3;
//--- Rsistance calibre de charge (en kohms)
int const R = 460;
//--- Seuil de tension de charge pour T = RxC
float const Seuil = 5*0.63;
void setup() {
Serial.begin(9600);
//-- Pulse est une sortie
pinMode(Pulse,OUTPUT);
//-- Pulse est mise zro au dmarrage
digitalWrite(Pulse,LOW);
//-- Capa est une entre
pinMode(Capa,INPUT);
//--- RAZ est une entre au dmarrage
pinMode(RAZ,INPUT);
}

void loop() {
float capa;
float tc;
//--- Implusion de charge
digitalWrite(Pulse,HIGH);
tc=0;
//--- boucle de mesure du temps de charge de la capa Cx correspondant T = RC
while ((analogRead(Capa)*5.0/1023) < Seuil)
{
delay(1) ; ++tc;
}
//--- Calcul de Cx, t > 1 correspond la valeur de Cx mimnimale.
if (tc>1) capa=tc*1000/R - Cpar;
else capa=0;
//--- Affichage de la valeur via le serial port
Serial.print(" Capa(nF) =")
; Serial.println(capa);
Serial.print(" Temps de charge(ms) =") ; Serial.println(tc);
Serial.println(" ");
//--- RAZ de limplusion
digitalWrite(Pulse,LOW);
//--- Dcharge de Cx
pinMode(RAZ,OUTPUT) ; digitalWrite(RAZ,LOW);
Delay(1);
//--- Remise en entre de RAZ
pinMode(RAZ,INPUT);
delay(1000);
}

Modulation par Largeur dImpulsion (PWM)

Description et fonctionnement
Signal priodique
Pin 5 : Priode fixe standard T=490Hz
Pin 6 : Priode fixe standard T=980Hz
La priode peut est ajuste.

Impulsion dont la largeur peut avoir 256 valeurs diffrentes ( 0  255)


PWM 8-bits
Largeur de limpulsion est fonction du traitement numrique (la largeur de
limpulsion est module).

Numrique

Analogique

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

40

Modulation par Largeur dImpulsion (PWM)

Contrle de lintensit lumineuse dune diode LED.


Exemple 1
Lintensit varie de 0 100%  var_MLI =[ 0.. 255] tous les 20ms.
La valeur moyenne de la tension de commande de la LED est de:
VLed = 5

TW
var_ MLI
= 5
T
255
const byte Periode=20;
void setup() {
}
void loop() {
byte var_MLI;
for (var_MLI=0;var_MLI<256;var_MLI++)
{
//=======================================================
//=== La largeur de l'impulsion varie de 0 255:
//
PWM0
: est la sortie PWM sur laquelle
//
est branche la LED.
//
var_MLI : est la variable contenant la
//
valeur de la largeur d'impulsion.
//=======================================================
analogWrite(PWM0,var_MLI);
delay(Periode);
}
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

41

Modulation par Largeur dImpulsion (PWM)

Contrle de lintensit lumineuse dune diode LED.


Exemple 2
Contrle de lintensit lumineuse dune diode LED partir des touches du clavier +
et -, valides par lappui de la touche Enter.
Incmente et dcrmente la largeur de limpulsion partir de la touche + et
- du clavier (utilisation du Serial Monitor).
Retard de 500ms entre deux changements.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

42

Modulation par Largeur dImpulsion (PWM)

Contrle de lintensit lumineuse dune diode LED.


Exemple 2

Contrle de lintensit lumineuse dune diode LED partir des touches du clavier +
et -, valides par lappui de la touche Enter.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

43

Modulation par Largeur dImpulsion (PWM)

Convertisseur Numrique/Analogique
Principe de fonctionnement
T= 500Hz (PWM0)

Transforme de
Fourier
e(f)

E0=E x

t
T
0Hz

Filtre Passe-Bas
C.F exprimentation_5
- Mise en vidence du contenu spectral,
du filtrage et de la valeur moyenne.
- Frquence dchantillonnage = 2kHz
- FC = 20Hz et 2Hz
- E=5v

continu

F= 1
T

F1

F2

F3

f(Hz)

s(f)

Tension continue

E0=E x

t
T

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

44
44f(Hz)

Modulation par Largeur dImpulsion (PWM)

Convertisseur Numrique/Analogique
Loi de conversion numrique  analogique
Compteur 8-bit : 0<= n <=255
n=1
 t = t
n=k
 t = k t
n = 255
t=T

E0 = E

t
n
= E
T
255

t : est la rsolution du PWM


Numrique
Excursion
Anlogique
Excursion
numrique

Rsolution

0 E0 E
0 n 255

Analogique

0 E0 E

0 E

n
E
255

E
255

Exemple

0 E0 5v
0 E

255
5v
255

5
= 19.6mV
255

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

45

Modulation par Largeur dImpulsion (PWM)

Convertisseur Numrique/Analogique
Exemple 1 :Ralisation dune rampe une pente:
Frquence = 500ms
Amplitude 5v
PWM sur la broche 5
const int PWM0=5;
const byte Periode=2;
byte var_MLI;
void setup() {
}
void loop()
{
for (var_MLI =0; var_MLI <255; var_MLI ++)
{
//-- Mise jour du PWM avec la nouvelle valeur
analogWrite(PWM0, var_MLI);
delay(Periode);
}
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

46

Modulation par Largeur dImpulsion (PWM)

Convertisseur Numrique/Analogique
Exemple 2: Ralisation dune rampe double pentes:
Frquence = 500ms
Amplitude 5v
PWM sur la broche 5
const int PWM0=5;
const byte Periode=2;
void setup()
{
byte var_MLI =0;
}
void loop()
{
for (var_MLI =0; var_MLI <255; var_MLI ++)
{
//-- Mise jour du PWM avec la nouvelle valeur
analogWrite(PWM0, var_MLI);
//-- Fixe le pas de mise jour du PWM
delay(Periode);
}
for (var_MLI =255; var_MLI >0; var_MLI --)
{
analogWrite(PWM0, var_MLI);
delay(Periode);
}
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

47

Modulation par Largeur dImpulsion (PWM)

Convertisseur Numrique/Analogique
Exemple 3: Ralisation dun signal sinusodal

Frquence = 500ms
Amplitude 2.5v centr sur 2.5v
Tension dalimentation,
VDD = 5 ;
Nombre de point dans la sinusode, N = 255;

Equation de la sinusode
y = 2.5 + 2.5 x sin(2*pi*n/N))

Sinus variant
entre 0v et 5v

Dcalage
de +2.5v
Le PWM naccepte que des nombres entiers (pas de nombre dcimal)
m = partie entire (y*N/VDD)
C.F exprimentation_8

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

48

Modulation par Largeur dImpulsion (PWM)

Convertisseur Numrique/Analogique
Exemple 3: Ralisation dun signal sinusodal

#include <avr/pgmspace.h>
// --- Enregistrement des points dfinissant une priode de sinusode complte et fournir au PWM.
prog_uchar SinusTab[] PROGMEM=
{128,131,134,137,140,143,146,149,152,156,159,162,165,168,171,174,176,179,182,185,188,191,193,196,199,201,204,206,209,211,213,216,218,220,222,224,226,228,230,23
2,234,235,237,239,240,37,39,42,44,46,49,51,54,56,59,62,64,67,70,73,76,79,81,84,87,90,93,96,99,103,106,109,112,115,118,121,124,127
};
// ------- Dfinition des constantes et affection de la broche la fonction PWM
const int PWM0 = 5 ; const byte Periode = 2;
// --- Programme dinitialisation  Ici aucune initialisation nest requise.
void setup() {
}
// --- Programme proncipale qui sxcutera jusqu lextinction de lalimentation
void loop()
{
// ---- Dclaration des variables du programme
byte Pulse=0 ; byte k=0 ; unsigned char sinus;
//--- Boucle sans fin qui fournir les points de la sinusode au PWM.
for (k=0;k<256;k++)
{
// ---- Acquisition dunpoint de la sinusode depuis la tabke SinusTab
sinus=pgm_read_byte_near(&SinusTab[k]);
// ---- Chargement dans le PWM
analogWrite(PWM0,sinus);
// --- Ajuste le dlais entre deux points de la sinusode et de sa priode ( T= 255 x dlais)
delay(Periode);
}
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

49

Modulation par Largeur dImpulsion (PWM)

Convertisseur Numrique/Analogique
Exemple 3: Ralisation dun signal sinusodal
Effet du filtre sur lamplitude de la sinusode et le niveau des harmoniques
Pour une sinusode de frquence de 2Hz:
FC = 2Hz, le filtre apporte une attnuation de -3db soit 0.7 x
lamplitude maximale
VM =0.7*2.5=1.8v.
FC=20Hz est une dcade de la frquence du signal lamplitude du
signal ne subit pas dattnuation due au filtre par contre les
harmoniques sont moins attnues de 20dB par rapport FC = 2Hz.

C.F exprimentation_2
- Mise en vidence du contenu spectrale,
du filtrage et de la valeur moyenne.
- Frquence dchantillonnage = 2kHz
- FC = 20Hz et 2Hz
- E=5v
Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

50

Modulation par Largeur dImpulsion (PWM)

Modulation tout ou rien


Gnrer un appel gnral en morse CQ de F5KEQ
Interface matrielle
5V
220ohms
220ohms
A
R
d 13
u
i
n
Audio
o 9

G
BS170

U
N
O

Buzzer

100kohms
D

R
3

Modul
8

G
BS170

100kohms

GND

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

51

Modulation par Largeur dImpulsion (PWM)

Description et fonctionnement
Exemple 4: Gnrer un appel gnral en morse en audio: CQ de F5KEQ
//---- 0 : 1 point, 1: un trait, 2: sparation entr deux
lettres
//---- 3 : sparation entre deux mots.
//---- Message trasmettre en morse :
// C Q de F 5K Q
Byte Morse_Tab[]={1,0,1,0,2,1,1,0,1,3,1,0,0,
2,0,3,0,0,1,0,2,0,0,0,0,0,2,1,0,1,2,0,2,1,1,0,1,3};
//--- Nbre de symbole contenu dans le message
const int NbSymb = 38;
//--- Vitesse du point
int point = 110;
//--- Freq audio = 490hz
int Audio = 9;
//--- Contrle de la modulation
int Modul = 8;
//--- Led
int Led = 13;
void setup() {
pinMode(Led,OUTPUT);
analogWrite(Audio,127);
}
void loop() {
byte code ;
int i;

while(1){
//--- Dcodeur morse audio et visuel
switch (Morse_Tab[i]){
case 0: {
digitalWrite(Led,HIGH) ; digitalWrite(Modul,HIGH); delay(point);
digitalWrite(Led,LOW) ; digitalWrite(Modul,LOW); delay(point) ; break;
}
case 1: {
digitalWrite(Led,HIGH); digitalWrite(Modul,HIGH); delay(2*point);
digitalWrite(Led,LOW) ; digitalWrite(Modul,LOW) ; delay(point) ; break;
}
case 2:{
digitalWrite(Modul,LOW); digitalWrite(Led,LOW); delay(2*point) ; break;
}
case 3:{
digitalWrite(Modul,LOW); digitalWrite(Led,LOW);delay(7*point) ; break;
}
};
++i;
if (i>NbSymb)i=0;
}
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

52

Les Liaisons Sries Synchrones et Asynchrones

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

53

Les Liaisons Sries Synchrones et Asynchrones

Introduction

Les liaison sries qui permet la communication (change de donnes, contrle


commande,) des quipements informatique et des circuits intgrs.
Les donnes sont transmises sur un fil ou plusieurs fils suivants la nature de la
transmission (UART, I2C,SPI,).

La communication srie est gre par un metteur/rcepteur intgr au niveau de


lquipement ou du circuits intgr (Atmega328p).

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

54

Les Liaisons Sries Synchrones et Asynchrones

Introduction

La liaison peut tre ASYNCHRONE si lHORLOGE nest pas transmise avec les donnes.
La liaison est SYNCHRONE si lHorloge est physiquement transmises en mme temps
que le flux de donnes.
Les liaisons sries se caractrisent par leur protocole et leurs spcifications
lectriques.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

55

Les Liaisons Sries Synchrones et Asynchrones

La liaison srie ASYNCHRONE


Structure
Un metteur / rcepteur transmet en srie (1 fil) les 8-bits de la donne.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

56

Les Liaisons Sries Synchrones et Asynchrones

1 Bit stop

1 Bit start

Donnes: 5,6,7,8 bits

Bit de parit

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

57

Les Liaisons Sries Synchrones et Asynchrones

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

58

Les Liaisons Sries Synchrones et Asynchrones

La liaison srie ASYNCHRONE


Le standard RS232
Le standard ne supporte
Par contre le standard ne dfinit pas :
Le codage des caractres (ASCII, Code Baudot ou EBCDIC par exemple).
La faon dont les caractres sont rpartis en trames.
Les protocoles de dtection d'erreur ou les algorithmes de compression de
donnes.
Les dbits de transmission : seule une limite suprieure de 20 000 bauds est
indique.
La fourniture de courant lectrique des priphriques.

Baud

Symbole

Nombre de symbole transmis par seconde


2400 bit/s, en 4-QAM (2 bits transmis par symbole)
3600 bit/s, en 8-QAM (3 bits transmis par symbole)
4800 bit/s, en 16-QAM (4 bits transmis par symbole)

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

59

Les Liaisons Sries Synchrones et Asynchrones

La liaison srie ASYNCHRONE


Le standard RS232
Les interfaces lectriques +/-12 v

Ct Equipement et carte

Cble de liaison
+12v

+5v

0v

0v

-12v

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

60

Les Liaisons Sries Synchrones et Asynchrones

La liaison srie ASYNCHRONE


Le standard RS232
Comment programmer

//=======================================================
//-- Envoie un caractre via la liaison srie
//=======================================================
void setup()
{
//--- Cration dun objet liaison srie Asynchrone
Serial.begin(9600);

//=======================================================
//-- Reoit un caractre via la liaison srie
//=======================================================
byte incomingByte;
void setup()
{
//--- Cration dun objet liaison srie Asynchrone
Serial.begin(9600);
}

}
void loop()
{
//======================================================
//--- Dbut dune transmission
//=======================================================
while (!Serial);
Serial.println('U');
delay(50);
}

void loop()
{
//======================================================
//--- Attend l'arrive d'un caractre
//=======================================================
if (Serial.available() > 0) {
//--- le caractre est reu
incomingByte = Serial.read();
//--- Envoit vers le terminal srie
Serial.print("Caractre reu ") ; Serial.println(incomingByte, DEC);
}
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

61

Les Liaisons Sries Synchrones et Asynchrones

La liaison srie ASYNCHRONE


Le standard RS232
Table ASCII ( American Standard Code for Information Interchange).

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

62

Les Liaisons Sries Synchrones et Asynchrones

La liaison srie ASYNCHRONE


Le standard RS232
Table ASCII ( American Standard Code for Information Interchange).

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

63

Les Liaisons Sries Synchrones et Asynchrones

La liaison srie ASYNCHRONE


Exemple : Pilotage Tx

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

64

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus

Bus de liaison srie synchrone de communication entre un ou plusieurs circuits intgrs (ADC,
IO, DAC, horloge temps relle, mmoire...). Chacun des CI est repr par une adresse Adrn.

Adr1

Adr2

Adr3

Lhorloge est transmise en mme temps que les donnes (registre dcalage).
Ligne SDA : Serial Data line
Ligne SCL : Serial Clock line

Condition de dbut
de transfert

Condition de Fin
de transfert

Adresse/Donnes/Signaux de contrle

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

65

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Vitesse de transmission
Mode

Vitesse
(kBit/s)

TR

Max. Cload
(pF)

Rp

Standard

100

1s

400

2700

Fast

400

300ns

400

820

120ns

550

270

Fast +
High-speed
Ultra-fast

3.4
5

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

66

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
I2C et Aarduino

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

67

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Structure dune trame I2C.
Dpend du type dopration ralise (cette formation nenvisage que les cas
les plus standards).
Lcriture dun octet dans un priphrique ( ex: PCF8574A)

Arduino

Sous-adresse choisie
par lutilisateur
Ex: 0x70 (112 dec)

SDA
SCL

PCF8574

PCF8574A
Ecriture

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

68

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Structure dune trame I2C
Cas dune criture simple

- Dmarrage de lopration dcriture


- Adresse du priphrique crire
- Type dopration RW = 0 criture, (RW =1 lecture)
- Acquittement du priphrique, SDA=0
- Donne crire
- Acquittement du priphrique, SDA=0
- Fin de lopration dcriture

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

69

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Structure dune trame I2C.
Ecriture en rafale ( nombre dcriture illimit)

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

70

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Structure dune trame I2C.
Lecture ( nombre dcriture illimit)

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

71

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Structure dune trame I2C.
Ecriture dans une mmoire (EPROM, RAM)

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

72

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Structure dune trame I2C.
Lecture dans une mmoire (EPROM, RAM)

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

73

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Structure dune trame I2C.
Adressage de plus mmoire PCF85103C

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

74

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Programmation dun composant I2C
//======================================================
//--- envoie de 64 caractres
//======================================================
#include <Wire.h>

void setup()
{
//--- Cration dun objet I2C
Wire.begin();
//--- Cration dun objet liaison srie
Serial.begin(9600);
}

byte val = 0;
void setup()
{
//--- Cration dun objet I2C
Wire.begin();
}
void loop()
{
//======================================================
//--- Dbut dune transmission par lenvoie de ladresse du priphrique
//=======================================================
Wire.beginTransmission(44);
//=======================================================
//-- envoie de la valeur
//=======================================================
Wire.write(val);
//=======================================================
//--- Fin de transmission
//=======================================================
Wire.endTransmission();
val++;
if(val == 64)
{
val = 0;
}
delay(500);
}

//========================================================
//-- Transmission vers la liaison srie des caractres reus par la liaison I2C.
//========================================================
#include <Wire.h>

void loop()
{
//=======================================================
//--- Demande de lecture de 6 octets du priphrique dadresse 0x02
//========================================================
Wire.requestFrom(2, 6);
//========================================================
//--- Attente de la rception dun caractre
//========================================================
while(Wire.available())
{
//======================================================
//--- Lecture dun caractre reu depuis la liaison I2C et envoi vers
//--- la liaison srie
//======================================================
char c = Wire.read();
Serial.print(c);
}
delay(500);
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

75

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Structure dune trame I2C.
Afficheur LCD 4 x 20 caractres

PCF8574

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

76

Les Liaisons Sries Synchrones et Asynchrones

La liaision srie synchrone


I2C : Inter Integrated Circuit bus
Structure dune trame I2C.
Afficheur LCD
#include <Wire.h>
//============================================================
// LCD librairie
// https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
// Configure les connections entre l'afficheur LCD et l'interface I2C
//
addr, en,rw,rs,d4,d5,d6,d7,bl,blpol
// Adresse I2C = 0x27
//============================================================
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup()
{
//--- Cration d'un objet liaison srie
Serial.begin(9600);
//--- Cration d'un objet LCD comportant 4 lignes de 20 caractres
lcd.begin(20,4);
//--- Positionne le curseur sur la premire ligne gauche
lcd.setCursor(0,0);
//--- Affiche "Formation ARALA"
lcd.print("Formation ARALA");
//--- Positionne le curseur sur la deuxime ligne gauche
lcd.setCursor(0,1);
//--- Affiche "Mai 2014"
lcd.print
}

void loop()
{
{
//--- Attent l'arrive d'un caractre
if (Serial.available()) {
//--- Tempo pour pour tre sur la transmission srie est termine
delay(100);
//--- RAZ de l'affichage
lcd.clear();
//--- Lecture de tous les caractres reus et affichage sur le lCD
while (Serial.available() > 0) {
//--- Affichage sur le LCD
lcd.write(Serial.read());
}
}
}
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

77

Les Interruptions

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

78

Les Interruptions

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

79

Les Interruptions

Exemple de programme nono-tche


Changement la frquence du transceiver.
Le microcontrleur rpte linfini la tche ci-dessous constitue de plusieurs
actions.
Tche Changement de Freq.

Attente que lOM tourne le bouton du vernier


Lecture du pas dincrmentation
Calcul de la frquence de loscillateur

Attente par scrutation logicielle dune


demande daction du type :
while !(bouton);
Tant que le bouton nest pas activ alors
attendre.

Modification de la frquence de loscillateur


Affichage de la nouvelle frquence
Attente du top indiquant quune seconde est coule
Affichage de lheure

Attente par scrutation logicielle dune


demande daction du type :
While !(seconde);
Tant que la seconde nest pas coule alors
attendre

Le microcontrleur gre plusieurs actions mais squentiellement lune aprs lautre.


Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

80

Les Interruptions

Exemple de programme nono-tche


Changement la frquence du transceiver.

Ordonnancement des tches

Temps total pour effectuer lensemble de la tche

Tche Changement de Freq.


Affichage de
lheure
Attente du top indiquant
quune seconde est coule
Affichage de la
nouvelle frquence
Modification de la
frquence de loscillateur
Calcul de la frquence
de loscillateur
Lecture du pas
dincrmentation
Attente que lOM tourne
le bouton du vernier

temps

t1

t2

t3

t4

t5

t6

t7

Laction dattente force le processeur surveiller si lvnement est arriv:


- Il ne peut rien faire dautre.
Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

81

Les Interruptions

Exemple de programme multitche

Supposons que le rcepteur dtecte le dclenchement dun relais (R7) et quil soit
ncessaire de mesurer le niveau du signal reu pour lafficher.

Supposons que la tche Tache changement de freq prend 1 seconde.

Il faut donc attendre 1 seconde avant daller mesurer la force du signal reu et
lafficher.

Tche mesure du Smtre


Tche changement de freq

Tche mesure du Smtre


temps

Tche changement de freq

1s

0.5s

2s

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

0.5s

6/8/2014

82

Les Interruptions

Exemple de programme multitche

Supposons que la tche mesure du Smtre soit la tche prioritaire et quelle doit
tre excute sans dlai.

Dun point de vue chronogramme cela ressemble ceci:


vnement matriel indiquant la rception dune station Squelch

Laction temporaire est excute en priorit


Tche mesure du Smtre
Tche changement de freq

1s

0.5s

temps

La tche de fond reprend son excution.


La tche de fond est suspendue momentanment

La tche Tche de changement de freq est une TACHE DE FOND qui est excute linfini
tant que le microcontrleur na rien dautre faire.

La tche Tche de mesure du Smtre est une TACHE ou ACTION TEMPORAIRE considre
comme tant plus prioritaire que la tche de fond. Elle est dclenche par un vnement matriel
(ici le squelch ).

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

83

Les Interruptions

Exemple de programme multitche

Bien quil ny ait quune seule Unit de calcul, il y a bien deux tches diffrentes qui sont
excutes et gres par le matriel  multitche.

La synchronisation est matrielle et non pas logicielle (technique de la scrutation


logicielle polling qui consomme du temps CPU).

Le mode dordonnancement des tches par interruption est une technique de


synchronisation matrielle utilisant les ressources priphriques du microcontrleur ou
sources dinterruption.

Une ressource priphrique demande la CPU dinterrompre temporairement la tche


de fond pour lui permettre dexcuter son traitement.

Demande dinterruption

Ressources
matrielles
Sources dinterruption:
- Base de temps
- Liaison srie
- Entres/sorties
-

Tche de fond
Tche de fond interrompue

Tche temporaire

Tche de fond

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

84

Les Interruptions

Exemple de programme multitche


Exemples:

UART, liaison srie asynchrone


Une interruption temporaire de la tche de fond est demande par lUART et indique quun
caractre a t reu ou que le caractre courant a t transmis.

PC

Tx

Rx

UART

Atmega328

Base de temps
Une interruption temporaire de la tche de fond est demande par la base de temps pour
indiquer que le temps de rfrence est coul ( ex: 1 seconde).

Base de temps

Demande dinterruption

Demande dinterruption

Atmega328

Comparateur analogique
Une interruption temporaire est demande par le comparateur analogique pour indiquer
que le signal dentre dpasser la tension de comparaison.
Signal comparer
Tension de rfrence

Comparateur
Analogique

Demande dinterruption

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

Atmega328

6/8/2014

85

Les Interruptions

Les sources dinterruption de l ATmega328


24 sources dinterruption :
Interruptions externes:
Interruptions lies aux entres INT0 (PD2) et INT1 (PD3).
Interruptions internes
Base de temps:
Interruptions lies aux Timers 0, 1 et 2 (plusieurs causes
configurables).
Fonctions analogiques:
Interruption lie au comparateur analogique.
Interruption de fin de conversion ADC.
Communication srie:
Interruptions du port srie USART.
Interruption du bus TWI (I2C) et SPI.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

86

Les Interruptions

Comment utiliser les interruptions externes avec


lArduino Uno?

Du point de vue logiciel

Autoriser une ou les sources dinterruption interrompre la tche de fond.

Indiquer le mode de dclenchement de la demande dinterruption, exemple activation sur front


ou niveau.

Dcrire lalgorithme de traitement li la source dinterruption

Initialise et dfinie
la source dinterruption
utilise.

int Squelch = 0; // Interruption externe 0 cble sur la pin 2 et a comme numro 0.


void setup()
{
.
.
//-- Laction temporaire StationRecue est excute pour chaque dtection de squelch (front montant (
//-- RISING.) sur la pin 2.
attachInterrupt(SQUELCH, StationRecue, RSISING);
}

Mode de dclenchement front ou niveau


Nom de laction temporaire
Numro de la Source dinterruption

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

87

Les Interruptions

Comment utiliser les interruptions externes 0 et 1 (pin 2 and 3)?

Du point de vue logiciel

La fonction attachInterrupt(param1, param2, param3) ncessite trois paramtres :


param1 : Quelle interruption est utilise.
- Attention, cest le numro de linterruption et pas le numro de la pin:
- Interruption externe 0  0 , Interruption externe 1  1;
param2 : Le nom de la fonction /algorithme de traitement.
- Il ny a pas de paramtre passer ou retourner par cette fonction.
param3 : Quel est le type de dclenchement de linterruption.

Il y a quatre types de dclenchements possible :


LOW
: Lentre est au niveau bas
RISING : Lentre passe dun niveau bas un niveau haut
FALLING : Lentre passe dun niveau haut un niveau bas
CHANGE : Lentre a chang de niveau. Elle est pass dun niveau bas vers un niveau haut ou
inversement.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

88

Les Interruptions

Comment utiliser les interruptions externes 0 et 1 (pin 2 and 3)?


Exemple:
Mesurer le temps douverture du squelch dun rcepteur en utilisant linterruption
externe 0 (pin 2).
Dclenchement de la mesure de la dure sur le front montant et arrt sur le front
descendant.
Squelch

Non

Non

Temp=1s?

Oui
Oui

sqOn=0

etat==1?

Oui

sqOn=1

sqOn==1?
Afficher SQUELCH OFF

Sec=sec+1

Afficher SQUELCH ON

Non
Sec=0
Dclenchement

Afficher dure

Dclenchement

Afficher dure

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

89

Les Interruptions

Comment utiliser les interruptions externes (pin 2 and 3)?


Exemple:

#include "LiquidCrystal.h"
LiquidCrystal lcd(8,9,4,5,6,7);

void Squelch()
{
etat=!etat;

int squelchIn = 0;
volatile int etat = LOW;
int sqOn;
int sec;

if (etat)
{
lcd.setCursor(0,0);lcd.print("
");
attachInterrupt(squelchIn,Squelch,RISING);
lcd.setCursor(0,0);lcd.print("SQUELCH ON ");
sqOn=1;
}
else
{
attachInterrupt(squelchIn,Squelch,FALLING);
lcd.setCursor(0,0);lcd.print("SQUELCH OFF ");
sqOn=0;
}

void setup()
{
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);lcd.print("Interruption ex ");
attachInterrupt(squelchIn,Squelch,RISING);
}

void loop()
{
delay(1000);
if (sqOn)
{
if (sec==60) sec=0;
sec=sec++;
lcd.setCursor(0,1);lcd.print("Time= ");
lcd.setCursor(6,1);lcd.print("
");
lcd.setCursor(6,1);lcd.print(sec,DEC);
}
else
{
sec=0;
lcd.setCursor(0,1);lcd.print("Time= ");
lcd.setCursor(6,1);lcd.print(sec,DEC);
}

}
}

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

90

Les Interruptions

Comment utiliser les interruptions externes (pin 2 and 3)?


Exemple:
Mesurer le temps douverture du squelch dun rcepteur en utilisant linterruption
externe 0 (pin 2).
Dclenchement de la mesure de la dure sur le front montant et arrt sur le front
descendant.
Deuxime solution en associant une tche temporaire pour le front descendant et
une autre pour le front montant.

Non

Squelch

Squelch

Temp=1s?

Oui
sqOn=0
Oui

sqOn=1

sqOn==1?

Sec=sec+1

Non

Afficher SQUELCH OFF

Afficher SQUELCH ON

Sec=0

Afficher dure

Afficher dure

Dclenchement

Dclenchement

Les Interruptions

Comment utiliser les interruptions externes 0 et 1 (pin 2 and 3)?


Exemple:
#include "LiquidCrystal.h"
LiquidCrystal lcd(8,9,4,5,6,7);
int squelchIn = 0;
//-- Numro de de l'interruption externe:
// 0--> pin 2 , 1--> pin 3
int sqOn ; //-- Indique si une station est prsente.
int sec
; //-- Variable indiquant la dure
void setup()
{
Serial.begin(9600);
lcd.begin(16,2);
lcd.clear();
lcd.setCursor(0,0);lcd.print("Interruption ex ");
attachInterrupt(squelchIn,SquelchOn,RISING);
}

void SquelchOff()
{
lcd.setCursor(0,0);lcd.print("SQUELCH OFF ");
sqOn=0;
attachInterrupt(squelchIn,SquelchOn,RISING);
}
void SquelchOn()
{
lcd.setCursor(0,0);lcd.print("SQUELCH ON ");
sqOn=1;
attachInterrupt(squelchIn,SquelchOff,FALLING);
}

void loop()
{
delay(1000);
if (sqOn)
{
lcd.setCursor(0,1);lcd.print("Time= ");
lcd.setCursor(6,1);lcd.print("
");
lcd.setCursor(6,1);lcd.print(sec,DEC);
sec=sec++;
if (sec>=60) sec=0;
}
else
{
sec=0;
lcd.setCursor(0,1);lcd.print("Time= ");
lcd.setCursor(6,1);lcd.print(sec,DEC);
}
}

Les Interruptions

Comment utiliser les interruptions externes 0 et 1 (pin 2 and 3)?

Du point de vue logiciel

Autres fonctions
noInterrupts() : Les demandes dinterruption ne sont pas autorises et ne seront pas
prises en compte.
interrupts()
: Toutes les demandes dinterruption sont autorises condition que les
interruptions utilises soient autorises individuellement.
detachInterrupt(numro_interruption): La demande dnterruption numro_interruption
nest plus prise en compte.

Formation arduino - ARALA - F4GSC - Jean-Luc Levant 2014

6/8/2014

93