PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Robby RP5 Leds ansteuern



RP5
04.06.2007, 20:59
Ich brauche wieder einmal hilfe!
Ich habe selbst einen Conrad - Robby - RP5 und bin jetzt fleißig am programmieren und ausprobieren. Doch irgendwie schaffe ich es einfach nicht die LEDs des Roboters anzusteuern!
In einem Beispielprogramm steht:


define led1 port[9]

Der aufruf erfolgt über:


led1 = ON : pause 20

Aber irgendwie geht das Beispielprogramm einfach nicht.
Normalerweiße sollten die LEDs aufblinken aber ich sehe eben garnichts!

Bitte helft mir!!

RobbyBoy
04.06.2007, 21:44
Hi,

bin auch neu hier und habe seit kurzen auch den Robby.

Zum Ansteuern der LEDs schau dir das Testprogramm 1_EINFÜHRUNG_LEDS.bas an.

Der Code sieht so aus:



gosub LED1ON


Dann gehören noch die Definitionen und der Teil mit den LED DRIVER ins Programm eingebunden.

RP5
04.06.2007, 22:30
OK Danke!
Aber kannst du mir vielleicht einmal den ganzen Code zusammenschreiben??
Nur um sicherzugehen, dass ich alles richtig mache!?

Vielen Dank schonmal im vorraus!

RobbyBoy
05.06.2007, 08:46
Hier ist es:



'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIII
'IIIIIIIIII MOBILE ROBOT EVALUATION PROGRAM IIIIIIIIIIII
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIII
' EINFACHES BEISPIEL ZUR BENUTZUNG DER LEDs
'Die Ein/Ausgabemöglichkeiten des Roboters sind sehr beschränkt, sind
'aber jedoch für einen normalen Betrieb ausreichend. Benutzen Sie die LEDs
'um z.B. Betriebszustände des Roboters anzuzeigen.
' ---------------------------------------------------------------------
' FUNKTION DES PROGRAMMS
'----------------------------------------------------------------------
' Das Programm erzeugt ein Lauflicht mit den LEDs und zeigt wie sie
' angesteuert werden
' Für den Betrieb des Roboters ist ein spezieller Treiber erforderlich,
' der nur einmal geladen werden muss. er wird nur mit diesem Beispiel
' geladen. Bei allen anderen Beispielen ist die entsprechende Zeile
' am Ende des Programms auskommentiert.
'-----------------------------------------------------------------------
' 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 (wie z.B. hier in diesem Beispiel).

' DER BETRIEB DER MOTOREN OHNE DIESE INITIALISIERUNG FÜHRT UNWEIGERLICH ZUR
' ZERSTÖRUNG DER ANTRIEBSELEKTRONIK !!
'------------------------------------------------------------------------
'RESOURCEN:
'Sie finden in allen Beispielen sämtliche Systemroutinen die zum Betrieb des
'Roboters notwendig sind.
'Viele davon greifen auf Hardwareresourcen zu, die Sie von C-Control her nicht
'kennen, deren genaue Funktionsweise aber im File "Project5_intern" erklärt ist.
'
' Für dieses Beispiel sind folgende SYSTEMROUTINEN relevant:

' POWER:
' gosub SUBSYS_PWR_ON ;Schaltet die Subsysteme EIN/AUS
' gosub SUBSYS_PWR_OFF

' AUSGABE:
' gosub LED1ON ;zum Ein/Ausschalten der LED1 analog auch LED 2bis 4
' gosub LED1OFF ;
' gosub LEDSOFF ;schaltet alle LEDS aus
'----------------------------------------------------------------------------

'--------------------------
'------ 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]
'--------------------------
'------ SENSORS ---------
'--------------------------
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]
'--------------------------
'---- USER MEMORY -------
'--------------------------
define TIM byte[6]
define PGM byte[7]
'--- 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---------------
gosub SUBSYS_PWR_ON:REV_L=off:REV_R=off
beep 368,10,0:pause 50

'--------------------------------------------
'--- DEMO LED LAUFLICHT ---
'--------------------------------------------
' Hier kommt dein Programm rein - Anfang ----
#LOOP
gosub LED1ON:pause 5:gosub LED1OFF
gosub LED2ON:pause 5:gosub LED2OFF
gosub LED3ON:pause 5:gosub LED3OFF
gosub LED4ON:pause 5:gosub LED4OFF
gosub LED3ON:pause 5:gosub LED3OFF
gosub LED2ON:pause 5:gosub LED2OFF
goto LOOP
'-------------------------------------------
' Hier kommt dein Programm rein - Ende ----

'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
#EXTPORT_WRITE
SYS SYSTEM:pulse STROBE:RETURN

'IIIIII SYSTEMROUTINEN COMM/NAV SYSTEM IIIII
#GET_IRDATA
SUBCMD=1:sys COMNAV:return
#SEND_IRDATA
SUBCMD=0:sys COMNAV: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
'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"


Es ist aber auch auf der CD dabei.

RP5
05.06.2007, 09:04
Ja, den Code hab ich auch, aber kannst du mir nur mal den Code rausschreiben, den man nur zum Aufleichten eines Leds braucht??
Also wenn das Programm started soll einfach nur 1 LED angehen.

Könntest du das für mich machen?

RobbyBoy
05.06.2007, 11:25
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIII
'IIIIIIIIII MOBILE ROBOT EVALUATION PROGRAM IIIIIIIIIIII
'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIIIII
' EINFACHES BEISPIEL ZUR BENUTZUNG DER LEDs
'Die Ein/Ausgabemöglichkeiten des Roboters sind sehr beschränkt, sind
'aber jedoch für einen normalen Betrieb ausreichend. Benutzen Sie die LEDs
'um z.B. Betriebszustände des Roboters anzuzeigen.
' ---------------------------------------------------------------------
' FUNKTION DES PROGRAMMS
'----------------------------------------------------------------------
' Das Programm erzeugt ein Lauflicht mit den LEDs und zeigt wie sie
' angesteuert werden
' Für den Betrieb des Roboters ist ein spezieller Treiber erforderlich,
' der nur einmal geladen werden muss. er wird nur mit diesem Beispiel
' geladen. Bei allen anderen Beispielen ist die entsprechende Zeile
' am Ende des Programms auskommentiert.
'-----------------------------------------------------------------------
' 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 (wie z.B. hier in diesem Beispiel).

' DER BETRIEB DER MOTOREN OHNE DIESE INITIALISIERUNG FÜHRT UNWEIGERLICH ZUR
' ZERSTÖRUNG DER ANTRIEBSELEKTRONIK !!
'------------------------------------------------------------------------
'RESOURCEN:
'Sie finden in allen Beispielen sämtliche Systemroutinen die zum Betrieb des
'Roboters notwendig sind.
'Viele davon greifen auf Hardwareresourcen zu, die Sie von C-Control her nicht
'kennen, deren genaue Funktionsweise aber im File "Project5_intern" erklärt ist.
'
' Für dieses Beispiel sind folgende SYSTEMROUTINEN relevant:

' POWER:
' gosub SUBSYS_PWR_ON ;Schaltet die Subsysteme EIN/AUS
' gosub SUBSYS_PWR_OFF

' AUSGABE:
' gosub LED1ON ;zum Ein/Ausschalten der LED1 analog auch LED 2bis 4
' gosub LED1OFF ;
' gosub LEDSOFF ;schaltet alle LEDS aus
'----------------------------------------------------------------------------

'--------------------------
'------ 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]
'--------------------------
'------ SENSORS ---------
'--------------------------
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]
'--------------------------
'---- USER MEMORY -------
'--------------------------
define TIM byte[6]
define PGM byte[7]
'--- 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---------------
gosub SUBSYS_PWR_ON:REV_L=off:REV_R=off
beep 368,10,0:pause 50

'--------------------------------------------
'--- 1 LED an ---
'--------------------------------------------
' Hier kommt dein Programm rein - Anfang ----
#LOOP

' LED einschalten
gosub LED1ON
pause 50
' LED ausschalten
gosub LED1OFF

goto LOOP
'-------------------------------------------
' Hier kommt dein Programm rein - Ende ----

'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
#EXTPORT_WRITE
SYS SYSTEM:pulse STROBE:RETURN

'IIIIII SYSTEMROUTINEN COMM/NAV SYSTEM IIIII
#GET_IRDATA
SUBCMD=1:sys COMNAV:return
#SEND_IRDATA
SUBCMD=0:sys COMNAV: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
'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"

recycle
05.06.2007, 12:35
Ja, den Code hab ich auch, aber kannst du mir nur mal den Code rausschreiben, den man nur zum Aufleichten eines Leds braucht??
Also wenn das Programm started soll einfach nur 1 LED angehen.


So ein Microcontroller kennt keine LEDs, Motoren, Optokopler usw., er kennt nur seine PINs.

D.h. wenn du eine LED die an einem dieser PINs angeschlossen ist einschalten willst, musst du dem Controller sagen, welchen PIN er schalten soll.

Damit man nicht immer im Schaltplan nachsehen muss, was an welchem PIN angeschlossen ist und dann im Datenblatt nachsehen muss, wie man diesen PIN schaltet, haben die Entwickler vom Robby eine Reihe an Funtionen, Alias-Namen usw. definiert.
Um das dann noch ein bischen übersichtlicher und verständlicher zu machen haben die Entwickler zusätzlich Kommentare und Trennlinien eingefügt.
Das sind Zeilen die mit einem "Hochkomma" anfangen, die werden vom Robby komplett ignoriert.



Um die LED1 zu schalten gibt es z.B. die Funktionen LED1ON und LED1OFF.

Das heisst, du brauchst nur diese Funktionen aufrufen:
gosub LED1ON ' schaltet LED1 an
gosub LED1OFF ' schaltet LED1 aus

Damit das Programm dann "weiss" was du von ihm willst, müssen die entprechenden Funktionen natürlich im Programmcode enthalten sein.

Praktisch bedeutet das, dass du am besten einfach ein komplettes Beispielprogramm mit allen definierten Funktionen usw. nimmst und dann deinen eigenen Teil zwischen die dafür vorgesehenen Zeilen schreibst:

Wo dein eigenen Code rein soll ist in den Beispielen ja ziemlich deutlich gekennzeichnet:


'--------------------------------------------
' Hier kommt dein Programm rein - Anfang ----

gosub LED1ON


'-------------------------------------------
' Hier kommt dein Programm rein - Ende ----


Wenn du dann nachvollziehen willst was dadurch im Programm passiert, kannst du dir die auferufenen Funktionen und Definitionen im Code ansehen und versuchen den Programmablauf nachzuvollziehen.

Theoretisch könntest du dann alle vorgegebenen Definitionen, Funktionen usw. die du in deinem Programmteil nicht aufrufst aus dem Quelltext löschen.
Ob das bei CBasic Sinn macht weiss ich nicht, bei einer Compilersprache würde es keinen machen, da ein Compiler normalerweise von sich aus nur die Funktionen übersetzt die verwendet werden.

Anfangs würde ich erst mal nichts von den vordefinierten Funktionen usw. rauswerfen sondern nur dein eigenes Programm zwischen die dafür vorgesehenen Zeilen schreiben.
Wenn du dich eingearbeitet hast und irgendwann mal die ganz harte Tour fahren willst, kannst du dir die Datenblätter, Schaltpläne usw. schnappen und dein Programm mit einem komplett leeren Quelltext anfangen.

RP5
05.06.2007, 22:55
Ok Ich glaube jetzt habe ich es endlich verstanden!
Also vielen Dank für deine schnellen und hilfreichen Antworten!