Pages: [1]   Go Down
Author Topic: Génération PWM en parrallèle d'autres instructions.  (Read 622 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour à tous,

Voilà, je dois générer 4 PWM (je ne passe pas par celles automatiquement délivrée par la carte  Arduino UNO car j'ai besoin d'une autre fréquence). Je n'ai aucun soucis pour générer ces 4 PWM. Par contre, pendant qu'elle tourne, j'aimerai pouvoir faire d'autres instruction (comme la lecture de ce qui arrive sur la liaison série par l'intermédiaire du Xbee, la modification de certains registre de mon Xbee...) sans perturber la génération de ces PWM. En gros, faire tourner deux "sous programme" en parrallèle.
Existe t'il des solutions.

Je vous remercie.
Logged

Central Europe
Offline Offline
Edison Member
*
Karma: 7
Posts: 1220
Use the Source, Luke.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La question importante est, quelle fréquences on tes signaux et quelle précision est nécessaire. Si c'est pour des servos de bagnole or avion télécommandé, va voir la librairie Servo.

En principe c'est bien possible de gérer tout ça avec une boucle de loop() ou - si tu veux encore faire d'autres choses - par fonction d'interruption. Tu commences seulement d'avoir une dégradation de précision lorsque plusieur signaux doivent être actualisés au même moment. La librairie Servo résout le problème en intercalant les signaux.

Korman
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci à toi.
Je n'ai pas tout compris dans la librairie Servo. Il n'est pas question de fréquence des signaux. Pour ma part je doit avoir une période de 15.5ms. De même, je n'ai pas tout saisi sur l'interruption. Est-ce que ça veut dire que le programme traite les parties moins sensible pendant les délais de la partie ou le temps est sensible.

Merci
Logged

Central Europe
Offline Offline
Edison Member
*
Karma: 7
Posts: 1220
Use the Source, Luke.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La librairie Servo génère des impulsions entre 1 et 2 ms avec un temps de repos entre les impulsion de 20ms. Pour éviter des collisions, la librairie génère les impulsions l'une après l'autre.

Korman
Logged

FRANCE
Offline Offline
Sr. Member
****
Karma: 0
Posts: 338
Arduino rocks .... oulalalalala
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

est ce que tu utilises les timers avec millis ou pas ?
Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 16
Posts: 1395
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Le principe d'une interruption est que lorsqu'elle est déclenchée, ton code s'arrête là ou il est, et le µP traite le code lié à cette interruption, une fois traité, il reprend ton code. cela permet donc de faire tourner un code, et d'en faire intervenir un autre au milieu de tout quand on veut.
Le principe pour toi serait d'avoir un timer qui déclenche une impulsion toutes les 15.5ms. Tu n'aurais plus rien à gérer, c'est le timer qui sen charge. Tu peux utiliser MsTimer2 afin de gérer le timer, mais sache qu'il n'est pas du tout précis (je me répète...)
Il existe un tas de solutions pour ce que tu demandes, des bonnes et des mauvaises, chacune ayant ses avantages et inconvénients, tout dépend de ce que tu veux vraiment faire...
Logged

Pages: [1]   Go Up
Jump to: