Waxy napisał(a):
Ale, przeniosłem break; na początek pętli, i coś ruszyło...
To znaczy co i gdzie konkretnie przeniosłeś i co oznacza, że "ruszyło"?
Cytuj:
1. warunek miał sprawdzać czy ADC skończył pracę
Powinno być raczej:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Waxy napisał(a):
2. dodanie volatile nic nie zmieniło
Uwierz mi, że dodanie volatile wiele zmienia. Niekoniecznie efekt będzie widoczny od razu podczas kompilacji, ale jest wysoce mało prawdopodobne, by Twój program działał prawidłowo (zgodnie z założeniem) bez volatile.
Waxy napisał(a):
3. błędu nie zauważyłem bo i testować nie miałem jak
Jeśli korzystasz z Atmel Studio, to sporo błędów można wychwycić za pomocą symulatora. Oczywiście nie wszystko można prawidłowo zasymulować, ale podejrzewam, że te o których pisałem dałoby radę.
Dodatkowy błąd to zerowanie zmiennej ADC po instrukcji break;
W ogóle Twoją pętlę, która prawidłowo powinna wyglądać tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
zamieniłbym na przykład tak:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Kolejny błąd to brak włączenia ADC. Należałoby w tym celu ustawić bit, ADEN w ADCSRA, bo bez tego nie wystartujesz żadnej konwersji.
Nie wiem, czy to wszystkie błędy. Nie mam już czasu tego dalej sprawdzać. Chyba będziesz musiał jeszcze sporo popracować nad tym kodem. No i powinieneś jednak mieć prototyp do sprawdzenia kodu w realnym mikrokontrolerze, bo to dopiero daje (jako taką) gwarancję poprawności kodu.
P.S. Jeśli chodzi o zmianę kanału (ADMUX) to też jest źle, ale naprawdę już nie mam czasu o tym pisać. Był całkiem niedawno wątek o tym na forum, więc może spróbuj poszukać.