Servo Ansteuerung mit Bascom

Gast #3834177
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?
(Firma: mechapro GmbH) Persönliche Seite
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
Gast
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
(Firma: Vescomp)
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.