Forum: Mikrocontroller und Digitale Elektronik Servo Ansteuerung mit Bascom


von Franz (Gast)


Lesenswert?

Guten Tag.

Ich habe folgendes Problem:

Ich möchte einen Servomotor(SG90) mit einem Atmega 8 ansteuern.
Der Atmega 8 bekommt von mir 8 Eingänge wo ich die Einzelnen Winkel 
einstellen möchte.
Mein Code:



$regfile = "m8def.dat"
$crystal = 8000000
Config Servos = 1 , Servo1 = Portc.5 , Reload = 9

Config Portc.5 = Output
Config Portc.4 = Input
Config Portc.3 = Input
Config Portc.2 = Input
Config Portc.1 = Input
Config Portc.0 = Input
Config Portb.5 = Input
Config Portb.4 = Input
Config Portd.0 = Input

Enable Interrupts

'Pullups
Pinc.4 = 0
Portc.4 = 0
Portc.3 = 0
Portc.2 = 0
Portc.1 = 0
Portc.0 = 0
Portb.5 = 0
Portb.4 = 0
Portd.0 = 0

Dim Pos As Word

Do
   If Pinc.3 = 1 Then Pos = 65
   If Pinc.2 = 1 Then Pos = 80
   If Pinc.1 = 1 Then Pos = 95
   If Pinc.0 = 1 Then Pos = 110
   If Pinc.5 = 1 Then Pos = 125
   If Pinc.4 = 1 Then Pos = 140


   Servo(1) = Pos
   Waitms 100


Loop



Die Eingänge werden nur einzeln auf high gesetzt, niemals 2 zusammen.

Das Problem, der Servo macht absolut was er will.

Wo liegt mein Denkfehler?

von Thorsten O. (Firma: mechapro GmbH) (ostermann) Benutzerseite


Lesenswert?

Ich nehme mal an, du meinst einen Modellbauservo, wenn du "Servo" 
sagst?! Die werden meines Wissens nach per PWM angesteuert. Code für PWM 
sehe ich aber nicht, du setzt nur einen Pin?! Oder was verbirgt sich 
hinter der (nicht geposteten) Funktion "Servo(1) = Pos"?

Mit freundlichen Grüßen
Thorsten Ostermann

von Cyblord -. (cyblord)


Lesenswert?

Das ist BASCOM, da ist doch alles schon drin für die Servoansteuerung. 
Allerdings scheint der TE sogar dafür noch zu doof.

von Harald W. (wilhelms)


Lesenswert?

Thorsten Ostermann schrieb:

> Code für PWM sehe ich aber nicht, du setzt nur einen Pin?!

Irgendwie habe ich in Erinnerung, das Bascom fertige Befehle zur
(Modell-)servoansteuerung enthält. Wie da die genaue Syntax lautet,
weiss ich allerdings nicht.
Gruss
Harald

von spess53 (Gast)


Lesenswert?

Hi

>Config Servos = 1 , Servo1 = Portc.5 , Reload = 9
                              ^^^^^^^
>If Pinc.5 = 1 Then Pos = 125
    ^^^^^^
Erzähle mal, wie das zusammenpasst.

MfG Spess

von Immitschberater (Gast)


Lesenswert?

Guck Dir das mal an, das hilft:
http://halvar.at/elektronik/servo_mit_bascom_avr/

Verdacht: Deine Eingänge lesen alle eine "1" ein und die Positionen 
werden
in rasender Folge angefahren, so daß der arme Serveo nicht weiß, wie ihm
geschieht...

von Immitschberater (Gast)


Lesenswert?

Cyblord nölte:
>Das ist BASCOM, da ist doch alles schon drin für die Servoansteuerung.
>Allerdings scheint der TE sogar dafür noch zu doof.

Richtig muss es heißen:

Das ist CYBLORD, der ist immer schon drin im Forum.
Allerdings scheint der sogar noch so doof, selbst dann noch die Schnauze 
aufzureißen, wenn er das Problem nicht im Mindesten überblickt.

von Dieter S. (dolivo)


Lesenswert?

Hallo,
ich nehme auch an, dass Du einen RC-Servo meinst. Dann ist in Deinem 
Programm sicher die Taktfrequenz zu hoch. Versuche mal, den 
config-Befehl um mode zu erweitern.
Sicher bin ich nicht, weil ich bisher die PWM-Ausgänge für Servos 
benutzt habe. Da hat man mehr Experimentiermöglichkeiten, ist aber auf 
zwei Ausgänge festgelegt.
dolivo

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Franz schrieb:
> If Pinc.3 = 1 Then Pos = 65
>    If Pinc.2 = 1 Then Pos = 80
>    If Pinc.1 = 1 Then Pos = 95
>    If Pinc.0 = 1 Then Pos = 110
>    If Pinc.5 = 1 Then Pos = 125
>    If Pinc.4 = 1 Then Pos = 140
>
>    Servo(1) = Pos
>    Waitms 100

 Mal abgesehen von diesem Fehler:

spess53 schrieb:
>>If Pinc.5 = 1 Then Pos = 125
>     ^^^^^^
> Erzähle mal, wie das zusammenpasst.

 Ich glaube BASCOM hat auch MODE Befehl, also:
1
  Config Servos = 1 , Mode = Servo , Servo1 = Portc.5
 sollte hinhauen.

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.