tobsik napisał(a):
Cześć,
A pokaż jeszcze jak inicjalizujesz ADC w kodzie.
Nie mam pewności czy przerwanie to jest dobre miejsce na zmianę kanału... Ale może spróbuj przed zmianą kanału wyłączyć przerwanie od ADC i potem włącz.
Inicjalizacja raczej standardowa. Dla testów pobieram temperaturę procka.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
ADMUX po inicjalizacji zawiera 0xC8. Zwróć uwagę, że w przerwaniu zmieniam adres... na dokładnie ten sam. Tyle tylko, że w dwóch krokach. Wtedy przestaje działać. Te dwa kroki docelowo mają za zadanie najpierw wyzerować 4 bity określające adres, a potem wprowadzić właściwy. Testowo wprowadzam ten sam: 0x08 czyli (1 << MUX3).
Zupełnie nie ogarniam w czym rzecz. Robię wszystko zgodnie z notą: odczytuję wartości zgodnie z kolejnością najpierw ADCL, potem ADCH. Dopiero potem zmieniam (a raczej nawet nie zmieniam) adres, odpalam pomiar i odczytuję jakieś niedorzeczne wartości temperatury.
Czy przerwanie jest niewłaściwym miejscem? Hmmm... powinno to się dać zrobić, bo zależy mi na tym, by w miarę szybko odczytać kolejne kanały. Przerwanie to tylko skok i powrót. Nic szczególnego.
------------------------ [ Dodano po: 5 minutach ]mirekk36 napisał(a):
Na początku przerwania odczytuj kanał, a dopiero później zmieniaj na kolejny
W/g kodu źródłowego przerwania jaki przytoczyłem - dokładnie to czynię. Najpierw odczytuję ADCL, a potem ADCH - jak nota informuje, a dopiero potem zmieniam kanał.