Witam. Mam następujący problem - chciałem użyć timera 2 do pracy asynchronicznej z zewnętrznym rezonatorem kwarcowym (zegarkowym) o częstotliwości 32,768 kHz. Czyli ATmega powinna być taktowana wewnętrznym szybkim oscylatorem, a jedynie ten timer zegarkowym.
Kod:
Wszystkie fuse bity są w ustawieniu standardowym - oscylator wewnętrzny 1MHz.
Niestety po wgraniu programu okazuje się, że dioda się zapala po niecałej sekundzie i tak już zostaje.
Nie mruga co sekundę.
W czym leży błąd?
Kod:
#include <avr/io.h>
int main (void)
{
DDRD |= (1 << 0); // Ustawienie bitu LED jako wyjścia
TCCR2 |= ((1 << CS21) | (1 << CS22)); //Ustawia timer z preskalerem Fcpu/256
ASSR |= (1 << AS2); // praca asynchroniczna
while(1)
{
// Sprawdza wartość timera w pętli IF, prawda jeśli wartość wynosi 1 sekundę
if (TCNT2 >=128)
{
PORTD ^= (1 << 0); // zmiana stanu diody
TCNT2 = 0; // zerowanie timera
}
}
}Wszystkie fuse bity są w ustawieniu standardowym - oscylator wewnętrzny 1MHz.
Niestety po wgraniu programu okazuje się, że dioda się zapala po niecałej sekundzie i tak już zostaje.
Nie mruga co sekundę.
W czym leży błąd?