Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: CAN Bus Kategorie: Verschiedenes (von Dieter Kalkofen - 11.09.2004 16:58)
 Als Antwort auf CAN Bus von Mihael - 7.09.2004 19:23

> Hallo,
> hat jemand schon über CAN Bus zwei C_Control verbunden, wen ja, ein beispiel währe gut basic oder ASM.
>
>

 Hallo
 Ich habe zwei M-Units und verschidene Rechner mit einander verkoppelt
 Vileicht sollte man die neue M-Unit benutzen da wesentlich schneller (32 MHZ)
 Eingesetzt habe ich ein SJA 1000 von Philips die module laufen auf 500 mb
 die Schaltung  habe ich aus einem Elektor Projekt entwickelt
 Das Programm hat nur ein Problem ID unter 300 werden nich richtig übermittelt sonst keine Fehler

 

  define A byte
 define D byte
 define E byte
 define Z byte
 define H byte
 define T byte
 define Q byte
 define L byte
 define M byte
 define X byte
 define QQ byte
 define SR byte
 define DFL byte
 define REG byte
 define RTR byte
 define IDH byte
 define IDL byte
 define ID word
 define KH word
 define KL word


 define DD byteport[1]
 define AD byteport[2]
 define ALE port[ 9]
 define CS  port[10]
 define RD  port[11]
 define WR  port[12]


 #START
 BEEP 100,25,10
 BEEP 100,25,10
 PRINT "CAN-BUS SENDER"
 DD=0 : ALE=0 : CS=1 : RD=1 : WR=1
 GOSUB INITIALE
 BEEP 400,25,10


 'ID 400
 'BYTE 0:                                            start:
 'D0      VIDEO 0        0=Rückfahr    1=Frei        0    Kanal=0
 'D1      VIDEO 1        2=Frei        3=Extern      0
 'D2      Monitor 3 0    0=CPU Navi    1=CPU 3       1    M3=3
 'D3      Monitor 3 1    2=CPU 1(2)    3=OSD         1
 'D4      Osd   0        0=Lokalmod    1=Mixedmod    0    OSD=0
 'D5      osd   1        2=Automod     3=Osd aus     0
 'D6      Monitor 2      0=CPU 1(2)                  1    M2=1
 'D7      Monitor 1      0=CPU 1(2)                  1    M1=1


 #LOOP1
 ID=400 : DFL=1
 '            128 64   32 16   8 4   3 1
 REG=12+0 : D=&B11001100 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100
 REG=12+0 : D=&B11101100 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100
 REG=12+0 : D=&B11101101 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100
 REG=12+0 : D=&B11101110 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100
 REG=12+0 : D=&B11101111 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100
 REG=12+0 : D=&B11000000 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100
 REG=12+0 : D=&B11000100 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100
 REG=12+0 : D=&B11001000 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100
 REG=12+0 : D=&B11001100 : GOSUB C_WR : GOSUB SENDEN : PAUSE 100
 BEEP 200,25,10

 GOTO LOOP1







 #SENDEN
 REG=&H02 : GOSUB C_RD : Q=D AND 4
 'PRINT "D=";D ;"  Q=";Q
 IF Q=0 THEN GOTO SENDEN
 REG=&H0A : D=ID/8 : GOSUB C_WR
 REG=&H0B : D=(ID-8*(ID/8))*32+DFL : GOSUB C_WR
 REG=&H01 : D=&H0D    : GOSUB C_WR     'D=&H0D  Traransmission request 1100
 REG=&H02 : GOSUB C_RD : SR=D
 RETURN
 '

 '
 #EMFANGEN
 REG=&H02 : GOSUB C_RD : SR=D
 PRINT "STATUS=";SR
 Q=SR AND 2 : IF Q=2  THEN GOTO CLR_OVERRUN '(2)
 Q=SR AND 1 : IF Q=0  THEN GOTO EMFANGEN
 REG=&H14 : GOSUB C_RD : IDH=D*8
 REG=&H15 : GOSUB C_RD : IDL=D/32
 ID=IDH+IDL
 IF ID=300 THEN BEEP 100,25,10 ELSE BEEP 500,25,10
 PRINT "ID=";ID;"  "
 PRINT "WRTE ";
 FOR L=0 TO 7
  REG=&H16+L : GOSUB C_RD
  PRINT D"  ";
 NEXT L
 IF ID=300 THEN GOSUB RRB
 REG=&H01 : D=&H0C : GOSUB C_WR
 RETURN
 '
 #RRB
 REG=&H16+6 : GOSUB C_RD : REG=8 : GOSUB SET
 REG=&H16+7 : GOSUB C_RD : REG=9 : GOSUB SET
 RETURN

 '
 #CLR_OVERRUN
 REG=&H01 : D=8 : GOSUB C_WR
 GOTO EMFANGEN

 END



 #INITIALE
 REG=&H00 : D=&H01 : GOSUB C_WR
 REG=&H00 : D=&H01 : GOSUB C_WR
 #W_R
 REG=&H00 : GOSUB C_RD : Q=D AND 1 : IF Q<>1 THEN GOTO W_R
 PRINT "RESET OK"
 'Übertragung auf 500
 REG=&H1F : D=&H43 : GOSUB C_WR
 REG=&H04 : D=&H00 : GOSUB C_WR
 REG=&H05 : D=&HFF : GOSUB C_WR
 REG=&H06 : D=&H00 : GOSUB C_WR 'BT0
 REG=&H07 : D=&H1C : GOSUB C_WR 'BT1
 REG=&H08 : D=&H1A : GOSUB C_WR
 REG=&H01 : D=&H0E : GOSUB C_WR
 REG=&H00 : D=&H00 : GOSUB C_WR
 #W_I
 REG=&H00 : GOSUB C_RD : Q=D AND 1 : IF Q>0 THEN GOTO W_I
 PRINT "INITIALE OK"
 RETURN


 #SCAN
 DEACT DD : D=0
 AD=16*REG + 15
 D=DD
 AD=15
 RETURN
 #SET
 DD=D
 AD=16*REG + 15
 DD=D
 AD=15
 RETURN


 #C_WR
 ALE=1 : CS=1 : RD=1 : WR=1
 DD=REG
 ALE=0
 PAUSE 1
 CS=0
 DD=D
 WR=0
 WR=1
 CS=1
 ALE=1
 RETURN
 #C_RD
 ALE=1 : CS=1 : RD=1 : WR=1
 DD=REG
 ALE=0
 CS=0
 RD=0
 DEACT DD
 D=DD
 RD=1
 CS=1
 ALE=1
 RETURN

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

 Mit freundlichen Gruss

 Dieter Kalkofen



 Antwort schreiben

Bisherige Antworten: