PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Servoansteuern in Bascom-Basic



Chriss123
17.03.2007, 15:46
hi,
-ich bin mir unsicher wie ich meine servos ansteuern muß!
deswegen wollt ich zur vorsicht euch fragen!!!
-und noch ne frage: wie kann ich per resettaster nen mechanismus auslösen, dass das programm erst später läuft??

Jon
17.03.2007, 15:50
-ich bin mir unsicher wie ich meine servos ansteuern muß!
Schau mal bei der BASCOM-Hilfe unter "Config Servo" Da wird alles erklärt.


-und noch ne frage: wie kann ich per resettaster nen mechanismus auslösen, dass das programm erst später läuft??
Weiß ich nicht.

jon

Chriss123
17.03.2007, 16:04
danke Jon.
wenn jemand anderes noch ne idee hat bitte sagen!!!

Chriss123
17.03.2007, 16:19
ich hab da noch was für andere die kurz reinschaun:
Die einfachste Art, einen Servo mit Bascom anzusteuern, ist folgender Befehl:

Config Servos = 2 , Servo1 = Portb.0 , Servo2 = Portb.1 , Reload = 10

Config Portb = Output

Enable Interrupts

Servo(1) = 100
Servo(2) = 100
waitms 1000

Wobei 100 die Mitte ist. 50 ist der linke bzw. rechte Anschlag und 150 der entsprechend andere.

Jon
17.03.2007, 16:23
Wobei die Werte vom Servo abhängig sind.
Bei mir ist die Mitte z.B. "12", "0" links und "24" rechts.

Zu deiner anderen Frage:
Wie wäre es, wenn du am Anfang des Programms eine Pause einfügst?

jon

tippo
17.03.2007, 16:31
@Jon, Wie hast du die Werte für deinen Servo rausgefunden ? aus einem Datenblatt ? Ich habe nämlich einen alten Modellservo an die RNControl angeschlossen und denke dass die werte aus dem Beispielprogramm bei mir auch nicht 100%ig passen.

mfG
Tippo

Chriss123
17.03.2007, 16:32
das meine ich so. dass ich auf einen resettaster drücke,dann sich mein roboter ca. 5 sekunden nicht bewegt und dann beginnt er sich zu bewegen(er fährt zB einen kreis)

Jon
17.03.2007, 16:33
Ausprobiert. :)
Ich verwende diesem Miniatur-Servo von Conrad, der 4,95€ oder so kostet.

jon

tippo
17.03.2007, 16:44
@Chriss123
Gib am anfang deines Programms die Zeile "waitms 5000"
Dann wartet er beim Einschalten doch 5 Sekunden ?!

@Jon, danke. Muss erst ein bisschen damit rumspielen.

mfG
Tippo

Jon
17.03.2007, 16:59
Warum "waitms 5000"?
Du kannst doch auch gleich "wait 5" schreiben. Geht schneller zu schreiben ;)

jon

tippo
17.03.2007, 17:03
Ja, wusst nur nicht ob dann der Syntax richtig ist und das waitms beispiel steht schon weiter oben im Thread ;)

minium :)
17.03.2007, 17:47
hi,

@jon, meinst du diesen Servo Art.Nr.: 227726 - 62 oder diesen 230500 - 62 ?
(Sonst ist das vielleicht auch der den ich benutze)


Viele Grüße

Jon
17.03.2007, 18:45
Ich habe diesen (http://www.conrad.de/goto.php?artikel=230500). Ich habe aber auch festgestellt, dass die Werte bei jedem Servo anders sind.

jon

Hanni
18.03.2007, 02:10
Das Problem der Servoansteuerung unter Bascom ist das folgende:

Der Servocode ist nicht besonders effektiv. So richtig funktioniert er erst ab 8 MHz. Zumal ändern sich die relevanten Werte je nach Programmstruktur und Taktfrequenz.

Meines Erachtens nach ist es das beste die komplette Servoansteuerung auf einen extra Mikrocontroller mit optimiertem Code zu verlagern.

Grüße,
Hanni

Dirk
18.03.2007, 10:44
Meines Erachtens nach ist es das beste die komplette Servoansteuerung auf einen extra Mikrocontroller mit optimiertem Code zu verlagern.

Sehe ich auch so.
Als gutes Beispiel gibt es ja das RNSI2C Projekt von PicNick, das eine Ansteuerung von 10 Servos über I2C mit einem 2313 realisiert.

Gruß Dirk

Chriss123
18.03.2007, 10:47

Chriss123
18.03.2007, 17:18
noch ne frage: wie muss ich die infrarotsensoren,damit ich sie sehe(damit mein roboter sie erkennt und er dann auswichen kan)?????

Jon
18.03.2007, 17:21
Hä?
Kannst du das nochmal schreiben. Den Satz verstehe ich nicht.
was willst du mit den IR-Sensoren machen?

jon

Chriss123
18.03.2007, 17:32
ich will ein hinderniss erkennen! ich will das mein roboter eine beliebige strecke fährt und wenn er ein hindernis sieht, genau auf das hindernis drauf los fährt


ich brauch das für sumo bei der RobotChallenge in wien

Jon
18.03.2007, 18:04
Den Sensor ließt du so aus:

$regfile = "m32def.dat"
$crystal = 1000000
$baud = 1200

Dim Result As Word
Dim Channel As Byte

Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc

Do
Result = Getadc(0)
Print " Count: " ; Result ;
Wait 1
Loop

End

jon

Chriss123
20.03.2007, 19:25
meine sensoren kennen nur 1 und 0

Jon
21.03.2007, 13:30
Achso. Dann musst du das so machen:

$regfile = "m32def.dat"
$crystal = 1000000
$baud = 1200

Config Pina.0 = Input
Porta.0=1

Do
If Pina.0 = 0 then print "Gegenstand"
If Pina.0 = 1 then print "FREI!!"
Loop

End

Sollte so stimmen.

jon

jeffrey
21.03.2007, 15:24
Hallo,
wo gibt es denn das RNSI2C? Hab es im Wiki nicht gefunden.
MfG jeffrey

coCo
21.03.2007, 15:32
Such mal hier im Forum, es gibt ein Topic dazu.

MfG

Chriss123
21.03.2007, 15:34
Ich hab noch ein problem, jedes mal wenn ich "Porta,c,d" schreib, dann wird das Wort nicht färbig. Wenn ich aber "Portb" schreib dann wird das Wort färbig .
Portb -ist braun
Porta -nicht braun
Portc -nicht braun
Portd -nicht braun

Jon
21.03.2007, 16:47
Gibt es denn einen Portb an deinem µC? Weiß ich nicht.

jon

E-Fan
21.03.2007, 16:54
...Meines Erachtens nach ist es das beste die komplette Servoansteuerung auf einen extra Mikrocontroller mit optimiertem Code zu verlagern...

Wozu?
Wenn man sich beschränkt oder ausreichend HardwarePWM-Kanäle zur Verfügung hat kann man problemlos auf letztere zurückgreifen. Mit mit einem 16 Bit-Timer lässt sich die gesamte Periode so fein auflösen das die Mechanik des Servos ungenauer als das Steuersignal ist.
Der Programmablauf wird dann auch nicht mehr unterbrochen.

Chriss123
21.03.2007, 17:25
Natürlich gibs ein Portb. das is auf meinen atmega drauf und das hab ich schon in vielen Büchern gelesen, dass es sowas gibt.
Welche Port.... hast du.
Als kleiner Beweis ist das Servoansteuerungsprogramm was ich auf der seite 1 hingeschrieben hab

Jon
21.03.2007, 19:24
Was für einen µC verwendest du mit welchem Quarz?
Ich werde es aber mal bei mir ausprobieren. Geht denn das Programm, wenn du Portb verwendets?

jon

Chriss123
22.03.2007, 14:17
ob mein Programm geht weiß ich noch nicht weil ich mit dem Controllerboard noch ein paar Probleme habe.
Quarz: 16MHz
Microcontroller: ATmega16

was genau heißt baud??
gibt es verschiedene methoden einen servo anzusteuern??

Jon
23.03.2007, 14:30
ob mein Programm geht weiß ich noch nicht weil ich mit dem Controllerboard noch ein paar Probleme habe.
Dann poste doch mal das Programm hier. Dann kann ich es testen
quote="Chriss123"]was genau heißt baud??
Baud sagt nur etwas über die Geschwindigkeit aus, in der die Daten über RS232 gesendet werden.


gibt es verschiedene methoden einen servo anzusteuern??
Eigentlich nicht.

jon

minium :)
15.04.2007, 18:46
Hi,

@Hanni & Dirk, könnt ihr mal dieses Programm hier posten (für Pins)?

Viele Grüße

Hanni
15.04.2007, 21:58
...Meines Erachtens nach ist es das beste die komplette Servoansteuerung auf einen extra Mikrocontroller mit optimiertem Code zu verlagern...

Wozu?
Wenn man sich beschränkt oder ausreichend HardwarePWM-Kanäle zur Verfügung hat kann man problemlos auf letztere zurückgreifen. Mit mit einem 16 Bit-Timer lässt sich die gesamte Periode so fein auflösen das die Mechanik des Servos ungenauer als das Steuersignal ist.
Der Programmablauf wird dann auch nicht mehr unterbrochen.

Hallo,

also im generell ist dieses natürlich eine Möglichkeit.
Aber:
bin ich mit einem extra Servocontroller schlicht und einfach flexibler. Anstecken und gut ist.
geht es gerade bei Servos um ein zum Teil doch recht kritisches Timing.
geht es wenn ich mich recht entsinne hier nicht um 3 oder 4 Servos sondern um eine Möglichkeit quasi beliebig viele Servos mit einem µC anzusteuern und das mit einer möglichst hohen Genauigkeit (halt in etwa soviele wie der µC Beine hat).
Durchsuche mal das Forum, ich hab hier schonmal was über Servos geschrieben .... unter anderem ging es am Ende auch um Interuptlast und Auflösung

Im übrigen bin ich gerne Bereit meine Fähigkeiten zur Entwicklung einer entsprechenden Software zur Verfügung zu stellen. Allerdings sollten dazu vorher ein paar kleine Details geklärt sein etc.

Ich rede hier z.B. von einem sinnvollen Protokoll den Schnittstellen und gewissen gewünschten Features.

Ach ja, eins noch mit Basic wird der Controller eher wenig zu tun haben ... schon alleine deshalb weil ich mit Bascom eher auf Kriegsfuß stehe.

@minimum: Einfach mal im Forum suchen, hier gibt es recht viele Treads zum Thema Servo ...

Grüße,
Hanni

plusminus
15.04.2007, 23:14
ob mein Programm geht weiß ich noch nicht weil ich mit dem Controllerboard noch ein paar Probleme habe.
Dann poste doch mal das Programm hier. Dann kann ich es testen
quote="Chriss123"]was genau heißt baud??
Baud sagt nur etwas über die Geschwindigkeit aus, in der die Daten über RS232 gesendet werden.


gibt es verschiedene methoden einen servo anzusteuern??
Eigentlich nicht.

jon

BAUD = Geschwindigkeit der Datenkommunikation in BPS Bytes pro Sekunde

Servo-Ansteureungsmöglichkeiten:

1. PWM (=Pseudo-Analog-Spannung)
2. Analog-Spannung (sollte doch auch gehen, die dinger heißen wahrscheinlich nicht ganz umsonst Analog-Servos, oder :?: )