To mi się zagwozdka przytrafiła na Atmega168 16Mhz i C...
Robię nowy projekt i podczas zmian potencjometrami działy mi się dziwne rzeczy. Kiedy zacząłem bezpośrednio monitorować ADC szczena mi opadła i nie mam już pomysłu co przeoczyłem. Otóż przy zmianie wartości od 0 do 1023 następuje przeskok z około 445 na 700 gdy zwiększam od 0 do 1023, natomiast gdy zmniejszam od 1023 do 0 to przeskok następuje z około 450 na 195. Zawsze w tych samych miejscach. Wychodzi na to, że gubione jest po drodze 255 jednostek (jakby brak odczytu rejestru)

Dzieje się to na każdym kanale który sprawdzałem czyli ADC4 i ADC5. Oczywiście zasilanie, filtracja, itp. jest ok - mam już troszkę doświadczenia w tej kwestii
Żeby nie było, że nie próbowałem to:
1. W bascom napisałem na szybko kontrolę wejść - wszystko działa idealnie(!)
2. Zrobiłem kilka różnych algorytmów odczytu, zarówno nieblokujących pętli jaki i oczekujących na wynik
3. Testowałem też opcję zamiast ADCW -> ADCH*256+ADCL - wynik identyczny (czyli zły)
Zgupłem już
Inicjalizuję tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
a sprawdzałem tymi funkcjami (oczywiście w danej chwili jedną pozostałe zakomentowane):
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Odczyt następował zaraz po pierwszym while(1) więc program główny wyników nie modyfikował.
Dodam tylko, że Timer1 jest jeszcze ustawiony w tryb CTC na przerwania 100us i tu się zastanawiam czy tu właśnie nie ma zgrzytu, chociaż robiłem już w C programy z takimi ustawieniami tyle, że zegar 8Mhz i Attiny44 i nic się nie działo. Nie sprawdzałem tylko przepisywania w przerwaniu od ADC, ale takiego rozwiązania chcę uniknąć.
I co Wy na to?
------------------------ [ Dodano po: 37 minutach ]Pochodził układ trochę i próg się przesunął -teraz skacze z około 510 na 730, a z powrotem z 530 na 255... Czyżby jednak przerwania przeszkadzały ???