PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : can-bus programmieren



patti16
18.12.2005, 21:41
hallo

wie ihr ja wisst hat ja Kjion das Can-Bus board gebaut, aber gibts da irgendwelche bestimmten Befehle oder auch wieder wie beim Twi-Bus(libx. datein, nee!?!), wenn ja könnte mir jemand mehr Infos zum Programmieren von dem Can-Bus geben.

habe bei google darüber leider nichts gefunden.



gruß
patrick

patti16
19.12.2005, 16:59
weiß keiner was?

Kjion
20.12.2005, 20:55
Moin,

ich hab ein Tutorial zur Programmierung des MCP2515 auf meine Seite gestellt. Siehe:
http://www.kreatives-chaos.com/index.php?seite=mcp2515

Das ist zwar in C, sollte sich aber auch in Bascom umsetzen lassen.

MfG Kjion

patti16
20.12.2005, 21:39
ok werde ich mir mal anschauen.

und den code versuchen auf bascom zu übertragen.

gruß
patrick

klaus1973
29.12.2005, 21:33
Hallo patti,

bist du weiter gekommen?
Ichahbe Interesse an deiner Übersetzung.

Klaus

feitzi
06.06.2007, 21:40
Hallo
Hat es jemand geschaft den Code vom Kreativen-Caos in ein funktionierenden Basic-Code zu Programmiren.
Ich habe es nicht geschaft. Währe aber An der Übersetzung sehr interresiert.
Gruß Feitzi

MartinITM
06.06.2007, 22:22
Hio,

falls du es mit Bascom zum laufen bringen solltest, brauchst du min. 2 Knoten damit das ganze funktioniert, meine ich.

Gruß
Martin

Vitis
07.06.2007, 12:41
Ich hab mal n Teil davon in Bascom übersetzt ... bzw. übersetzt hab ich mehr, aber das Projekt ist noch im Entsehen, daher mal die definitiv laufenden Teile:



$regfile = "m16def.dat" ' ATMega16
$crystal = 14745600 ' Baudratenquarz
$hwstack = 40 ' default use 32 for the hardware stack
$swstack = 80 ' default use 10 for the SW stack
$framesize = 90

Declare Sub Can_init()
Declare Sub Mcp2515_write(byval Reg_add As Byte , Byval Reg_val As Byte)
Declare Sub Mcp2515_bitmodify(byval Reg_add As Byte , Byval Reg_mask As Byte , Byval Reg_val As Byte)
Declare Function Mcp2515_read(byval Reg_add As Byte) As Byte

Mcp2515cs Alias Portb.4
Config Mcp2515cs = Output

Const Cmd_read = &H03 ' Read Command
Const Cmd_write = &H02 ' Write Command
Const Cmd_bitmodify = &H05 ' Bit-modify Command
Const Cmd_readstatus = &HA0 ' Read Status Command (poll)
Const Cmd_read_rx_status = &HB0
Const Cmd_reset = &HC0 ' Reset Command
Const Cmd_rts0 = &H81
Const Cmd_rts1 = &H82


Const Caninte = &H2B
Const Canctrl = &H0F
Const Canstat = &H0E ' Statusregister
Const Eflg = &H2D ' Error Flag Register
Const Cnf3 = &H28 ' Configuration Register 3
Const Cnf2 = &H29 ' Configuration Register 2
Const Cnf1 = &H2A ' Configuration Register 1
Const Txb0ctrl = &B00110000 ' Transmit Buffer 0 Control Register
Const Txb0sidh = &B00110001 ' Transmit Buffer 0 Std Identifier High
Const Txb0sidl = &B00110010 ' Transmit Buffer 0 Std Identifier Low
Const Txb0eid8 = &B00110011 ' Transmit Buffer 0 Ext Identifier High
Const Txb0eid0 = &B00110100 ' Transmit Buffer 0 Ext Identifier Low
Const Txb0dlc = &B00110101 ' Transmit Buffer 0 Data Length Code
Const Txb0d0 = &B00110110 ' Transmit Buffer 0 Data Byte 0
Const Txb0d1 = &B00110111 ' Transmit Buffer 0 Data Byte 1
Const Txb0d2 = &B00111000 ' Transmit Buffer 0 Data Byte 2
Const Txb0d3 = &B00111001 ' Transmit Buffer 0 Data Byte 3
Const Txb0d4 = &B00111010 ' Transmit Buffer 0 Data Byte 4
Const Txb0d5 = &B00111011 ' Transmit Buffer 0 Data Byte 5
Const Txb0d6 = &B00111100 ' Transmit Buffer 0 Data Byte 6
Const Txb0d7 = &B00111101 ' Transmit Buffer 0 Data Byte 7
Const Rxm0sidh = &B00100000 ' Receive Buffer 0 Std Identifier High
Const Rxm0sidl = &B00100001 ' Receive Buffer 0 Std Identifier Low
Const Rxm0eid8 = &B00100010 ' Receive Buffer 0 Ext Identifier High
Const Rxm0eid0 = &B00100011 ' Receive Buffer 0 Ext Identifier low
Const Rxm1sidh = &B00100100 ' Receive Buffer 1 Std Identifier High
Const Rxm1sidl = &B00100101 ' Receive Buffer 1 Std Identifier Low
Const Rxm1eid8 = &B00100110 ' Receive Buffer 1 Ext Identifier High
Const Rxm1eid0 = &B00100111 ' Receive Buffer 1 Ext Identifier low

Const Rxb0ctrl = &H60
Const Rxb1ctrl = &H70


' Hardware SPI-Schnittstelle konfigurieren
Config Portb.6 = Input
Config Portb.5 = Output
Config Portb.7 = Output
Spcr = &B01010010

Config Pind.2 = Input
Config Int0 = Falling
On Int0 Int_canint
Enable Int0
Enable Interrupts

Call Can_init()

Do
' Zu übertragende Daten setzen:
Mcp2515_bitmodify Txb0ctrl , &B00000011 , &B00000011 ' TX-Konfiguration
Mcp2515_write Txb0sidh , &B01010101 ' Empfängeradresse setzen
Mcp2515_write Txb0sidl , &B01010101 ' Empfängeradresse setzen
Mcp2515_write Txb0dlc , &H04 ' Paketlänge festlegen
Mcp2515_write Txb0d0 , &B01010101 ' Zu übertragende Daten setzen
Mcp2515_write Txb0d1 , &B01010101 ' Zu übertragende Daten setzen

' Übertragung auslösen
Reset Mcp2515cs
Waitus 10
Spdr = Cmd_rts0
Do
Loop Until Spsr.spif = 1
Waitus 10
Set Mcp2515cs

Loop

Sub Can_init()
Local Can_tmp As Byte

Reset Mcp2515cs

' Reset MCP2515
Can_tmp = Cmd_reset
Spdr = Can_tmp
Do
Loop Until Spsr.spif = 1
Set Mcp2515cs

Waitms 2000
Mcp2515_write Canctrl , &B10001000 ' low nibble: 3=OSM 2=CLK-Pin 1-0=CLK Divider
Print "speed change done"

' F MCP2515 = 16MHz
Can_tmp = Eram_param_baudrate
Mcp2515_write Cnf1 , &B00000011
Mcp2515_write Cnf2 , &B10010000 ' Cnf2 = &H29
Mcp2515_write Cnf3 , &B00000010 ' Cnf3 = &H28
Mcp2515_write Caninte , &B00000011
Mcp2515_write Rxb0ctrl , &B01100000
Mcp2515_write Rxb1ctrl , &B01100000
Mcp2515_write Rxm0sidh , 0 ' Empfängeradressen auf 0, Filter aus
Mcp2515_write Rxm0sidl , 0
Mcp2515_write Rxm0eid8 , 0
Mcp2515_write Rxm0eid0 , 0
Mcp2515_write Rxm1sidh , 0
Mcp2515_write Rxm1sidl , 0
Mcp2515_write Rxm1eid8 , 0
Mcp2515_write Rxm1eid0 , 0
Mcp2515_bitmodify Canctrl , &B11100000 , &B00000000
'Mcp2515_write Canctrl , &B00000000 ' low nibble: 3=OSM 2=CLK-Pin 1-0=CLK Divider
'Mcp2515_write Canctrl , &HE0
End Sub

Sub Mcp2515_bitmodify(reg_add , Reg_mask , Reg_val)
Local Can_tmp2 As Byte
Mcp2515cs = 0
Can_tmp2 = Cmd_bitmodify
Spdr = Can_tmp2
Do
Loop Until Spsr.spif = 1
Waitms 2
Spdr = Reg_add
Do
Loop Until Spsr.spif = 1
Spdr = Reg_mask
Do
Loop Until Spsr.spif = 1
Spdr = Reg_val
Do
Loop Until Spsr.spif = 1
Mcp2515cs = 1
End Sub

Sub Mcp2515_write(reg_add , Reg_val)
Local Can_tmp2 As Byte
Mcp2515cs = 0
Can_tmp2 = Cmd_write
Spdr = Can_tmp2
Do
Loop Until Spsr.spif = 1
Waitms 2
Spdr = Reg_add
Do
Loop Until Spsr.spif = 1
Spdr = Reg_val
Do
Loop Until Spsr.spif = 1
Mcp2515cs = 1
End Sub


Function Mcp2515_read(reg_add)
Local Can_tmp2 As Byte
Mcp2515cs = 0
Can_tmp2 = Cmd_read
Spdr = Can_tmp2
Do
Loop Until Spsr.spif = 1
Spdr = Reg_add
Do
Loop Until Spsr.spif = 1
Spdr = 0
Do
Loop Until Spsr.spif = 1
Mcp2515_read = Spdr
Mcp2515cs = 1
End Function