Problem z ADC w ATmega8535



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "ZyLex" <pzylka_at_nospam_polbox.com>
Subject: Problem z ADC w ATmega8535
Date: Fri, 4 Feb 2005 18:11:26 +0100


Witam !
Mam problem z pomiarem napięć na wejściach PA0-PA7 w ATmega8535. Program
banalny - zmierz napięcie
w jednym kanale, wyślij ADCH i ADCL przez UARTA i tak 200 razy. Niby podczas
symulacji
(kompilowane pod WinAVR i symulowane w VMLab dla ATmega16) wszystko jest OK.
Natomiast w "żywym" układzie (zaprogramowanym już po kompilacji pod
ATmega8535, bo VMLab
nie wspiera jeszcze ATmega8535) dostaję zawsze tą samą wartość, bliską
napięciu odniesienia (0x3FF).
Używam wewnętrznego źródła napięcia odniesienia 2,56V, zewnętrzny oscylator
12MHz, zasilanie +5V
podłączone na Avcc, wy. Vref "wisi" - nie jest odsprzęgnięte kondensatorem
(ale to chyba nie grzech ? :-))).
Sprawdzałem na kilku kanałach i nic... Kod wyglada tak:

unsigned char uc;
ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1); //preskaler 1:64 -> ADC clock 188kHz
UBRRL=UBRRL_VALUE;
sbi(UCSRB,TXEN); // włącz nadajnik UART
sbi(UCSRB,RXEN); // włącz odbionik UART

for (uc=0;uc!=200;uc++) {
ADMUX=0xC0; // podłącz kanał 0ADC, Vref=2.56V
ADCSRA|=(1<<ADSC); // rozpocznij konwersję
while(!(ADCSRA&0x10)); // i poczekaj na jej zakończenie
loop_until_bit_is_set(UCSRA,UDRE); // czekaj na koniec nadawania
UDR=ADCH;
loop_until_bit_is_set(UCSRA,UDRE); // czekaj na koniec nadawania
UDR=ADCL;
}

Czy port A należy w jakiś specjalny sposób konfigurować, gdy jest używany
jako we. analogowe ?
Wszelkie uwagi i sugestie mile widziane - równiez na priva:
wkwj_et_gazeta.pl.
zylex



Poprzedni Następny
Wiadomość
Spis treści
From: "sgx" <_no_spm__lukasz_at_nospam_bravonet.org_>
Subject: Re: Problem z ADC w ATmega8535
Date: Fri, 4 Feb 2005 20:44:03 +0100



Mam problem z pomiarem napięć na wejściach PA0-PA7 w ATmega8535. Program


Witam
tak bez dalszej analizy przy okazji opisu pecela w EdW kiedys pisali ze dla
adc trzeba obnizyc napiecie - nie moze byc 5V

nie wiem czy pomoze ale sprobuj, przejzyj pdf'a i moze jak mozesz art. o
pecelu moze pomoze ;]
pozdr.
szogun



Poprzedni Następny
Wiadomość
Spis treści
From: "Piotrek Sz." <zumek_at_nospam_WYTNIJ.gazeta.pl>
Subject: Re: Problem z ADC w ATmega8535
Date: Fri, 4 Feb 2005 20:54:16 +0000 (UTC)


sgx <_no_spm__lukasz_at_nospam_bravonet.org_> napisał(a):


Mam problem z pomiarem napięć na wejściach PA0-PA7 w ATmega8535. Program


Witam
tak bez dalszej analizy przy okazji opisu pecela w EdW kiedys pisali ze dla
adc trzeba obnizyc napiecie - nie moze byc 5V
...
szogun


Tak , tylko to chodziło o AT90S8535 i o wewnętrzny zegarek(timer) napędzany
zewnętrznym kwarcem 32768 kHz ,jeśli mnie pamięc nie myli ;-)

Piotrek



--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/

Poprzedni Następny
Wiadomość
Spis treści
From: "sgx" <_no_spm__lukasz_at_nospam_bravonet.org_>
Subject: Re: Problem z ADC w ATmega8535
Date: Sat, 5 Feb 2005 20:54:27 +0100


