Hallo,
ich habe ein Problem mit meinem CAN-Bus-Experiment.
Ich habe drei Knoten an meinem Bus.
Sendet einer der Knoten, so kommt die Nachricht richtig bei beiden Empfängern an.
Sendet ein weiterer Knoten, so kommt dessen Nachricht nur noch bei dem an, der bisher noch nichts gesendet hat.
Hat jeder einmal eine Nachricht versendet, so bemerken jeweils die beiden verbleibenden Empfänger dass was auf dem Bus ist, sie geben aber nur noch ihren eigen Speicher aus.
Offensichtlich wirde der eigene Speicher nach dem Senden nicht gelöscht.
Kann mir jemand sagen was ich falsch gemacht habe?
Hier mal die wichtigsten Ausschnitte meines Codes:
Code:
********MCP2515 Initialisieren****************************************
Mcp2515_init:
'MCP2515 per Software Reset zurücksetzen
Mcphilf = Spi_reset
Reset Css
Waitus 10
Spdr = Mcphilf
Do
Loop Until Spsr.spif = 1
Waitus 10
Set Css
'einstellen des Bit Timings
'CNF1 &H07==>125 kbit/s &H13==>50 kbit/s
Mcp2515_write_register Cnf1 , &H13
Mcp2515_write_register Cnf2 , &H90
Mcp2515_write_register Cnf3 , &H02
'Interrupt einstellen
Mcp2515_write_register Caninte , &B00000011
Mcp2515_write_register Rxb0ctrl , &B01100000
Mcp2515_write_register Rxb1ctrl , &B01100000
'****************************************************************************
'****************** Filter und Maske einstellen ********************
'****************************************************************************
'Maske setzen - alle Bits auf "1" führen zu einem eindeutigen Filtern einer ID
Mcp2515_write_register Rxm0sidh , &B00111111 '
Mcp2515_write_register Rxm0sidl , &B11100000 '
Mcp2515_write_register Rxm1sidh , &B00111111 '
Mcp2515_write_register Rxm1sidl , &B11100000 '
'Filter setzen "25"
Mcp2515_write_register Rxf0sidh , &B00000011
Mcp2515_write_register Rxf0sidl , &B00100000
Mcp2515_write_register Rxf1sidh , &B00000011
Mcp2515_write_register Rxf1sidl , &B00100000
'****************************************************************************
'****************************************************************************
'****************************************************************************
'Einstellen der Pin Funktionen
'Deaktivieren der Pins RXnBF Pins (High Impedance State)
Mcp2515_write_register Bfpctrl , 0
'TXnRTS Bits als Input schalten
Mcp2515_write_register Txrtsctrl , 0
'Device zurück in den normalen Modus versetzen
Mcp2515_bitmodify Canctrl , &B11100000 , &B00000000
Return
'*************************************************
Send_buffer0:
'Priorität einstellen
Mcp2515_bitmodify Txb0ctrl , &B00000011 , &B00000011
' Bit 7 Unimplemented: Lesen als'0 '
' Bit 6 ABTF: Nachricht Aborted Flag Bit -
' 1 = Nachricht wurde abgebrochen
' 0 = Nachricht erfolgreich abgeschlossene Übertragung
' Bit 5 MLOA: Nachricht Lost Arbitration Bit -
' 1 = Nachricht verloren, Schiedsverfahren gleichzeitig gesendet
' 0 = Nachricht nicht verloren, während Schiedsverfahren gesendet
' Bit 4 TXERR: Übermittlung Bit-Fehler erkannt
' 1 = Ein Bus-Fehler ist aufgetreten, während die Nachricht übermittelt wurde,
' 0 = es ist keine Bus-Fehler aufgetreten, während die Nachricht übermittelt wurde,
' Bit 3 TXREQ: Nachricht Transmit Request-Bit -
' 1 = Buffer ist derzeit zur Übertragung anhängig
' (MCU setzt dieses Bit auf Anfrage Nachricht übertragen werden - Bit wird automatisch gelöscht, wenn
' Wird die Nachricht gesendet)
' 0 = Buffer ist derzeit nicht zur Übertragung anhängig
' (MCU kann dieses Bit klar um eine Nachricht abbrechen)
' Unimplemented
' Bit 2: Lesen als'0 '
' Bit 1-0 TXP: Sendepuffer Priority
' 11 = Höchste Priorität
' 10 = High Intermediate Priority
' 11 = Low Intermediate Priority
' 00 = Tiefste Message Priority
'Standard ID einstellen
Mcp2515_write_register Txb0sidh , Idh ' Absenderadresse setzen
Mcp2515_write_register Txb0sidl , Idl ' Absenderadresse setzen
'Nachrichtenlänge einstellen (DFL)
Mcp2515_write_register Txb0dlc , Dfl
'Daten
Mcp2515_write_register Txb0d0 , Db0(1)
Mcp2515_write_register Txb0d1 , Db0(2)
Mcp2515_write_register Txb0d2 , Db0(3)
Mcp2515_write_register Txb0d3 , Db0(4)
Mcp2515_write_register Txb0d4 , Db0(5)
Mcp2515_write_register Txb0d5 , Db0(6)
Mcp2515_write_register Txb0d6 , Db0(7)
Mcp2515_write_register Txb0d7 , Db0(8)
'nachricht versenden
Reset Css
Waitus 10
Mcphilf = Spi_rts0
Spdr = Mcphilf
Do
Loop Until Spsr.spif = 1
Waitus 10
Set Css
' Print "gesendet Buffer-0"
Waitms 50
Return
Wäre klasse wenn mir jemand was sagen kann. Vielleicht hilft es ja auch anderen
Lesezeichen