Jak poprawnie obsługiwać przetwornik A/D w AT90S8535 przy użyciu GCC?
AVR A/D w GCC?
From: "ici" <ici_at_nospam_onet,poczta.pl>
Subject: AVR A/D w GCC?
Date: Tue, 16 Dec 2003 20:45:57 +0100
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
========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!news.onet.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Jurek Szczesiul" <jerzy.szczesiul_at_nospam_ep.com.pl.remove>
Subject: Re: AVR A/D w GCC?
Date: Tue, 16 Dec 2003 22:53:47 +0100
Czesc
Użytkownik "ici" <ici_at_nospam_onet,poczta.pl> napisał w wiadomości
news:brnnfu$dl9$1_at_nospam_news.onet.pl...
Może ktoś mógłby mi przesłać kawałek sprawdzonego kodu obsługi
przetwornika
A/C w GCC
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();
}
--
Pozdrowienia
Jurek Szczesiul
========
Path: news-archive.icm.edu.pl!news.rmf.pl!agh.edu.pl!news.agh.edu.pl!newsfeed.silweb.pl!newsfeed.tpinternet.pl!atlantis.news.tpi.pl!news.tpi.pl!not-for-mai
From: "Jack00" <lufcadio_at_nospam_hoga.pl>
Subject: Re: AVR A/D w GCC?
Date: Wed, 17 Dec 2003 08:30:12 +0100
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_at_nospam_onet,poczta.pl> napisał w wiadomości
news:brnnfu$dl9$1_at_nospam_news.onet.pl...
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
========
Path: news-archive.icm.edu.pl!mat.uni.torun.pl!news.man.torun.pl!news2.icm.edu.pl!news.pw.edu.pl!not-for-mai