Go Down

Topic: detecter un changement d'etat (Read 646 times) previous topic - next topic

kriss-38

Bonsoir

Je voudrais acquerir un signal en synchronisation avec un signal servant d horloge . Je dois surveiller l'horloge (pinClock) et acquerir une valeur sur une pin (pinData) lorsque cette horloge passe d'un etat haut a un etat bas (front descendant). Est ce réaliste de réaliser cela en langage Arduino vu la fréquence de l'horloge (maxi 10KHz) ou est il preferable de le faire en assembleur AVR. Apres acquisition de la valeur presente sur la pin pinData , je dois faire un leger traitement sur cette valeur (decalage de 1 position et stockage) relativement court.
Cela revient a créer un UART SYNCHRONE contrairement a un UART ASYNCHRONE qui existe deja dans la litterature consacrée a Arduino.

Merci a tous ceux qui pourraient eclairer ma lanterne.

al1fch

#1
Oct 23, 2011, 10:24 pm Last Edit: Oct 23, 2011, 10:42 pm by al1fch Reason: 1
Bonjour

SOFT : En restant 100% Arduino la solution avec interruption (FALLING) permettrait de synchroniser rapidement sur l'entrée recevant l'horloge externe. A vue de nez le traitement envisagé pour chaque bit ne parait pas incompatible avec une acquisition à 10kHZ (assembleur à priori non indispensable s'il y a comme içi 100 µS garanties entre deux fronts d'horloge et s'il n'y a pas d'autre tâche à effectuer pendant l'acquisition série  synchrone.100 µS c'est long pour un micro à 16 MHz)
http://arduino.cc/en/Reference/AttachInterrupt

HARD : En attaquant plus profond le hardware du Mega328 et en sacrifiant l'entrée série il est possible de profiter du fait que l'USART est soit en mode Asynchrone soit en mode Synchrone  : entrée signal Rxd (PD0) entrée horloge XCK(PD4)
Le SPI peut éventuellement servir d'entrée série synchrone si le format des données est acceptable

kriss-38

Merci pour cette réponse rapide

Je crois que je vais m'orienter sur la solution SOFT. En effet le signal d'horloge ne dépassera jamais 10KHz . Je n'avais pas pensé a regarder les interruptions.
La solution HARD me convient moins pour 2 raisons : 1) J'ai besoin de communiquer avec le PC , donc pas question de sacrifier les pins D0 et D1 . 2) je ne me suis pas encore plongé dans l'assembleur AVR pour les projets que j'ai en cours (et qui ne le necessitent pas).

Merci

skywodd

Bonjour,

En soft cela doit être réalisable, moyennant une bonne optimisation des calculs dans l'interruption.
Si ton signal comporte 8bit avec le port SPI tu devrait pourvoir capturé en hardware le signal sans trop te cassé la tête.

Si tu pars sur du soft l'assembleur pourrait être utile mais pas forcément obligatoire si il y a trés peu de calcul à faire.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Go Up