Witam, jest to mój pierwszy post, więc mam nadzieję że nie umieszczam go w złym dziale.
Zaczynając naukę przerwań chciałem zmienić stan diody co sekundę. Początkowo chciałem zrobić to na przykładzie z Bluebooka i próbowałem wykorzystać Timer0 (8 bitowy), moje podejście było takie: dobrać taki preskaler by dzieląc częstotliwość otrzymać liczbę całkowitą. Dodam, że testuję na Atmega16 z wewnętrznym taktowaniem 8 MHz. Zatem: 8 000 000 / 64 = 125 000, porównanie ustawiłem przy 125, zatem w wektorze przerwania dodałem licznik zliczający do 1000. Teoretycznie powinno działać, bo obliczenia chyba się zgadzają, jedyny błąd to dobranie złego preskalera- i to rozumiem, jednak wydawało mi się, że całość działa tak: timer zaczyna zliczać, kiedy dochodzi do wartości z OCR0 mamy przerwanie i później liczymy od nowa, więc teoretycznie(w mojej głowie) wszystko powinno działać pomimo "błędu", jednak w praktyce dioda miga z większą częstotliwością.
Listing "złego" programu:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Z zadanie sobie poradziłem, używając Timer1 (16 bitowy) i dobierając odpowiedni preskaler:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
I choć wszystko ładnie działa to mam pytanie- dlaczego pierwszy pomysł nie wypalił? Bo z tego, że nie działa łatwo wywnioskować, że czegoś nie wiem/ nie rozumiem... tylko czego?
Dzięki za cierpliwość, i przepraszam za błędy.