|
|
View previous topic :: View next topic |
Author |
Message |
jmofthenorth
Joined: 27 Sep 2006 Posts: 11 Location: ITHACA,NY
|
At My Wit's End with RS 232 |
Posted: Tue Oct 03, 2006 9:05 pm |
|
|
Hi,
I'm totally flummoxed and would REALLY appreciate any help on this one.
I am trying to control a microscope stage with the pic via RS232.
When I send the following code, the stage controller responds with an error message. However sending it to the pc instead and recieving the printf command with the serial moniter in the compiler (serial moniter set to baud 9600 databits 8 stp bits 1 parity none) and then sending that same command in hex form from the serial moniter to the controller it works. What the heck! Is there a handshaking problem here? I have no idea why this isn't working. Please Help!
Code: |
#include <18F4550.h> //This header contains chip info.
#include <STDLIB> //standard C library
#include <math>
#fuses HS,NOLVP,NOWDT,PUT //fuses on the chip
#use delay (clock=20000000) //this relates the clock speed of the chip for various functions (delay_ms etc)
#use rs232(baud=9600, parity = n, bits = 8, xmit=PIN_C6, rcv=PIN_C7) //load RS232 port
#define BUTTON PIN_A4 //Button on the prototyping board
#define GRE PIN_A5 //These macros define the leds
#define YEL PIN_B4 //On the prototyping board
#define RED PIN_B5 //Which will be used to determine operation states
#define LED_ON output_low
#define LED_OFF output_high
void main(void){
int8 i = 0;
int16 timeOut=0;
char buffer[30];
char charTest;
LED_ON(GRE);
printf("MINSPEED 1000\r ");
while(!kbhit()){}
do {
if(kbhit()){
charTest = getc();
buffer[i++] = charTest;}
} while((charTest!=13)&&(timeOut++<10000)&&(i<=29));
while(1)
{
putc(buffer[i++]);
if(i == 29)
i = 0;
delay_ms(500);
}
} |
|
|
|
asmallri
Joined: 12 Aug 2004 Posts: 1634 Location: Perth, Australia
|
|
Posted: Tue Oct 03, 2006 9:18 pm |
|
|
I could not understand what you meant in your text but I could read the code :-)
The timeout loop is probably rolling over too quickly. Try this...
Code: |
#use rs232(baud=9600, parity = n, bits = 8, xmit=PIN_C6, rcv=PIN_C7, ERRORS) //load RS232 port
|
and this..
Code: |
while(!kbhit())
;
do {
if(kbhit()){
charTest = getc();
buffer[i++] = charTest;
timeOut = 0;
}
} while((charTest!=13)&&(timeOut++<10000)&&(i<=29));
|
_________________ Regards, Andrew
http://www.brushelectronics.com/software
Home of Ethernet, SD card and Encrypted Serial Bootloaders for PICs!! |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Oct 03, 2006 9:23 pm |
|
|
If you can't get it working, then post a link to the User's Manual for the
microscope stage, in which it describes the serial protocol in detail. |
|
|
|
|
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
|