mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Servoansteuerung mit atmega32


Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte mit einem atmega32 einen Servo ansteuern. Ich habe dazu einen 
Code in bascom basic geschrieben.

Ich habe den atmega32 schon ungefähr 100 mal beschrieben.


Mein Servo dreht sich dummerweise höchstens 3 mal und wird dabei 
jedesmal langsamer.

Habt ihr eine Idee, woran das liegen kann? Kann es sein, dass der 
Controller bereits "Altersschwäche" hat?

Danke,
Tim


                                                                      $regfile 
= "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

Config Pinb.1 = Output
Enable Interrupts
Config Servos = 1 , Servo1 = Portb.1 , Reload = 10

Dim Zahler As Integer
   Zahler = 10
    Print "SMh eingeschaltet"
    Do
Servo(1) = 50
 Wait 2
  Servo(1) = 150
   Wait 2
   Zahler = Zahler - 1
Loop Until Zahler = 0

End

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mh, keine Idee oder wenigstens einen ANsatz?

Tim

Autor: Michael L. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wird der Akku langsam leer?

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich habe den Mikrocontroller und den Servo an einem Netzteil.
Also, suche ich weiter nach Ideen für diese Problemlösung...

Tim

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wait 2

Welche Zeit beschreibt "2"? Sekunden? Oder eher kleinere Einheiten?

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, genau 2 Sekunden.

Tim

Autor: Tim (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mh, gibt es weitere Ideen?
Tim

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>gibt es weitere Ideen?

Löse dich von den Bascom-Blackboxen und programmiere das von Hand!
Es sollte auch in Bascom möglich sein, den Timer manuell einzustellen.
Dazu ist das Datenblatt und etwas Hirnschmalz notwendig.
Den Timer kann man im Überlaufmodus betreiben, so dass er bei jedem 
Überlauf von 65535 nach 0 ein Interrupt auslöst.
Dann kann man ihn noch so konfigurieren, dass er bei diesem Überlauf 
einen Pin auf 1 setzt und bei Erreichen einer Grenze (OnCompare) diesen 
Pin wieder auf 0 zurücksetzt. Das funktioniert dann ganz automatisch.
Zum Einstellen der Servo-Position braucht man dann nur noch die 
OC-Grenze zwischen 1 und 2ms variieren.
Wie das in C (und vielleicht noch in Assembler) geht, weiß ich - wie man 
das in Bascom macht, nicht...

>Kann es sein, dass der Controller bereits "Altersschwäche" hat?

Nö.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.