Hab hier zwei PIC 18F458 mit 20MHz Quarz + MCP2551 die mit 125kBaud mit
nem SAM3X8E + 65HVD234 via CAN kommunizieren sollen. Untereinander
funktionieren die PICs.
Auf dem Ozsi sehe ich, daß die Bitzeit anstatt 8.0us bei 125kBaud 8.3us
beträgt (bei dem SAM3X8E ist sie ok). Ich hab jetzt seit Stunden
mit den Time-Quanta für Propagation und Phasensegment1 + Phasensegment 2
rumprobiert, es will einfach nicht besser werden. Das Phänomen findet
sich auch bei anderen Geschwindigkeiten und Quarztakten. Am Quarz
liegt's definitiv nicht, ich hab mehrere ausprobiert, auch mit oder ohne
2x33pF ändert sich nichts.
Ich verwendete zuert eine Bibliotheksfunktion von Microchip (die etwas
hakte weil sie wohl für den CCS-Compiler gedacht ist) und hab, als das
nichts half, direkt in die Baudraten-Register geschrieben. Das Ergebnis
war im Prinzip stets das gleiche, ich traf die 8.0us nie sondern habe
immer etwa 7,8 oder 8.3us für ein Bit.
Für ein Dran-Drehen am Oszillator ist im Datenblatt nix vermerkt (hätt'
mich auch gewundert).
1 | CANInitialize (1, //SJW
|
2 | 5, //BRP
|
3 | 7, //PHSEG1
|
4 | 6, //PHSEG2
|
5 | 2, //PROPSEG
|
6 | CAN_CONFIG_SAMPLE_ONCE &
|
7 | CAN_CONFIG_PHSEG2_PRG_OFF &
|
8 | CAN_CONFIG_LINE_FILTER_ON &
|
9 | CAN_CONFIG_MSG_TYPE_BIT);
|
Kann der Bus die 4% Abweichung eigentlich verdauen? Jedenfalls bekomm
ich pro Nachricht etwa 5 Fehler, die Nachricht wird nicht in den
Empfangspuffer geschrieben (könnte aber auch andere Ursachen haben).
Jemand ne Idee?
Noch ne Bemerkung am Rande: Die CAN-Engine die Atmel für den 16M1
verwendet sieht aus als ob sie gleichen Ursprungs wäre - sie sind fast
tupfengleich (Ursprung Intel?).