Hi JanPeter
Na da bin ich aber gespannt! Kannst mal bei Gelegenheit j amal den I2C Assemblercode hier posten. Würde ich mir gern auch mal anschaun.
Gruß Frank
Druckbare Version
Hi JanPeter
Na da bin ich aber gespannt! Kannst mal bei Gelegenheit j amal den I2C Assemblercode hier posten. Würde ich mir gern auch mal anschaun.
Gruß Frank
Hallo !
Hier das Beispiel, das man die Systemroutinen für den Antrieb nicht benötigt!
Code:' EINFACHES BEISPIEL ZUR BENUTZUNG VON ANTRIEB OHNE SYS-Befehle
' ---------------------------------------------------------------------
' 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.
' DER BETRIEB DER MOTOREN OHNE DIESE INITIALISIERUNG FÜHRT UNWEIGERLICH ZUR ZERSTÖRUNG
' DER ANTRIEBSELEKTRONIK !!
'-----------------------------------------------------------------------------------
' Für dieses Beispiel sind folgende SYSTEMROUTINEN relevant:
'
' POWER:
' gosub SUBSYS_PWR_ON ;Schaltet die Subsysteme EIN/AUS
' gosub SUBSYS_PWR_OFF
' AUSGABEN:
' gosub LED1ON ;zum Ein/Ausschalten der LED1 analog auch
' gosub LED1OFF ;LED 2bis 4
' gosub LEDSOFF ;schaltet alle LEDS aus
'
' ACS:
' gosub NO_ACS_INT ;Interruptbetrieb abgeschaltet
' SYS ACS_HI ;ACS HI POWER (SEHBEREICH ca. 60cm)
' SYS ACS_LO ;ACS LO POWER (SEHBEREICH ca. 30cm)
' SYS ACS_MAX ;ACS MAX POWER(SEHBEREICH ca. 100cm)
' SYS COMNAV_STATUS ;Abfrage des ACS
'-------------------------------------------------------------------
' ANTRIEB Neu
'
' GOSUB REVR ;Kette rückwärts laufen lassen R/L
' GOSUB REVL
' GOSUB FWDR ;Kette vorwärts laufen lassen R/L
' GOSUB FWDL
' GOSUB FWD ;beide Ketten vorwärts
' GOSUB REV ;beide Ketten rückwärts
' GOSUB ROTR ;Auf der Stelle nach R/L drehen
' GOSUB ROTL
'----------------------------------------------------------------
'--------------------------
'------ 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]
define ACSL_F bit[33]
define ACSR_F bit[34]
define IR_F bit[35]
'--------------------------
'---- 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 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
beep 368,10,50
'---- SYSTEM OPERATION MODE (NO INTERRUPT) ----
gosub NO_ACS_INT:beep 368,10,0:SYS ACS_MAX
'------------ ANTRIEB -------------------------
REV_L=on:REV_R=on:SYS PLM_SLOW
'--------------------------------------------
'--- DEMO ANTRIEB ---
'--------------------------------------------
#loop
pause 5:SYS COMNAV_STATUS
'--------- LEDs ansteuern --------------------
if ACSL_F=on then gosub LED4ON else gosub LED4OFF
if ACSR_F=on then gosub LED1ON else gosub LED1OFF
'--------- AUSWEICHMANÖVER EINLEITEN ---------
if (ACSL_F and ACSR_F)=on then goto rotate
if ACSL_F=on then goto move_right
if ACSR_F=on then goto move_left
'SYS FWD:SPEED_L=85:SPEED_R=85:goto loop
gosub FWD:SPEED_L=85:SPEED_R=85:goto loop
'-------- AUSWEICHEN NACH RECHTS -------------
#move_right
SPEED_R=70:SPEED_L=85:goto loop
'-------- AUSWEICHEN NACH LINKS -------------
#move_left
SPEED_L=70:SPEED_R=85:goto loop
'---------- ROTIEREN --------------------
#rotate
SPEED_L=85:SPEED_R=85:gosub ROTR:goto loop
'----------------------------------------------
'IIIIIIIIII Neue ANTRIEBSROUTINEN IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
' Damit im Treiber Platz wird, kann auch mit altem Treiber p5driv.s19
' benutzt werden ,bringt aber dann nichts !-)
#REVR 'ANTRIEB RECHTS RÜCKWÄRTS
REV_R=off
return
#REVL 'ANTRIEB LINKS RÜCKWÄRTS
REV_L=off
return
#FWDR 'ANTRIEG RECHTS VORWÄRTS
REV_R=on
return
#FWDL 'ANTRIEB LINKS VORWÄRTS
REV_L=on
return
#ROTR 'RECHTS DREHEN
gosub FWDL
gosub REVR
return
#ROTL 'LINKS DREHEN
gosub FWDR
gosub REVL
return
#REV 'RÜCKWÄRTS
gosub REVL
gosub REVR
return
#FWD 'VORWÄRTS
gosub FWDL
gosub FWDR
return
'-------------------------------------------------------------------
'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"
Hallo Frank !
Hier mal ein kürzerer Treiber für I2C. ( Ist aber nicht von mir)
Code:;Ansteuerung eines PCF8574 über SDA und SCL
;Verwendung des vorhandenen I2C-Bus
.org $101
;EEPROM vom Bus abmelden
jsr $08BB ;I2C_ReadLast
;Schreibzugriff auf PCF8574
ldx $0A1 ;Adresse PCF8574 lesen
jsr $083C ;I2C_Start
ldx $0A2 ;Daten lesen
jsr $0846 ;I2C_Write
jsr $08E5 ;I2C_Stop
;Lesezugriff auf PCF8574
ldx $0A1 ;Adresse lesen
incx ;Lesebit setzen
jsr $083C ;I2C_Start
jsr $086F ;I2C_Read
sta $0A2 ;Daten speichern
jsr $08BB ;I2C_ReadLast
;EEPROM wieder anmelden
ldx #$0A0 ;Adresse 24C65, write
jsr $083C ;I2C_Start
ldx $066 ;AdrCounter Hi
jsr $0846 ;I2C_Write
ldx $067 ;AdrCounter Lo
jsr $0846 ;I2C_Write
ldx #$0A1 ;Adresse 24C65, read
jsr $083C ;I2C_Start
rts
.end
Hi
Das Programm ist dem im Download-Bereich sehr ähnlich, nutzt nur eine Sytemroutine mehr! Muß man halt mal testen!
Hallo Frank !
Nein 2!
I2C-Write
und
I2C-Start
Hallo Frank !
Ich habe den neuen Treiber mit dieser I2C-Routine für Robbi fertig.
Muß ich nur noch Testen, schätze mal am Wochenende kann ich mehr sagen. :D
Hallo janpeter,
könntest Du bitte Dein Dis-Assemblat irgendwie verfügbar machen?
mfg jörg
Hallo Jörg!
Erst mal muß ich testen ob alles funktioniert!
OK, und danke im Voraus.
PS: wenn ich Dir dabei helfen kann: melde Dich (seit gestern abend habe ich auch so einen Robby - hat mich schon die erste Nacht gekostet, ist aber witzig!)
Jetzt war ich doch zu ungeduldig, und deshalb habe ich den P5DRIV auch disassembliert. Ich habe ihn im Thread "Frage an DIE HARD gibt es den..." beigefügt - vielleicht spart sich jemand unnötige Mühen.
PS: ich bin mir nicht sicher, dass alles stimmt, sieht aber plausibel aus.