Vizitator zc Postat Septembrie 23, 2004 Partajează Postat Septembrie 23, 2004 timpul de esantionare a semnalului de intrare e dat de clock-ul adc-ului si este 14.5clk pentru prima conversie , 1.5clk urmatoarele conversii.m-am exprimat gresit cind ti-am zis sa scazi frecventa de esantionare. nu intodeauna este proprotionala cu clock-ul adc-ului. corect este sa scazi clock-ul adc-ului. Link spre comentariu
Vizitator yoco Postat Septembrie 23, 2004 Partajează Postat Septembrie 23, 2004 Salut Zc ! ai idee cum sa scad clock-ul adc-ului ??? fara sa "umblu" la Quartz. -prescalerul l-am pus pe minim (fclck/128) adica la frecv. : am configurat ADC-ul din atmega8 la frecv de esantionare de 156.25 Khz la un Quartz de 10Mhz si pe urma am schimbat acest Quartz cu unul de 14.3818Mhz pentru a obtine baud rate-uri decente si AM UITAT de frecv. de esantionare! (am gresit eu ce mai....). acum am pus frecv de esantionare la 112.35 Khz si sper sa dea rezultate. Link spre comentariu
sofian Postat Septembrie 23, 2004 Partajează Postat Septembrie 23, 2004 iata ce zic cei de la atmel 13-260uSec Conversion Timeiar adc este de tip SAR (10-bit successive approximation)ADC Clock poate fi intre 50Khz si 200Khzeu zic daca il sa faci asaADEN=1 (Adc On)ADSC=1 (Adc Start)wait 100uSecread ADCH si ADCL Link spre comentariu
Vizitator zc Postat Septembrie 24, 2004 Partajează Postat Septembrie 24, 2004 in ADCSRA ai biti pentru setarea prescalerului ADC-ului(bitii 0,1,2). bitii se numesc ADPS0,ADPS1,ADPS2. daca maresti valoarea data de cei trei biti scazi clock-ul ADC-ului.in pdf-ul pentru atmega8 este un tabel care te lamureste exact cu valorile de divizare.o relatie ar fi asta: frecventa ADC=frecventa cuart/(2^(valoare ADPS2..0)) mai putin pentru valoare ADSPS2..0=0. Link spre comentariu
Vizitator zc Postat Septembrie 24, 2004 Partajează Postat Septembrie 24, 2004 scuze nu am citit si al rindul doi din ce ai scris???deci nu ti-am zis nimic nou.vezi ca ADC-ul mai are un bit in SFIOR.eu am folosit ADC-ul pentru masuratori orientative sau ma raportam la alta valoare masurata anterior. o eroare de 1.4% nu ma deranja. situ ca la o aplicatie (da nu mai stiu exact daca era cu atmega8 sau alt atmega) valoarea citita era deranjant mai mica decit ar fi trebuit sa fie si i-am scazut frecventa ADC-ului. problema s-a rezolvat.banuiesc ca nu faci o singura citire ci faci o medie a mai multor citiri.daca am timp astazi am sa fac si eu citeva teste si-ti zic ce am obtinut.da le fac cu atmega16 ca asta am pe masa. Link spre comentariu
Vizitator zc Postat Septembrie 24, 2004 Partajează Postat Septembrie 24, 2004 uite ce am masurat acum pe un atmega16-ADPS2,1,0=1,1,1-AREF scurt cu AVCC 4,907V-tensiune intrare 2,975V-valoare convertor 622-ADPS2,1,0=0,1,0-AREF scurt cu AVCC 4,898V-tensiune intrare 2,975V-valoare convertor 624prima masuratoare pare in regula. rezolutia convertorului 4,8mV eroarea de masura 8mV. Link spre comentariu
Vizitator yoco Postat Septembrie 27, 2004 Partajează Postat Septembrie 27, 2004 Hey ! -cum spuneam nu a avut ocazia sa refac si eu masuratorile dar se vede ca voi DA, despre rezultatele lui Zc ce pot sa zic in afara de faptul ca sunt cat se poate de corecte dar sunt un pic curios la secventa de cod prin care faci activarea si citirea valorii ADC, pentru asta o sa pun secventa care am scris-o eu si poate pui si tu secventa ta pentru o mai buna intelegere a "treburilor" care se intampla mai exact. -eu fac masuratori pe 3 canale adica selectez un canal nou dupa fiecare masuratoare , salvez data si incep una noua iar dupa ce se termina toate prelucrez datele dar ai dreptate cand spui ca trebuie sa faci o medie mai multor masuratori , asa vreau si eu sa fac dar asta presupune niste calcule mai "avansate", nu ca ari fi cine stie ce dar .... in fine este de lucru la un proiect nu? -uite in mare cam ce face atmega8 al meu: citesc 3 tensiuni din care una este afisata ca si tensiune iar celelalte 2 sunt convertite in curent , in final le afisez pe un LCD 4x20 char. asa , si le trimit pe serial rs232 la Pc pentru o log-are+afisare in LABVIEW. - am si un temporizator care contorizeaza timpul . -setarile se fac de la o tastatura cu 9 butoane.... -codul scris pentru citire ADC: conv_init: ;ch_0:ldi temp,0b01000000 ;selectare canal 0 ,vlsb=4.88mvout admux,templdi temp,0b10001111 ;init adcout adcsr,tempsbi adcsr,6 ;start dumy conv.adc_loop1:sbis adcsr,4rjmp adc_loop1nopnoprcall mcu_sleep ;conv. realalds templ,adlsts ub1l,templlds temph,adhsts ub1h,temphrcall conv_result ;conversie hex->int->ascii rezultatcbi adcsr,7 ;adc disable Link spre comentariu
Vizitator zc Postat Septembrie 27, 2004 Partajează Postat Septembrie 27, 2004 ;ADMUX=0;//intrarea 0 referinta AREF CLR R30 OUT 0x7,R30 ;ADCSR|=0x40;// Start conversie SBI 0x6,6 ;while ((ADCSR & 0x10)==0);// asteapta conversie completaet: SBIS 0x6,4 RJMP et ;ADCSR|=0x10; SBI 0x6,4 ;rezultat=ADCW; IN R30,0x4 IN R31,0x4+1 STS _ii,R30 STS _ii+1,R31 Link spre comentariu
Vizitator zc Postat Septembrie 27, 2004 Partajează Postat Septembrie 27, 2004 si nu e necesar sa activezi intreruperea in ADCSR. Link spre comentariu
Vizitator yoco Postat Septembrie 27, 2004 Partajează Postat Septembrie 27, 2004 am uitat de adc_ISR: adc_done:in temp,sregpush tempin templ,adclin temph,adchsts adl,templsts adh,temphpop tempout sreg,tempreti Link spre comentariu
Vizitator yoco Postat Septembrie 27, 2004 Partajează Postat Septembrie 27, 2004 pai daca e sleep mode at e necesara intreruperea... Link spre comentariu
Vizitator zc Postat Septembrie 27, 2004 Partajează Postat Septembrie 27, 2004 dupa cum am zis nu e nevoie sa activezi intreruperea si sa citesti valoarea in intrerupere pentru ca adc_loop1: sbis adcsr,4 rjmp adc_loop1asteapta sfirsitul conversiei si dupa ce programul iese din bucla asta poti lua valoarea din ADCW.eu cind am facut testul nu am schimbat canalul. Link spre comentariu
Vizitator yoco Postat Septembrie 27, 2004 Partajează Postat Septembrie 27, 2004 da ai dreptate dar eu fac citirea prin dezactivarea mcu in "noise reduction mode " descris de cei de la ATMEL in pdf. Link spre comentariu
Vizitator zc Postat Septembrie 27, 2004 Partajează Postat Septembrie 27, 2004 ai dreptate cu sleep si intrerupere dar am citit mesajul tau dupa ce am scris.eu nu am folosit in test noise reduction. Link spre comentariu
Vizitator yoco Postat Septembrie 27, 2004 Partajează Postat Septembrie 27, 2004 sunt totusi un pic nedumerit cum ai ajuns la asa rezultate ....avand in vedere ca nu ai folosit noise reduction mode...poate mai dai niste detalii... 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