Tak , tylko to chodziło o AT90S8535 i o wewnętrzny zegarek(timer)
napędzany
zewnętrznym kwarcem 32768 kHz ,jeśli mnie pamięc nie myli ;-)

hehe prawda ;)
sorki za zamet ;]
pozdro.
szogun



Poprzedni Następny
Wiadomość
Spis treści
From: "wkwj" <wkwj_at_nospam_gazeta.pl>
Subject: Re: Problem z ADC w ATmega8535
Date: Sat, 5 Feb 2005 13:03:13 +0100


"Datasheet" Atmela do ATmega8535 mówi, że:
sugerowane tamże
rozwiązanie 10uH + 100nF),
różni się o 1mV)
I tyle - nic o obniżaniu napięcia zasilania części analogowej (a
powiedziałby, że wprost przeciwnie :-).
Czy nikt nie próbował używać (i udało mu się to !) ADC w ATmega8535 ???
zylex (wciąż poszukujący rozwiązania :-))))



Poprzedni Następny
Wiadomość
Spis treści
From: JS <_do_not_use__at_nospam_polbox.com>
Subject: Re: Problem z ADC w ATmega8535
Date: Sat, 5 Feb 2005 19:15:49 +0000 (UTC)


W artykule <cu0a9k$7ee$1_at_nospam_panorama.wcss.wroc.pl>
autorem którego mieni się ZyLex, napisano:

Mam problem z pomiarem napięć na wejściach PA0-PA7 w ATmega8535. Program
[...]
nie wspiera jeszcze ATmega8535) dostaję zawsze tą samą wartość, bliską
napięciu odniesienia (0x3FF).
Używam wewnętrznego źródła napięcia odniesienia 2,56V, zewnętrzny oscylator
12MHz, zasilanie +5V
podłączone na Avcc, wy. Vref "wisi" - nie jest odsprzęgnięte kondensatorem

Na Vref jest ok. 2.6V ?

while(!(ADCSRA&0x10)); // i poczekaj na jej zakończenie

W ATmedze128 (nie wiem, jak tu) ADIF pozostanie ustawiony i trzeba go
skasować ręcznie:

ADCSRA |= 0x10;

loop_until_bit_is_set(UCSRA,UDRE); // czekaj na koniec nadawania
UDR=ADCH;
loop_until_bit_is_set(UCSRA,UDRE); // czekaj na koniec nadawania
UDR=ADCL;

W ogólności (dla free-run mode) lepiej odczytywać najpierw ADCL,
a po nim ADCH, bo wtedy odczyt jest spójny (oba bajty pochodzą
z tej samej konwersji).

Niestety powyższe uwagi IMO nie wyjaśniają Twojego problemu.

Czy port A należy w jakiś specjalny sposób konfigurować, gdy jest używany
jako we. analogowe ?

Bezpiecznie będzie ustawić jako wejścia.

--
Moje konto na Polboksie to jar0sz
Pozdrawiam
Jarosław Szynal

Poprzedni Następny
Wiadomość
Spis treści
From: "ZyLex" <wkwj_at_nospam_gazeta.pl>
Subject: Re: Problem z ADC w ATmega8535
Date: Tue, 8 Feb 2005 14:23:51 +0100


No, problem "się" rozwiązał po kilku nocnych godzinach:
sam,
nie tylko ze względu na możliwość "korupcji" wyniku przy pracy "free run"
ale ze względu
na blokowanie dostepu do rejestrów ADCH i ADCL przy odczycie z ADCL (o czym
"delikatnie" wspomina dokumantacja). Jak się najpierw odczyta z ADCH a potem
z ADCL,
to te rejestry przestają być dostępne dla układu ADC i pomimo, że ADC
pracuje i mierzy,
to nowego wyniku po prostu nie ma, no bo nie może być tam zapisany. Odczyt z
ADCH
odblokowuje dostęp ale odczyt z ADCL zaraz go znowu blokuje...
shot"
najwygodniej jest sprawdzać flagę ADCS, która jest gaszona sprzętowo po
zakończeniu
przetwarzania - nie trzeba niczego "gasić" ręcznie,

Pozdrawiam,
ZyLex