Hallo liebe Forenuser,
ich bin mal wieder dabei Daten per CAN Bus von einem Controller zum anderen zu senden. Nun bin ich wieder bei einem ungelösten Problem angelangt und benötige bitte euren RAT.
Also folgendes:
Ein PIC (2685) sendet CAN Botschaften einfacher Art, 1Byte groß, an einen PIC4685. Es gibt zwei verschiedene Nachrichten, eine mit ID 32 und eine mit ID 64 (sind jeweils temperaturwerte).
Zum Problem, das ganze funktioniert wie gewünscht unter einer Bedingung:
im Empfangsregister (des Empfangsmoduls) ist configuriert, dass er ALLE Nachrichten empfangen soll. Dann löst eine ankommende Nachricht einen Interrupt aus und alles weiter funktioniert. IDs korrekt, Inhalt korrekt.
Um fehler abzufangen möchte ich aber konfigurieren, dass er nur alle "valid" Nachrichten empfangen soll. Also alle nach Maske und Filter eingestellten korrekten Nachrichten. Wenn ich das einstelle wird keine einzige Nachricht mehr empfangen
Obwohl die Maske auf FF und die Filter auf die IDs, die er auch empfängt, kalibriert sind.
anbei meine config des CAN-Moduls wie es sein sollte, aber nichts empfangen wird. Könnt ihr mir bitte helfen wie ich das Problem lösen kann? Ich weiß echt nicht mehr weiter. Hardwarefehler möchte ich auch nicht ausschließen, wenn jemand eine Idee hat bitte einfach schreiben. Vielen Dank schonmal fürs Lesen!
Code:set_can: ; Konfiguration der CAN-Schnittstelle movlw 0x80 ; 1000 0000 movwf CANCON ; Config-Mode, RxB0-Buffer auf AccessBank waitforcfg: btfss CANSTAT,7 ; Konfiguratonsmodus erreicht? goto waitforcfg ; nein, warten... movlw 0x04 movwf BRGCON1 clrf BRGCON2 clrf BRGCON3 ; clrf RXB0CON ; 0000 0000 ; bsf RXB0CON,2 ; Double-Buffer EN ; bsf RXB0CON,6 ; bsf RXB0CON,5 ; receive only valid msg with STD ID clrf RXB1CON ; bsf RXB1CON,5 ; receive only valid msg with STD ID ; movlw 0x20 ; Filter 0 fuer temp_board (32) movwf RXF0SIDL clrf RXF0SIDH movlw 0x40 ; Filter 1 fuer temp_ofen (64) movwf RXF1SIDL clrf RXF1SIDH movlw 0xFF ; Maske setzen movwf RXM0SIDH movlw 0xFF movwf RXM0SIDL ; movlw 0x00 ; 0000 0000 movwf CANCON ; Normalen Can-Mode aktivieren ; bsf RCON, 7 ; Priorisierung aktivieren bsf INTCON, 7 ; Global Int aktivieren bsf INTCON, 6 ; Peripherie Int aktivieren bsf PIE3, 0 ; Interrupt für RXB0 aktivieren bsf IPR3, 0 ; Hohe Priorität für RXBO-int bcf LATB,4 ; MCP2551 einschalten return







Zitieren

Lesezeichen