PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RNFRA+Sensor+Schrittmotor



DarkSoldier
18.06.2011, 22:43
Hallo,
Ich bin noch relativ neu im Thema Robotik usw...
Ich habe mir vor kurzem das RNFRA Board 2 Schrittmotoren und 4 Mikro schalter gekauft. Nun habe ich eine Frage:
Ich würde gerne ein Programm schreiben bei dem der Roboter fährt und wenn er gegen irgendetwas fährt anhält, 100 Schritte zurücksetzt und dann eine Drehung macht und dann weiterfährt. Ist das möglich? Wenn ja weiß ich nicht wie man in BasCom das so programmiert. Hat jemand von euch schon ein solches Programm geschrieben? Wäre net wenn mir jemand weiterhelfen könnte.
Danke im Vorraus
MfG
DarkSoldier :p

TobiKa
18.06.2011, 23:30
Ist das möglich?
Ja.


Wenn ja weiß ich nicht wie man in BasCom das so programmiert.
Dann lern Bascom von Anfang an!


Wäre net wenn mir jemand weiterhelfen könnte.
1. Tipp, Bascom lernen.
2. http://www.rn-wissen.de/index.php/Kategorie:Quellcode_Bascom
3. Mal die mitgelieferte CD anschauen

RoboHolIC
19.06.2011, 01:00
Hallo DarkSoldier.

Willkommen im Forum! Du hast dir ein vielseitiges Hobby ausgesucht; ich mache dir Mut, es von der Pike auf zu erlernen!
Sicherlich hat schon einer ein solches Programm geschrieben, vermutlich haben das sogar schon viele hier getan. Geholfen sein wird dir damit aber nur scheinbar. Zu Anfang fremden Source Code übernehmen zu wollen, halte ich für schwer und auch nicht für einen sehr glücklichen Weg.
Zum Abgucken von Syntax mögen Beispielprogramme hilfreich sein, aber du wirst mehr von deinem Hobby haben, wenn du das Ziel -einen Roboter- etwas nach hinten verschiebst und mit den elementarsten Programmschritten anfängst: Eine LED ein-/ausschalten/blinken lassen, einen Taster abfragen und eine erkennbare Reaktion darauf programmieren etc., etc. Das klingt sooo banal - und ist es letztlich auch! Es wird dir aber helfen, in der Materie Fuß zu fassen und Sicherheit zu gewinnen. Parallel dazu empfiehlt sich das Schmökern im AVR-Datenblatt und in der BASCOM-Hilfe. Ersteres kann nicht schaden und Letztere wird stets als sehr hilfeich beschrieben.
Nun wünsche ich dir viel Spass beim Finden deines eigenen Weges. Und je konkretere Fragen du hier stellen kannst, desto bessere Antworten wird man dir bereitwillig geben.

Mein Weg führte zu PIC16-Controllern und Assembler auf eigenen Boards, sodaß ich dir beim besten Willen nicht mit Sourcen dienen kann.

Gruß
Christian.

021aet04
19.06.2011, 11:08
Wie schon geschrieben wurde solltest du klein anfangen, da sonst leicht passieren kann, das du dir sagst dass du das nicht schaffst und du das Hobby wieder aufgibst.

Ich habe Elektronik (mit etwas programmieren) in der Schule gelernt. Wir haben auch klein angefangen. Wir haben zwar fertige Programme abgeschrieben, haben diese aber bis ins kleinste Detail untersucht, was welcher Befehl/welche Zeile macht und warum. Das erste Programm war eine Led blinken zu lassen (mit einfachen wait Befehl). Die Programme wurden immer schwieriger (Interrupt, I2C,...).

Davor haben wir aber die Grundlagen zu µC gelernt, wie z.B. Aufbau der einzelnen Ausgänge, Aufbau der Ports (mit LSB, MSB,...), Entstören des µC,.....

Du solltest die Ratschläge befolgen, damit du nicht verzweifelst (das wirst du trotzdem noch oft erleben, auch wenn du es schon etwas kannst). Nicht entmutigen lassen und viel Spass mit dem Hobby.

Ich programmiere in C, deswegen kann ich dir leider nicht helfen.

MfG Hannes

DarkSoldier
19.06.2011, 11:15
Ich habe Elektronik (mit etwas programmieren) in der Schule gelernt. Wir haben auch klein angefangen. Wir haben zwar fertige Programme abgeschrieben, haben diese aber bis ins kleinste Detail untersucht, was welcher Befehl/welche Zeile macht und warum. Das erste Programm war eine Led blinken zu lassen (mit einfachen wait Befehl). Die Programme wurden immer schwieriger (Interrupt, I2C,...).

Davor haben wir aber die Grundlagen zu µC gelernt, wie z.B. Aufbau der einzelnen Ausgänge, Aufbau der Ports (mit LSB, MSB,...), Entstören des µC,.....


Ich bin 8. Klasse Gymnasium und da haben wir soiwas leider noch nicht im Unterricht besprochen :D
Wäre nett wenn andere auch noch "ihren Senf dazu geben" würden :)

021aet04
19.06.2011, 11:19
Als kleinen Hinweiß. Ich habe die Fachschule für Elektrotechnik gemacht (an der HTL Kapfenberg http://www.htl-kapfenberg.ac.at/ )

MfG Hannes

DarkSoldier
19.06.2011, 11:59
Ich habe jetzt versucht das Schrittmotorentestprogramm (Nr.5) zu überspielen mit der kostenlosen Bascomtestversion aber in Zeile 49 und 50 kommt "Error 41 Variable can not be used with SET". Wer kann mir Weiterhelfen.
Die betreffenden Bascom Zeilen:
Config Pinc.5 = Output
Config Pinc.3 = Output
Danke nochmal im Vorraus
MfG
Dark Soldier

Richard
19.06.2011, 13:01
Hallo,
Ich bin noch relativ neu im Thema Robotik usw...
Ich habe mir vor kurzem das RNFRA Board 2 Schrittmotoren und 4 Mikro schalter gekauft. Nun habe ich eine Frage:
Ich würde gerne ein Programm schreiben bei dem der Roboter fährt und wenn er gegen irgendetwas fährt anhält, 100 Schritte zurücksetzt und dann eine Drehung macht und dann weiterfährt. Ist das möglich? Wenn ja weiß ich nicht wie man in BasCom das so programmiert. Hat jemand von euch schon ein solches Programm geschrieben? Wäre net wenn mir jemand weiterhelfen könnte.
Danke im Vorraus
MfG
DarkSoldier :p

Moin moin, Du solltest zuerst einmal aufschreiben was Du brauchst .
1.) Motor eins und 2 ein/aus/vor/zurück
2,) Taster abfragen
3.) Beides in kleinen Einzel Programmen zusammen Basteln und testen.
4.) Wenn das so weit klappt sie einzelnen Programm Teile zusammenfügen.

Auf der Board CD sind sicher einige brauchbare Beispiele aus denen man so etwas zusammen Kopieren kann.

Gruß Richard

DarkSoldier
19.06.2011, 13:18
@Richard
Die auf der Board CD enthaltenen Programme zu den Schrittmotoren sind laut der testversion von BasCom in Zeile 49/50 falsch. (siehe ein kleines stück weiter oben)
Im Handbuch stehen die wichtigsten Befehle zwar drinnen aber wenn man sie compilieren will kommen regelmäßig Fehlermeldungen.
Liegt das an der BasCom testversion oder an etwas anderem? achso die wichtigsten Befehle sind im Handbuch mit BasCom verfasst funktionieren aber trozdem nicht.
MfG
DarkSoldier

Richard
19.06.2011, 14:39
@Richard
Die auf der Board CD enthaltenen Programme zu den Schrittmotoren sind laut der testversion von BasCom in Zeile 49/50 falsch. (siehe ein kleines stück weiter oben)
Im Handbuch stehen die wichtigsten Befehle zwar drinnen aber wenn man sie compilieren will kommen regelmäßig Fehlermeldungen.
Liegt das an der BasCom testversion oder an etwas anderem? achso die wichtigsten Befehle sind im Handbuch mit BasCom verfasst funktionieren aber trozdem nicht.
MfG
DarkSoldier

Leider habe ich das Programm nicht hier, kann das also nicht nach vollziehen. Stelle das doch einmal zum Kopieren hier rein. Ich habe schon öfters kleine "Fehler" in Beispiel Dateien erlebt.

Ich habe eben
Config Pinc.5 = Output
Config Pinc.3 = Output

Ohne Fehlermeldung compiliren können, Hast du den Richtigen Prozessor Typ eingetragen?
Getestet mit Bascom 1.11.9.8....

Gruß Richard

DarkSoldier
19.06.2011, 15:33
ja hatte es in einem anderen thread gelesen nachdem ich die frage gepostet habe aner trotzdem danke :D
hatte vergessen dass $regfile "m32def.dat" einzugeben ;)
MfG
DarkSoldier

DarkSoldier
19.06.2011, 15:57
@Richard die Datein gibts im Netz zum download:http://www.shop.robotikhardware.de/shop/catalog/product_info.php?products_id=12
hätte dann noch eine Frage: Ich habe oben beschrieben wie ich meinen roboter programmieren will. Dazu habe ich jetzt ein Programm geschrieben nur, weiß ich nicht ob dass funktioniert wie ich mir das Vorstelle. Als ich es ausprobieren wollte, kam mal wieder eine Fehlermeldung. Deswegen würde ich jemanden der mit BasCom erfahrung hat bitten, dies zu kontrollieren und zu sagen was falsch ist ;). Das ist eins der ersten Programme die ich selber geschrieben habe, deswegen bitte ich euch nicht auf die "äußere Form " zu achten. ;)
Wäre nett wenn ihr mir weiter helfen könntet, mal wieder
MfG
Danke im Vorraus DarkSoldier






$regfile "m32def.dat"
Declare Sub Ledein
Declare Sub Ledaus
Const Writepowerport_adr = &H72
Const Readpowerport_adr = &H73
Dim I2cdaten As Byte
Dim I As Word
$crystal = 8000000
Config Scl = Portc.0
Config Sda = Portc.1
I2cinit
I2cstart
I2cwbyte &H74
I2cwbyte &B00000010
I2cstop
Config Pind.6 = Output
Portd.6 = 1

Config Pinc.5 = Output
Portc.5 = 0
Config Pind.6 = Output
Portd.6 = 1
Elseif
I2cstart
I2cwbyte Writepowerport_adr
I2cwbyte 15
I2cstop
Then
Config Pind.6 = Output
Portd.6 = 0
Config Pinc.4 = Output
Portc.4 = 0
Config Pinc.5 = Output
Portc.5 = 1
Config Pinc.3 = Output
Do
Portc.2 = 0
Waitms 5
Portc.2 = 1
Waitms 5
Loop Until I < 1
Config Pind.6 = Output
Portd.6 = 1

radbruch
19.06.2011, 16:36
Das ist eins der ersten Programme die ich selber geschrieben habe, deswegen bitte ich euch nicht auf die "äußere Form " zu achten.Du solltest gleich von Beginn an eine gewisse Ordnung in deine Programme bringen. Programmkopf mit Kompileranweisungen, Definitionen, Variablen, Funktionen, Configs und dann die Hauptschleife. Nicht nur wir können dann besser nachvollziehen, was das Programm bewirken soll. Da ich normalerweise in C programmiere kann ich als Beispiel nur ein Programm präsentieren, das ich noch auf meiner Festplatte gefunden habe:




$regfile = "M168Pdef.dat" 'es handelt sich um einen ATmega168P
$crystal = 3686400 'der eingebauter RC-Oszillator läuft mit 3,6864 Mhz
$hwstack = 60 'im Speicher werden für den Hardware-Stack 60 Byte reserviert
$swstack = 60 'im Speicher werden für den Software-Stack 60 Byte reserviert
$framesize = 80 'im Speicher werden für den Frame 80 Byte reserviert
$baud = 19200




'IR Sensor
Dim Ir As Word

'Motoren
Dim Mrechts As Byte , Mlinks As Byte

'Servostellung
Dim Servo1 As Byte , X30 As Bit , X40 As Bit , X50 As Bit , X60 As Bit , X70 As Bit , X80 As Bit


'Input für Taster
S1 Alias Pind.2
Smi Alias Pinc.1

'Taster
Config S1 = Input
Config Smi = Input

'PullUp-Widerstand einschalten
S1 = 1
Smi = 1


'Submenüs Declarieren
Declare Sub Vor
Declare Sub Stopp
Declare Sub Denken
Declare Sub Zurück
Declare Sub Weniglinks
Declare Sub Links
Declare Sub Wenigrechts
Declare Sub Rechts
Declare Sub Sehen

'PWM Modulieren
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8

'Motoren 0 = Vollgas
Mrechts = 0
Mlinks = 0


'Output für PWM
Config Portb.1 = Output
Config Portb.2 = Output


'Motoren
M1vor Alias Portd.4
M1zur Alias Portd.5
M2vor Alias Portd.6
M2zur Alias Portd.7

Config M1vor = Output
Config M1zur = Output
Config M2vor = Output
Config M2zur = Output



'IR Sensor 300 ca 20 cm, 500 ca 10 cm
'Config für Ir Augen
Config Adc = Single , Prescaler = Auto , Reference = Avcc

Start Adc


'Servo Settings
'Servo von 20 - 106 (Verwendet 30-80)
Config Servos = 1 , Servo1 = Portd.3 , Reload = 10
Config Portd.3 = Output

Enable Interrupts

'Servo in Mittelstellung
Servo(1) = 54



'S1 schaltet Robi ein
Bitwait S1 , Reset
Bitwait S1 , Set

Wait 1


'Hauptschleife Go
Haupt:

Do

Print "Hauptschleife"

'Mitte Ca. 54 , 30 Links, 80 Rechts

Servo(1) = 35

Call Sehen
Call Sehen
Call Sehen
Call Sehen

Servo(1) = 75

Call Sehen
Call Sehen
Call Sehen
Call Sehen

Call Vor

Loop



End 'end program



Sub Denken

Print "Denken"

'Stopp
M1vor = 0
M2vor = 0
M1zur = 0
M2zur = 0


Waitms 100
Servo1 = 30
Servo(1) = Servo1

X30 = 0
X40 = 0
X50 = 0
X60 = 0
X70 = 0
X80 = 0

Waitms 300

Do

If Smi = 0 Then Call Zurück
Servo(1) = Servo1
Waitms 50
Ir = Getadc(0)
If Servo1 = 30 And Ir > 210 Then X30 = 1
If Servo1 = 35 And Ir > 210 Then X30 = 1
If Servo1 = 40 And Ir > 210 Then X40 = 1
If Servo1 = 45 And Ir > 210 Then X40 = 1
If Servo1 = 50 And Ir > 210 Then X50 = 1
If Servo1 = 55 And Ir > 210 Then X50 = 1
If Servo1 = 60 And Ir > 210 Then X60 = 1
If Servo1 = 65 And Ir > 210 Then X60 = 1
If Servo1 = 70 And Ir > 210 Then X70 = 1
If Servo1 = 75 And Ir > 210 Then X70 = 1
If Servo1 = 80 And Ir > 210 Then X80 = 1

Print "Servopos.: " ; Servo1 ; " Ir: " ; Ir

Servo1 = Servo1 + 5

Loop Until Servo1 > 80



If X30 = 1 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Wenigrechts
If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 1 Then Call Weniglinks

If X30 = 1 And X40 = 1 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Rechts
If X30 = 1 And X40 = 1 And X50 = 0 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Rechts
If X30 = 1 And X40 = 1 And X50 = 1 And X60 = 0 And X70 = 0 And X80 = 0 Then Call Rechts

If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 1 And X80 = 1 Then Call Links
If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 0 And X70 = 1 And X80 = 1 Then Call Links
If X30 = 0 And X40 = 0 And X50 = 0 And X60 = 1 And X70 = 1 And X80 = 1 Then Call Links

If X50 = 1 And X60 = 1 Then Call Zurück
If X40 = 1 And X70 = 1 Then Call Zurück

Call Vor

End Sub





Sub Stopp

Print "Stopp"

'Stopp
M1vor = 0
M2vor = 0
M1zur = 0
M2zur = 0

Goto Denken

End Sub


Sub Vor

Print "Vor"

Pwm1a = Mrechts
Pwm1b = Mlinks

'Vorwärts fahren
M1vor = 1
M2vor = 1
M1zur = 0
M2zur = 0

Goto Haupt

End Sub


Sub Weniglinks

Print "Weniglinks"

M1vor = 0
M2vor = 0
M1zur = 1
M2zur = 0

Waitms 100

Call Stopp

End Sub


Sub Links

Print "Links"

M1vor = 0
M2vor = 0
M1zur = 1
M2zur = 0

Waitms 200

Call Stopp

End Sub


Sub Wenigrechts

Print "Wenigrechts"

M1vor = 0
M2vor = 0
M1zur = 0
M2zur = 1

Waitms 100

Call Stopp

End Sub



Sub Rechts

Print "Rechts"

M1vor = 0
M2vor = 0
M1zur = 0
M2zur = 1

Waitms 200

Call Stopp

End Sub




Sub Zurück

Print "Zurück"

'Zurück
M1vor = 0
M2vor = 0
M1zur = 1
M2zur = 1

Waitms 250

If Ir > 256 Then Call Links
If Ir < 257 Then Call Rechts

End Sub


Sub Sehen

If Smi = 0 Then Call Zurück
If S1 = 0 Then Mrechts = Mrechts + 2

Ir = Getadc(0)
Print "Servo: " ; Servo(1) ; " Ir: " ; Ir
If Ir > 230 Then Call Stopp
Waitms 50

End Sub


Keine Ahnung, um was es dabei ging. Es soll nur zeigen, wie hübsch ein struckturierter Programmaufbau aussieht.

Gruß

mic

Edit:

Ich habe mal versucht dein Programm zu ordnen:


$regfile "m32def.dat"
$crystal = 8000000

Const Writepowerport_adr = &H72
Const Readpowerport_adr = &H73

Dim I2cdaten As Byte
Dim I As Word

Config Scl = Portc.0
Config Sda = Portc.1

Config Pinc.3 = Output
Config Pinc.4 = Output
Config Pinc.5 = Output
Config Pind.6 = Output

Declare Sub Ledein
Declare Sub Ledaus

I2cinit
I2cstart
I2cwbyte &H74
I2cwbyte &B00000010
I2cstop
Portd.6 = 1
Portc.5 = 0
Portd.6 = 1

Elseif

I2cstart
I2cwbyte Writepowerport_adr
I2cwbyte 15
I2cstop

Then
Portd.6 = 0
Portc.4 = 0
Portc.5 = 1

Do
Portc.2 = 0
Waitms 5
Portc.2 = 1
Waitms 5

Loop Until I < 1
Portd.6 = 1

Irgendwie wird's dadurch aber auch nicht besser. Vielleicht solltest du dir mal ein Bascom-Tutorial durchlesen.

Richard
19.06.2011, 16:44
Das ist kein Programm, wo sind die Sub Routinen und wo werden sie aufgerufen/beendet?
Ein Elseif oder auch ein Then alleine in einer Zeile ergibt keinen Sinn...und bitte Programmzeilen/Beispiele in Code Tags
(
)
Programm
()
Einsperren. :-)

Gruß Richard

DarkSoldier
19.06.2011, 19:31
kann mir jemand von euch sagen, wie mann eine wenn, dann Beziehung schreibt wäre echt nett.
danke an Richard und radbruch die versucht haben aus meinem blödsinn noch was gescheids zu machen.
mfg
DarkSoldier

Richard
19.06.2011, 19:53
if x = 1 then gosub...............'gehe zu subroutine LED EIN
else Gosub ...........................'gehe zu subroutine LED AUS


Bascom Hilfe IF,Then,else, gosub, Call, return ...für jeden Befehl gibt es kleine leicht zu verstehende Beispiele, die solltest (MUSST) Du leider abarbeiten und ausprobieren. Da geht KEIN Weg an vorbei!!!!!! Genau genommen sollte man ALLE Befehle aus der Hilfe so nach und nach durch probieren um die Möglichkeiten von Bascom zu erlernen. Mühsam ernährt sich das Eichhörnchen....oder es verhungert,stirbt aus.

Gruß Richard

DarkSoldier
19.06.2011, 20:02
gibts des ganze auch auf deutsch? wenn net is auch egal

Searcher
20.06.2011, 09:42
gibts des ganze auch auf deutsch?Hier ist 'ne Seite auf deutsch, die ich sehr hilfreich finde.

http://halvar.at/elektronik/kleiner_bascom_avr_kurs/

Gruß
Searcher

DarkSoldier
20.06.2011, 11:51
Danke werde mir diese seite mal zu gemüte führen baue grad an meinem Robotergehäuse und dann les ichs
Danke
mfg Dark

DarkSoldier
21.06.2011, 07:31
Nachdem mir radbruch das ganze programm schon einmal formatiert hat poste ich es jetzt da mir noch eine Frage aufgekommen ist:
Nach dem Unterprogramm besteht bascom darauf, dass man noch ein loop hinzufügt. Aber soweit ich weiß hat man dann eine schleife. Deshalb ist meine Frage: Wie muss man das programmieren dass er nach einmaligen durchlauf wieder zurück zum hauptprogramm springt?
PS Dass noch nichts im Hauptprogramm steht weiß ich :D
$regfile = "M32def.dat"
$crystal = 8000000

' Interruptserviceroutinen(ISR) Zuordnen
On Int0 Unterprogramm1
On Int1 Unterprogramm1
On Int2 Unterprogramm1

' erst enablen wenn alle Interrupteinstellungen erledigt sind
Enable Interrupts

' es reicht die funktionen der Pins einmalig festzulegen
Config Pinc.3 = Output
Config Pinc.4 = Output
Config Pinc.5 = Output
Config Pind.6 = Output

Portc.3 = 0
Portc.4 = 1
Portc.5 = 0
Portd.6 = 1 'Portd?

' Hauptschleife
Do

Loop

' Programmende
End


' ISR
Unterprogramm1:

Portc.4 = 0
Portc.5 = 1
Portd.6 = 0

Wait 2

Portd.6 = 1

Wait 2

Portd.6 = 0

Do

Waitms 5
Portc.3 = 1
Waitms 5
Portc.3 = 1
Loop

Return


Danke im Vorraus
MfG Dark

TobiKa
21.06.2011, 07:59
Zum Beispiel mit einer Schleife die alles umfasst.

Und benutz mal bitte die Code-Tags!

DarkSoldier
21.06.2011, 08:21
sry ich steh´grad voll aufm schlauch was sin nochamal codetags?
kann mir des nie merken
mfg dark

DarkSoldier
21.06.2011, 11:00
hab nochmal ne frage:
ich habe aus einem alten casseten spieler den nicht all zu schwachen 2 poligen motor ausgebaut und wollte fragen ob man den an einen 3poligen servoport anschließen kann in dem man nur + und- verwendet und gnd einfach freilässt? wenns anders auch geht wäre das natürlich super wäre net wenn mir jemand weiterhelfen könnte
danke im vorraus
mfg DarkSoldier

radbruch
21.06.2011, 11:02
Hallo

Weil ich dein Leiden mal beenden will, habe ich mich etwas über dein RNFRA (http://www.shop.robotikhardware.de/shop/catalog/product_info.php?cPath=64&products_id=12) informiert. Neben der Aufbauanleitung sind auch ein paar Beispielprogramme online verfügbar, unter anderem auch das Beispiel Nr. 5 (das die Basis für dein Programm war?):

'################################################# ##
'Testprogramm 5
'für
'RoboterNetz Standard-Roboter Board RBFRA 1.2
'
'Aufgabe:
'Testen der Schrittmotortreiber
'Dreht erst linken Schrittmotor in beide Richtungen
'und dann rechten Schrittmotor in beide richtungen
'
'Autor: Frank
'Weitere Beispiele und Beschreibung der Hardware
'unter http://www.Roboternetz.de
'################################################# ##

Declare Sub Ledein
Declare Sub Ledaus


Const Writepowerport_adr = &H72 'I2C Adr PCF 2
Const Readpowerport_adr = &H73 'I2C Adr PCF 2

Dim I2cdaten As Byte 'Datenbyte aus PCF8574


Dim I As Word


$regfile = "M32def.dat" 'Anweisung fehlt im Orginal !!!
$crystal = 8000000 'Quarzfrequenz
Config Scl = Portc.0 'Ports fuer IIC-Bus
Config Sda = Portc.1
I2cinit


'******** Diese 4 Befehle sind nur ab RNBFRA Version 1.2 (nicht in V 1.1)
' notwendig und bzw. möglich (erweiterte Energiesparfunktion und LED´s)
' Bei Board 1.1 bitte auskommentieren oder löschen
I2cstart
I2cwbyte &H74 'Schreibbefehl an PCF3 schicken
' Led´s ein ,Motorendstufen ein, Port-Peripherie ein, RBN-Bus Sleep Modus aus (also Peripherie aktiv)
I2cwbyte &B00000010 'Datenbyte an PCF3
I2cstop
'*********




Config Pind.6 = Output 'Schrittmotoren Ein/Aus
Config Pinc.5 = Output 'Schrittmotor Links Richtung
Config Pinc.3 = Output 'Schrittmotor Links Step

Config Pinc.4 = Output 'Schrittmotor Rechts Richtung
Config Pinc.2 = Output 'Schrittmotor Rechts Step

Ledaus
Portd.6 = 0 'Schrittmotoren erst mal ausschalten

Wait 2

Ledein
Portd.6 = 1 'Beide Schrittmotoren einschalten

'Linker Schrittmotor
Portc.5 = 0 'Richtung
Portc.3 = 0
I = 400 'Anzahl der Schritte die Motor bewegt werden soll
Do
Ledaus
Portc.3 = 0
Waitms 5
Portc.3 = 1
Ledein
Waitms 5
I = I - 1
Loop Until I < 1

Portc.5 = 1 'Andere Richtung
I = 400 'Anzahl der Schritte die Motor bewegt werden soll
Do
Ledaus
Portc.3 = 0
Waitms 5
Portc.3 = 1
Ledein
Waitms 5
I = I - 1
Loop Until I < 1

Wait 2

'Rechter Schrittmotor
Portc.4 = 0 'Richtung
I = 400 'Anzahl der Schritte die Motor bewegt werden soll
Do
Ledaus
Portc.2 = 0
Waitms 5
Portc.2 = 1
Ledein
Waitms 5
I = I - 1
Loop Until I < 1

Portc.4 = 1 'Andere Richtung
I = 400 'Anzahl der Schritte die Motor bewegt werden soll
Do
Ledaus
Portc.2 = 0
Waitms 5
Portc.2 = 1
Ledein
Waitms 5
I = I - 1
Loop Until I < 1



Portd.6 = 0 ' Schrittmotoren erst mal ausschalten
Ledaus

End




Sub Ledein()
I2cstart
I2cwbyte Writepowerport_adr 'Schreibbefehl an PCF schicken
I2cwbyte 15 'Datenbyte an PCF
I2cstop
End Sub

Sub Ledaus
I2cstart
I2cwbyte Writepowerport_adr 'Schreibbefehl an PCF schicken
I2cwbyte 0 'Datenbyte an PCF
I2cstop
End Sub

Ganz schön komplex für den Einstieg. Und durch den Hilfskontroller auch noch kompliziert. Und peinlicherweise auch noch nicht kompilierbar, weil im Beispiel tatsächlich die $regfile-Anweisung fehlt (ich habe sie allerdings eingefügt, das Programm läßt sich so fehlerfrei übersetzen). Das Programm initialisiert das Board, schaltet eine LED und steuert zwei angeschlossene Schrittmotoren an. In der Anleitung (http://www.robotikhardware.de/download/dokurnbfra1.22.pdf) zu finden ab Seite 39.

Ok, was hast du? Das RNFRA-Board (als Bausatz?!), zwei Schrittmotoren, ein Spannungsmessgerät, die Strombegrenzung nach Anleitung eingestellt, Testprogramm übersetzt und auf RNFRA übertragen und ausgeführt, alles funktioniert?

Ich würde jetzt erstmal solange rumfummeln bis das alles funktioniert. Wenn es dir zu kompliziert erscheint, arbeite die Anleitung nochmals durch.

Was mir noch aufgefallen ist: Das Board heißt im Onlinekatalog in der Überschrift RNFRA, im Text RNBFRA und im Programmkopf des Beispiels RBFRA. Artikelbezeichnung ist BSRNFRA32. Lustig ;)

Viel Spaß und Erfolg

mic

DarkSoldier
21.06.2011, 11:06
Danke dir radbruch :)
Das testprogramm 5 funktioniert inzwischen einwandfrei :)
Ich hab das RNF(B)RA als Bausatz mit zwei schritmmotoren 4 tastern und nem spannungsmesser 14v stromquelle usw...
Aber kann man wie ich eben schon geschrieben habe einen 2 poligen cassetenmotor an einen 3poligen servo port anschluss anschließen wenn man einen port aulässt oder kann man das nicht machen
danke
mfg DarkSoldier

021aet04
22.06.2011, 09:46
Anschließen kann man den Motor, aber nicht direkt. Da muss noch ein Motortreiber eingebaut werden. Der Grund ist, dass der Motor einen relativ hohen Strom (kann schon einige Ampere sein) zieht und das der Port des µC nicht aushält. Den Servo kannst du anschließen, weil die Versorgung für den Motor die Anschlüsse + und GND sind. Über diese Leitungen fließt ein hoher Strom. An den Signaleingang des Servos hast du einen sehr geringen Strom, deswegen kannst du den µC direkt anschließen.

MfG Hannes

DarkSoldier
22.06.2011, 09:57
kann man dann gnd und plus nutzen um diesen motor anzuschließen?
zum stromverbrauch steht auf diesem Motor nix drauf.
Nur steht dies drauf:
M.T.C 6v. ccw
01-3-3.
ccm09-060L1-1
2400rpm
drunter steht noch:
TV110 VE1
2??1-3-18
01
moretech


da wo ich die 2 ?? fragezeichen gemacht habe konnte ich die ziffern nicht enziffern...
...vermute dass es entweder 2 0er sind oder 2 8er :D
stehen die 6v für die spannung?
wenn ja dann is die angabe aber falsch weil sich bei 6v nix tut da muss man ihm schon 12v geben damit ersich dreht.

Wäre nett wenn mir nochmal jemand weiterhelfen könnte
danke im vorraus
,mfg
DarkSoldier

021aet04
22.06.2011, 10:14
Ob du Daten für den findest ist fraglich. Du könntest die Stromaufnahme messen (bis zur Blockade, aber nicht zu lange). Dadurch kannst du abschätzen, welchen Treiber du brauchst. Besser ist es wenn du einen Stärkeren Motortreiber als nötig nimmst.

MfG Hannes

DarkSoldier
22.06.2011, 10:16
der hersteller is n asiatischer und der bestimmte motor is anscheinend schon vor 4 jahren aus m programm genommen worden auch steht wenn da was zu den motoren steht imma nur die volt zahl... :&