Servoansteuerung mit atmega32

Gast #843375
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
Gast #844991
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren