ATMega8 i ADC - problem

Mam dziwny problem z ADC - to moje pierwsze zmagania z ADC wiec moze gdzies popelniam blad. Otoz mam podlaczony LM35 poprzez rezystor 470 om do ADC0 ATMega8. ADC inicjalizuje w nastepujacy sposob:

ADCConv: LDI R16,(1<<REFS1)|(1<<REFS0) ; Internal voltage reference 2,56V OUT ADMUX,R16 LDI R16,(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0) ;ADC enable with prescaler 128 OUT ADCSRA,R16 ADC1: SBIS ADCSRA,ADIF ; Wait for conversion end RJMP ADC1 IN R18,ADCL ; Read low-byte of conversion result RET

Procedura ADCConv jest wywolywana w petli, ktora oprocz tego nic wiecej nie robi poza wyswietleniem na 8 diodach stanu rejestru R18 - czyli ADCL po konwersji. I tu zaczynaja sie schody... Otoz pierwszy odczyt po resecie procka wydaje sie byc prawidlowy - zmierzone np. woltomierzem napiecie na wejsciu ADC0 procka zgadza sie z odczytem. Ale zmiany tego napiecia przy kolejnych odczytach (zmieniam temp. podlaczonego LM35) nie powoduja zmiany odczytu z ADC! Oczywiscie jak dam RESET to znowu mam poprawny odczyt dla danej temp. Mozecie mnie oswiecic co robie nie tak? Bo chyba odczyt straszego bajtu ADCH nie jest wymagany ? Aha, program sie nie zwiesza (reaguje na inne rzeczy), a port C pozostawiony jest tak jak po resecie bez zadnej inicjalizacji. Dzieki za pomoc i pozdrawiam, T.M.F.

Reply to
T.M.F.
Loading thread data ...

Uzytkownik "T.M.F." snipped-for-privacy@nospam.mp.pl> napisal w wiadomosci news: snipped-for-privacy@www.wizzard.one.pl...

A pdf-a do mega8 czytales ? Cytat z pdf-a, str 203:

---------- When an ADC conversion is complete, the result is found in these two registers. When ADCL is read, the ADC Data Register is not updated until ADCH is read. Consequently, if the result is left adjusted and no more than 8-bit precision is required, it is sufficient to read ADCH. Otherwise, ADCL must be read first, then ADCH.

----------

Jak widac, starszy rejestr musi byc tez odczytany.

Pozdr AK

Reply to
Arek Karas

T.M.F. napisał(a):

Nic nie dzieje się bez przyczyny :))

A pisze jak wół na stronie 205 u dołu: "When ADCL is read, the ADC Data Register is not updated until ADCH is read."

:DDDD

Jak chcesz czytać tylko 8 bitów to ustaw sobie ADLAR = 1 i czytaj z ADCH. I po kłopocie.

Powodzenia

Reply to
Bartosz Sarama

Cytat z manuala procka:

Once ADCL is read, ADC access to Data Registers is blocked. This means that if ADCL has been read, and a conversion completes before ADCH is read, neither register is updated and the result from the conversion is lost. When ADCH is read, ADC access to the ADCH and ADCL Registers is re-enabled.

Chyba jednak trzeba czytać ADCH. Chyba, że wybierzesz wyrównanie do lewej, wtedy wystarczy czytać samo ADCH.

Pozdrawiam

Reply to
Marcin Stanisz

Dzieki wszystkim za tak blyskawiczny odzew :) Wiedzialem, ze popelnilem jakis glupi blad. Jakos przeoczylem fragment: ADC Data Register is not updated until ADCH is read :) Dzieki za pomoc.

Reply to
T.M.F.

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.