échange signaux PWM.

Bonjour à tous !

Je voudrai de l'aide pour acquérir un signal PWM sur une carte arduino Uno ou Méga, le signal viendrai d'une autre carte Uno. j'aurai pensé dans un premier temps à un CNA, ou bien est-il possible de récupérer directement un signal PWM avec une fonction interrupt peut-être?

j'ai déjà fait quelques programmes sur arduino, notamment avec des steppers, mais rien de complexe donc soyez indulgents ;)

merci d'avance !!

Regarde du côté de la fonction pulseIn() ;)

Merci B@tto, je ne connaissais pas cette fonction.

par contre pour info: quand on fait un analogWrite sur une sortie (0 à 255), quelle est l'unité?

vince3838:
Merci B@tto, je ne connaissais pas cette fonction.

par contre pour info: quand on fait un analogWrite sur une sortie (0 à 255), quelle est l’unité?

bonjour
selon

le cycle est de 500 Hz

Attention PulseIn ne peut pas gérer le cas 0 et le cas 255. PulseIn attend une transition. Si aucune transition au bout d'un certain temps retourne 0 (indifférement de l'état de la ligne)

Le 0 si avec le timeout ;)

Si l’électronique ne te rebute pas, ce qui serait dommage quand on veut faire de l’informatique embarquée, tu peux utiliser une entrée analogique à condition de filtrer ton signal PMW.

Le filtre que je te propose est un simple RC : une résistance en série entre la sortie PWM du premier arduino et l’entrée analogique du second arduino et un condensateur entre l’entrée analogique et la masse. Ce filtre se comporte comme un intégrateur, c’est à dire qu’il va extraire la valeur moyenne du signal PWM.

Dans ce filtre on défini une fréquence de coupure “Fc” .
On montre dans tout les bons recueils d’électronique (et aussi sur wikipédia) que Fc= 1/(2PIR*C).
On prendra R<= 10kohms pour satisfaire aux spécifications du convertisseur analogique digital de l’ATMega328p.

En électronique plus on veut un filtrage efficace plus il faut choisir une Fc faible ce qui impose d’augmenter la valeur du condensateur et donc le temps pour atteindre l’équilibre (augmentation de temps tout relative de toute façon avec une PWM à 500Hz on ne peut pas aller vite). Ton rythme de PMW va t-il évoluer très rapidement ou pas ?

A toi de voir selon ton application quel principe “tout logiciel” ou “logiciel/électronique” qui convient le mieux.
Un message : Dans un micro-controleur la mémoire est limitée alors quand deux malheureux composants permettent d’économiser quelques dizaines de ligne de code ce n’est pas du temps perdu que d’y regarder à deux fois avant de faire son choix.

Le 0 si avec le timeout

Le 0 et le 1 pareil d’après la doc. Si pas de transition au bout du time out sortie avec 0.

extrait de http://arduino.cc/en/Reference/PulseIn

Gives up and returns 0 if no pulse starts within a specified time out.

A charge pour l’application de tester l’état de la ligne pour savoir si c’est 0 ou 255.

"if no pulse starts", il me semble que si la transition est initiée il reste bloqué, mais j'en suis pas sûr ...

tout d'abord merci de vos réponses si rapides,

je pense tester avec une version "tout logiciel" pour commencer, en plus je pourrai vérifier les cas du 0 ou 255, puis une fois que j'aurai tout pigé ou presque, je verrai cette utilisation de filtre RC (qui me rappelle quelques petits souvenirs de phisyque)..

je vous tiendrai informé.

merci beaucoup !

Et ne pas oublié de mettre les masses en commun hein ;)

Bonjour,

Pour tester les 255 et le 0 en cas de timeout un truc dans ce genre devrais marcher :

unsigned long duration;
if((duration = pulseIn(PIN_PWM, HIGH, TIMEOUT)) == 0 && digitalRead(PIN_PWM)) duration = TIMEOUT;

Si PIN_PWM est à 255 "duration" sera égale à TIMEOUT, 0 si PIN_PWM est à 0 ou sinon au temps en microsecondes .