PIC18F4680: CAN funktioniert nicht

Gast #2656839
Lesenswert?

Hi Leute.

Ich versuche grad, den CAN an einem Pic18F4680 zum Laufen zu bringen.

Quarz: 10MHz
Oszillatormodus: HSPLL (= effektiver Takt 40MHz)
Tranceiver: MCP2551 (RS auf Masse gelegt)
Termination: 120 Ohm zwischen CANH und CANL direkt am Tranceiver

Der Pic an sich funktioniert, Interrupts laufen auch (getestet mit einer 
LED). Ich kann jedoch weder Senden noch Empfangen.
Die Gegenstelle bildet ein PEAK-USB-Adapter, eingestellt auf 500kBit. 
Wenn ich versuche damit zu senden, kommt sofort die Meldung "BUSHEAVY".

Ich vermute dass der Fehler in den BRGCON-Registern liegt. Zum Vergleich 
habe ich eine andre Schaltung, Quarz mit 16MHz ohne PLL-Modus.
Da sind die Register so eingestellt für 500kBit und das funktioniert 
einwandfrei:

BRGCON1 = 0x40;
BRGCON2 = 0xB9;
BRGCON3 = 0x84;

Das bedeutet doch aufgeschlüsselt:
Sync jump: 2x TQ
Baud rate prescaler: 2x 1 / Fosc

Phase 2 Select: Free
Phase 1: 8x TQ
Prop Time: 2x TQ

Wakeup/Line Filter: Disabled
Phase 2: 5x TQ

Das sind für mich genau 15 TQ, zusammen mit dem standardmäßigen sync-TQ 
also 16. Passt also, tut auch.

Jetzt meine Settings für die 500kBit / 40MHz Schaltung:

BRGCON1 = 0x41;
BRGCON2 = 0xBB;
BRGCON3 = 0x86;

Wieder aufgeschlüsselt:
Sync jump: 2x TQ
Baud rate prescaler: 2x 2 / Fosc

Phase 2 Select: Free
Phase 1: 8x TQ
Prop Time: 4x TQ

Wakeup/Line Filter: Disabled
Phase 2: 7x TQ

Das sind nun 19 TQ + 1 TQ für den sync, macht 20. Passt für mich auch.

Dennoch bekomme ich immer BUSHEAVY und Nachrichten in beide Richtungen 
kommen nicht an.
Sind diese Settings so korrekt? RS auf Masse passt auch?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren