ArduinoTutorial_V2

download ArduinoTutorial_V2

of 93

Transcript of ArduinoTutorial_V2

  • 7/23/2019 ArduinoTutorial_V2

    1/93

    6/8/2014 1

    F A

    F4GSC JL L ARALA N 2014

    F ARALA F4GSC JL L 2014 1

  • 7/23/2019 ArduinoTutorial_V2

    2/93

    6/8/2014 2

    P

    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

    F ARALA F4GSC JL L 2014 6/8/2014 2

  • 7/23/2019 ArduinoTutorial_V2

    3/93

    6/8/2014 3

    P

    Description des entes/sorties numriques simples 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).

    Le convertisseur analogique numrique Description et fonctionnement

    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).

    F ARALA F4GSC JL L 2014

  • 7/23/2019 ArduinoTutorial_V2

    4/93

    6/8/2014 46/8/2014F ARALA F4GSC JL L 2014 4

    P

    Les Liaisons Sries Synchrones et Asynchrones Srie Asynchrone

    Description et Fonctionnement Interface avec lHyperterminal

    I2C Synchrone Description et Fonctionnement

    Les interruptions

  • 7/23/2019 ArduinoTutorial_V2

    5/93

    6/8/2014F ARALA F4GSC JL L 2014 5

    I

  • 7/23/2019 ArduinoTutorial_V2

    6/93

    I

    Do vient le nom arduino?

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

    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 soifdans 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 logiciellessous licence open source.

    6/8/2014F ARALA F4GSC JL L 2014 6

  • 7/23/2019 ArduinoTutorial_V2

    7/93

    I

    Les plus

    Pouvoir rutiliser les dveloppements matriels et logiciels (librairies) crer pardautres dveloppeurs.

    Lhritage des librairies permet de rduire considrablement le temps dveloppementdes 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 lacration et linnovation.

    Cette simplification permet tout un public nayant pas les comptences en lectroniqueet 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 utilisantdes fonctions logicielles qui intgrent la complexit de programmation des priphriques.

    6/8/2014F ARALA F4GSC JL L 2014 7

  • 7/23/2019 ArduinoTutorial_V2

    8/93

    I

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

    dveloppeurs ayant des connaissances approndies.

    6/8/2014F ARALA F4GSC JL L 2014 8

  • 7/23/2019 ArduinoTutorial_V2

    9/93

    6/8/2014 96/8/2014F ARALA F4GSC JL L 2014 9

    D A U

  • 7/23/2019 ArduinoTutorial_V2

    10/93

    6/8/2014 106/8/2014F ARALA F4GSC JL L 2014 10

    D A UNO R3

    E A/N

    E/ N

    Les interfaces dentres/sorties numriques et analogiques

    Gnd

    Gnd

    5v3.3vRESET

    AREF

    IOREF vin

    AREF : source de rfrence de tension externe

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

    Vin : alimentation externe (7-12v)

  • 7/23/2019 ArduinoTutorial_V2

    11/93

    6/8/2014 116/8/2014F ARALA F4GSC JL L 2014 11

    D A UNO R3

    Les Entres/Sorties Spciales

    E/S N S A (UART)E/S N S S (I2C)

    E/S N PWME/S N S S (SPI)

  • 7/23/2019 ArduinoTutorial_V2

    12/93

    E

  • 7/23/2019 ArduinoTutorial_V2

    13/93

    E

    A . 5 3.3.

    shield thernet

    shield GPS/GSM

    shield zeebe shield audio Shield SD card

    Shield tlmtrie ultrason

    Shield Contrle moteurShield prototype

    Shield Afficheur graphique

  • 7/23/2019 ArduinoTutorial_V2

    14/93

    6/8/2014 14

    D A328P

    6/8/2014F ARALA F4GSC JL L 2014 14

  • 7/23/2019 ArduinoTutorial_V2

    15/93

    6/8/2014 15

    D AT328P

    Les fonctions embarques dans lATmega328P

    C (C ) IC 8B

    A H . U

    .

    RISC (R I S) 2

    (20MIPS).

    32

    .

    E 1

    F= 16MH T=66.

    2 16

    A C.

    L

    E 1

    F ARALA F4GSC JL L 2014 6/8/2014 15

  • 7/23/2019 ArduinoTutorial_V2

    16/93

    6/8/2014 16

    D AT328P

    Les fonctions embarques dans lATmega328P

    Les ressource matrielles Les plans mmoire

    6/8/2014F ARALA F4GSC JL L 2014 16

    Mmoire Taille Opration dcriture/Lecture

    Programme - 32 kOctets de mmoireFlash.

    - Ecriture au chargemnt du programme.

    Donnes Volatiles - 2 koctets de mmoire RAM. - Ecriture/lecture Accessible toutmoment.

    Donnes non Volatiles - 1 koctets de mmoireEEPROM.

    - Plusieurs koctets demmoire Flash.

    - Ecriture/lecture Accessible toutmoment.

    - 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.

  • 7/23/2019 ArduinoTutorial_V2

    17/93

    6/8/2014 17

    D AT328P

    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.

    6/8/2014F ARALA F4GSC JL L 2014 17

  • 7/23/2019 ArduinoTutorial_V2

    18/93

    6/8/2014 18

    D AT328P

    6/8/2014F ARALA F4GSC JL L 2014 18

    Les fonctions embarques dans lATmega328P Les ressource matrielles

    Les autres membres de la famille

  • 7/23/2019 ArduinoTutorial_V2

    19/93

    6/8/2014F ARALA F4GSC JL L 2014 19

    Q C

  • 7/23/2019 ArduinoTutorial_V2

    20/93

    Q C

    Structure dun programme Arduino

    6/8/2014F ARALA F4GSC JL L 2014 20

    //===========================================================//-- La librairie LCD est utilise.//===========================================================#include

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

    Int led=13;

    //===========================================================//-- 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);

    //===========================================================void setup() {//-- Dfinit le nombre de caractre par ligne ainsi que le nombre de lignelcd.begin(16, 2);

    //-- Affiche le message Hello World.lcd.print("hello, world!");

    }

    //===========================================================void loop() {Int compteur;// set the cursor to column 0, line 1lcd.setCursor(0, 1);

    // print the number of seconds since reset:lcd.print(millis() / 1000);++compteur;

    }//===========================================================

    Construction du priphrique lcd et prcise commentce prifrique se connnecte la carte arduino ( quelssignaux sont utiliss).

    Inclusion dun fichier comprenant les fonctionslogicielles permettant le pilotage des fonctionslectroniques matrielles (shield).

    Boucle de programme xcute la mise sous-tension ou aprs une remise zro.

    Boucle de programme principale xcute la mise soustension ou aprs une remise zro (boucle sans fin).

    Affectation des noms symboliques au broches dE/Sde la carte Arduino.

  • 7/23/2019 ArduinoTutorial_V2

    21/93

    Q 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.

    6/8/2014F ARALA F4GSC JL L 2014 21

  • 7/23/2019 ArduinoTutorial_V2

    22/93

    Q C

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

    6/8/2014F ARALA F4GSC JL L 2014 22

    (A328)

    T 1 8 16 32 32 64

    N 1 2 4 4 8

    D

    ()

    0

    1

    127

    +128

    32768

    +32767

    2 147 483 648

    +2 147 483 647

    3.40282347+38

    +3.40282347E38

    1.79769313486231570308

    1.79769313486231570308

    D

    ( )

    0

    1

    0

    255

    0

    65535

    0

    4 294 967 295

    E B ON; C ; I ; ; ; ;

  • 7/23/2019 ArduinoTutorial_V2

    23/93

    Q 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.

    6/8/2014F ARALA F4GSC JL L 2014 23

    8 variables boolennes

    1 variables char

    1 variables int

    1 variables long

    Plan mmoireFlash, RAM, EPROM

    4 octets

    2 octets

    1 octet

    8 bits

  • 7/23/2019 ArduinoTutorial_V2

    24/93

    Q C

    Dfinition des structures de rpitition conditionnelle Structure qui permet de rpter plusieurs fois le mme traitementjusqu ce que la

    condition de fin apparaisse.

    Tant que la condition nest pas vrifie alors faire le traitement

    int i;.

    for (i=1 ; i

  • 7/23/2019 ArduinoTutorial_V2

    25/93

    Q C

    Dfinition des structures de rpitition conditionnelle Structure qui permet de rpter plusieurs fois le mme traitementjusqu ce que la

    condition de fin apparaisse.

    Si la condition est vrifie alors rpter le traitement

    int i;

    .i=1;

    while (i

  • 7/23/2019 ArduinoTutorial_V2

    26/93

    Dfinition des structures de rpitition conditionnelle Structure qui permet de rpter plusieurs fois le mme traitementjusqu ce que la

    condition de fin apparaisse.

    Faire le traitementsi la condition est vrifie alors rpter le traitement

    int i;

    .

    i=1;do{serial.print(I = ); serial.printl(i);

    i=i+1;}

    while (i

  • 7/23/2019 ArduinoTutorial_V2

    27/93

    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 traitement1sinon faire traitement2

    int condition;

    .

    condition=10;.

    if (condition==1){

    serial.print(condition = ); serial.println(condition);}

    else

    {serial.print(condition = ); serial.println(condition);

    }

    Q C

    6/8/2014F ARALA F4GSC JL L 2014 27

  • 7/23/2019 ArduinoTutorial_V2

    28/93

    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 alors faire traitement1sinon si la condition2 est vrifie alors faire traitement2

    sinon si la condition3 est vrifie alors faire traitement3sinon si la condition4 est vrifie .

    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) {.}

    Q C

    6/8/2014F ARALA F4GSC JL L 2014 28

  • 7/23/2019 ArduinoTutorial_V2

    29/93

    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 ;}

    }

    Q C

    6/8/2014F ARALA F4GSC JL L 2014 29

  • 7/23/2019 ArduinoTutorial_V2

    30/93

    6/8/2014 306/8/2014F ARALA F4GSC JL L 2014 30

    D E/S

  • 7/23/2019 ArduinoTutorial_V2

    31/93

    6/8/2014 31

    L E/S N S

    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);

    F ARALA F4GSC JL L 2014

  • 7/23/2019 ArduinoTutorial_V2

    32/93

    6/8/2014 32

    L E/S N S

    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 utilisesint Led=13 ;int Interrupteur= 2 ;

    Indiquer la direction des broches 2 et 13Void setup{

    pinMode(Led,OUTPUT);pinMode(Interrupteur,INPUT);

    }

    ProgrammeVoid 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;}

    }

    F ARALA F4GSC JL L 2014

    C.F exprimentation_1

  • 7/23/2019 ArduinoTutorial_V2

    33/93

    6/8/2014 33

    L E/S N S

    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

    7 x tpoint

    3 x tpoint1 x tpoint

    M S S

    F ARALA F4GSC JL L 2014

    C.F exprimentation_2

    1 x tpoint 3 x tpoint

  • 7/23/2019 ArduinoTutorial_V2

    34/93

    6/8/2014 34

    L E/S N S

    Exemple 2 Programme

    L=13;

    // 0 : 1 , 1: , 2:

    // , 3 : .

    MT=1,1,1,2,1,1,2,1,1,1,3; =200;

    ()

    M(L,OUTPUT);

    ()

    ;

    ;

    (1)

    // D

    (MT)

    0:

    W(L,HIGH); ();

    W(L,LOW); ();

    ;

    1:

    W(L,HIGH); (2*);

    W(L,LOW) ; ();

    ;

    2:

    W(L,LOW); (3*);

    ;

    3:

    W(L,LOW); (7*);

    ;

    ;

    ++;

    (>10)=0;

    F ARALA F4GSC JL L 2014

  • 7/23/2019 ArduinoTutorial_V2

    35/93

    6/8/2014 35

    C A/N

    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 sur N bits 4 bits : codage de 16 valeurs 8 bits : codage de 256 valeurs 16 bits : 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 ralisablephysiquement. 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).

    F ARALA F4GSC JL L 2014 6/8/2014 35

  • 7/23/2019 ArduinoTutorial_V2

    36/93

    6/8/2014 36

    C A/N

    Description et fonctionnement Un convertisseur numrique/analogique 10-bits fournit une

    tension de comparaison lentre V- du comparateur qui estcontrle par le compteur 10-bits.

    Lorsque la tension de rfrence V- est gale la tensionanalogique V+ le processus de conversion sarrte et fournitla grandeur analogique convertie en numrique (ANx-analogique ANx-Numrique).

    F ARALA F4GSC JL L 2014 6/8/2014 36

  • 7/23/2019 ArduinoTutorial_V2

    37/93

    C A/N

    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 demise au point (Tool Serial link).

    6/8/2014F ARALA F4GSC JL L 2014 37

    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

  • 7/23/2019 ArduinoTutorial_V2

    38/93

    C A/N

    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 finde 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.

    6/8/2014F ARALA F4GSC JL L 2014 38

    R

    TCRxCT =>=- Equation pour dterminer C en connaissant T et R :

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

    C.F exprimentation_4

  • 7/23/2019 ArduinoTutorial_V2

    39/93

    C A/N

    Exemple 2 : Ralisation dun capacimtre.

    // I

    P = A5;

    // E

    C = A4;

    // E/S

    RA = A3;

    // R ( )

    R = 460;

    // S T = RC

    S = 5*0.63;

    ()

    S.(9600);

    // P

    M(P,OUTPUT);

    // P

    W(P,LOW);

    // C

    M(C,INPUT);

    // RA

    M(RA,INPUT);

    ()

    ;

    ;

    // I

    W(P,HIGH);

    =0;

    // C T = RC

    ((R(C)*5.0/1023) < S)

    (1) ; ++;

    // C C, > 1 C .

    (>1) =*1000/R C;

    =0;

    // A

    S.(" C(F) =") ; S.();

    S.(" T () =") ; S.();

    S.(" ");

    // RA

    W(P,LOW);

    // D C

    M(RA,OUTPUT) ; W(RA,LOW);

    D(1);

    // R RA

    M(RA,INPUT);

    (1000);

  • 7/23/2019 ArduinoTutorial_V2

    40/93

    6/8/2014 40

    M L I (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

    F ARALA F4GSC JL L 2014 6/8/2014 40

  • 7/23/2019 ArduinoTutorial_V2

    41/93

    M L I (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:

    6/8/2014F ARALA F4GSC JL L 2014 41

    const byte Periode=20;void setup() {}

    void loop() {byte var_MLI;

    for (var_MLI=0;var_MLI

  • 7/23/2019 ArduinoTutorial_V2

    42/93

    M L I (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.

    6/8/2014F ARALA F4GSC JL L 2014 42

  • 7/23/2019 ArduinoTutorial_V2

    43/93

    M L I (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.

    6/8/2014F ARALA F4GSC JL L 2014 43

  • 7/23/2019 ArduinoTutorial_V2

    44/93

    6/8/2014 44

    M L I (PWM)

    Convertisseur Numrique/Analogique Principe de fonctionnement

    e(f)

    F1 F2 F31FT

    =f(Hz)

    E0=E x t

    T

    0Hz

    continu

    E0=E x t

    T

    s(f)

    f(Hz)

    Transforme deFourier

    Filtre Passe-Bas

    Tension continue

    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

    F ARALA F4GSC JL L 2014

    44

    T= 500Hz (PWM0)

  • 7/23/2019 ArduinoTutorial_V2

    45/93

    6/8/2014 45

    M L I (PWM)

    Convertisseur Numrique/Analogique Loi de conversion numrique analogique

    Numrique Analogique Exemple

    ExcursionAnlogique

    Excursionnumrique

    Rsolution

    0 E0 E 0 E0 E

    0 n 255 n

    0 E E255

    1 E255

    t nE0 E ET 255

    = =

    0 E0 5v

    255

    0 E 5v255

    519.6mV

    255 =

    F ARALA F4GSC JL L 2014 6/8/2014 45

    Compteur 8-bit : 0

  • 7/23/2019 ArduinoTutorial_V2

    46/93

    6/8/2014 46

    M L I (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

  • 7/23/2019 ArduinoTutorial_V2

    47/93

    6/8/2014 47

    M L I (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 0; var_MLI --){analogWrite(PWM0, var_MLI);delay(Periode);}

    }

    F ARALA F4GSC JL L 2014 6/8/2014 47

    M L I (PWM)

  • 7/23/2019 ArduinoTutorial_V2

    48/93

    6/8/2014 48

    M L I (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))

    Le PWM naccepte que des nombres entiers (pas de nombre dcimal)

    m = partie entire (y*N/VDD)

    F ARALA F4GSC JL L 2014 6/8/2014 48

    Dcalagede +2.5v

    Sinus variantentre 0v et 5v

    C.F exprimentation_8

    M L I (PWM)

  • 7/23/2019 ArduinoTutorial_V2

    49/93

    6/8/2014 49

    M L I (PWM)

    Convertisseur Numrique/Analogique Exemple 3: Ralisation dun signal sinusodal

    #include // --- 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,232,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 PWMconst int PWM0 = 5 ; const byte Periode = 2;

    // --- Programme dinitialisation Ici aucune initialisation nest requise.void setup() {}

    // --- Programme proncipale qui sxcutera jusqu lextinction de lalimentationvoid loop(){// ---- Dclaration des variables du programmebyte Pulse=0 ; byte k=0 ; unsigned char sinus;

    //--- Boucle sans fin qui fournir les points de la sinusode au PWM.for (k=0;k

  • 7/23/2019 ArduinoTutorial_V2

    50/93

    6/8/2014 50

    M L I (PWM)

    C N/A 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 dusignal ne subit pas dattnuation due au filtre par contre lesharmoniques 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

    F ARALA F4GSC JL L 2014

    M L I (PWM)

  • 7/23/2019 ArduinoTutorial_V2

    51/93

    6/8/2014 51

    M L I (PWM)

    Modulation tout ou rien Gnrer un appel gnral en morse CQ de F5KEQ

    I

    D

    S

    G

    BS170

    D

    S

    G

    BS170

    220ohmsBuzzer

    8

    9

    100kohms

    100kohms

    13

    220ohms

    5V

    GND

    A

    R

    d

    u

    i

    n

    o

    U

    N

    O

    R

    3

    Modul

    Audio

    F ARALA F4GSC JL L 2014

    M L I (PWM)

  • 7/23/2019 ArduinoTutorial_V2

    52/93

    6/8/2014 52

    M L I (PWM)

    Description et fonctionnement Exemple 4: Gnrer un appel gnral en morse en audio: CQ de F5KEQ

    // 0 : 1 , 1: , 2:

    // 3 : .

    // M :

    // C Q F 5K Q

    B M=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;

    // N

    N = 38;

    // V

    = 110;

    // F = 490 A = 9;

    // C

    M = 8;

    // L

    L = 13;

    ()

    M(L,);

    (A,127);

    ()

    ;

    ;

    (1)

    // D

    (M)

    0: (L,HIGH) ; (M,HIGH); ();

    (L,L) ; (M,L); () ; ;

    1:

    (L,HIGH); (M,HIGH); (2*);

    (L,L) ; (M,L) ; () ; ;

    2:

    (M,L); (L,L); (2*) ; ;

    3:

    (M,L); (L,L);(7*) ; ;

    ;

    ++; (>N)=0;

    F ARALA F4GSC JL L 2014

  • 7/23/2019 ArduinoTutorial_V2

    53/93

    L L S S A

    6/8/2014F ARALA F4GSC JL L 2014 53

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    54/93

    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 delquipement ou du circuits intgr (Atmega328p).

    L L S S A

    6/8/2014F ARALA F4GSC JL L 2014 54

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    55/93

    L L S S A

    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.

    6/8/2014F ARALA F4GSC JL L 2014 55

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    56/93

    L L S S A

    La liaison srie ASYNCHRONE Structure

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

    6/8/2014F ARALA F4GSC JL L 2014 56

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    57/93

    6/8/2014F ARALA F4GSC JL L 2014 57

    Donnes: 5,6,7,8 bits

    1 Bit start 1 Bit stop

    Bit de parit

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    58/93

    6/8/2014F ARALA F4GSC JL L 2014 58

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    59/93

    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 dedonnes.

    Les dbits de transmission : seule une limite suprieure de 20 000 bauds estindique.

    La fourniture de courant lectrique des priphriques.

    Baud 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)

    6/8/2014F ARALA F4GSC JL L 2014 59

    Symbole

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    60/93

    La liaison srie ASYNCHRONE Le standard RS232

    Les interfaces lectriques +/-12 v

    6/8/2014F ARALA F4GSC JL L 2014 60

    +5v

    0v

    +12v

    -12v

    0v

    Cble de liaisonCt Equipement et carte

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    61/93

    La liaison srie ASYNCHRONE Le standard RS232

    Comment programmer

    6/8/2014F ARALA F4GSC JL L 2014 61

    //=======================================================//-- Envoie un caractre via la liaison srie//=======================================================void setup(){//--- Cration dun objet liaison srie Asynchrone

    Serial.begin(9600);

    }

    void loop(){//======================================================//--- Dbut dune transmission//=======================================================

    while (!Serial);Serial.println('U');delay(50);

    }

    //=======================================================//-- Reoit un caractre via la liaison srie//=======================================================

    byte incomingByte;

    void setup()

    {//--- Cration dun objet liaison srie AsynchroneSerial.begin(9600);

    }

    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);}

    }

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    62/93

    La liaison srie ASYNCHRONE Le standard RS232

    Table ASCII ( American Standard Code for Information Interchange).

    6/8/2014F ARALA F4GSC JL L 2014 62

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    63/93

    La liaison srie ASYNCHRONE Le standard RS232

    Table ASCII ( American Standard Code for Information Interchange).

    6/8/2014F ARALA F4GSC JL L 2014 63

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    64/93

    La liaison srie ASYNCHRONE Exemple : Pilotage Tx

    6/8/2014F ARALA F4GSC JL L 2014 64

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    65/93

    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.

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

    6/8/2014F ARALA F4GSC JL L 2014 65

    Condition de dbutde transfert

    Condition de Finde transfert

    Adr1 Adr2 Adr3

    Adresse/Donnes/Signaux de contrle

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    66/93

    La liaision srie synchrone I2C : Inter Integrated Circuit bus

    Vitesse de transmission

    6/8/2014F ARALA F4GSC JL L 2014 66

    M

    (B/)

    M. C

    (F)

    S 100 1 400 2700

    F 400 300 400 820

    F + 1 120 550 270

    H 3.4

    U 5

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    67/93

    La liaision srie synchrone I2C : Inter Integrated Circuit bus

    I2C et Aarduino

    6/8/2014F ARALA F4GSC JL L 2014 67

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    68/93

    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)

    6/8/2014F ARALA F4GSC JL L 2014 68

    ArduinoSDA

    PCF8574

    PCF8574A

    SCL

    Sous-adresse choisiepar lutilisateur

    Ex: 0x70 (112 dec)

    Ecriture

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    69/93

    La liaision srie synchrone I2C : Inter Integrated Circuit bus Structure dune trame I2C

    Cas dune criture simple

    6/8/2014F ARALA F4GSC JL L 2014 69

    - Dmarrage de lopration dcriture

    - Adresse du priphrique crire

    - Type dopration RW = 0 criture, (RW =1 lecture)

    - Donne crire

    - Acquittement du priphrique, SDA=0

    - Acquittement du priphrique, SDA=0

    - Fin de lopration dcriture

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    70/93

    La liaision srie synchrone I2C : Inter Integrated Circuit bus Structure dune trame I2C.

    Ecriture en rafale ( nombre dcriture illimit)

    6/8/2014F ARALA F4GSC JL L 2014 70

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    71/93

    La liaision srie synchrone I2C : Inter Integrated Circuit bus Structure dune trame I2C.

    Lecture ( nombre dcriture illimit)

    6/8/2014F ARALA F4GSC JL L 2014 71

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    72/93

    La liaision srie synchrone I2C : Inter Integrated Circuit bus Structure dune trame I2C.

    Ecriture dans une mmoire (EPROM, RAM)

    6/8/2014F ARALA F4GSC JL L 2014 72

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    73/93

    6/8/2014F ARALA F4GSC JL L 2014 73

    La liaision srie synchrone I2C : Inter Integrated Circuit bus Structure dune trame I2C.

    Lecture dans une mmoire (EPROM, RAM)

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    74/93

    La liaision srie synchrone I2C : Inter Integrated Circuit bus Structure dune trame I2C.

    Adressage de plus mmoire PCF85103C

    6/8/2014F ARALA F4GSC JL L 2014 74

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    75/93

    La liaision srie synchrone I2C : Inter Integrated Circuit bus Programmation dun composant I2C

    6/8/2014F ARALA F4GSC JL L 2014 75

    //======================================================//--- envoie de 64 caractres//======================================================#include

    byte val = 0;

    void setup(){//--- Cration dun objet I2CWire.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

    void setup(){//--- Cration dun objet I2CWire.begin();

    //--- Cration dun objet liaison srieSerial.begin(9600);

    }

    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);

    }

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    76/93

    La liaision srie synchrone I2C : Inter Integrated Circuit bus Structure dune trame I2C.

    Afficheur LCD 4 x 20 caractres

    6/8/2014F ARALA F4GSC JL L 2014 76

    PCF8574

    L L S S A

  • 7/23/2019 ArduinoTutorial_V2

    77/93

    La liaision srie synchrone I2C : Inter Integrated Circuit bus Structure dune trame I2C.

    Afficheur LCD

    6/8/2014F ARALA F4GSC JL L 2014 77

    #include

    //============================================================// 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 lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

    void setup(){//--- Cration d'un objet liaison srieSerial.begin(9600);

    //--- Cration d'un objet LCD comportant 4 lignes de 20 caractreslcd.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 gauchelcd.setCursor(0,1);

    //--- Affiche "Mai 2014"lcd.print

    }

    void loop(){{//--- Attent l'arrive d'un caractreif (Serial.available()) {

    //--- Tempo pour pour tre sur la transmission srie est terminedelay(100);

    //--- RAZ de l'affichagelcd.clear();

    //--- Lecture de tous les caractres reus et affichage sur le lCD

    while (Serial.available() > 0) {//--- Affichage sur le LCDlcd.write(Serial.read());

    }}

    }}

  • 7/23/2019 ArduinoTutorial_V2

    78/93

    6/8/2014F ARALA F4GSC JL L 2014 78

    L I

    L I

  • 7/23/2019 ArduinoTutorial_V2

    79/93

    6/8/2014F ARALA F4GSC JL L 2014 79

    L I

  • 7/23/2019 ArduinoTutorial_V2

    80/93

    Exemple de programme nono-tche Changement la frquence du transceiver. Le microcontrleur rpte linfini la tche ci-dessous constitue de plusieurs

    actions.

    6/8/2014F ARALA F4GSC JL L 2014 80

    Attente que lOM tourne le bouton du vernier

    Lecture du pas dincrmentation

    Modification de la frquence de loscillateur

    Calcul 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 dunedemande daction du type :

    while !(bouton);

    Tant que le bouton nest pas activ alorsattendre.

    Attente par scrutation logicielle dunedemande daction du type :

    While !(seconde);

    Tant que la seconde nest pas coule alorsattendre

    Le microcontrleur gre plusieurs actions mais squentiellement lune aprs lautre.

    Tche Changement de Freq.

    L I

  • 7/23/2019 ArduinoTutorial_V2

    81/93

    Exemple de programme nono-tche Changement la frquence du transceiver.

    6/8/2014F ARALA F4GSC JL L 2014 81

    Attente que lOM tournele bouton du vernier

    Lecture du pasdincrmentation

    Calcul de la frquencede loscillateur

    Modification de la

    frquence de loscillateur

    Affichage de lanouvelle frquence

    Attente du top indiquantquune seconde est coule

    Affichage delheure

    temps

    Ordonnancement des tches

    t1 t2 t3 t4 t5 t6 t70

    Temps total pour effectuer lensemble de la tche

    Laction dattente force le processeur surveiller si lvnement est arriv:- Il ne peut rien faire dautre.

    Tche Changement de Freq.

    L I

  • 7/23/2019 ArduinoTutorial_V2

    82/93

    Exemple de programme multitche Supposons que le rcepteur dtecte le dclenchement dun relais (R7) et quil soitncessaire 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 etlafficher.

    6/8/2014F ARALA F4GSC JL L 2014 82

    Tche changement de freq

    Tche mesure du Smtre

    Tche changement de freq

    Tche mesure du Smtre

    0 1s 0.5s 2s 0.5s

    temps

    L I

  • 7/23/2019 ArduinoTutorial_V2

    83/93

    Exemple de programme multitche Supposons que la tche mesure du Smtre soit la tche prioritaire et quelle doittre excute sans dlai.

    Dun point de vue chronogramme cela ressemble ceci:

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

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

    6/8/2014F ARALA F4GSC JL L 2014 83

    Tche changement de freq

    Tche mesure du Smtre

    0 1s 0.5s temps

    La tche de fond est suspendue momentanment

    Laction temporaire est excute en priorit

    La tche de fond reprend son excution.

    vnement matriel indiquant la rception dune station Squelch

    L I

  • 7/23/2019 ArduinoTutorial_V2

    84/93

    Exemple de programme multitche

    Bien quil ny ait quune seule Unit de calcul, il y a bien deux tches diffrentes qui sontexcutes 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 desynchronisation matrielle utilisant les ressources priphriques du microcontrleur ousources dinterruption.

    Une ressource priphrique demande la CPU dinterrompre temporairement la tchede fond pour lui permettre dexcuter son traitement.

    6/8/2014F ARALA F4GSC JL L 2014 84

    T

    T

    T

    R

    Demande dinterruption

    Tche de fond interrompue

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

    L I

  • 7/23/2019 ArduinoTutorial_V2

    85/93

    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.

    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).

    Comparateur analogique Une interruption temporaire est demande par le comparateur analogique pour indiquer

    que le signal dentre dpasser la tension de comparaison.

    6/8/2014F ARALA F4GSC JL L 2014 85

    PC UARTTx RxDemande dinterruption

    A328

    B A328Demande dinterruption

    C

    A A328

    Demande dinterruption

    Signal comparer

    Tension de rfrence

    L I

  • 7/23/2019 ArduinoTutorial_V2

    86/93

    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 causesconfigurables).

    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.

    6/8/2014F ARALA F4GSC JL L 2014 86

    l l

    L I

  • 7/23/2019 ArduinoTutorial_V2

    87/93

    Comment utiliser les interruptions externes aveclArduino 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 frontou niveau.

    Dcrire lalgorithme de traitement li la source dinterruption

    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);

    }

    6/8/2014F ARALA F4GSC JL L 2014 87

    Initialise et dfiniela source dinterruptionutilise.

    Mode de dclenchement front ou niveau

    Nom de laction temporaire

    Numro de la Source dinterruption

    L I

    C ili l i i 0 1 ( i 2 d 3)?

  • 7/23/2019 ArduinoTutorial_V2

    88/93

    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 ouinversement.

    6/8/2014F ARALA F4GSC JL L 2014 88

    L I

    C t tili l i t ti t 0 t 1 ( i 2 d 3)?

  • 7/23/2019 ArduinoTutorial_V2

    89/93

    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.

    6/8/2014F ARALA F4GSC JL L 2014 89

    Temp=1s?

    sqOn==1?

    Sec=sec+1

    Afficher dure

    Oui

    Sec=0

    Oui

    Afficher dure

    Non

    Nonetat==1?

    Afficher SQUELCH OFF

    sqOn=0 sqOn=1

    Afficher SQUELCH ON

    Dclenchement

    OuiNon

    Dclenchement

    Squelch

    L I

    C t tilis l s i t ti s t s ( i 2 d 3)?

  • 7/23/2019 ArduinoTutorial_V2

    90/93

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

    6/8/2014F ARALA F4GSC JL L 2014 90

    # "LC."

    LC (8,9,4,5,6,7);

    I = 0; = L;

    ;

    ;

    ()

    .(16,2);

    .();

    .C(0,0);.("I ");I(I,,IING);

    ()

    =!;

    ()

    .C(0,0);.(" ");

    I(I,,IING);

    .C(0,0);.("ELCH N ");

    =1;

    I(I,,FALLING);

    .C(0,0);.("ELCH FF ");

    =0;

    ()

    (1000);

    ()

    (==60) =0;

    =++;

    .C(0,1);.("= ");

    .C(6,1);.(" ");

    .C(6,1);.(,DEC);

    =0;

    .C(0,1);.("= ");

    .C(6,1);.(,DEC);

    L I

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

  • 7/23/2019 ArduinoTutorial_V2

    91/93

    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 etune autre pour le front montant.

    Temp=1s?

    sqOn==1?

    Sec=sec+1

    Afficher dure

    Oui

    Sec=0

    Oui

    Afficher dure

    Non

    Non

    Afficher SQUELCH OFF

    sqOn=0 sqOn=1

    Afficher SQUELCH ON

    DclenchementDclenchement

    Squelch Squelch

    L I

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

  • 7/23/2019 ArduinoTutorial_V2

    92/93

    Exemple:

    ()

    (1000);

    ()

    .C(0,1);.("= ");

    .C(6,1);.(" ");

    .C(6,1);.(,DEC);

    =++;

    (>=60) =0;

    =0;

    .C(0,1);.("= ");

    .C(6,1);.(,DEC);

    ()

    .C(0,0);.("ELCH FF ");

    =0;

    I(I,,IING);

    ()

    .C(0,0);.("ELCH N ");

    =1;

    I(I,,FALLING);

    # "LC."

    LC (8,9,4,5,6,7);

    I = 0;

    // N ' :

    // 0> 2 , 1> 3

    ; // I .

    ; //

    ()

    .(9600);.(16,2);

    .();

    .C(0,0);.("I ");

    I(I,,IING);

    L I

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

  • 7/23/2019 ArduinoTutorial_V2

    93/93

    Du point de vue logiciel

    Autres fonctions

    noInterrupts() : Les demandes dinterruption ne sont pas autorises et ne seront pasprises en compte.

    interrupts() : Toutes les demandes dinterruption sont autorises condition que lesinterruptions utilises soient autorises individuellement.

    detachInterrupt(numro_interruption): La demande dnterruption numro_interruptionnest plus prise en compte.

    6/8/2014F ARALA F4GSC JL L 2014 93