Outils pour utilisateurs

Outils du site


arduinoisr

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
arduinoisr [2017/11/07 11:00]
bvandepo
arduinoisr [2020/01/27 16:43] (Version actuelle)
bvandepo
Ligne 61: Ligne 61:
 Dans l'​onglet "​Outils",​ accédez au menu "Port Série"​ et cliquez sur la valeur /​dev/​ttyACM0 ou /​dev/​ttyUSB0. Accédez aussi eu menu "​Carte"​ et vérifiez que la valeur sélectionnée est "​Arduino Uno". Dans l'​onglet "​Outils",​ accédez au menu "Port Série"​ et cliquez sur la valeur /​dev/​ttyACM0 ou /​dev/​ttyUSB0. Accédez aussi eu menu "​Carte"​ et vérifiez que la valeur sélectionnée est "​Arduino Uno".
 ==== Votre premier sketch ==== ==== Votre premier sketch ====
-Maintenant que l'editeur ​est lancé, nous pouvons entrer dans la fenêtre le programme suivant+Maintenant que l'éditeur ​est lancé, nous pouvons entrer dans la fenêtre le programme suivant
    
 <file cpp blink.ino>​ <file cpp blink.ino>​
Ligne 99: Ligne 99:
  
 ==== Précautions à prendre avec la plateforme et l'IDE ==== ==== Précautions à prendre avec la plateforme et l'IDE ====
-<color red>​Sauvegarder vos fichiers en LOCAL sur la machine dans le dossier /​home/​IUT/"​login"/​Sketchbook/ et copier ces fichiers vers le disque réseau /​mnt/​ponsan..../​ A CHAQUE FIN DE SEANCE!!!</​color>​+<color red>​Sauvegarder vos fichiers en LOCAL sur la machine dans le dossier /​home/​IUT/"​login"/​Arduino/ et copier ces fichiers vers le disque réseau /​mnt/​ponsan..../​ A CHAQUE FIN DE SEANCE!!!</​color>​
   * Sauvegarder vos programmes sous des noms différents pour chaque exercice   * Sauvegarder vos programmes sous des noms différents pour chaque exercice
   * Lors de la sauvegarde, une fenêtre apparaît pour demander quels noms donner au programme. Si vous ne faites pas attention, cette fenêtre peut passer en arrière plan et l'IDE Arduino ne répondra plus à aucune sollicitation tant que vous n'​aurez pas ré-ouvert cette fenêtre.   * Lors de la sauvegarde, une fenêtre apparaît pour demander quels noms donner au programme. Si vous ne faites pas attention, cette fenêtre peut passer en arrière plan et l'IDE Arduino ne répondra plus à aucune sollicitation tant que vous n'​aurez pas ré-ouvert cette fenêtre.
Ligne 108: Ligne 108:
  
  
-=====Comment gérer l'​absence de déboggeur=====+=====Comment gérer l'​absence de débogueur=====
 Nous allons utiliser la librairie Serial pour échanger des caractères ASCII entre le PC et la carte Arduino de manière bidirectionnelle. Vous pouvez accéder au descriptif de cette librairie en sélectionnant le menu "​Aide"​ puis le menu "​Référence"​. Nous allons utiliser la librairie Serial pour échanger des caractères ASCII entre le PC et la carte Arduino de manière bidirectionnelle. Vous pouvez accéder au descriptif de cette librairie en sélectionnant le menu "​Aide"​ puis le menu "​Référence"​.
  
-Le deboggage ​de votre application pourra se faire à l'aide d'​affichage vers la console MAIS il faut tenir compte du fait que le code ainsi modifié ne sera pas exactement le même code que celui sans les appels d'​affichage.+Le debogage ​de votre application pourra se faire à l'aide d'​affichage vers la console MAIS il faut tenir compte du fait que le code ainsi modifié ne sera pas exactement le même code que celui sans les appels d'​affichage.
  
 Egalement, vous pourrez utiliser des broches du microcontroleur pour indiquer l'​entrée ou la sortie d'une portion de code, afin de tester précisement le timing. Egalement, vous pourrez utiliser des broches du microcontroleur pour indiquer l'​entrée ou la sortie d'une portion de code, afin de tester précisement le timing.
