Hallo!
Ich bin zu Beginn auch an den Servos verzweifelt!
Der Timer 1 (zu dem auch das Register OCR1A) gehört, ist an den Motortreiber angeschlossen um die Geschwindikeit eines Motors zu steuern. Bis jetzt habe ich es nicht probiert beides gleichzeitig laufen zu lassen. Vorausgesetzt du willst deine Getriebemotoren noch über den Motortreiber ansteuern, musst du einen anderen Timer mit PWM-Funktionalität benutzen. Auf dem Mega32 wäre das dann der Timer2.
Dieses Programm habe ich damals benutzt um meinen RS-2 über Timer 1 anzusteuern:
Code:
#include <avr/io.h>
#include <util/delay.h>
int main(void){
// PWM init
DDRB |= (1<<PB1);
TCCR1A = (1<<WGM11) | (1<<COM1A1); // Non-Inverting
TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS11); // Fast PWM, Prescaler = 8
ICR1 = 10000;
while(1){
OCR1A = 4500; // left
_delay_ms(1000);
OCR1A = 3600; // SE
_delay_ms(1000);
OCR1A = 2750; // middle
_delay_ms(1000);
OCR1A = 1900; // SW
_delay_ms(1000);
OCR1A = 1050; // right
_delay_ms(1000);
}
}
Den müsstest du eben für Timer2 anpassen!
MfG
Torrentula
P.S.: Die RS-2 Servos sind komisch, deshalb habe ich die mit den Rechenbeispielen auch nie in die Stellung bekommen die ich wollte also sind die Werte für OCR1A experimentell ermittelt worden!
Lesezeichen