Mam dziwny problem z tym pwm i chciałbym się dowiedzieć dlaczego tak się dzieje
uC to Atmega 32 z kwarcem 16MHz
Otóż, jest sobie timer ustawiony na:
TCCR2 |= (1<<WGM21); //CTC
TCCR2 |= (1<<CS21); //8
OCR2 = 47;
TIMSK |= (1<<OCIE2);
i przerwanie:
Kod:
ISR(TIMER2_COMP_vect) {
static uint8_t cnt;
if(cnt > 99) {
cnt = 0;
}
for(uint8_t i = 0; i < 6; i++) {
if(cnt >= 16 + (16 * i)) {
driver_status(i, 0);
} else {
driver_status(i, 1);
}
}
cnt++;
}
void driver_status(uint8_t i, uint8_t status) {
switch(i) {
case 0:
status ? (DRV1_ON) : (DRV1_OFF);
break;
case 1:
...
}
}
Do tego jest sterowanie przez BT z wykorzystaniem biblioteki mkuart.c.
Przy OCR2:
>= 47 (~425Hz i mniej) wszystko działa poprawnie
= 46 (~435Hz), biblioteka uarta gubi znaki, przez co polecenia nie są rozpoznawane
<= 45 (~444Hz) nie dostaję już odpowiedzi zwrotnej z uart
Dlaczego tak się dzieje?