Ligne 142: Ligne 142:
 { {
   char car ;   char car ;
-  if (Serial.available()){+  if (Serial.available()>0){
      car = Serial.read();​      car = Serial.read();​
      if ( (car>​='​a'​) && (car<​='​z'​) )      if ( (car>​='​a'​) && (car<​='​z'​) )
Ligne 242: Ligne 242:
 {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Ensuite, générer le même signal en faisant appel à l'​interruption TIMER. Conseil: utiliser le timer 2 et lire la documentation de l'​ATMEGA328P pour sa configuration. ​ {{http://​homepages.laas.fr/​bvandepo/​files/​iut/​tp_tns/​TODO.jpg}} Ensuite, générer le même signal en faisant appel à l'​interruption TIMER. Conseil: utiliser le timer 2 et lire la documentation de l'​ATMEGA328P pour sa configuration. ​
  
 +
 +<ifauth @prof>
 +===Solution:​===
 +<file cpp carre3.ino>​
 +//624us de période=312us de demi période (entre chaque interruption)
 +//                =156*32*62.5ns
 +void setupTimer2(){
 +  TCCR2A = 0;// set entire TCCR2A register to 0
 +  TCNT2  = 0;//​initialize counter value to 0 
 +  OCR2A = 156-1;// (must be <256)
 +  // turn on CTC mode
 +  TCCR2A |= (1 << WGM21);
 +  //​prescaler= 1/32 , see p162 https://​docs.google.com/​viewer?​a=v&​pid=sites&​srcid=ZGVwaW5mb25hbmN5Lm5ldHxtaW5lc3xneDo0NjFmYzI1NTdkZDU2YmE2
 +  TCCR2B = (1 << CS21)|(1 << CS20);
 +  // enable timer compare interrupt
 +  TIMSK2 |= (1 << OCIE2A); ​
 +}
 +// TIMER ISR VECTOR and configuration
 +ISR(TIMER2_COMPA_vect){
 +     PORTB ^= 0x01 ;
 +}
 +void setup() ​   ​
 +    {
 +    pinMode(8, OUTPUT); ​  
 +    cli();//​stop interrupts
 +    setupTimer2();​ // setup interrupt with prescaler (see datasheet for prescaler value, and reload value)
 +    sei();//​allow interrupts
 +    }
 +void loop()
 +    {
 +    }
 +</​file>​
 +</​ifauth>​
  
 ===== Exercice 4 : Gestion des bits sur le  microcontroleur===== ===== Exercice 4 : Gestion des bits sur le  microcontroleur=====
-Le signal numérique a générer sur la broché ​est généralement issu d'une valeur sur plusieurs bits qui est **sérialisée**. Ceci revient, à chaque période bit, à extraire la valeur du bit (depuis une variable par exemple) et a appliquer ​une valeur dépendante ​de ce bit sur la broche.+Le signal numérique a générer sur la broche ​est généralement issu d'une valeur sur plusieurs bits qui est **sérialisée**. Ceci revient, à chaque période bit, à extraire la valeur du bit (depuis une variable par exemple) et a appliquer ​un signal dépendant ​de ce bit sur la broche.
  
 +
 +
 +=====Programme d'​exemple=====
 +<file cpp exemple.ino>​
 +
 +
 +//macro à activer pour afficher des infos de debug dans le programme, la commenter sinon
 +//#define DEBUG
 +
 +    //int led = A2; //si le shield RS232 est présent ​
 +    int led =   3; //si le shield RS232 n'est pas présent, pour utiliser la led de la carte UNO
 +    // the setup routine runs once when you press reset:
 +    void setup() {                ​
 +      // initialize the digital pin as an output.
 +      pinMode(led,​ OUTPUT); ​    
 +       ​Serial.begin(9600); ​
 +      Serial.println("​Hello,​ world?"​);​ // Envoi de la chaîne terminée par un saut de ligne
 +   
 +    }  ​
 +     ​unsigned int compteur=0;
 +    // the loop routine runs over and over again forever:
 +    void loop() {
 +      /*
 +      compteur=compteur+1;​
 +      digitalWrite(led,​ HIGH); ​  // turn the LED on (HIGH is the voltage level)
 +      delay(3); ​
 +        Serial.println("​+"​);​ // Envoi de la chaîne terminée par un saut de ligne
 +      ​
 +      //if (false)// wait for a second
 +      {
 +        digitalWrite(led,​ LOW);    // turn the LED off by making the voltage LOW
 +       ​delay(200); ​              // wait for a second
 +       ​Serial.println("​."​);​ // Envoi de la chaîne terminée par un saut de ligne
 +
 +      }
 +
 +      Serial.println(compteur);​
 +*/
 +
 +#ifdef DEBUG
 +  Serial.println("​je debuggue"​);​
 +#endif
 +  ​
 +/*
 +
 +char car;
 +  if (Serial.available()>​0){
 +         car = Serial.read();​
 +         if ((car%2)==0) //est ce que le code ascii est pair?
 +           ​digitalWrite(led,​ HIGH); ​  
 +         else
 +           ​digitalWrite(led,​ LOW);   
 +           
 +
 +  }
 +  */
 +
 +  /* génère un signal de fréquence 102kHz)
 + ​digitalWrite(led,​ HIGH); ​
 + ​digitalWrite(led,​ LOW);    ​
 + */
 +
 +
 + //la broche 3 de l'​arduino est connectée au bit 3 du port D
 +
 +   /* génère un signal de fréquence 841.5kHz)
 +    PORTD|=0x8; // met à 1 le bit 3 du port D
 + ​PORTD&​= ~0x8;  // met à 0 le bit 3 du port D
 +    */
 +
 +
 +/* génère un signal de fréquence 2,​664MHz) ​   ​
 +    while(1){
 + ​PORTD|=0x8;​ // met à 1 le bit 3 du port D
 + ​PORTD&​= ~0x8;  // met à 0 le bit 3 du port D
 +    }
 +    */
 +
 +// génère un signal de rapport cyclique 50% de fréquence 2MHz)    ​
 +while(1){
 + ​PORTD|=0x8;​ // met à 1 le bit 3 du port D
 + ​__asm__("​nop\n\t"​); ​
 + ​__asm__("​nop\n\t"​); ​
 + ​PORTD&​= ~0x8;  // met à 0 le bit 3 du port D
 +    }
 +
 +    ​
 +    }
 +
 +
 +</​file>​
arduinoisr.1510048834.txt.gz · Dernière modification: 2017/11/07 11:00 par bvandepo