Archiv verlassen und diese Seite im Standarddesign anzeigen : can-bus programmieren
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
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
ok werde ich mir mal anschauen.
und den code versuchen auf bascom zu übertragen.
gruß
patrick
klaus1973
29.12.2005, 22:33
Hallo patti,
bist du weiter gekommen?
Ichahbe Interesse an deiner Übersetzung.
Klaus
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, 23:22
Hio,
falls du es mit Bascom zum laufen bringen solltest, brauchst du min. 2 Knoten damit das ganze funktioniert, meine ich.
Gruß
Martin
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.