Mesure sur ADC synchonysé sur INT

Lesquels choisir ? Comment les utiliser ?

Postby deuchix » Fri Nov 15, 2013 12:00 am

Bonjour à tous,

je tourne en rond sur un problème que je n'arrive pas à résoudre.

le but du jeux est de déclencher une série de 14 mesures à une fréquence de 700Hz à la suite d'un "TOP Départ"

matériellement, j'ai un ATmega32 et j'utilise AVR Studio 6 pour mon programme en C que j'envoie avec l'interface USBAsp dans mon composant.

le signal de départ est le 50Hz du secteur remis en forme par transfo + AOP pour ne pas descendre sous les 0V ni dépasser les 5V et raccordé sur ADC0 (broche PA0). au signal original, j'ai mis un trigger de schmitt pour détecter le passage à 0 et donc débuter la série de mesure par interruption et raccordé sur INT0 (broche PD2)

voilà donc ce que donne l'oscillo pour la synchro des deux signaux :



l'idée pour le programme était :

une boucle d'attente du bon nombre de mesure
une fois OK, je bloque toutes le IT, affiche toutes les mesures sur l'écran, je réactive INT0 tout en bloquant le compteur

INT0 :
je bloque les IT,
je désactive INT0,
charge le compteur,
réactive les IT
active le compteur

Timer 1:
je recharge le compteur
je fais ma mesure que je met dans un tableau
j'incrémente le nombre de mesure

voilà donc le programme en C que j'ai fait (qui est en pièce jointe)


le soucis c'est que les valeur affichées sont déphasées d'une série de mesure à l'autre ce qui, il me semble, ne devrait pas arriver avec ce programme. ça fait comme si INT0 comptais pour rien !!!!

je vous ai fait une petite video pour voir le résultat, ça peu aider à comprendre : http://www.dailymotion.com/video/x177p79

jai du faire une bourde quelque part mais où ???
je vous vois déjà venir : les fusibles sont mal configurés.
sans doute, voilà donc ma config :
Low Fuse : 0xEE
High Fuse : 0xCF

donc si j'ai bien compris la doc : pas de Jtag, et horloge réglé sur quartz > 1MHz

merci'
Attachments
prg.c
(2.9 KiB) Downloaded 30 times
deuchix
 
Posts: 2
Joined: Mon Jan 20, 2014 8:07 am

Postby jls28jls28jls28 » Fri Nov 15, 2013 12:00 am

Bonjour,

je crois que INT0 contient de nombreuses
erreurs,

moi j'aurais écris :

ISR(INT0_vect)
{
TCNT1 = 0xFFFE;// charge le

TCCR1B = _BV(CS10);// active le
}

je te laisse chercher un peu...
jls28jls28jls28
 
Posts: 27
Joined: Mon Jan 20, 2014 7:53 am

Postby jls28jls28jls28 » Fri Nov 15, 2013 12:00 am

En résumé,
désactiver et réactiver globalement les
interruptions comme ça dans une interruption,

ça ne sert à rien
et en plus ça peut même être dangereux.
jls28jls28jls28
 
Posts: 27
Joined: Mon Jan 20, 2014 7:53 am

Postby deuchix » Fri Nov 15, 2013 12:00 am

re,

modif faite telle que tu me l'indique.

programme modifié en PJ

toujours le même résultat
Attachments
prg2.c
(3.17 KiB) Downloaded 34 times
deuchix
 
Posts: 2
Joined: Mon Jan 20, 2014 8:07 am

Postby obdh » Fri Nov 15, 2013 12:00 am

Pour trouver ce genre de problème, il faut utiliser une ou plusieurs sorties du processeur, mise à 1 à l'entrée de la fonction et à 0 à la sortie, et regarder à l'oscilloscope ou à l'analyseur logique ce que cela donne. On voit ainsi les problèmes de parasites (plusieurs appels successifs), de traitement trop long... En général, c'est radical pour comprendre.
obdh
 
Posts: 487
Joined: Fri Jan 17, 2014 4:39 pm


Return to Microcontrôleurs & microprocesseurs

Who is online

Users browsing this forum: No registered users and 2 guests