|
|
View previous topic :: View next topic |
Author |
Message |
Nora
Joined: 23 Mar 2008 Posts: 50
|
Voltage level/ serial communications general Q |
Posted: Sun Dec 07, 2008 2:42 pm |
|
|
Hi-
I am trying to get a PIC to communicate serially with another controller.
The other controller has "serial communication" which has an RX, TX +5 and GND and uses a USB connector to interface with the PC.
My PIC is a 5V PIC and I have wired +5 to+5, GND to GND, TX to RX and RX to TX.
In my code I'm using the #use RS232 statement for C6 and C7 which correspond to the PIC 18F452. Is this the right thing to do?
I'm confused about the difference between RS232 and plain ol' serial.
Also is plain serial the same as USB?
And any other questions I didn't ask, but should have.
Thanks in advance,
N_N |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Dec 07, 2008 2:48 pm |
|
|
Quote: | I am trying to get a PIC to communicate serially with another controller. |
Post the manufacturer and part number of the controller. |
|
|
Nora
Joined: 23 Mar 2008 Posts: 50
|
|
Posted: Sun Dec 07, 2008 4:04 pm |
|
|
If I send this code, am I sending a character out on the TX line?
Thanks in advance!
N_N
Code: | #include <18F452.H>
#fuses HS,NOWDT,NOPROTECT, PUT, BROWNOUT, NOLVP
#use delay(clock=20000000)
#use RS232 (baud = 9600, xmit= PIN_C6, rcv = PIN_C7)
#use standard_io(c)
//*****************************************************************
char U;
int cnt;
void main()
{
cnt = 0;
delay_ms(5000);
while (1){
printf("U"); // send msg OUT ON TX LINE?
}
} |
|
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Dec 07, 2008 4:13 pm |
|
|
Yes. You're sending out the "U" character continuously. |
|
|
Nora
Joined: 23 Mar 2008 Posts: 50
|
|
Posted: Sun Dec 07, 2008 4:57 pm |
|
|
Thank you!
BTW it is an OLED 32028-P1T from 4D Systems.
-N_N |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Dec 07, 2008 5:24 pm |
|
|
I notice you're on their forum. You should ask them about the interface
specs. They don't state what they are in their data sheets. Someone
on their forum must know. I.e., what is the baud rate ? What is the
number of bits, and is parity used, etc. ? Are the serial signals non-
inverted ? That's what you need to know.
http://www.websitetoolbox.com/tool/post/4d/vpost?id=3153092 |
|
|
RLScott
Joined: 10 Jul 2007 Posts: 465
|
Re: Voltage level/ serial communications general Q |
Posted: Sun Dec 07, 2008 6:32 pm |
|
|
Quote: |
I'm confused about the difference between RS232 and plain ol' serial.
|
RS232 is a voltage level spec that is commonly used with async serial. Most micros that have a serial interface use an inverted polarity with their logic-level ports because the most common logic level to RS232 voltage converts are logic inverting. If you are connecting two devices that are both using the logic level inverted standard, then there is no need for an RS-232 buffer. But most serial devices that are intended to be plugged into other serial device adhear to some sort of RS-232 voltage standard.
As PCM Programmer said, you have to find out which standard is used by your particular device.
Quote: |
Also is plain serial the same as USB?
|
No. But I understand the confusion because USB-serial converter modules are so common. _________________ Robert Scott
Real-Time Specialties
Embedded Systems Consulting |
|
|
Nora
Joined: 23 Mar 2008 Posts: 50
|
|
Posted: Mon Dec 08, 2008 8:25 am |
|
|
Hello-
Thanks for replies.
The OLED's specs are stop bit = 1, parity= none and 8 (data) bits.
In the CCS manual, June 2008, page 133, the options for these do not
seem to correlate.
In the #use RS232 (baud = 9600, xmit= PIN_C6, rcv = PIN_C7, PARITY=X, BITS=X), PARITY can be N, E, or O. What do these options mean?
BITS- is this Stop or Data?
What are the default settings if I put nothing for these options.
Thanks!
N_N |
|
|
RLScott
Joined: 10 Jul 2007 Posts: 465
|
|
Posted: Mon Dec 08, 2008 8:32 am |
|
|
Quote: | ...The OLED's specs are stop bit = 1, parity= none and 8 (data) bits.
In the CCS manual, June 2008, page 133, the options for these do not
seem to correlate.
In the #use RS232 (baud = 9600, xmit= PIN_C6, rcv = PIN_C7, PARITY=X, BITS=X), PARITY can be N, E, or O. What do these options mean?
BITS- is this Stop or Data?
What are the default settings if I put nothing for these options.
|
N=none (parity)
E=even parity
O=odd parity
BITS=8 or 9 (data bits)
So you would use PARITY=N, BITS=8
There is no explicit setting for the number of stop bits because the PIC always sends and checks one stop bit. Only some very old devices require 1.5 or 2 stop bits, and since your device is not one of them, don't bother looking into how you would use a PIC to communicate with such a device (but there are ways!). _________________ Robert Scott
Real-Time Specialties
Embedded Systems Consulting |
|
|
Nora
Joined: 23 Mar 2008 Posts: 50
|
|
Posted: Mon Dec 08, 2008 11:28 am |
|
|
I tested my above code with Hyperterminal, Windows XP. Using a USB->serial cable.
No matter what character or series of characters I put in the line, I get p out.
If I put a number "12" or "3" or any other in, I get nothing out.
I configured HT with 9600, 8 data, 1 stop, parity NONE and Flow Control OFF.
Any ideas? Thanks in advance!
Nora |
|
|
Ttelmah Guest
|
|
Posted: Mon Dec 08, 2008 11:31 am |
|
|
With a USB-serial cable', you will need RS232 inverting buffers attached to the PIC...
Best Wishes |
|
|
Nora
Joined: 23 Mar 2008 Posts: 50
|
|
Posted: Mon Dec 08, 2008 11:35 am |
|
|
Thanks Ttelmah!
I forgot to mention that I'm using a PICDEM Plus demo board with a MAX232 chip onboard.
So it is PC-->USB cable-->RS232 connector-> DB9 on PICDEM board-->Max232-->PIC.
~N_N |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Dec 08, 2008 1:30 pm |
|
|
Your current task is merely to make a PicDem2-Plus board talk to
a PC, while using a USB-to-serial cable. That should work. Just
make sure that the COM configuration is the same in both the
PicDem2-Plus board and the terminal program on the PC.
Use 9600, N, 8, 1, with no handshaking, on the terminal program.
If you can't make it work, post:
1. The name of your terminal program.
2. Your test program that runs on the PicDem2-Plus board.
3. If you are using a manufactured RS-232 cable, or did you make it
yourself ? (I suggest that you use a store-bought cable).
4. Do you also have an ICD-U40 plugged into the PC ? There can be
a conflict with the USB serial cable. |
|
|
Nora
Joined: 23 Mar 2008 Posts: 50
|
|
Posted: Mon Dec 08, 2008 2:20 pm |
|
|
That is the problem...I am trying to do exactly that-
make a PICDEM plus talk to Hyperterminal.
If you can't make it work, post:
1. The name of your terminal program.
HYPERTERMINAL V5.1, WINDOWS XP
2. Your test program that runs on the PicDem2-Plus board.
Code: | #include <18F452.H>
#fuses HS,NOWDT,NOPROTECT, PUT, BROWNOUT, NOLVP
#use delay(clock=20000000)
#use RS232 (baud = 9600, xmit= PIN_C6, rcv = PIN_C7,BITS=8,PARITY=N,errors)
//#use RS232 (baud = 9600, xmit= PIN_C6, rcv = PIN_C7)
#use standard_io(c)
//*****************************************************************
void main()
{
while(1){
if(kbhit()){
printf("xxx"); // send msg
output_high(PIN_e2);
}
else
{
output_high(PIN_e2);
delay_ms(200);
output_low(PIN_e2);
delay_ms(200);
}
}
} |
I've used a few different versions of this, with and without waiting for hits and with and without LED blinks. The board does recognize the keyboard hit. The Hyperterm also will print the letter lowercase "p" in response to code telling it to printf.
3. If you are using a manufactured RS-232 cable, or did you make it
yourself ? (I suggest that you use a store-bought cable).
You give me way too much credit. I'm not coordinated enough to build my own. It is a GOLD X and I didn't see anything useful in the manual but here it is:
http://www.automationdirect.com/static/manuals/usbrs232manual/usbrs232manual.pdf
4. Do you also have an ICD-U40 plugged into the PC ? There can be
a conflict with the USB serial cable.
I have the ICD2 plugged into the PC.
Am unplugging it to see what I get.
Thanks in advance!
N_N |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Mon Dec 08, 2008 2:48 pm |
|
|
Use this program. Any characters that are typed into the terminal
program will be sent to the PIC, and the PIC will then send them
back to the terminal program where they will be displayed.
Code: |
#include <18F452.H>
#fuses HS, NOWDT, NOPROTECT, PUT, BROWNOUT, NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
//=================================
void main()
{
char c;
printf("Start: ");
while(1)
{
c = getc();
putc(c);
}
} |
|
|
|
|
|
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
|