|
|
View previous topic :: View next topic |
Author |
Message |
MsDw
Joined: 14 Jun 2010 Posts: 3
|
PICKIT2 RS232 software error PIC18F4620 |
Posted: Wed Oct 17, 2012 6:05 pm |
|
|
Hello!
I'm don't speak english...sorry
CCS ver: CCS PCH C Compiler, Version 4.134
PIC software: (PIC18F4620)
Code: |
#use delay(clock = 4000000, RESTART_WDT)
#use rs232(baud = 9600, parity = N, xmit = PIN_E1, rcv = PIN_E2, bits = 8, stream = PORT1, restart_wdt, errors)
int16 c;
printf("Send RS232\r\n");
printf("press key\r\n");
/* MAIN LOOP */
do { Restart_Wdt();
c = getc();
putc(c);
fputc('A', PORT1);
Lcd_Putc(c); // --> show undefined char not ASCII
Restart_Wdt(); Delay_ms(2000);
} while(True);
|
PICKIT2 result:
???????ß????
and not ASCII character
Hardware ok,
Software connect success
Please help.
Thank you very much! |
|
|
asmallri
Joined: 12 Aug 2004 Posts: 1636 Location: Perth, Australia
|
|
Posted: Wed Oct 17, 2012 6:23 pm |
|
|
There are multiple problems with this.
There are no config fuses defined
The #use rs232(...) specifies you are using E1 and E2 for the serial port however this is not where the serial hardware module is located therefore you are forcing the driver to perform as a software UART. In which case it sits in a tight loop waiting for characters to be received.
You have specified ERRORS in the #use RS232 however this works ONLY for the HW UART where its roll to to recover from overrun errors which would have disabled the HW UART. There is no such thing as an overrun error on the CCS software UART as there is no serialisation going on unless you are specifically using a SW UART function such as gets()
You have specified in the #use rs232 to reset the WDT timer however you then do it in the main loop as well.
In the main loop you reset the WDT but then immediately delay for 2000ms. This is likely to be larger than the amount of time the WDT will count down before the PIC is reset. It is difficult to tell because you did not declare the WDT divisor settings in the config bits.
Any characters typed during the 2000ms delay will be lost because the software UART is not attempting to read any input during this delay as the delay function is basically a large NOP loop. At the end of this 2000ms delay you are then doing a get C but this could be half way through the reception of a serial character.
Don't use the SW UART if you can use the HW UART. _________________ Regards, Andrew
http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!! |
|
|
MsDw
Joined: 14 Jun 2010 Posts: 3
|
Thanks |
Posted: Sun Oct 28, 2012 6:58 am |
|
|
Hello!
Thank you very much, help me!
R232 communication ok! :D
I'm testing now, but don't free time. |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|