Witam, mam nastepujacy problem - napisalem timer(uzywajac timera 0) do kontroli czasu w programie(glownie serw). Ustawilem prescaler na 64, co przy kwarcu 16MHz daje 250kHz, czyli jeden takt timera odlicza 1/250000 s. czyli 0,000004s. Potem "timer pomocniczny" sumuje wszystkie przepelnienia do 1 sekundy (czyli tysiac razy).
Dalej chce uzyc tego "czasomierza" do kontroli programu/serwokontrolera w taki sposob:
No ale pozycje serw sie nie zmieniaja, zostaja na swoim miejscu inicjujacym :/ sterownik dziala na bank(sprawdzalem przebiegi na oscyloskopie), tylko ta kontrola czasu cos nawala przez co nie moge zmieniac pozycji. Fusy oczywiscie ustawione(low:CE high:99 )
// Ustawienie licznika 0
TCCR0=_BV(WGM01)|_BV(CS01)|_BV(CS00);
OCR0= 0xFA; //zliczaj do 250 impulsow (0,001s)
// Przerwania
TIMSK=_BV(OCIE1A)|_BV(OCIE1B)|_BV(OCIE2)|_BV(OCIE0);
TIFR =_BV(OCF1A)|_BV(OCF1A)|_BV(OCF2)|_BV(OCF0);
ISR(TIMER0_COMP_vect) // przy przerwaniu (gdy licznik dolicz do OCR0)
{
backup_tmr++;
if(backup_tmr==1000){
t.second++;
backup_tmr=0;
}
if(t.second==60)
{
t.second=0; // wyzeruj licznik sekund oraz
if (++t.minute==60) // inkrementuj licznik minut i sprawdź czy jest ich 60
{ // jeśli tak to:
t.minute=0; // wyzeruj licznik minut oraz
if (++t.hour==24) // inkrementuj licznik godzin i sprawdź czy jest ich 24
{ // jeśli tak to:
t.hour=0; // wyzeruj licznik godzin
}
}
}
}Dalej chce uzyc tego "czasomierza" do kontroli programu/serwokontrolera w taki sposob:
int main()
{
tmr_setup();
t.second=0;
t.minute=0;
t.hour=0;
while(1)
{
if((t.second%6)==0) for(i=0;i==16;i++) serwo[i]=0x20;
if((t.second%4)==0) for(i=0;i==16;i++) serwo[i]=0x94;
}
}
No ale pozycje serw sie nie zmieniaja, zostaja na swoim miejscu inicjujacym :/ sterownik dziala na bank(sprawdzalem przebiegi na oscyloskopie), tylko ta kontrola czasu cos nawala przez co nie moge zmieniac pozycji. Fusy oczywiscie ustawione(low:CE high:99 )