Hallo
In Anlehnung an den Servo-Code aus dem RN-Wissen steuert mein 8MHz-ATMega32 meine bis zu 5 Servos mit einem Timer im CTC-Mode mit ca. 100kHz:
Code:
...
DDRA |= 16;
DDRC |= 3;
TCCR0 = (0 << WGM00) | (1 << WGM01); // CTC-Mode
TCCR0 |= (0 << COM00) | (0 << COM01); // ohne OCR-Pin
TCCR0 |= (0 << CS02) | (1 << CS01) | (0 << CS00); // prescaler /8
TIMSK = (1 << OCIE0); // Interrupt ein
OCR0 = 9; // 100kHz?
sei();
}
ISR(TIMER0_COMP_vect)
{
static uint16_t count=0;
if(count>x) PORTA &= ~16; else PORTA |= 16;
if(count>y) PORTC &= ~1; else PORTC |= 1;
if(count>z) PORTC &= ~2; else PORTC |= 2;
if(count<1000)count++; else count=0;
};
Warum meine Servos bei Werten von ca. 100 in der Mitte stehen, weiß ich nicht, ist aber nicht wirklich störend.
Wichtig ist das Verhältnis von positivem Signal zur "Pause".
Entscheidend ist die Pulslänge. Ja schneller die Wiederholung, umso "agressiver" bewegen sich die Servos.
Gruß
mic
Lesezeichen