|
|
View previous topic :: View next topic |
Author |
Message |
Guest
|
putc problems with rs232 and motor controller pololu |
Posted: Sun Nov 25, 2007 4:35 pm |
|
|
hi
i need to send through rs232 7 bytes in order to configure the Pololu motor controller (motor name, speed, back n forth direction). I used putc function to do this and analizing the streamdata with hyperterminal i only saw 4 of 7 bytes i needed. I use a 18f452 pic rs232 set at 9200 baudrate. How can i solve this situation that is making me mad? Thanks in advance. Gabriele from italy. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Sun Nov 25, 2007 5:00 pm |
|
|
Quote: | I use a 18f452 pic rs232 set at 9200 baudrate |
The Pololu controller doesn't support 9200 baud. It supports 9600 baud
or 19200 baud (and other rates). See this link:
http://www.pololu.com/products/pololu/0101/#dvcspecs
Try using the correct baud rate.
If it doesn't work, then post a very small test program. Show all of
#include, #fuses, and #use delay() statements. |
|
|
trustno1
Joined: 25 Nov 2007 Posts: 4
|
|
Posted: Mon Nov 26, 2007 2:44 am |
|
|
Thanks for your reply.
Quote: | The Pololu controller doesn't support 9200 baud. It supports 9600 baud
or 19200 baud (and other rates) |
I mean 9600...and i've tried 19200 too, no result.
The code is:
Code: | #include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,bits=8)
void main(){
output_high(PIN_B2); //reset
delay_ms(100);
putc(128); //init
putc(2); //fixed
putc(65);//configuration bits
delay_ms(100);
output_low(PIN_B2); //pin reset
delay_ms(500);
output_high(PIN_B2); //pin reset
delay_ms(100);
putc(128); //init
putc(0); //fixed
putc(3); //1 motor, back or forth direction
putc(127); //speed
} |
In hyperterminal i see only the first 4 "putc".
i used this code too with same fuses:
Code: | putc('a');
putc('b');
putc('c');
putc('d');
putc('e');
putc('f');
putc('g');
putc('h'); |
in hyperterminal i see: "abcdef", but "g" and "h"?
Thanks,
Gabriele. |
|
|
Ttelmah Guest
|
|
Posted: Mon Nov 26, 2007 2:57 am |
|
|
You won't....
The key is to remember that there is nowhere for code to 'go', if you let the program 'drop off the end'. Tis is different from a program in a PC, where there is an underlying 'operating system', which has called the program. Hence programs on the PIC, need to remain alive. So you will see things like:
Code: |
void main(void) {
//Code here
while(TRUE) ;
}
|
Where the 'while', is there to prevent the code dropping off the end.
What is happening to your code, is that the bytes are loaded into the output register of the PIC (which provides a total of two characters of buffering), and then the chip drops off the end of the code, and goes to sleep, preventing the last two characters from ever being sent...
Best Wishes |
|
|
trustno1
Joined: 25 Nov 2007 Posts: 4
|
|
Posted: Mon Nov 26, 2007 3:27 am |
|
|
Great, it works!!!
Thank you very much. I hope this can help others too!
Gabriele. |
|
|
|
|
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
|