![](templates/subSilver/images/CCSLogo.jpg) |
![CCS C Software and Maintenance Offers](templates/subSilver/images/forumAd6.jpg) |
View previous topic :: View next topic |
Author |
Message |
MatrixPhreak Guest
|
RS232 gibberish |
Posted: Tue Dec 09, 2008 6:25 pm |
|
|
I've got another problem related to the PIC communicating with the outside world... except this time I've taken a slightly more antiquated approach and started using RS232.
Really, this is just to help me debug issues with the USB communications, seeing as I'd need an alternate method of getting information from my PIC when I'm busy debugging USB issues. The big problem this time is....
You guessed it, I've never done RS232 before and, once again, despite the sample code and big CCS reference guide... I'm at a loss. My code is as follows:
Code: | #include <18F4550.h>
#use delay(clock=20000000)
//Set up RS232
#use rs232(UART1, baud=9600, xmit=PIN_C6, rcv=PIN_C7)
//Bootloader Stuff
#build(reset = 0x800, interrupt = 0x808)
#org 0x0000, 0x07ff {}
//Main
void main()
{
while(1){
printf("\r\nhello world\n");
}
} |
Now, everything I've found seems to tell me that this is an alright program... and when I run it I do, in fact, receive data on the serial port and it does display in the serial monitor... the only problem is...
While my code indicates that it should display "hello world" trailing off into infinity... I get something more along the lines of this:
Quote: | ¹2íS222R@¹2R@¹2R@¹2@¹2rrr222íS2íS2ïS22R2R@¹2R@¹2R@¹2
2rrr22S2íS2íS2ïS22R2R@¹2R@¹2@¹22rrr22íS2íS2íS2ï22R2
R@¹2R@¹2@¹2rrrr22íS2íS2ïS222R@¹2R@¹2R@¹22rrr222íS
2íS2ïS22R2R@¹2R@¹2R@¹22rrr22S2íS2íS2ï22R2R@¹2R@¹2@¹2
| trailing off into infinity.
Now... is there something obvious I'm missing in my code (as seems to be usual) or is there a setting I'm missing in my serial monitor?
By the way, I'm using the serial monitor integrated into the CCS C compiler, if that makes a difference.
Thanks in advance. |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 09, 2008 6:36 pm |
|
|
Did you setup Hyperterminal to have the same baudrate, etc., as the PIC ?
Did you connect a MAX232-type chip between the PIC and the PC ?
Your code is missing the #fuses statement. Post it.
Here is a post that describes how to setup Hyperterminal:
http://www.ccsinfo.com/forum/viewtopic.php?t=9253&start=1
Here is the CCS FAQ article on RS-232 problems:
http://www.ccsinfo.com/faq.php?4
Here is a schematic of a MAX232 circuit:
http://web.ukonline.co.uk/j.winpenny/pic/rs232x.gif
Note that if you're using a MAX232A, then you should use 0.1 uF
capacitors, instead of the 1 uF caps.
----
Edit: Fixed link to Hyperterminal thread.
2nd Edit: Fixed link to schematic.
Last edited by PCM programmer on Wed Apr 14, 2010 6:42 pm; edited 2 times in total |
|
![](templates/subSilver/images/spacer.gif) |
Guest
|
|
Posted: Tue Dec 09, 2008 10:03 pm |
|
|
Ummm... Well, first off: I'm using the Microchip PICDEM FS USB Demo Board which has an integrated RS232 port and does indeed have a MAX232 and capacitors already mounted on the board. Also, the Bootloader app that comes along with the demo board automatically inserts its own fuses if what I have might render it inoperable, so I usually just stick with the default board settings. If it would help, I can post what the manual tells me is "default"
Second of all, is it just me or do those two Hyperterminal posts not exist anymore? |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 09, 2008 10:28 pm |
|
|
You're right. I fixed the link.
Yes, post the fuses used by the bootloader. |
|
![](templates/subSilver/images/spacer.gif) |
MatrixPhreak Guest
|
|
Posted: Tue Dec 09, 2008 10:52 pm |
|
|
Taken straight from the Users Guide provided on the CD
Quote: | The PIC18F4550 microcontroller for the PICDEM FS USB board has a specific configuration setting that is necessary for the bootload program to function. The USB Voltage Regulator and device oscillator settings are both critical, and cannot be changed. Other settings, such as code protection, WDT and LVP, are less critical but may cause irreversible side effects. The default configuration values are shown in Table3-1.
The configuration data contained in a hex file may violate the restrictions on the critical configuration settings described above. Should this happen, the Demo Tool will display a warning dialog box (Figure3-6). This will also be accompanied by a brief text description of the configuration conflict. Users have the option to accept the new configuration settings, use the board’s factory configuration settings, or maintain the current configuration setting. |
Table 3-1 is below:
Code: | 0x300000 CONFIG1L 0x24 Clock configuration
0x300001 CONFIG1H 0x0E Clock configuration
0x300002 CONFIG2L 0x3 FBOR, PWRT, USB voltage regulator
0x300003 CONFIG2H 0x1E WDT configuration
0x300005 CONFIG3H 0x81 MCLR, CCP2, A/D configuration
0x300006 CONFIG4L 0x81 Core microcontroller configuration
0x300008 CONFIG5L 0x0F Code protect (program memory)
0x300009 CONFIG5H 0xC0 Code protect (boot block/EEPROM)
0x30000A CONFIG6L 0x0F Write protect (program memory)
0x30000B CONFIG6H 0xA0 Write protect (boot block/EEPROM)
0x30000C CONFIG7L 0x0F Table Read protect (program memory)
0x30000D CONFIG7H 0x40 Table Read protect (boot block/EEPROM) |
If any of the fuses I set in the code conflict with those default working fuses, it displays an error box that lets me select to use the default board fuses (above).
I've configured Hyperterminal as per your instructions, as well (thanks, by the way, for correcting the link.) However, when I run the code, siow.exe shows the garbage text but Hyperterminal doesn't. |
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 09, 2008 10:56 pm |
|
|
Are you saying that the output is displayed correctly on Hyperterminal ? |
|
![](templates/subSilver/images/spacer.gif) |
MatrixPhreak Guest
|
|
Posted: Tue Dec 09, 2008 11:10 pm |
|
|
No... So far, even when siow is showing garbage, Hyperterminal remains blank. Maybe I'm missing a step somewhere, but I'm fairly sure I set it up properly.
I even checked the COM ports. I ran siow through it's available ports, and only COM1 was showing any input, so I set COM1 in Hyperterminal.
I used the sample code you provided on another page (rs232 on 18F4520), but changed the include and clock settings to match my own. I left the fuses the same, but let the bootloader replace the settings with the default. My code now looks like this:
Code: | #include <18F4550.H>
#fuses XT,NOWDT,PUT,BROWNOUT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
/*
Bootloader vectors
*/
#build(reset= 0x800, interrupt = 0x808)
#org 0x0000, 0x07ff {}
//========================
void main()
{
int8 c;
printf("Start: \n\r");
while(1)
{
c = getc();
putc(c);
}
} |
The interesting part is, it will correctly echo SOME keypresses. For instance, this is the output (in siow, I still can't get hyperterminal to display). I start the program, and then run through the keyboard row-by-row (starting with q and ending with .) You'll note that most of the output is correct (I've turned off localecho, the display is purely from the PIC now)
Code: | Zr þ
yweztyuùox[]\y{dfghjkl;§zx{vznm,./ | (The output doesn't include that line break before the "ywezt" string, I put that in to differentiate between what SHOULD say "Start:" and where it began echoing my input.) |
|
![](templates/subSilver/images/spacer.gif) |
MatrixPhreak Guest
|
|
Posted: Tue Dec 09, 2008 11:13 pm |
|
|
Scratch that, sorry. Hyperterminal DOES display, now...
But it's the same garbage text as siow. Once again: running that test program and doing the same (q to /, row by row. line break inserted to distinguish)
Code: | Z2 þ
yweztyuiox[]\y{dfghúkl;§zx{vznm,./ |
|
|
![](templates/subSilver/images/spacer.gif) |
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Dec 09, 2008 11:44 pm |
|
|
The oscillator Config Bits that you posted are equivalent to:
Code: | #fuses HSPLL, PLL5, CPUDIV1 |
This means the actual internal clock speed is 48 MHz. Change the
#use delay() statement to reflect this and it should work.
Also, the FS USB board manual says it runs at 48 MHz.
http://ww1.microchip.com/downloads/en/DeviceDoc/51526b.pdf
See this section:
Quote: | 1.4.1 Oscillator and Operating Frequency |
|
|
![](templates/subSilver/images/spacer.gif) |
MatrixPhreak Guest
|
|
Posted: Tue Dec 09, 2008 11:52 pm |
|
|
Excellent! Thank you so very much! Works like a dream, and I probably never would've figured that out on my own!
Thank you for all your help. |
|
![](templates/subSilver/images/spacer.gif) |
|
|
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
|