Nun, lass dir doch helfen.Zitat:
Zitat von Skragan
Wenn der Code da ist, wird der eine oder andere es sehen können, wo man was selektieren kann.
Verschönern kann man ihn wenn er fertig ist.
Guß nach Oldenburg, BFE-Stadt, Niedersachsen ?
Druckbare Version
Nun, lass dir doch helfen.Zitat:
Zitat von Skragan
Wenn der Code da ist, wird der eine oder andere es sehen können, wo man was selektieren kann.
Verschönern kann man ihn wenn er fertig ist.
Guß nach Oldenburg, BFE-Stadt, Niedersachsen ?
Aber klar - dann halt schon "unfertig" :)
Ja, Oldenburg - eher Rastede :)
Hallo
Ja feitzi liest immer wiedermal mit
Die Sende und empfangsrutiene hab ich optimiert (schon vor längerer Zeit)
Ein Tip für die Identiferzuortnung:
Ich vergebe jeder Platiene eine "Knotennummer" zum Beispiel gibt es bei mir Knoten 1, 2, 3, 4, und 40. und dann noch genau deffinierte Identifer für Digitale bzw Analoge Informationen.
Siehe Anhang (die ID´s sind in HEX). Sobald ich Zeit habe, werde ich mein derzeitiges CAN Programm dokumentieren, und hier in´s Forum stellen.
Gruß feitzi
Hi feitzi,
es wäre super, wenn Du das nochmal etwas ausführlicher erklären könntest - das verstehe ich noch absolut nicht.
Gruß Alex
Hallo
Ich hab mein derzeitiges Programm angehängt.
Das Programm "MegaCAN-V76" ist ein Standardprogramm, ich verwende dieses Modul zur Erweiterung eines Industiellen Heizungsreglers.
Im Programm "CAN Mega16" hab ich auf das wichtigste Abgespekt. Da ist auch eine Erklärung zu der ID Verteilung.
hoffe ich konnte helfen
Gruß feitzi
Hallo,
jetzt wo die CAN Programme über Bascom so langsam zum laufen kommen möchte ich mal eine Frage zu den verschiedenen Konfigurationsmöglichkeiten stellen.
Wie muss die Konfig aussehen wenn der Sender auf eine Bestätigung des Empfängers bekommen soll?
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:
Wäre klasse wenn mir jemand was sagen kann. Vielleicht hilft es ja auch anderenCode:********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
Ja, das würde mich auch interessieren!Zitat:
Zitat von nikolaus10
In den bisherigen sachen kann ich kein Fehler finden. Wo ist die routine des Empfangens?
Den CAN im KFZ abzufragen habe ich auch irgendwann mal vor. Ist ja soweit kein Problem nur man kennt die IDs und die Nachrichtendefinitionen nicht ;)
Die Protokolle müsste man finden da diese genormt sind. Wenn du es testen willst mach die aber an ältern Can Fahrzeugen da die neuen Quasi Abschalten wenn jemand den Bus abhört.