Sida 1 av 1
Ändra baudrate på CAN med PIC18f458
Postat: 19 april 2009, 21:13:43
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
Re: Ändra baudrate på CAN med PIC18f458
Postat: 19 april 2009, 21:20:11
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...
Re: Ändra baudrate på CAN med PIC18f458
Postat: 19 april 2009, 21:58:03
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....
Re: Ändra baudrate på CAN med PIC18f458
Postat: 19 april 2009, 22:16:53
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.
Re: Ändra baudrate på CAN med PIC18f458
Postat: 21 april 2009, 00:22:31
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
Re: Ändra baudrate på CAN med PIC18f458
Postat: 21 april 2009, 09:11:13
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...
Re: Ändra baudrate på CAN med PIC18f458
Postat: 22 april 2009, 11:17:23
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)