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.