|
|
View previous topic :: View next topic |
Author |
Message |
ysaacb
Joined: 12 Jun 2006 Posts: 19
|
Software RS232 |
Posted: Tue Sep 26, 2006 2:37 pm |
|
|
Hi Everibody
I've been working succsefuly with the HW usart of the 18F2620 and I want to add second one (software) for debug purpouses. I write a very simple code to try it but only recive garbage.
I've tried with different baud rates an recive different garbage
I'm using a HIN323CP (intelsil)
This is the code
Code: |
#include <18f2620.h>
#device icd=true
#use delay(clock=19660800)
#fuses HS,NOWDT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,stream=modem,bits=8)
#use rs232(baud=9600,parity=N,xmit=PIN_B0,stream=PC,bits=8,INVERT)
void main()
{
output_bit(PIN_B5,0);
fputs("ABCDEFG",pc);
}
Thanks for your colaboration
Ysaac :sad: |
|
|
|
treitmey
Joined: 23 Jan 2004 Posts: 1094 Location: Appleton,WI USA
|
|
Posted: Tue Sep 26, 2006 2:42 pm |
|
|
I didn't even look at this much.
Your code says print something and goto sleep.
ALWAYS HAVE A FOREVER loop in the code
Code: |
#include <18f2620.h>
#device icd=true
#use delay(clock=19660800)
#fuses HS,NOWDT
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,stream=modem,bits=8)
#use rs232(baud=9600,parity=N,xmit=PIN_B0,stream=PC,bits=8,INVERT)
//I use
//#use rs232(baud=9600,xmit=PIN_B0,invert,stream=DEBUG,disable_ints)
void main()
{
output_bit(PIN_B5,0);
fputs("ABCDEFG",pc);
fprintf(PC,"Hello World!\n\r");
while(1);
} |
|
|
|
ysaacb
Joined: 12 Jun 2006 Posts: 19
|
|
Posted: Wed Sep 27, 2006 7:57 am |
|
|
I delete the "INVERT" from the #USE RS-233 but the problem still persist.
I'm just trying to print some characters to the Hyperterminal but the first Bytes are always missing or garbage
Reagars
Ysaac |
|
|
treitmey
Joined: 23 Jan 2004 Posts: 1094 Location: Appleton,WI USA
|
|
Posted: Wed Sep 27, 2006 8:13 am |
|
|
Did you try the code I posted above? The big thing is while(1); This is a forever loop. That is while(1) is ALWAYS true, do the next statment, which is on the same line, which is the ; no statement at all
this makes a loop.((a forever loop.)) It never breaks out of the last statment.
you could code it as
while(2==2){
//nothing to do, sit here and loop.
}
You can't just guess, and delete the invert statement from #use rs232.
You have to understand how your circuit is wired and what the functions do.
The invert is used if your transmit pin of the PIC is NOT hooked to a
max232
type "LEVEL SHIFTER". The max232 changes the RS232 voltages(12v) to ttl type 5v and inverts it.
Some people (me) do this as a quick and dirty debug. You can use any pin. You may think running a 12V signal into the 5v PIC is bad, but if you use a 1k ohm resistor in series to limit the current, you'll be fine.
PIC pin--->1kohm---->pin2 of DB9 serial == INVERT
OR
PIC pin -->max232-->pin2 of DB9 serial ==((no invert in rs232))
I have never broke a chip using this technique in 3 years. |
|
|
|
|
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
|