lweekes
Joined: 06 Jun 2004 Posts: 1 Location: UK
|
18f6620 strange corrupt UART behaviour |
Posted: Sun Jun 06, 2004 3:52 am |
|
|
Hi,
I’m having a few problems converting code to run from a 18f258 to a 18f6620 and wondered if anyone could help.
On the 18f6620 if I use the following everything is ok:
Code: | while (1) {
ch = fgetc(com1);
fputc(com2);
} |
However if I try the following on it I get around 80% of the message output ok, but some of the characters are corrupted:
Code: | while (1) {
buffer[i++] = fgetc(com1);
if (ch == 13) {
fprintf(com2,”%s”, buffer);
}
} |
What I see being output varies every time, sometimes its 100% perfect but that’s about 1 in 10 (although totally random). On the 18f258 everything is ok with both methods above.
An example of this problem is if I had the ascii character 1 (0x31) being output sometimes the first half of the byte gets sent and then the second so I see two bytes 0x3 and 0x1 as individual bytes on the output, not a single transmitted character.
Am I doing something stupid? All other operations work ok on the pic it’s just the sending from a stored array that I’m having a problem with. If I exchange fprintf for putc and output character by character I still see the same random problems (I've even tried delaying each character being sent but no joy).
I’m confident the comms settings are ok on the PIC and receiving hardware, but this looks like some form of timing problem to me but I’m not sure what to investigate. I’m using a MAX202 as the transceiver for both uarts and version 3.190 of CCS. My fuses and uses are as below:
Code: | #include <18F6620.h>
#device adc=8
#use delay(clock=10000000)
#fuses NOWDT,WDT128,HS, NOPROTECT, NOOSCSEN, NOBROWNOUT, BORV25, NOPUT, NOCPD, NOSTVREN, NODEBUG, NOWRT, NOWRTD, NOCPB, NOEBTRB, NOEBTR, NOWRTC, NOWRTB, NOLVP
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8, stream=com1)
#use rs232(baud=9600,parity=N,xmit=PIN_G1,rcv=PIN_G2,bits=8, stream=com2) |
If anyone has any help or guidance to the source of the problem I would be really grateful as this is driving me up the wall.
Thanks,
Lee |
|
Haplo
Joined: 06 Sep 2003 Posts: 659 Location: Sydney, Australia
|
|
Posted: Sun Jun 06, 2004 4:32 am |
|
|
Two things to mention:
1. The format of fputc() is value = fputc(cdata, stream). You need to specify both the stream name and the data to be sent out.
2. The "%s" in the fprintf() expects a null-terminated string. Yours is not. That may be the reason for the random results you are seeing. |
|