AVR A/D w GCC?

Dec 16, 2003 2 Replies

Mo¿e kto¶ z grupowiczów ma wiêksze do¶wiadczenie w obs³udze przetwornika A/D np. dla AT90S8535 ? Oprogramowa³em w GCC prost± procedurkê 1-dno krotnego pomiaru pojedynczym kana³em bez przerwañ, czyli najprostsza opcja. Pomiar krêci siê w pêtli która ³±cznie z wy¶wietleniem na LCD i opó¼nieniami trwa ok. kilku sekund. Problem tkwi w tym, ¿e prawid³owy pomiar uzyskujê jedynie ZA 1-SZYM PRZEJ¦CIEM PÊTLI po RESECIE !!!??? W czasie kolejnych pêtli z rej. ADCH odczytujê bity powy¿ej B1 i do¶æ przypadkowe (ADCH czytane po ADCL). Za³o¿enie maski (B2-B7) na zmienn±=ADCH niewiele pomaga, boB0 i B1 równie¿ staj± siê przypadkowe po czasie. Dla poziomów napiêæ poni¿ej B8 (czyli tylko z ADCL - B0...B7) odczyty s± prawid³owe (po odrzuceniu ADCH). Nie wiem, czy jest to wina z³ej obs³ugi A/D czy b³êdy kompilacji (wy³±czona opcja optymalizacji daje pewne efekty - pomiar "rozje¿d¿a siê" nieco pó¼niej). Mo¿e kto¶ móg³by mi przes³aæ kawa³ek sprawdzonego kodu obs³ugi przetwornika A/C w GCC na priva? Z góry dziêkujê za pomoc.



ICI



Czesc

U¿ytkownik "ici" <ici@onet,poczta.pl> napisa³ w wiadomo¶ci news:brnnfu$dl9$ snipped-for-privacy@news.onet.pl...

przetwornika

Kawalek modulu z edukacyjnych prob na atmega8 :

void InitADC(void) { ADMUX = _BV(REFS1) | _BV(REFS0); // wewnêtrzne Vref = 2,56V i ustawiony kana³ 0 ADCSRA = _BV(ADEN) | _BV(ADIE) | _BV(ADPS2) | _BV(ADPS1); // ADC w³±czony, przerwanie w³±czone, preskaler = 64 }

void StartADC(void) { ADCSRA |= _BV(ADSC); }

SIGNAL (SIG_ADC) { #ifdef INOUT PWM_output = ADCL | (ADCH << 8); #endif StartADC(); }

Pamietaj o odp. czestotliwosci zegara przetwornika A/C Musi byc nie wieksza niz 200 kHz dla rozdzielczosci 10 bitow. Dlatego w mikrokontrolerze jest umieszczony dzielnik czestotliwosci w rejestrze ADCSRA.

U¿ytkownik "ici" <ici@onet,poczta.pl> napisa³ w wiadomo¶ci news:brnnfu$dl9$ snipped-for-privacy@news.onet.pl...

zmienn±=ADCH

przetwornika

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required