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