Forum: Mikrocontroller und Digitale Elektronik Baudrate CAN


von Chandler (Gast)


Lesenswert?

Hallo,
ich habe ein Verständisproblem zur Baudrate vom CAN beim dspic30f4011.
Ich habe ein 6MHz Quarz und möchte eine Baudrate von 250kHz haben.
1
#define XTFREQ   6000000
2
#define PLLMODE  8
3
#define FCY      STFREQ*PLLMODE/4 // =12.000.000
4
5
#define BITRATE  250000
6
#define NTQ      12
7
#define BRP_VAL  ((FCY/(2*NTQ*BITRATE))-1) // C1CFG1bits.BRP = 1
Dann habe ich die CAN-Bit-Time-Segmente wie folgt gesetzt
SyncSeg = 1TQ
PropSeg = 3TQ
PhaseSeg1 = 4TQ
PhaseSeg2 = 4TQ

Somit komme ich auf die 12TQ, wie ich sie definiert habe.
Was ich nicht ganz verstehe, woher weiss der controller jetzt, dass es 
250kHz sein sollen? Doch nicht durch das define oder? Weil wenn ich die 
Anzahl der TQ in den Segmenten ändere, funktioniert es nicht mehr.
PRP_VAL ergibt doch die Länge eines TQs oder? Was würde passieren, wenn 
dann 0 herauskommen würde?

Johannes

von Johannes (Gast)


Lesenswert?

Dein BRP_VAL ist nicht die länge von TQ. TQ ist aber abhängig von der 
länge von BRP_Val. das steht auch eigentlich so im Datenblatt.
TQ=2*((BRP_VAL+1)/FCY);
da siehst du, das je kleiner BRP_VAL ist, TQ ebenfalls kleiner wird. 
Wenn BRP_VAL=0 werden sollte, hast du immer noch die Eins da stehen.

Da die Anzahl von TQ und der länge von ein TQ ein Bit ergibt, kann 
daraus die Baudrate generiert werden.

guck dir das mal an
http://ww1.microchip.com/downloads/en/AppNotes/00754.pdf
da wird das Bit Timing erklärt

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.