Hallo zusammen,
ich hab mal wieder ne Frage.
Ich möchte einen Servomotor über ein Poti an meinem Atmega88 steuern.
Momentan habe ich ein Programm geschrieben, das über den Ausgang OC1A
den Servomotor vom Linksanschlag zum Rechtsanschlag und zurück fahren
lässt. Der Servo wird mit einem 50Hz Signal angesteuert. Jetzt wollte
ich den Ausgang OC1A so lassen und den OC1B so programmieren, dass er
ich den Motor über ein Poti steuern kann.
Nur leider bewegt sich der Servo nicht, wenn ich ihn an den OC1B Ausgang
anschließe. Ich weis aber nicht warum.
Mein Atmega88 läuft mit 8MHz und der Timer1 wird mit 8fach Prescaler
betrieben.
Der Wert ADC_C0 ist eine 16Bit Variable in der der Wert vom ADC
gespeichert wird. Der ADC teil funktioniert, und der Wert wird mir auch
auf einem LCD ausgegeben.
Hier mein Code:
1 | int main(){
|
2 |
|
3 | DDRB |= 1<<PINB1 | 1<<PINB2;
|
4 |
|
5 | TCCR1A |= 1<<WGM11 | 1<<COM1A1 | 1<<COM1A0 | 1<<COM1B0 | 1<<COM1B1;
|
6 | TCCR1B |= 1<<WGM12 | 1<<WGM13 | 1<<CS11;
|
7 | ICR1 = 19999;
|
8 |
|
9 |
|
10 | while(1){
|
11 | OCR1A = ICR1 - 1000;
|
12 | OCR1B = ICR1 - (850 + (ADC_C0 * 1,26));
|
13 | _delay_ms(500);
|
14 | OCR1A = ICR1 -2000;
|
15 | OCR1B = ICR1 - (850 + (ADC_C0 * 1,26));
|
16 | _delay_ms(500);
|
17 | }
|
18 |
|
19 | }
|