-
        

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 22

Thema: Robby Programmierung

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    16.07.2006
    Beiträge
    14

    Robby Programmierung

    Anzeige

    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

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    16.07.2006
    Beiträge
    14
    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!!

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Start mit RP5

    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 :
    Code:
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    'IIIIIIIIII          ROBBY RP5 - Leerprogramm 1            IIIIIIIIIIII
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    '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

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    16.07.2006
    Beiträge
    14
    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?

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Definitionen

    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

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    16.07.2006
    Beiträge
    14
    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 )

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    21.08.2006
    Beiträge
    74

    Ich bekomm's einfach nich hin!

    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

  8. #8
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    LED einschalten

    Hallo dj,

    siehe oben!!!
    Code:
    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!
    Zum Beispiel: Pause 50

    Gruß Dirk

  9. #9
    Benutzer Stammmitglied
    Registriert seit
    21.08.2006
    Beiträge
    74
    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

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791

    Basic

    Hallo dj,

    das Piepen ist normal.

    Nimm 'mal folgendes Hauptprogramm:

    Code:
    #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

Seite 1 von 3 123 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •