Les Timers (II)
Les interruptions
. Par : Christian
Vous répondez à :
Merci , c’est en effet en passant par le microcontroleur que l’on trouve des infos , pas par la datasheet qui est en chinois mais sur le web , d’autres se sont déjà posé les questions et se sont répandus ; bon , je ne polluerais plus votre site (bien tenu)
D.P.
11 Messages
-
Les Timers (II) 9 avril 2017 18:02, par PIVAR
J’ai bien mijoté timer 1 et 2 ; bon ,je connais des basics et je commence en arduino (du C ?), mais j’ai remarqué les lignes :"#define LedToggle digitalWrite (Led, !digitalRead(Led))" ; et l’on peut appeler LedToggle comme si c’était une fonction ! ; là , je reste pantois..
Un petit truc , en ligne 14 on désactive les interruptions pour les réactiver en ligne 19 ; est-ce pour prendre en compte la nouvelle interruption ?-
Les Timers (II) 10 avril 2017 01:16, par Christian Bézanger
Le #define permet de dire au préprocesseur de remplacer l’expression de gauche (inconnue dans le monde Arduino) par celle de droite (fonctions classiques).
Ici, LedToggle permet d’inverser l’état d’une LED : le préprocesseur remplacera ce terme par digitalWrite(Led, !digitalRead(Led)) c’est-à-dire écrire sur la sortie reliée à la LED l’inverse de ce qu’on peut y lire (si la sortie est à HIGH, on l’écrira à LOW et réciproquement).
Avec #define, j’ai écrit le programme Blink tout en français, ce qui n’a pas d’autre intérêt que de faire taire les détracteurs d’Arduino sous prétexte qu’il faudrait parler anglais…
Pour déclarer des numéros de broches, on peut utiliser #define mais il est conseillé de préférer des ’const int’.
Dominique a parfaitement répondu à la question suivante.
Enfin, nul besoin d’apprendre le C pour Arduino : les fonctions de base sont bien suffisantes pour débuter (voir page Reference du site arduino.cc). Avec le temps et l’expérience, des bases de C++ permettent de faire des choses bien plus puissantes.-
Les Timers (II) 10 avril 2017 11:04, par PIVAR
Merci à Christian et Dominique ; pour le #define , c’est une commodité d’écriture ; bon au cas ou , l’expression de droite doit tenir sur une ligne ou peut-elle se prolonger ?
De mon coté , pour mon appli , je trouve sur votre site pas mal d’infos il est aussi vrai qu’il y a pas mal de similitudes entre les séquences pour trains et celles d’un appareil pour labo ; mon appli sera en 2 parties :l’une sur le pc pour une belle interface graphique et des enregitrements(b4j compilé java) et l’autre sur arduino en C pour une gestion nette et synchrone des stepper , pin entrées sorties ; cela va causer au travers du serial …mais , je sais , c’est hors sujet
Bonne journée-
Les Timers (II) 10 avril 2017 12:02, par Christian Bézanger
Nous trouvons très bien que des gens qui s’intéressent à la robotique ou bien à la domotique ou encore à d’autres domaines viennent consulter notre site pour y trouver des informations ou des astuces dont ils pourront s’inspirer.
Néanmoins, nous serions débordés si nous devions répondre à toutes les questions de ces gens, c’est pourquoi nous nous limitons au train miniature et nous renvoyons ces personnes vers d’autres sites spécialisés dans les autres domaines.
Dans le #define, une expression de droite trop longue n’aurait aucun sens car cela diminuerait la lisibilité du code. Il vaut mieux dans ce cas recourir aux fonctions. -
Les Timers (II) 10 avril 2017 12:06, par Jean-Luc
Bonjour,
L’expression doit tenir sur une ligne mais on peut utiliser le \ en fin de ligne pour faire en sorte que le préprocesseur ignore cette fin de ligne. Par exemple :
- #define uneMacroCompliquee \
- if (val == 0) { \
- val = 1; \
- }
Attention, il ne doit pas y avoir de caractères, notamment des espaces, entre le \ et la fin de ligne
On peut également faire des macros avec des arguments. Christian aurait pu écrire :
- #define pinToggle(aPin) digitalWrite(aPin, !digitalRead(aPin))
-
Les Timers (II) 10 avril 2017 15:52, par PIVAR
Merci , je ne veux pas gêner , mais on apprend vite avec vous ; dans la doc arduino ,pour define il est dit que cela sert à définir des constantes , vous êtes mieux que la doc !
et ce que j’interprète de ce qu’aurait pu Christian :la fonction pinToggle à qui on a transmis la valeur aPin , ecrit à aPin le not de ce qu’on peut lire à aPin (surement que l’on peut mieux dire)
Je suis curieux et je vais aussi acheter une Wemos mini pro qui se programme sous IDE arduino (7€),moins d’entrées sorties , avec un wifi intégré ..mais pour les timer , je me demande , très peu d’infos-
Les Timers (II) 10 avril 2017 19:04, par Christian Bézanger
Pour avoir de la documentation sur les timers, c’est très simple : il suffit de se référer à la datasheet du constructeur du microcontrôleur qui équipe la carte. C’est en anglais et ça ne se comprend pas forcément à la première lecture ; il faut s’accrocher, mais il n’y a que là qu’on trouve ce dont on a besoin.
-
Merci , c’est en effet en passant par le microcontroleur que l’on trouve des infos , pas par la datasheet qui est en chinois mais sur le web , d’autres se sont déjà posé les questions et se sont répandus ; bon , je ne polluerais plus votre site (bien tenu)
D.P.
-
-
-
-
-
-
Les Timers (II) 9 avril 2017 22:47, par Dominique
"Un petit truc , en ligne 14 on désactive les interruptions pour les réactiver en ligne 19 ; est-ce pour prendre en compte la nouvelle interruption ?"
Non c’est pour éviter qu’une interruption arrive pendant la manipulation des registres, ce qui ficherait la pagaille ! -
Les Timers (II) mnemoniques des ISR 17 avril 2017 18:37, par Michel Jevaud
J’ai cherché sur le web les mnémoniques arduino pour les interrupts : par exemple, vous avez trouvé la mnémonique ISR(TIMER2_OVF_vect) pour le débordement du Timer Counter n°2 (déjà, comment avez vous trouvé cette mnémonique ?), mais pour toutes les autres interrupts possibles ?
Bon, on trouve à droite à gauche des exemples, par exemple heureusement pour le port série on a la routine serialEvent(), mais existe-t-il une liste officielle Arduino de ces mnémoniques ?
un grand merci pour votre site, il est très clair-
Tout cela est décrit dans la datasheet du microcontroleur ATmega328P qui peut être téléchargée sur le site Atmel.
Quand on veut travailler avec les entrailles d’un microcontroleur, il faut toujours s’y référer.
Pour le Timers 1, cela aurait été ISR(TIMER1_OVF_vect) : tout cela est donc assez logique et facile à manipuler. De la même façon, les noms des registres sont connus du compilateur.
-