Baudrate CAN

Gast #4147302
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
Gast #4148166
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

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