Zrobiłem sobie programik pod Atmege8 wychylajacy serwo w jedna strone. Wiem, ze PWM można zrobić w pełni sprzętowo, ale jeszcze do tego nie doszedłem.
Część kodu pochodzi z tutoriala dotyczącego timerów. I teraz dochodzimy do AVRStudio. Gdy wlaczam debugera dlaczego muszę ustawić ręcznie co poniektóre rejestry, czy nie może sobie ich ustawić tak jak jest to w programie :/. Poza tym jak mam sprawdzić czy rzeczywiście wypełnienie trwa 1 ms, a 19 ms przerwy skoro na autostepie to leci tak wolno, że nie mam ochoty czekać 5 minut.
#include <avr/io.h>
#include <avr/interrupt.h>
int b=0;
int main (void)
{
DDRB |= (1 << 0); // Set LED as output
TCCR1B |= (1 << WGM12); // Configure timer 1 for CTC mode
TIMSK |= (1 << OCIE1A); // Enable CTC interrupt
sei(); // Enable global interrupts
OCR1A = 1000;
TCCR1B |= (1 << CS11); // Start timer no preskaler
PORTB |= (1 << 0);
for (;;)
{
}
}
ISR(TIMER1_COMPA_vect)
{
b++;
if (b>=20) {
b=0;
}
if ((b>=1) && (b<20)) {
PORTB |= (0 << 0);
}
if (b<1) {
PORTB |= (1 << 0);
}
} Część kodu pochodzi z tutoriala dotyczącego timerów. I teraz dochodzimy do AVRStudio. Gdy wlaczam debugera dlaczego muszę ustawić ręcznie co poniektóre rejestry, czy nie może sobie ich ustawić tak jak jest to w programie :/. Poza tym jak mam sprawdzić czy rzeczywiście wypełnienie trwa 1 ms, a 19 ms przerwy skoro na autostepie to leci tak wolno, że nie mam ochoty czekać 5 minut.
