Vizitator DragosH Postat Mai 9, 2010 Partajează Postat Mai 9, 2010 Buna, incerc sa masor tensiunea de la un AO(0.15-3V) cu un ATmega16 iar rezultatul are o variatie de 4-5 biti. ADC-ul e in free-running mode, Aref e 3.07V, alimentarea AVCC e filtrata cu C=100n, L=10u, la pinul de intrare e un filtru R=10k,C=100n. Aref si semnalul de intrare nu variaza cu mai mult de 2mV. Chiar si dupa o filtrare digitala eroarea rezultatului persista. Multumesc anticipat pentru solutii. Link spre comentariu
mitescu Postat Mai 10, 2010 Partajează Postat Mai 10, 2010 Nu ai dat toate elementele. Ce frecventa de ceas utilizezi la ADC?Ce referinta ai? Interna , sau VCCPe cati biti faci conversia?Cel mai bine ai pune secventa de cod, sa se vada modul de utilizare ADC Link spre comentariu
Vizitator DragosH Postat Mai 10, 2010 Partajează Postat Mai 10, 2010 Referinta e externa de la o ref de tensiune LT1029(5V) si un potentiometru, conversia e pe 10 biti, frecventa controlerului e de 8Mhz de la un cristal. //SET ADC*******************************************ldi r16,0x00out SFIOR,r16ldi r16,0b00000000 //Aref_extern,ADC0out ADMUX,r16ldi r16,0b11101111 //prescaler=128out ADCSRA,r16 Link spre comentariu
mitescu Postat Mai 11, 2010 Partajează Postat Mai 11, 2010 Intradevar , ai pus o secventa de cod. Dar ea este numai initializarea. Secventa de citire nu ai pus-o. Acum, ptr initializare , ai initializat si ADATE, ceea ce insemna ca trebuia sa arati si cum ai setat bitii ADTSx in registrul SFIOR. Vad ca ai initializat si intreruperea, si presupun ca acolo faci citirea rezultatului. La Free Running Mode, citirea rezultatului face ca sa se reia ciclul unei noi conversii. Din acest motiv este importanta ordinea citirii. Reluarea conversiei se face imediat dupa citirea ADCH. Prin urmare, ordinea corecta a citirilor este , intai ADCL si pe urma ADCH. Aceasta poate fi una din cauzele aparitiei "fenomenului" descris. Daca ai fi pus toate secventele, legate de ADC, probabil ca se putea face o analiza mai corecta. Oricum , daca se dovedeste ca nu porogramul este vinovat, o sa trebuiasca sa te intorci la "sarme". Link spre comentariu
Vizitator DragosH Postat Mai 11, 2010 Partajează Postat Mai 11, 2010 Multumesc pt. raspunsuri. Am facut niste modificari la soft: //SET ADC*******************************************ldi r16,0x00out SFIOR,r16ldi r16,0b00000000 //Vref_extern,ADC0out ADMUX,r16ldi r16,0b10001110 //prescaler=64out ADCSRA,r16sbi ADCSRA,ADSC //start conversion Rutina de citire pt intrerupere: int_ADC:push r16in r16, SREGpush r16push r17in r16,ADCLin r17,ADCHclcadd ZL,r16adc ZH,r17clcinc contorADCcpi contorADC,0b00010000breq adc16endadc16:pop r17//ldi r16,0b11101110 //prescaler=64//out ADCSRA,r16sbi ADCSRA,ADSCpop r16out SREG,r16pop r16reti //exit intADCadc16:ldi contorADC,0lsr ZHror ZLlsr ZHror ZLlsr ZHror ZLlsr ZHror ZLclcadd YL,ZLadc YH,ZHldi ZL,0x00ldi ZH,0x00clclsr YHror YLrjmp endadc16 Acum variatia a coborat la 2-3 biti maxim. Am citit pe forum ca pentru o rezolutie mai buna trebuie facute vreo 5 citiri pe secunda, asa sa fie? Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum