- 12V Akku mit 280 Ah bauen         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 21

Thema: Frage zu BASIC

  1. #11
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo Torrentula,

    hier mal ein "Leerprogramm" für den CCRP5 mit Erweiterung. Da sind alle Definitionen, Variablen und Unterprogramme richtig drin.
    Code:
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    'IIIIIIIIII          ROBBY RP5 - Leerprogramm 2            IIIIIIIIIIII
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    'PROGRAMM-RUMPF ZUM START EIGENER ENTWICKLUNGEN
    
    ' Programm-Name: LEERPROGRAMM_BE1.bas
    ' Hardware:      Robby RP5 MIT Erweiterungsplatine, aber OHNE CC2
    '                (und ggf. mit LC-Display an LCD1)
    ' Treiber:       P5DRIV12.S19
    '----------------------------------------------------------------------
    '------ 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]
    define LSTROBE      port[7]
    '-- INTERFACE COM/NAV -----
    define DATALINE     port[1]
    define CLOCKLINE    port[2]
    '-- CC2 INTERFACE   -------
    define CC2POWER     port[8]
    '------ LCD INTERFACE ------
    'define lcd_port  byteport[2] 'Frei, wenn kein LCD angeschlossen ist!
    'define lcd_rs       port[14]
    'define lcd_rw       port[13]
    'define lcd_e        port[15]
    '--------------------------
    '------ 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]
    define LEDPORT       byte[6]
    define L1_F          bit[41]
    define L2_F          bit[42]
    define L3_F          bit[43]
    define L4_F          bit[44]
    define L5_F          bit[45]
    define L6_F          bit[46]
    define L7_F          bit[47]
    define L8_F          bit[48]
    '---- LCD DRIVER -------------
    'define lcd_buf       byte[7] 'Bytes 7 und 8 frei, wenn LCD nicht genutzt wird!
    'define lcd_param     byte[8]
    '--------------------------
    '----  USER MEMORY  -------
    '--------------------------
    define DEVICEADDRESS byte[9]
    'User Memory ab BYTE[10] frei!
    
    '--- SYSTEMROUTINEN -----------
    define PLM_SLOW      &H01C2
    define SYSTEM        &H01C7
    define LED_DRIVE     &H01CA
    define COMNAV        &H0144
    '- 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        &H01E0   'ACS POWER LO
    define ACS_HI        &H01E8   '
    define ACS_MAX       &H01F0   '
    define SEND_TLM      &H013A   'SENDET TELEMETRIE (CH=HBYTE, DATEN=LBYTE)
    define SEND_SYSSTAT  &H0134   'SENDET TLM KANAL 0, SYSTEM STATUS
                                  '(FLAGS für ACS, FWD/REV, ACS_LO/HI/MAX)
    '---------- INIT---------------
    ' Basiserweiterung initialisieren:
    LSTROBE=off 'LEDPORT-Zugriff ermöglichen
    CC2POWER=on 'PWR und +5V (für CC2 und Experimentierplatine) einschalten
    
    ' Subsysteme einschalten:
    gosub SUBSYS_PWR_ON
    
    ' LC-Display initialisieren:
    'gosub LCD_INIT
    
    beep 368,10,0:pause 50
    gosub LEDSOFF 'Alle LEDs auf Robby aus
    gosub LOFF    'Alle LEDs auf Basiserweiterung 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 8 LEDs der Basiserweiterung IIIIIIII
    ' Der Robby mit Basiserweiterung kann OHNE LC-Display keine Werte
    ' (z.B. seiner Sensoren) anzeigen. Diese Routine gibt VALUE mit
    ' den 8 LEDs der Basiserweiterung in Binärform (8 Bit) aus.
    ' Die Variable VALUE muss als BYTE definiert sein!
    '#LBINOUT
    'gosub LOFF: gosub L1FLASH: gosub L1FLASH
    'gosub L1FLASH: gosub L1FLASH: gosub L1FLASH
    'if (VALUE and &B1) <> 0 then gosub L1ON
    'if (VALUE and &B10) <> 0 then gosub L2ON
    'if (VALUE and &B100) <> 0 then gosub L3ON
    'if (VALUE and &B1000) <> 0 then gosub L4ON
    'if (VALUE and &B10000) <> 0 then gosub L5ON
    'if (VALUE and &B100000) <> 0 then gosub L6ON
    'if (VALUE and &B1000000) <> 0 then gosub L7ON
    'if (VALUE and &B10000000) <> 0 then gosub L8ON
    'pause 200: return
    '#L1FLASH
    'gosub L1ON: pause 5: gosub L1OFF: 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
    ' L1->  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1
    ' L2->  0  0  1  1  0  0  1  1  0  0  1  1  0  0  1  1
    ' L3->  0  0  0  0  1  1  1  1  0  0  0  0  1  1  1  1
    ' L4->  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).
    ' Für jede leuchtende LED 5 bis 8 muss noch folgender Wert addiert
    ' werden: L5->  + 16
    '         L6->  + 32
    '         L7->  + 64
    '         L8->  +128
    ' Damit erhält man dann den ganzen 8-Bit-Dezimalwert (0..255).
    
    '----------------------------------------------------------------------
    
    '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
    sys SYSTEM:pulse STROBE:return
    
    '--- LEDS AUF DER BASIS ERWEITERUNG  ------
    #L1ON
    L1_F=on:goto LEDPORT_WRITE
    #L1OFF
    L1_F=off :goto LEDPORT_WRITE
    #L2ON
    L2_F=on:goto LEDPORT_WRITE
    #L2OFF
    L2_F=off :goto LEDPORT_WRITE
    #L3ON
    L3_F=on:goto LEDPORT_WRITE
    #L3OFF
    L3_F=off :goto LEDPORT_WRITE
    #L4ON
    L4_F=on:goto LEDPORT_WRITE
    #L4OFF
    L4_F=off :goto LEDPORT_WRITE
    #L5ON
    L5_F=on:goto LEDPORT_WRITE
    #L5OFF
    L5_F=off :goto LEDPORT_WRITE
    #L6ON
    L6_F=on:goto LEDPORT_WRITE
    #L6OFF
    L6_F=off :goto LEDPORT_WRITE
    #L7ON
    L7_F=on:goto LEDPORT_WRITE
    #L7OFF
    L7_F=off :goto LEDPORT_WRITE
    #L8ON
    L8_F=on:goto LEDPORT_WRITE
    #L8OFF
    L8_F=off :goto LEDPORT_WRITE
    #LOFF
    LEDPORT=0 :goto LEDPORT_WRITE
    #LON
    LEDPORT=&HFF
    #LEDPORT_WRITE
    sys LED_DRIVE:pulse LSTROBE:return
    
    '----------------------------------------
    '------------- LCD ROUTINES -------------
    '----------------------------------------
    '#LCD_INIT
    ' alle ports 0
    '  lcd_port = OFF
    
    ' 8-Bit-Modus aktivieren
    '  lcd_param=&H38 : gosub LCD_WRITECMD
    
    ' mit 8-Bit-Command in 4-Bit-Modus umschalten
    '  lcd_port=&B00000010
    '  tog lcd_e
    '  tog lcd_e
    
    ' ab jetzt 4-Bit-Modus
    '  lcd_param = &H28 : gosub LCD_WRITECMD
    '  lcd_param = &H0C : gosub LCD_WRITECMD
    
    ' Display loeschen
    '#LCD_CLS
    '  lcd_param = &H02 : gosub LCD_WRITECMD
    '  lcd_param = &H01 : gosub LCD_WRITECMD
    'return
    
    ' Zeilenwechsel
    '#LCD_GOTOLINE
    '  if lcd_param = 1 then lcd_param = &H80
    '  if lcd_param = 2 then lcd_param = &HC0
    '  goto LCD_WRITECMD
    
    ' LCD-Kommando
    '#LCD_WRITECMD
    '  lcd_buf = OFF
    '  goto LCD_WRITE
    
    ' Zeichenausgabe
    '#LCD_WRITECHAR
    '  lcd_buf = &B00100000
    
    ' Kommando oder Zeichen an Display senden
    '#LCD_WRITE
    '  lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
    '  tog lcd_e
    '  tog lcd_e
    '  lcd_port = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
    '  tog lcd_e
    '  tog lcd_e
    '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 "p5driv12.s19"
    Gruß Dirk

  2. #12
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Danke!

    Gruß

    Torrentula
    MfG Torrentula

  3. #13
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Ist das 2*16 character LC-Display auch kaputt wenn ich den Kontrast einstellen kann? Ich hab hier im Forum nämlich gelesen (glaub das war sogar ein Beitrag von dir Dirk), dass wenn man das LCD einmal falsch auf die BE steckt, es kapputt ist. Die Frage rührt daher, dass ich mir nicht sicher bin, ob ich's falsch draufgesteckt habe und das Beispoelprogramm irgendwie nicht läuft.

  4. #14
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Ist das 2*16 character LC-Display auch kaputt wenn ich den Kontrast einstellen kann?
    Kann sein. Leider.

    Hast du es auch am Stecker LCD1 sitzen?

    Gruß Dirk

  5. #15
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Es sitzt an stecker 1 also links. Ich glaub im programm steht "...evtl. empfangene Daten werden am Display angezeigt."

  6. #16
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Dieses Programm

    Code:
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    'IIIIIIIIII          ROBBY RP5 - Leerprogramm 2            IIIIIIIIIIII
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
    'PROGRAMM-RUMPF ZUM START EIGENER ENTWICKLUNGEN
    
    ' Programm-Name: LEERPROGRAMM_BE1.bas
    ' Hardware:      Robby RP5 MIT Erweiterungsplatine, aber OHNE CC2
    '                (und ggf. mit LC-Display an LCD1)
    ' Treiber:       P5DRIV12.S19
    '----------------------------------------------------------------------
    '------ 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]
    define LSTROBE      port[7]
    '-- INTERFACE COM/NAV -----
    define DATALINE     port[1]
    define CLOCKLINE    port[2]
    '-- CC2 INTERFACE   -------
    define CC2POWER     port[8]
    '------ LCD INTERFACE ------
    define Daten     byteport[1]
    define lcd_port  byteport[2] 'Frei, wenn kein LCD angeschlossen ist!
    define lcd_RS       port[14]
    define lcd_RW       port[13]
    define lcd_E        port[15]
    '--------------------------
    '------ 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]
    define LEDPORT       byte[6]
    define L1_F          bit[41]
    define L2_F          bit[42]
    define L3_F          bit[43]
    define L4_F          bit[44]
    define L5_F          bit[45]
    define L6_F          bit[46]
    define L7_F          bit[47]
    define L8_F          bit[48]
    '---- LCD DRIVER -------------
    define lcd_buf       byte[7] 'Bytes 7 und 8 frei, wenn LCD nicht genutzt wird!
    define lcd_param     byte[8]
    '--------------------------
    '----  USER MEMORY  -------
    '--------------------------
    define DEVICEADDRESS byte[9]
    define zeichen       byte[10]
    'User Memory ab BYTE[10] frei!
    
    '--- SYSTEMROUTINEN -----------
    define PLM_SLOW      &H01C2
    define SYSTEM        &H01C7
    define LED_DRIVE     &H01CA
    define COMNAV        &H0144
    '- 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        &H01E0   'ACS POWER LO
    define ACS_HI        &H01E8   '
    define ACS_MAX       &H01F0   '
    define SEND_TLM      &H013A   'SENDET TELEMETRIE (CH=HBYTE, DATEN=LBYTE)
    define SEND_SYSSTAT  &H0134   'SENDET TLM KANAL 0, SYSTEM STATUS
                                  '(FLAGS für ACS, FWD/REV, ACS_LO/HI/MAX)
    '---------- INIT---------------
    ' Basiserweiterung initialisieren:
    LSTROBE=off:CC2POWER=on 
    ' Subsysteme einschalten:
    gosub SUBSYS_PWR_ON
    ' LC-Display initialisieren:
    gosub LCD_INIT
    '----------------------------------------------
    beep 368,10,0:pause 50
    '------------ ANTRIEB -------------------------
    REV_L=on:REV_R=on:sys PLM_SLOW
    '----------------------------------------------------------------------
    ' Hier ggf. weitere Initialisierungs-Befehle!!!
    
    '----------------------------------------------------------------------
    ' PROGRAMM:
    lcd_E = 0
    lcd_RW = 0
    lcd_RS = 0 : Daten = &H0E : pulse lcd_E
    lcd_RS = 0 : Daten = &H01 : pulse lcd_E
    lcd_RS = 1 : Daten = 65 : pulse lcd_E
    lcd_RS = 1 : Daten = 66 : pulse lcd_E
    '----------------------------------------------------------------------
    ' 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 8 LEDs der Basiserweiterung IIIIIIII
    ' Der Robby mit Basiserweiterung kann OHNE LC-Display keine Werte
    ' (z.B. seiner Sensoren) anzeigen. Diese Routine gibt VALUE mit
    ' den 8 LEDs der Basiserweiterung in Binärform (8 Bit) aus.
    ' Die Variable VALUE muss als BYTE definiert sein!
    '#LBINOUT
    'gosub LOFF: gosub L1FLASH: gosub L1FLASH
    'gosub L1FLASH: gosub L1FLASH: gosub L1FLASH
    'if (VALUE and &B1) <> 0 then gosub L1ON
    'if (VALUE and &B10) <> 0 then gosub L2ON
    'if (VALUE and &B100) <> 0 then gosub L3ON
    'if (VALUE and &B1000) <> 0 then gosub L4ON
    'if (VALUE and &B10000) <> 0 then gosub L5ON
    'if (VALUE and &B100000) <> 0 then gosub L6ON
    'if (VALUE and &B1000000) <> 0 then gosub L7ON
    'if (VALUE and &B10000000) <> 0 then gosub L8ON
    'pause 200: return
    '#L1FLASH
    'gosub L1ON: pause 5: gosub L1OFF: 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
    ' L1->  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1
    ' L2->  0  0  1  1  0  0  1  1  0  0  1  1  0  0  1  1
    ' L3->  0  0  0  0  1  1  1  1  0  0  0  0  1  1  1  1
    ' L4->  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).
    ' Für jede leuchtende LED 5 bis 8 muss noch folgender Wert addiert
    ' werden: L5->  + 16
    '         L6->  + 32
    '         L7->  + 64
    '         L8->  +128
    ' Damit erhält man dann den ganzen 8-Bit-Dezimalwert (0..255).
    
    '----------------------------------------------------------------------
    
    '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
    sys SYSTEM:pulse STROBE:return
    
    '--- LEDS AUF DER BASIS ERWEITERUNG  ------
    #L1ON
    L1_F=on:goto LEDPORT_WRITE
    #L1OFF
    L1_F=off :goto LEDPORT_WRITE
    #L2ON
    L2_F=on:goto LEDPORT_WRITE
    #L2OFF
    L2_F=off :goto LEDPORT_WRITE
    #L3ON
    L3_F=on:goto LEDPORT_WRITE
    #L3OFF
    L3_F=off :goto LEDPORT_WRITE
    #L4ON
    L4_F=on:goto LEDPORT_WRITE
    #L4OFF
    L4_F=off :goto LEDPORT_WRITE
    #L5ON
    L5_F=on:goto LEDPORT_WRITE
    #L5OFF
    L5_F=off :goto LEDPORT_WRITE
    #L6ON
    L6_F=on:goto LEDPORT_WRITE
    #L6OFF
    L6_F=off :goto LEDPORT_WRITE
    #L7ON
    L7_F=on:goto LEDPORT_WRITE
    #L7OFF
    L7_F=off :goto LEDPORT_WRITE
    #L8ON
    L8_F=on:goto LEDPORT_WRITE
    #L8OFF
    L8_F=off :goto LEDPORT_WRITE
    #LOFF
    LEDPORT=0 :goto LEDPORT_WRITE
    #LON
    LEDPORT=&HFF
    #LEDPORT_WRITE
    sys LED_DRIVE:pulse LSTROBE:return
    
    '----------------------------------------
    '------------- LCD ROUTINES -------------
    '----------------------------------------
    #LCD_INIT
    'alle ports 0
     lcd_port = OFF
    
    ' 8-Bit-Modus aktivieren
      lcd_param=&H38 : gosub LCD_WRITECMD
    
    ' mit 8-Bit-Command in 4-Bit-Modus umschalten
      lcd_port=&B00000010
      tog lcd_e
      tog lcd_e
    
    ' ab jetzt 4-Bit-Modus
      lcd_param = &H28 : gosub LCD_WRITECMD
      lcd_param = &H0C : gosub LCD_WRITECMD
    
    ' Display loeschen
    #LCD_CLS
      lcd_param = &H02 : gosub LCD_WRITECMD
      lcd_param = &H01 : gosub LCD_WRITECMD
      return
    
    ' Zeilenwechsel
    #LCD_GOTOLINE
      if lcd_param = 1 then lcd_param = &H80
      if lcd_param = 2 then lcd_param = &HC0
      goto LCD_WRITECMD
    
    ' LCD-Kommando
    #LCD_WRITECMD
      lcd_buf = OFF
      goto LCD_WRITE
    
    ' Zeichenausgabe
    #LCD_WRITECHAR
      lcd_buf = &B00100000
    
    ' Kommando oder Zeichen an Display senden
    #LCD_WRITE
      lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
      tog lcd_e
      tog lcd_e
      lcd_port = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
      tog lcd_e
      tog lcd_e
      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 "p5driv12.s19"
    sollte bereits "AB" auf das LC-Display am Stecker LCD1 schreiben.

    Dieses tut es aber nicht.

    Stattdessen leuchtet die gelbe Kontrollleuchte an der Basiserweiterung, auf der BE werden LED 1 und 5 eingeschaltet gleichzeitig erlischt die Kontrollleuchte wieder, die grüne LED für den Co-Prozessor (IR;COM/NAV) blinkt kurz auf und die LEDs leuchten immernoch. Zusätzlich leuchten auf Robby noch die LEDs 1 und 4.

    Kann mir jemand helfen?

    P.S.: Das Huptprogramm also
    Code:
    lcd_E = 0
    lcd_RW = 0
    lcd_RS = 0 : Daten = &H0E : pulse lcd_E
    lcd_RS = 0 : Daten = &H01 : pulse lcd_E
    lcd_RS = 1 : Daten = 65 : pulse lcd_E
    lcd_RS = 1 : Daten = 66 : pulse lcd_E
    stammt aus dem PDF "LC-Display_am_Robby" von user jonas. "lcd_" habe ich selbst davorgesetzt, weil es ja so definiert ist.
    MfG Torrentula

  7. #17
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Zitat Zitat von Torrentula
    Es sitzt an stecker 1 also links. Ich glaub im programm steht "...evtl. empfangene Daten werden am Display angezeigt."
    schuldigung ich meine rechts
    MfG Torrentula

  8. #18
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Dieses Programm ... sollte bereits "AB" auf das LC-Display am Stecker LCD1 schreiben. Dieses tut es aber nicht.
    Das klappt auch so nicht.
    Dieses Hauptprogramm schreibt "AB" in Zeile 1 des LCD:
    Code:
    gosub LCD_CLS 'LCD löschen
    lcd_param = 1 : gosub lcd_gotoline 'Zeile 1 wählen
    lcd_param = &H41 : gosub lcd_writechar 'A
    lcd_param = &H42 : gosub lcd_writechar 'B
    end
    Gruß Dirk

  9. #19
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Ah.. Ok danke dann versuch ichs damit und lass das PDF ruhen.

    Gruß

    Torrentula

    P.S.: gibts hier irgendwo ne ASC2 Tabelle?

  10. #20
    Erfahrener Benutzer Begeisterter Techniker Avatar von Torrentula
    Registriert seit
    10.10.2009
    Ort
    Procyon A
    Beiträge
    355
    Das LCD wird doch mit dem roten Kabel richtung LEDs angeschlossen?

    Wenn ja dann ist mein LCD im A****
    MfG Torrentula

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress