Forum: Mikrocontroller und Digitale Elektronik Servoansteuerung mit atmega32


von Tim (Gast)


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

von Tim (Gast)


Lesenswert?

Mh, keine Idee oder wenigstens einen ANsatz?

Tim

von Michael L. (Gast)


Lesenswert?

Wird der Akku langsam leer?

von Tim (Gast)


Lesenswert?

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

Tim

von STK500-Besitzer (Gast)


Lesenswert?

>Wait 2

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

von Tim (Gast)


Lesenswert?

Nein, genau 2 Sekunden.

Tim

von Tim (Gast)


Lesenswert?

Mh, gibt es weitere Ideen?
Tim

von STK500-Besitzer (Gast)


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ö.

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.