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?
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
Das ist BASCOM, da ist doch alles schon drin für die Servoansteuerung. Allerdings scheint der TE sogar dafür noch zu doof.
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
Hi >Config Servos = 1 , Servo1 = Portc.5 , Reload = 9 ^^^^^^^ >If Pinc.5 = 1 Then Pos = 125 ^^^^^^ Erzähle mal, wie das zusammenpasst. MfG Spess
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...
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.