Hallo!
ich kenne mein Code schon fast auswendig, aber ich habe das programm immer noch nicht zum Laufen bekommen.
Ich habe schon alles probiert, was mir nur einfallen konnte.
Habe jetzt den gesammten Code so weit gekürzt wie es nur geht.
Ich hoffe ich habe nichts "falsches" weggekürzt.
für mich scheint das Programm logisch zu sein, und müsste laufen. Tut es aber nicht.
ich habe am TX vom MCP2515 kein Signal.
Falls Jemand Zeit hat, BITTE durchgucken. Ich bin schon Ratlos.
Im Anhang ist der Schaltplan.Code:$regfile = "m8def.dat" ' ATMega8 $crystal = 16000000 ' Baudratenquarz der AVR (mega8 mit 16MHz) $hwstack = 40 ' default use 32 for the hardware stack $swstack = 80 ' default use 10 for the SW stack $framesize = 90 $baud = 9600 ' Allgemeine Config ************************************************************ Config Pind.2 = Input 'Taster Config Portb.0 = Output 'LED Taster Alias Pind.2 Led Alias Portb.0 Led = 0 'Grundstellung 'CAN relevante Config ********************************************************** Declare Sub Mcp2515_write(byval Reg_add As Byte , Byval Reg_val As Word) Declare Sub Mcp2515_bitmodify(byval Reg_add As Byte , Byval Reg_mask As Byte , Byval Reg_val As Byte) Mcp2515cs Alias Portb.2 'CS am Mega8 Config Mcp2515cs = Output Const Cmd_write = &H02 ' Write Command Const Cmd_bitmodify = &H05 ' Bit-modify Command 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 Txb0dlc = &B00110101 ' Transmit Buffer 0 Data Length Code Const Txb0d0 = &B00110110 ' Transmit Buffer 0 Data Byte 0 ' Hardware SPI-Schnittstelle konfigurieren************************************** Config Portb.4 = Input 'MISO von 2515 Config Portb.3 = Output 'MOSI von 2515 Config Portb.5 = Output 'SCK Spcr = &B01010001 'Bit7=0:IntAus, Bit6=1:SPIAn, Bit5=0:MSBfirst, 'Bit4=1:Masterfunktion, Bit3=0:SCK=0wennIdle, 'Bit2=0:L-H-Flanke, Bit1+0=01:AVRClock/16 'Programm Start***************************************************************** Gosub Can_init Abfrage: Do If Taster = 0 Then Set Led Wait 1 Reset Led Waitms 500 Gosub Data_send Else Goto Abfrage Loop End If End 'CAN Initialisieren ***************************** Can_init: Reset Mcp2515cs ' Reset MCP2515 Spdr = &HC0 ' IC reset Do Loop Until Spsr.spif = 1 Set Mcp2515cs Waitms 2000 Mcp2515_write Canctrl , &B10001101 ' set configuration mode, osm=1, clkout enabled, prescaler /2 ' CAN 100 kbit/s Mcp2515_write Cnf1 , &B00000001 ' Can Geschwindigkeit einstellen (Cnf1-Cnf3) Mcp2515_write Cnf2 , &B10111010 ' Cnf2 = &H29 Mcp2515_write Cnf3 , &B00000111 ' Cnf3 = &H28 Mcp2515_write Caninte , &B00000000 'Can interrupt disabled Mcp2515_write Canctrl , &B00001101 ' set normal operation mode, osm=1, clkout enabled, prescaler /2 Return 'Daten ubertargen *********************************************************** Data_send: Mcp2515_bitmodify Txb0ctrl , &B00000011 , &B00000011 ' TX-Konfiguration Mcp2515_write Txb0sidh , &B10101010 ' Empfangeradresse setzen Mcp2515_write Txb0sidl , &B10101010 ' Empfangeradresse setzen Mcp2515_write Txb0dlc , &B00000001 ' Paketlange festlegen fur ein Byte 'Daten zur Uebertragung************************ Mcp2515_write Txb0d0 , &B01011101 ' Zu ubertragende Daten setzen ' Ubertragung auslosen Reset Mcp2515cs Waitms 20 Spdr = Cmd_rts0 '!!!!! DIESE STELLE IST MIR UNKLAR Do Loop Until Spsr.spif = 1 Waitus 20 Set Mcp2515cs Waitms 2 Set Led 'LED als Anzeige "Gesendet" Waitms 200 Reset Led Waitms 100 Goto Abfrage 'Zurück zur Abfrage 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
Danke schön
Gruss Alexander







Zitieren


Lesezeichen