Witam!
Mam mały problem z licznikami w Atmedze32.
Na początek kod:
Jak widać program ma działać na 2 licznikach (0 i 2). Timer 0 pracuje w trybie toggle generując przebieg prostokątny na OC0 z częstotliwością 36kHz. Sama generacja działa poprawnie (oscyloskop nie kłamie). Jednak jak próbuję włączać i wyłączać generację tego przebiegu powiedzmy na 600 us, i używam do tego timera 2 (8bitowego) to wtedy nie działa tak jak powinno. Sygnał się sypie, kluczowanie jest losowe.
Pytanie: czy te liczniki działają zależnie? Czy rzuca się w oczy jakiś błąd w kodzie? Może źle rozumuje?
P.S. jak w AVRGCC zaokrąglać liczby stałoprzecinkowe do całkowitych? polecenie (int)(1000000*(1/76000)) które w wyniki daje liczbę 13 nie działa. Program się kompiluje ale sygnał ma ogromną częstotliwość.
Wielkie dzięki za pomoc niewprawionemu programiście!
Pozdrawiam!
Mam mały problem z licznikami w Atmedze32.
Na początek kod:
void IR_Generuj()
{
//TUTAJ WŁĄCZAM TIMER KLUCZUJĄCY SYGNAŁ//
TIMSK|=1<<OCIE2;
OCR2=75;
TCCR2 = 1<<WGM21 | 1<<CS21; //PRESK 8 |TRYB CTC
//TUTAJ GENERUJE SYGNAŁ 36kHz//
OCR0=13; //(int)(1000000*(1/76000));
TCCR0 = 1<<CS00|1<<COM00| 1<<WGM01; //bez presk|toggle na oc0|tryb ctc
while(!koniec){};
koniec = 0;
}
// TUTAJ WYŁĄCZAM TIMERY po 600us//
ISR(SIG_OUTPUT_COMPARE2)
{
TIMSK=0;
koniec = 1;
PORTB &=~(1<<3);
TCCR0 &=~( 1<<CS00|1<<COM00| 1<<WGM01);
TCCR1B &=~(1<<CS11|1<<WGM12 );
}Jak widać program ma działać na 2 licznikach (0 i 2). Timer 0 pracuje w trybie toggle generując przebieg prostokątny na OC0 z częstotliwością 36kHz. Sama generacja działa poprawnie (oscyloskop nie kłamie). Jednak jak próbuję włączać i wyłączać generację tego przebiegu powiedzmy na 600 us, i używam do tego timera 2 (8bitowego) to wtedy nie działa tak jak powinno. Sygnał się sypie, kluczowanie jest losowe.
Pytanie: czy te liczniki działają zależnie? Czy rzuca się w oczy jakiś błąd w kodzie? Może źle rozumuje?
P.S. jak w AVRGCC zaokrąglać liczby stałoprzecinkowe do całkowitych? polecenie (int)(1000000*(1/76000)) które w wyniki daje liczbę 13 nie działa. Program się kompiluje ale sygnał ma ogromną częstotliwość.
Wielkie dzięki za pomoc niewprawionemu programiście!
Pozdrawiam!
