Forum: Mikrocontroller und Digitale Elektronik Servos ansteurn mit Atmega8


von Maquis (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

bin noch Anfänger im Gebiet der Servo-Steuerung und hab mir deshalb ein 
Testprogramm aus dem Web gesucht und bin auch auf eines gestoßen.

Nun hab ich das Problem das obwohl der Atmega8 die Mittelstelle 
ansteuern sollte, er den Servo in eine Seite dreht bis er ansteht und 
weiter...

Weiß vlt. jemand wo der Fehler im Code liegen könnte, wäre sehr dankbar.

grüße

(Datei im Anhang)

von Micha (Gast)


Lesenswert?

Bist du sicher das der Controller mit 8 Mhz läuft ?

von Björn R. (sushi)


Lesenswert?

Richtig, der Controller muss mit 8Mhz laufen. Also im Makefile die 8Mhz 
angeben, die Fuses richtig setzen, den richtigen Quarz verwenden. Ich 
weiß jetzt gerade nicht, ob der Mega8 sowas hat, der 2313 hats aber 
z.B.: Das Fuse CKDIV8 musst du deaktivieren...

LG, Björn

von Sinusgeek (Gast)


Lesenswert?

> Das Fuse CKDIV8 musst du deaktivieren...

Hat er nicht. Und die AVRs, die's haben, lassen sich auch per Software 
auf jeden erlaubten Systemtaktvorteiler einstellen. Das Verändern der 
CKDIV8-Fuse ist daher unnötig.

von Maquis (Gast)


Lesenswert?

CKDIV8 hat er nicht.
Und ja natürlich, der Atmega8 läuft mit 3686400Hz...
Werde mal versuchen das anzupassen.

Weiters verwende ich den "Int. RC Osc. 8 MHz; Start-up time: 6 CK + 64 
ms"
Sollte ich da einen anderen verwenden bzw. ist da eine externer Quarz 
notwendig ?

thx

von Maquis (Gast)


Lesenswert?

Was ich noch fragen wollte, wie gut - schlecht funktioniert das auf 
Software Ebene ?

Sprich:
1
  _delay_ms(20); 
2
3
  PORTB |= (1 << 0);    
4
5
  _delay_ms(2); 
6
7
  PORTB &= ~(1 << 0);   
8
9
  _delay_ms(20);
usw.

von P. S. (Gast)


Lesenswert?

Schlecht bis gar nicht.

Auch mit Interrupts darfst du dich ueber ein Zittern nicht wundern, wenn 
du den internen Oszillator verwendest.

von ajax (Gast)


Lesenswert?

>Auch mit Interrupts darfst du dich ueber ein Zittern nicht wundern, wenn
>du den internen Oszillator verwendest.

Das ist wohl eher eine theoretische als praktische Erkenntnis. Der 
interne Oszillator läuft ziemlich stabil, da zittert nix.

von Maquis (Gast)


Angehängte Dateien:

Lesenswert?

So...

Habe jetzt nochmal einen anderen Code getestet, welcher mich etwas mehr 
angesprochen hat...
Jedoch, gleiches Problem.
Kann das vlt. irgendwie mit dem Board mit dem ich arbeite zusammen 
hängen? (Verwende das STK500)
Und wie leicht kann ein Servo kaputt gehen ?

grüße

von Hannes L. (hannes)


Lesenswert?

Peter Stegemann wrote:
> Schlecht bis gar nicht.
>
> Auch mit Interrupts darfst du dich ueber ein Zittern nicht wundern, wenn
> du den internen Oszillator verwendest.

Das wage ich zu bezweifeln! Dies hier:
http://www.hanneslux.de/avr/mobau/7ksend/7ksend02.html
läuft mit dem internen RC-Oszillator des Mega48 und da zittert kein 
Servo.

Ist allerdings nicht mit Warteschleifen und auch nicht in einer 
Hochsprache programmiert.

...

von Maquis (Gast)


Lesenswert?

Wenn ich das richtig verstehe reicht es wenn man diese Zeile "#define 
F_CPU 8000000UL" angibt um den Takt einzustellen, man also nichts in der 
Makefile ändern muss.

Und warum kann ich im AVR Studio eigentlich nur 3.6MHz einstellen, der 
Atmega8 läuft ja immerhin mit 8-16...

Hab jetzt versucht das Programm mit 4Mhz oder mit 8Mhz laufen zu lassen, 
hab eigentlich alles so angepasst das der Timer funktionieren sollte, 
aber er dreht noch immer in nur eine Richtung. Habe auch immer den 
passenden Int. Oszi eingestellt.

Hab es jetzt auch auf Softwareebene (C) getestet, mit dem selbern 
Ergebnis.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.