Forum: Mikrocontroller und Digitale Elektronik PIC18F4680: CAN funktioniert nicht


von PhreakShow (Gast)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.