En regardant les pins de l'Arduino, je me rends compte qu'il y a 3 choses que je connais pas.
Premièrement les sorties digitales marquées PWM ont quel différence avec les autres ?
Je sais ce qu'est le PWN (signal carré avec longueur variable), mais pourquoi seulement certaines broches l'accepte ?
Ensuite je ne vois pas comment utiliser/l'utilité des Pins RX et TX, c'est quoi ?
Pour les PWM je vais peut-être dire une connerie, le PWM utilise les timer du µC, donc il faut que le dit timer soit relié au timer et tu auras aussi des contraintes vis à vis de la gestion séparée des pins (sur chacun des pins tu peux définir un PWM indépendant).
Pour les RX et TX ce sont les connexions série du µC. En gros tu as :
USB <==> FTDI <==> Atmega
Le FTDI (ou at-bidule sur la UNO) va émuler un port RS-232 (qui utilise du +/-12V) sur ton PC. L'Atmega lui utilise du série TTL (qui utilise du 0-5V et polarité inversée au RS-232). Le FTDI fait donc l'interface PC/Atmega, et les pin RX-TX sont deux piquages entre le FTDI et l'ATMEGA.
Si tu ne te sers pas de la liaison série avec le PC sur une UNO, tu peux par exemple communiquer avec une autre UNO.
Phoenix65:
En regardant les pins de l'Arduino, je me rends compte qu'il y a 3 choses que je connais pas.
Premièrement les sorties digitales marquées PWM ont quel différence avec les autres ?
Je sais ce qu'est le PWN (signal carré avec longueur variable), mais pourquoi seulement certaines broches l'accepte ?
C'est lié au hardware, comme le précise B@tto il ya un timer derrière chaque broche PWM (enfin 1 timer pour deux broches PWM pour être précis).
-> 3 timers = 6 broches PWM, le fabricant (ATMEL) à choisi les broches en question de manière arbitraire.
Phoenix65:
Ensuite je ne vois pas comment utiliser/l'utilité des Pins RX et TX, c'est quoi ?
upload du code (le port série usb et Rx/Tx sont relié en interne)
communication avec l'ordinateur
communication en série avec divers modules si besoin (gps, lcd, ...)
Erreur ^^' je voulais dire "il faut que le timer soit relié au pin". Et encore la bien sur c'est un raccourci que je prends, mais dans le principe c'est ça
Phoenix65:
Donc les timer sont des parties de code de bas niveau incorporé au firmware qui gère les I/O si je suis bien l'explication.
Les timers sont des composants hardware, qui permettent via des interruptions d'appeler des morceaux de code dits "d'interruptions".
Pour mieux comprendre : http://www.atmel.com/Images/doc8161.pdf à partir de la page 94
Ok je vois en gros le principe. Pour le PDF c'est franchement trop complexe pour moi...
Et donc il est impossible de générer un PWM sur les sorties non notée PWM ?
Par exemple en mettant une sortie non PWM à HIGH pendant 2ms, puis LOW pendant 18ms avec une boucle ça irait pas ?
Tu peux utiliser les timers justement, pour éviter que ton programme ne reste "bloqué" que sur une action pendant un delay(). C'est pas réellement du multitaches mais ça s'en approche.
La base c'est cet exemple: http://www.arduino.cc/en/Tutorial/BlinkWithoutDelay
Après j'ai vu qu'il y avait des choses à faire avec les timers et les librairies qui vont bien, mais je me suis pas encore penché dessus suffisamment, je peux pas t'en dire plus pour le moment.
Tu peux modifier la frequence du PWM mais il y aura des effets de bord, c'est à dire que par exemple les delay ne seront plus exact : Modifier la fréquence d’un PWM - PoBot
Phoenix65:
Du coup question bête, mais comment avoir plusieurs codes qui s'exécute en même temps ?
Genre avoir des tâches en parallèle de la principale ?
Une seule réponse possible à cette question :
P H Y S I Q U E M E N T I M P O S S I B L E
Un microcontrôleur ATmega est mono-processeur, 1 cpu = 1 tache en parallèle.
Exécuter plusieurs taches en parallèle est donc ... physiquement impossible.
Tu peut utiliser un système RTOS par contre (-> une tache à la fois mais avec un changement de tache toute les n millisecondes).
Un RTOS pour arduino que je connais bien pour avoir fait déjà plusieurs patchs dessus : DuinOS.
@B@tto : pour la fréquence quand tu dis plus exacte c'est dans quel ordre de grandeur ?
Car je rappelle que c'est pour piloter un servo moteur, donc une précision pas forcément parfaite.
en gros la manip consiste à modifier la fréquence qui est au coeur du système, ce qui modifie par conséquent celle du PWM. Mais du coup les delay sont affectés, ils sont toujours précis, mais delay(20) va en fait attendre 40 ms
Mais alors comment fonctionne la bibliothèque pour les servos ? Car selon la page de référence la dessus, le servo se branche (signal) sur une I/O PWM... Or justement la fréquence ne correspond pas.