PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Robby Programmierung



-:edik:-
07.08.2006, 20:14
Hallo Leute,

ich habe meinen Robby heute bekommen und habe ein paar Beispielprogramme ausprobiert. Dann wollte ich mal selber etwas schreiben, aber ich habe nichts gerafft. Ich verstehe das mit dem Programmaufbau, Befehlssätzen und Definitionen nicht also alles. Ich schaffe es nicht einmal eine LED zum leuchten zu bringen ](*,) .

Welche Sprache benutzt ihr zum programmieren von Robby und kann mir jemand villeicht ein eigenes kurzes beispiel Prog. für LED´s zeigen. Also ich brauche jede Menge Hilfe.

Danke im Voraus

-:edik:-
08.08.2006, 15:40
Kann mir denn keiner Helfen?

Ich habe heute schon wieder 5 Std. drangesessen und bin nicht weiter gekommen.

Bis jetzt habe ich heraus gefunden, dass man alle vorhandenen Ressourcen definiren muss. Ich habe dann aus einem Robby Beispielprog. mit Lauflicht die Ressourcen herauskopiert, das hat mich aber nicht weiter gebracht ich kriege die LED einfach nicht an.
Benutzt ihr ein anderes Programm für Robby als das mitgelieferte?

Bitte helft mir!!

Dirk
08.08.2006, 19:46
Hallo -:edik:-,

Glückwunsch zum neuen RP5!

Du solltest alle Demo-Programme laden und probieren.

Da gibt es gute Hinweise, wie man die LEDs ein- oder ausschaltet.

Dann nimmst du dir ein Leerprogramm für den RP5, also einen Programmrumpf, den du für eigene Progs nimmst:

Hier ist LEERPROGRAMM_RP5.bas :


'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIII
'IIIIIIIIII ROBBY RP5 - Leerprogramm 1 IIIIIIIIIIII
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIII
'PROGRAMM-RUMPF ZUM START EIGENER ENTWICKLUNGEN

' Programm-Name: LEERPROGRAMM_RP5.bas
' Hardware: Robby RP5 OHNE Erweiterungsplatine
' Treiber: P5DRIV.S19

'----------------------------------------------------------------------
' FUNKTION DES PROGRAMMS
'----------------------------------------------------------------------
'
'

'----------------------------------------------------------------------
'ACHTUNG:
' Der erste Schritt in der Initialisierung Ihres Programms sollte immer die Zeile

' REV_L=on:REV_R=on:sys PLM_SLOW

' enthalten. Diese Zeile initialisiert die Ports für die Richtungsumschaltung
' des Antriebs und die PLM Frequenz. Initialisieren Sie die Ports auch, wenn der
' Antrieb nicht benutzt werden soll!

' DER BETRIEB DER MOTOREN OHNE DIESE INITIALISIERUNG FÜHRT UNWEIGERLICH ZUR
' ZERSTÖRUNG DER ANTRIEBSELEKTRONIK !!
'----------------------------------------------------------------------
'------ Konstanten --------
define V_OFFSET 0 '= CHRG_CURRENT - SYS_VOLTS (Abgleichwert)
define V_ADJUST 2 'Eichwert Spannungen (Bauteile-abhängig!)
'Hier weitere Konstanten-Definitionen!

'--------------------------
'------ I/O PORTS ---------
'--------------------------
'- INTERFACE LCD/EXTPORT --
define sdio port[1]
define sclio port[3]
define strobe port[4]
'-- INTERFACE COM/NAV -----
define DATALINE port[1]
define CLOCKLINE port[2]
'---- FREIE PORTS ---------
define FREIP7 port[7]
define FREIP8 port[8]
define FREIP9 port[9]
define FREIP10 port[10]
define FREIP11 port[11]
define FREIP12 port[12]
define FREIP13 port[13]
define FREIP14 port[14]
define FREIP15 port[15]
define FREIP16 port[16]
'--------------------------
'------ SENSORS ---------
'--------------------------
define FREIAD8 ad[8] 'Freier A/D-Wandler
define LIGHT_L ad[7]
define LIGHT_R ad[6]
define SYS_VOLTS ad[3]
define CHRG_CURRENT ad[2]
define SYS_CURRENT ad[1]
define MIC ad[4]
define TOUCH ad[5]
'---------------------------
'------ DRIVE -------------
'---------------------------
define SPEED_L da[1]
define SPEED_R da[2]
define REV_L port[6]
define REV_R port[5]
'--------------------------
'---- SYSTEM MEMORY -------
'--------------------------
'--- INTERFACE BUFFER ----
define LBYTE byte[1]
define HBYTE byte[2]
define SUBCMD byte[3]
'---- OPERATION DATA ------
define EXTPORT byte[4]
define LED1_F bit[29]
define LED2_F bit[30]
define LED3_F bit[31]
define LED4_F bit[32]
define SYSTEM_STATUS byte[5]
define ACSL_F bit[33]
define ACSR_F bit[34]
define IR_F bit[35]
'--------------------------
'---- USER MEMORY -------
'--------------------------
define DEVICEADDRESS byte[6]
'User Memory ab BYTE[7] frei!

'--- SYSTEMROUTINEN -----------
define PLM_SLOW &H01C4
define SYSTEM &H01C9
define COMNAV &H0154
'- ERWEITERTE SYSTEM ROUTINEN -
define REVR &H0101 'ANTRIEB RECHTS RÜCKWÄRTS
define REVL &H0106 'ANTRIEB LINKS RÜCKWÄRTS
define FWDR &H010B 'ANTRIEG RECHTS VORWÄRTS
define FWDL &H0110 'ANTRIEB LINKS VORWÄRTS
define ROTR &H0115 'RECHTS DREHEN
define ROTL &H0119 'LINKS DREHEN
define REV &H011D 'RÜCKWÄRTS
define FWD &H0121 'VORWÄRTS
define COMNAV_STATUS &H0125 'UPDATED ALLE FLAGS IM STATUS-REGISTER
define ACS_LO &H01E1 'ACS POWER LO
define ACS_HI &H01E9 '
define ACS_MAX &H01F1 '
define SEND_TLM &H014A 'SENDET TELEMETRIE (CH=HBYTE, DATEN=LBYTE)
define SEND_SPEEDR &H0134 'SENDET TLM KANAL 8, PLM RECHTS
define SEND_SPEEDL &H013A 'SENDET TLM KANAL 7, PLM LINKS
define SEND_SYSSTAT &H0144 'SENDET TLM KANAL 0, SYSTEM STATUS
'(FLAGS für ACS, FWD/REV, ACS_LO/HI/MAX)
'---------- INIT---------------
' Freie Ports initialisieren:
FREIP7=off:FREIP8=off:FREIP9=off:FREIP10=off
FREIP11=off:FREIP12=off:FREIP13=off:FREIP14=off
FREIP15=off:FREIP16=off

' Subsysteme einschalten:
gosub SUBSYS_PWR_ON

beep 368,10,0:pause 50
gosub LEDSOFF 'Alle LEDs auf Robby aus

' ACS initialisieren:
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
'gosub NO_ACS_INT:beep 368,10,0:sys ACS_HI 'oder: ACS_LO, ACS_MAX
' ODER ...
'---- SYSTEM OPERATION MODE (ACS INTERRUPT 200 ms) ----
'interrupt ACS_INTERRUPT:gosub ACS_INT_200:beep 368,10,0:sys ACS_HI

' IR-COMM initialisieren:
'--------- IR-DATENFORMAT -----------------
'gosub RC5 'oder: REC80
' ODER ...
'---- IRCOMM OPERATION MODE (INTERRUPT ON) ----
'interrupt IRCOMM_INTERRUPT:gosub RC5_INT 'oder: REC80_INT
'---------- SET ADDRESSED MODE -----------------
'DEVICEADDRESS=1 'oder: 2..15
'gosub SET_ADDRESS

'------------ ANTRIEB -------------------------
REV_L=on:REV_R=on:sys PLM_SLOW
'----------------------------------------------------------------------
' Hier ggf. weitere Initialisierungs-Befehle!!!

'----------------------------------------------------------------------
' PROGRAMM:
' Hier mit dem Programm beginnen!!!



'----------------------------------------------------------------------
' UNTERPROGRAMME:

'----------------------------------------------
'--------- ACS INTERRUPT SERVICE --------------
'----------------------------------------------
'#ACS_INTERRUPT 'Beispiel für eine Interruptroutine!
'sys COMNAV_STATUS
'if ACSL_F=on then gosub LED4ON else gosub LED4OFF
'if ACSR_F=on then gosub LED1ON else gosub LED1OFF
'pause 5:gosub LED1OFF:gosub LED4OFF:return interrupt
'---------------------------------------------
' ODER ... (ACHTUNG: Nur EINE Interrupt-Routine ist möglich!!!)
'---------------------------------------------
'-------- IR-COMM INTERRUPT SERVICE ----------
'---------------------------------------------
'#IRCOMM_INTERRUPT 'Beispiel für eine Interruptroutine!
'sys COMNAV_STATUS
'gosub GET_IRDATA
'gosub LED1ON:pause 5:gosub LED1OFF:return interrupt
'---------------------------------------------

'IIIIIIII Binärausgabe mit den 4 LEDs IIIIIIII
' Der Robby kann OHNE zusätzliche Hardware keine Werte (z.B.
' seiner Sensoren) anzeigen. Diese Routine gibt VALUE mit den
' 4 LEDs in Binärform (als 2 Nibble mit je 4 Bit) aus.
' Die Variable VALUE muss als BYTE definiert sein!
'#LEDBINOUT 'Ausgabe 1. Nibble (low)
'gosub LEDSOFF: gosub LED1FLASH: gosub LED1FLASH
'gosub LED1FLASH: gosub LED1FLASH: gosub LED1FLASH
'if (VALUE and &B1) <> 0 then gosub LED1ON
'if (VALUE and &B10) <> 0 then gosub LED2ON
'if (VALUE and &B100) <> 0 then gosub LED3ON
'if (VALUE and &B1000) <> 0 then gosub LED4ON
'pause 100 'Ausgabe 2. Nibble (high)
'gosub LEDSOFF: gosub LED2FLASH: gosub LED2FLASH
'gosub LED2FLASH: gosub LED2FLASH: gosub LED2FLASH
'if (VALUE and &B10000) <> 0 then gosub LED1ON
'if (VALUE and &B100000) <> 0 then gosub LED2ON
'if (VALUE and &B1000000) <> 0 then gosub LED3ON
'if (VALUE and &B10000000) <> 0 then gosub LED4ON
'pause 100: return
'#LED1FLASH
'gosub LED1ON: pause 5: gosub LED1OFF: pause 5: return
'#LED2FLASH
'gosub LED2ON: pause 5: gosub LED2OFF: pause 5: return

'Binär-Dezimal-Tabelle (4-Bit):
' WERT: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
' LED1-> 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1
' LED2-> 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1
' LED3-> 0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1
' LED4-> 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1
'
' Der Dezimal-WERT kann in der 1. Zeile abgelesen werden, wenn man
' die zutreffende LED-Kombination aussucht (1 -> an, 0 -> aus).
' Der Wert des 2. Nibbles (high) kann genauso abgelesen werden,
' muss aber noch mit 16 multipliziert und zum 1. Nibble addiert
' werden, um den ganzen 8-Bit-Dezimalwert (0..255) zu erhalten.

'----------------------------------------------------------------------

'IIIIIIIIIII LED DRIVER IIIIIIIIIIIIIIIII
#LED1ON
LED1_F=on:goto EXTPORT_WRITE
#LED1OFF
LED1_F=off :goto EXTPORT_WRITE
#LED2ON
LED2_F=on:goto EXTPORT_WRITE
#LED2OFF
LED2_F=off:goto EXTPORT_WRITE
#LED3ON
LED3_F=on:goto EXTPORT_WRITE
#LED3OFF
LED3_F=off:goto EXTPORT_WRITE
#LED4ON
LED4_F=on:goto EXTPORT_WRITE
#LED4OFF
LED4_F=off:goto EXTPORT_WRITE
#LEDSOFF
EXTPORT=EXTPORT and &H0F:goto EXTPORT_WRITE
#LEDSON
EXTPORT=EXTPORT or &HF0
#EXTPORT_WRITE
LBYTE=EXTPORT:sys SYSTEM:return

'IIIIII SYSTEMROUTINEN COMM/NAV SYSTEM IIIII
#GET_IRDATA
SUBCMD=1:sys COMNAV:return
#SEND_IRDATA
SUBCMD=0:sys COMNAV:return
#GET_TLM
SUBCMD=1:sys COMNAV:LBYTE= LBYTE or (HBYTE shl 6)
HBYTE= HBYTE shr 2:return
#RC5
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFC
HBYTE=00:SUBCMD=2:sys COMNAV:return
#RC5_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE and &HFE)or 2
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H01)and &HFD
HBYTE=00:SUBCMD=2:sys COMNAV:return
#REC80_INT
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H03)
HBYTE=00:SUBCMD=2:sys COMNAV:return
#ADDRESSED_MODE_ON
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H10)
HBYTE=00:SUBCMD=2:sys COMNAV:return
#ADDRESSED_MODE_OFF
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE and &HEF)
HBYTE=00:SUBCMD=2:sys COMNAV:return
#SET_ADDRESS
SUBCMD=4:sys COMNAV:LBYTE= (HBYTE or &H10)
HBYTE=00:SUBCMD=2:sys COMNAV
LBYTE=DEVICEADDRESS:SUBCMD=5:sys COMNAV:return
#GET_ADDRESSED_DATA
SUBCMD=1:sys COMNAV:HBYTE=HBYTE and &H7:return
#SEND_ADDRESSED_DATA
HBYTE=(HBYTE shl 3)or DEVICEADDRESS:SUBCMD=0:sys COMNAV:return
#WAIT_PING
SUBCMD=8:sys COMNAV:return

'IIIIII SYSTEMROUTINEN SYSTEM IIIIIIIIIIII
#NO_ACS_INT
SUBCMD=4:sys COMNAV:LBYTE= HBYTE and &HFB
HBYTE=00:SUBCMD=2:sys COMNAV:return
#ACS_INT_200
SUBCMD=4:sys COMNAV:LBYTE= HBYTE or &H04
HBYTE=50:SUBCMD=2:sys COMNAV:return
#SUBSYS_PWR_ON
sdio=on:sclio=on:strobe=off:EXTPORT=(EXTPORT and &HFE)or 8
sys SYSTEM:return
#SUBSYS_PWR_OFF
EXTPORT=(EXTPORT and &HF7)or 1:sys SYSTEM
deact sdio:deact sclio:return


#CLR_DISTANCE
SUBCMD=3:sys COMNAV:return
#L_DISTANCE
SUBCMD=6:sys COMNAV:return
#R_DISTANCE
SUBCMD=7:sys COMNAV:return

'---------COM/NAV GERÄTEREIBER -------------
syscode "p5driv.s19"

Da, wo ...
' PROGRAMM:
' Hier mit dem Programm beginnen!!!
... steht, kommt dein eigenes Programm hin.
Z.B.:
gosub LED1ON 'schaltet LED1 ein
gosub LED1OFF 'schaltet sie wieder aus.

So geht's dann mit CCBASIC weiter.
Wenn du nicht weiter kommst,- fragen!

Gruß Dirk

-:edik:-
10.08.2006, 15:11
Danke für dein Leerprog. Dirk,

ich habe es mir gerade angeguckt und habe dort noch mehr Systemroutinen gefunden und Konstante gefunden. Woher soll ich wissen wie ich sowas definiere, weiß man es wenn man den Bot selber zusammen gelötet hat?

Dirk
10.08.2006, 15:52
Hallo -:edik:-,

die Definitionen für den RP5 stammen aus den diversen Demo-Programmen.
Wenn es weitere Definitionen gibt, wie z.B. diese hier:
define FREIAD8 ad[8]
... dann sind das eigene Definitionen, für die du auch deine eigenen Namen nehmen kannst. Das ist ja hier z.B. der A/D-Wandler AD8, der beim Robby frei (nicht genutzt) ist. Daher habe ich ihn FREIAD8 genannt. Du kannst ihn auch ganz anders nennen. Es empfiehlt sich aber, die wesentlichen Definitionen des RP5 nicht umzubenennen, weil man dann nicht mehr mit anderen Usern vergleichen kann.
Wenn du dich länger mit dem RP5 beschäftigst, kommst du hinter den Sinn der Definitionen. Erst must du dich wohl ein bißchen mit den CCBASIC-Grundlagen beschäftigen.
In der Anleitung sind da ja einige Seiten zur Einführung.

Alle definierten Systemroutinen und Unterprogramme haben für den RP5 einen Sinn (z.B. LED ein oder aus, Wegstreckenzähler links lesen ...) und sind so "fertig". Du kannst sie meist mit "gosub" nutzen.
Versuch am Anfang nicht, den Inhalt dieser fertigen Unterprogramme zu verstehen, sondern beschäftige dich eher mit den CCBASIC-Grundlagen.
Wie wäre es für den Anfang mit einem Lauflicht mit den 4 LEDs für den RP5? Du brauchst von den Ressourcen des Leerprogramms nur die Unterprogramme LEDxON und LEDxOFF dazu, die du mit gosub aufrufst.

So geht's dann langsam los und du wirst immer besser. Viel Erfolg!

Gruß Dirk

-:edik:-
11.08.2006, 18:32
Vielen Dank Dirk, ich leg dann mal los, wo wie du es gesagt hast und hoffe das ich bald einen eigenen Bot bauen kann (in 2 Jahren vielleicht =P~ )

dj
21.08.2006, 11:14
hallo zusammen!
hab das selbe Problem wie -:edik:- hab mir auch das Leerprogramm von Dirk Kopiert aber ich bekomme es einfach nicht hin damit z.B. eine LED zum leuchten zu bringen.
Kann mir jemand sagen, was ich ins Leerprogramm schreiben muss, dass eine LED anfängt zu leuchten?
bitte helft mir! [-o<

Gruß dj

Dirk
21.08.2006, 17:19
Hallo dj,

siehe oben!!!

gosub LED1ON 'schaltet LED1 ein
gosub LED1OFF 'schaltet sie wieder aus.

Wenn du noch eine Pause zwischen die beiden Befehle setzt, dann bleibt sie auch so lange an, dass du das sehen kannst! O:)
Zum Beispiel: Pause 50

Gruß Dirk

dj
21.08.2006, 17:42
Hi, Dirk
Danke für deine Antwort.
Hab in dein Leerprogramm an der stelle wo steht:'Hier mit dem Programm beginnen!
gosub LED1ON
geschrieben aber als ich meinen Robby das Programm ausführen lassen hab hat es nur einmal gepiept und dann is nix passiert.
fehlt da irgendwas oder muss ich es anders schreiben?

Gruß dj

Dirk
21.08.2006, 17:52
Hallo dj,

das Piepen ist normal.

Nimm 'mal folgendes Hauptprogramm:


#Start
gosub LED1ON
pause 50
gosub LED1OFF
gosub LED2ON
pause 50
gosub LED2OFF
gosub LED3ON
pause 50
gosub LED3OFF
gosub LED4ON
pause 50
gosub LED4OFF
goto Start

end

Wie sieht das bei dir aus?

Gruß Dirk

dj
21.08.2006, 18:01
Hi
Du hast doch gemeint ich soll den Code den du mir geschrieben hast
nach 'Hier mit dem Programm beginnen?
also da hab ich eingefügt.
des mit dem start: hat nicht funktioniert ich hab dafür #start hingeschrieben.schreib mir wenn ich was falsch gemacht hab.
es war jetzt aber genauso wie bei meineim eigenm programm(Piepen, dann nichts.
Ich kopier nochmal dein Leerprogramm vielleicht is beim Kopieren was schief gegangen.

Gruß dj

Dirk
21.08.2006, 18:08
Sorry, du hast recht!

Es muss natürlich #Start heißen! 8-[
(Hab's oben geändert!)

Gruß Dirk

dj
21.08.2006, 18:14
Es hat aber trotz der änderung nicht funktioniert!
Jetzt hab ich das Leerprogramm nochmal kopiert und jetzt bringt mein Computer diese Fehlermeldung:Zeile 304: Datei nicht gefunden \p5driv.s19

Gruß dj

dj
21.08.2006, 18:25
Du kannst mir ja mal ein Beispiel zeigen(Nur wie man die leds an und aus geschaltet werden.)
Natührlich nur wenn es dir keine große Mühe macht

Gruß dj

Dirk
21.08.2006, 19:32
Zeile 304: Datei nicht gefunden \p5driv.s19


Diese Datei ist immer erforderlich! Geh mal auf die Suche nach der Datei "p5driv.s19" auf deiner Robby-CD. Sie müßte aber schon installiert sein. Wenn du sie findest, muss sie ins selbe Verzeichnis wie deine Basic-Programme.


Du kannst mir ja mal ein Beispiel zeigen(Nur wie man die leds an und aus geschaltet werden.)

Das hatten wir doch schon, oder? [-X
LED 1 an --> gosub LED1ON
LED 1 aus --> gosub LED1OFF

Gruß Dirk

dj
22.08.2006, 15:13
Hi, Dirk
Hab das Problem gefunden.
Jetzt bring ich die LEDs zum leuchten. :Ostern
Ich hab meine eigenen Programme wo anders gespeichert als die Beispielprogramme.
Muss man aber anscheinend in den selben Ordner speichern oder so.
Danke, dass du dir die Mühe gemacht hast.

Gruß dj

sebi2011
23.08.2006, 15:59
noch ne frage zum leerprog

in der letzten zeile steht ja
syscode "p5driv.s19"

das heißt doch das jedes mal wenn ich ein prog lade auch den treiber lade??

weil dann kann ich auch einmal treiber laden und dann das schreiben oder net?:
'syscode "p5driv.s19"

Dirk
23.08.2006, 17:27
Hallo sebi2011,

ja, genau.
EINMAL den Treiber laden, das reicht.
Danach kann man das auskommentieren!

Gruß Dirk

sebi2011
23.08.2006, 18:06
ich glaub wenn man den treiber lädt dauert das länger als wenn man was normales(prog) lädt

dj
23.08.2006, 18:35
hallo,
Ich hab das mal ausprobiert(mit dem Treiber)
ohne ihn zu laden ging es etw.37sec schneller!
also wenn man ihn eimal geladen hat lohnt es sich ich auszukommentieren.

Gruß dj

C1B1
27.08.2006, 17:43
diese Fehlermeldung:Zeile 304: Datei nicht gefunden \p5driv.s19

Du musst die komplette CD-ROM auf den PC kopieren und dann die ganzen verzipten Ordner entpacken, dann funktionierts.

dj
28.08.2006, 16:39
Hi, C1B1
danke aber ich habs schon hinbekommen.
Ich musst aber nur den Treiber auf mein Computer kopieren(in irgend ein Verzeichnis).

Gruß dj