Hallo,
Ich habe ein Programm zur Kontrolle eines Servos an einem Atmega8
geschrieben (siehe Anhang).
Die Kontrolle des Servos funktioniert, die UART-Verbindung geht auch,
aber ich kann die Stellung des Servos nicht über den UART (oder
sonstwie) verändern.
Sobald ich dem Atmel ein Zeichen sende (0,1 oder 2) zuckt der Servo
zwar, aber sonst passiert nichts. Wenn ich dem Servo wiederholt z.B. '0'
sende, bewegt er sich zitternd um ein paar Grad nach Links, aber sobald
ich aufhöre die Zeichen zu senden geht er wieder in die Mittelstellung.
Bei meinen zahlreichen Versuchen den Fehler zu finden, bin ich außerdem
auf folgendes gekommen:
Wenn ich über den UART nicht die Position des Servos verändern möchte,
sondern lediglich die LEDs an PORTC ein- oder ausschalten will, so
funktioniert das nur, wenn der Code für den Servo auskommentiert ist.
1 | DDRC=255; //PORTC als Ausgang, PC0-PC3 mit PullUp (Startzustand)
|
2 | PORTC=15;
|
3 |
|
4 | while(1)
|
5 | {
|
6 | if(x==0) PORTC=0; else
|
7 | if(x==1) PORTC=255;
|
8 | }
|
Wenn der Servo aktiviert ist tritt das gleiche Phänomen wie zuvor auf
(Die LEDs flimmern nur kurz auf und werden dann wieder in den
Startzustand versetzt).
Das Problem tritt auch dann auf, wenn der Servo nicht angeschlossen ist,
also bin ich mir sicher, dass es nicht an zu hohem Stromverbrauch des
Servos liegt.
lg
Niko