Mam następujący problem, pisze program do zegarka, próbuję odliczać sekundy na timerze 2 w trybie asynchronicznym, podłączyłem kwarc zegarkowy do pinów 7 i 8 plus kondensatory 22pF. Naczytałem się datascheet'a poprzeglądałem przykładowe źródła i wyskrobałem kawałek kodu.
Do portu PB0 jest podłączona dioda która ma sygnalizować odmierzoną sekundę.
Jednak tak się nie dzieje, ale jeśli skomentuje kawałek kodu
odpowiedzialny za przełączenie w tryb asynchroniczny zaczyna działać, podejrzewam, że może coś z tym kwarcem jest nie tak, ale nie mam pewności ponieważ to moja pierwsza styczność z
µK zatem może coś nie tak ustawiłem w programie.
Do portu PB0 jest podłączona dioda która ma sygnalizować odmierzoną sekundę.
#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
volatile int c;
void zmiana(void)
{
int i;
c++;
if(c==6)
{
PORTB ^= _BV(0);
for(i=0; i<10; i++)
{
_delay_ms(10);
}
PORTB ^= _BV(0);
c=0;
}
}
SIGNAL (SIG_OVERFLOW2)
{
zmiana();
}
int main(void)
{
DDRB |= _BV(0);
TIMSK &=~_BV(TOIE2);// Wył. przerwania TC2
ASSR |= _BV(AS2);// TC2 z taktowania zegarem CPU na generator asynchoniczny 32768 Hz
TCNT2 = 0;
OCR2 = 0;
OCR2 = 255;
TCCR2 = 0;
TCCR2 = _BV(CS22)|_BV(CS21)|_BV(CS20);// preskaler - podział przez 128
while(ASSR&0x07);// czekaj na uaktualnienie TC2
TIFR = 0;
TIMSK |= _BV(TOIE2);// włącz przerwania z TC2
sei(); // włącz obsługę przerwań
for (;;){}
return 0;
}
Jednak tak się nie dzieje, ale jeśli skomentuje kawałek kodu
ASSR |= _BV(AS2);// TC2 z taktowania zegarem CPU na generator asynchoniczny 32768 Hzodpowiedzialny za przełączenie w tryb asynchroniczny zaczyna działać, podejrzewam, że może coś z tym kwarcem jest nie tak, ale nie mam pewności ponieważ to moja pierwsza styczność z
µK zatem może coś nie tak ustawiłem w programie.
