Ändra baudrate på CAN med PIC18f458

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
JohanRuben
Inlägg: 438
Blev medlem: 27 mars 2008, 12:53:06
Ort: Göteborg

Ändra baudrate på CAN med PIC18f458

Inlägg av JohanRuben »

Hej

Jag kör idag en CAN-node på en PIC18F458 på dess standard baudrate 500 k. Jag vill nu istället köra denna nod på 47,619 k för att denna ska kunna prata med en annan enhet jag har. Har letat runt men inte hittat hur man justerar baudraten på PIC:en, någon som vet?

MVH
Johan Rubenson
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ändra baudrate på CAN med PIC18f458

Inlägg av sodjan »

> ...hur man justerar baudraten på PIC:en, någon som vet?

Kanske "19.7 Baud Rate Setting" ? Eller det kanske är något helt annat...
JohanRuben
Inlägg: 438
Blev medlem: 27 mars 2008, 12:53:06
Ort: Göteborg

Re: Ändra baudrate på CAN med PIC18f458

Inlägg av JohanRuben »

Ja, det finns ett kapitel om det i databladet. Men det är inte helt lätt förstårligt, någon som förstår hur config bitarna ska sättas för att öppnå denna baudrate?

Kristallen är på 8 mhz....
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ändra baudrate på CAN med PIC18f458

Inlägg av sodjan »

> Men det är inte helt lätt förstårligt,

Men det var inte det du frågade om, du frågade var det stog :

>>> Har letat runt men inte hittat hur man justerar baudraten på PIC:en,

> någon som förstår hur config bitarna ska sättas för att öppnå denna baudrate?

För att undvika missförstånd så är det bäst att begreppet "config bitarna" bara
används för just CONFIG bitarna. Det som det här handlar om är inställningarna
för de register som styr CAN modulen, speciellt timingen. Jag tittade lite snabbt
och det verkar som det är beskrivet hur man programmerar för att få olika
baudrate. Om det *går* att få just den baudrate som du vill ha vid just den
klockfrekvens du kör med, tja, det ser man nog när/om man börjar räkna på det.
JohanRuben
Inlägg: 438
Blev medlem: 27 mars 2008, 12:53:06
Ort: Göteborg

Re: Ändra baudrate på CAN med PIC18f458

Inlägg av JohanRuben »

Hittade denna uträkning:

CanInitialize
Prototype :
void CANInitialize( BYTE SJW,BYTE BRP,BYTE PHSEG1,BYTE PHSEG2, BYTE PROPSEG,enum CAN_CONFIG_FLAGS flags)

Bit time = Synchronisation segment + PropSEg + PHSEG1 + PHSEG2
Time Quantum = TQ = 2 x BRP / Fosc Synchronisation segment = 1 TQ (always) SJW Synchronise Jump Width Time = 4TQ or 3TQ or TQ or 1TQ PHASE_SEG1 = PHSEG1 x TQ PHASE_SEG2 = PHSEG2 x TQ PROP_SEG = PROPSEG x TQ

Example :
For a 250 kbit/s baud rate :
CANInitialize(1,4,5,3,1,CAN_CONFIG_DEFAULT); //quartz = 20 MHz
TimeQuantum = TQ = 2 x BRP / Fosc= 400 ns
Synchronisation segment = 400 ns
SJW Synchronise Jump Width Time = 400ns
PHASE_SEG1 = 5 x 400ns = 2 us
PHASE_SEG2 = 3 x 400ns = 1.2 us
PROP_SEG = 1 x 400ns = 400ns
Bittime = 400ns+ 400ns+ 2 us+ 1.2 us = 4 us= 1/250 kbit/s!

Vilket även liknar det som står i databladet, jag förstår inte riktigt hur man får fram alla dessa siffror, är det någon som kan hjälpa mig på traven? Jag har nu 8 MHZ kristall, men kan tänka mig att den behöver bytas för att uppnå en så ojämn siffra som 47.619 kbit/s
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Ändra baudrate på CAN med PIC18f458

Inlägg av sodjan »

Du menar hur man delar upp "bit-time" i de olika segmenten ?
T.ex varför "Synchronisation segment" ska vara just 400 ns o.s.v ?

Jag vet inte, men jag skulle gissa att det är något som CAN-dokumentationen
reder ut. Notera att PIC databladet ju inte är en heltäckande beskrivning av
CAN som sådant, bara hur olika saker är lösta i just PIC processorerna...
JohanRuben
Inlägg: 438
Blev medlem: 27 mars 2008, 12:53:06
Ort: Göteborg

Re: Ändra baudrate på CAN med PIC18f458

Inlägg av JohanRuben »

Hej
Har nu löst problemet. Tänkte berätta hur jag löste det om någon annan skulle hamna i samma situation.

Hittade en programvara som heter "Microchip CAN Bit Timing Calculator". I denna programvara kan du slå in din klockfrekvens och önskad baudrate.

Du får sedan ut paramtetrana: (Exempel för 47.619 kbit/s och 8 mhz kristall)

BRP-1: 3 (observera -1:an, vilket betyder att BRP=4)
Propagation Delay: 4
Phase Segment 1: 8
Phase Segment 2: 8
Syncronization Jump Width (SJW): 1

För kompilatorn MikroC skrivs dessa inställningar som:

CANInitialize(1,4,8,8,4,aa);

Alltså (SJW, BRP, PH1, PH2, PROP, flaggor)
Skriv svar