|
|
View previous topic :: View next topic |
Author |
Message |
elcesal Guest
|
RS-232 PIC 12F675 |
Posted: Fri Aug 28, 2009 2:06 pm |
|
|
Hello, I'm working on my first PIC project, and it's the time to RS-232 using a MAX232.
I wrote this code:
Code: |
#include<12F675.h>
#fuses XT,NOWDT,NOCPD,NOPROTECT,MCLR,NOPUT,INTRC_IO
#use delay(clock=4000000)
//#use rs232(baud=2400,xmit=PIN_A2,rcv=PIN_A1)
#use rs232(baud=9600,xmit=PIN_A2,rcv=PIN_A1)
#define LED1 PIN_A0
void config(void){
set_tris_a(0x02);
setup_comparator(NC_NC_NC_NC);
// setup_uart(9600);
}
int encendido;
void main(void){
int x;
encendido=0;
output_low (LED1);
config();
do{
x=getc();
switch(x){
case 49:{ //se recibe un 1
if(encendido==1){
output_low(LED1);
printf("L1Apa");
encendido=0;
}else{
output_high(LED1);
encendido=1;
printf("L1Enc");
}
};
break;
}
}while(TRUE);
}
|
The compilation is ok and the LED1 is working as the code says, but the problem is 'printf(""L1Enc")' and printf("1!Apa"). Sometimes it works and other it doesn't works.
Even on one execution, every time I Push '1' the Led switch, but only a few times the text apear on the screen.
OK thank you. See you soon. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Fri Aug 28, 2009 3:46 pm |
|
|
I re-wrote your program to make it easier to understand. I fixed some
problems that you had, such as using both the XT and INTRC_IO fuses.
(You should only use one oscillator fuse). I also improved the formatting
to make it easier to read.
It works. If I press the '1' key on the PC I get this output in the
TeraTerm window:
Quote: |
L1Enc
L1Apa
L1Enc
L1Apa
L1Enc
L1Apa
L1Enc
L1Apa
L1Enc
L1Apa
L1Enc
L1Apa
L1Enc
|
Also the LED flashes on and off.
Code: |
#fuses INTRC_IO,NOWDT,NOPROTECT,MCLR
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_A2,rcv=PIN_A1)
#define LED1 PIN_A0
//=======================
void main(void)
{
int8 c;
int8 state;
output_low(LED1);
state = FALSE;
while(1)
{
c = getc();
if(c == '1')
{
if(state)
{
output_low(LED1);
printf("L1Apa\n\r");
state = FALSE;
}
else
{
output_high(LED1);
printf("L1Enc\n\r");
state = TRUE;
}
}
}
} |
|
|
|
elcesal Guest
|
|
Posted: Mon Aug 31, 2009 8:28 am |
|
|
I modified my code and I have the same problem, sometimes the sentence L1Enc or L1Apa appears but mucho other, the led goes off or it goes on with no line on terminal.
PCM programmer wrote: | I re-wrote your program to make it easier to understand. I fixed some
problems that you had, such as using both the XT and INTRC_IO fuses.
(You should only use one oscillator fuse). I also improved the formatting
to make it easier to read.
It works. If I press the '1' key on the PC I get this output in the
TeraTerm window:
Quote: |
L1Enc
L1Apa
L1Enc
L1Apa
L1Enc
L1Apa
L1Enc
L1Apa
L1Enc
L1Apa
L1Enc
L1Apa
L1Enc
|
Also the LED flashes on and off.
Code: |
#fuses INTRC_IO,NOWDT,NOPROTECT,MCLR
#use delay(clock=4000000)
#use rs232(baud=9600,xmit=PIN_A2,rcv=PIN_A1)
#define LED1 PIN_A0
//=======================
void main(void)
{
int8 c;
int8 state;
output_low(LED1);
state = FALSE;
while(1)
{
c = getc();
if(c == '1')
{
if(state)
{
output_low(LED1);
printf("L1Apa\n\r");
state = FALSE;
}
else
{
output_high(LED1);
printf("L1Enc\n\r");
state = TRUE;
}
}
}
} |
|
|
|
|
Ttelmah Guest
|
|
Posted: Mon Aug 31, 2009 9:43 am |
|
|
How is your LED connected?.
What you describe, is perhaps typical for a chip that is getting 'spiked', by noise on the supply line. Classic 'reasons' would be insufficient HF decoupling close to the chip, or an LED that is overloading the output pin.
Best Wishes |
|
|
elcesal Guest
|
|
Posted: Tue Sep 01, 2009 7:15 am |
|
|
The chip has a 1uF between vss and vcc. The led has 560 ohms resistor.
I'm going to try with the lower baudrate speed. |
|
|
elcesal Guest
|
|
Posted: Tue Sep 01, 2009 7:33 am |
|
|
I tried with a baudrate = 300 and I have the same problem. I don't know what can I do... |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Sep 01, 2009 12:22 pm |
|
|
Are you using the exact program that I posted ? Are you using it with
a MAX232-type chip (to connect to your PC) ? Are you using TeraTerm ?
I suggest that you do these things.
Instructions on how to install TeraTerm:
http://www.ccsinfo.com/forum/viewtopic.php?t=39388&start=18
What is your compiler version ? |
|
|
Ttelmah Guest
|
|
Posted: Tue Sep 01, 2009 3:25 pm |
|
|
I'd also query more about the supply.
What is feeding this?.
Where is the capacitor placed relative to the PIC?.
If you are using a voltage regulator, where are it's capacitors placed relative to the regulator?.
What other smoothing is on the rail?.
What is the 'technology' of the 1uF capacitor?. Electrolytic?. If so, try putting a small ceramic or polyester capacitor in parallel with it.
Think of the capacitors on the supply rail a doing two separate jobs. The first is to provide a 'reservoir' to smooth ripple. For this 'bigger is better'. The second though is to provide a _local_ reservoir, to smooth the tiny instantaneous power demands as gates switch, and prevent this causing voltage swings along the supply wires. For this, a capacitor with good HF response is needed. In general, electrolytic types, _do not do this_.
If you look at a PC motherboard, you will see a large number of big capacitors at the supply, but then dozens of small capacitors across the board. These are doing this later job.
It is _vital_ that these are really close to the chips generating the spikes.
You also have a 'third' job, when dealing with amplifiers, or voltage regulators, to avoid oscillation. This is why the manufacturers of chips like the 7805, specify a small capacitor _close_ to the output.
Best Wishes |
|
|
mvanvliet
Joined: 02 Jun 2009 Posts: 123 Location: The Netherlands
|
|
Posted: Wed Sep 02, 2009 3:03 am |
|
|
I found out that trying a different computer also make sense in the RS-232 signal. Maybe through a different COM IC on the motherboard. If possible you can try a other pc. Is the calibration of the pic still ok? |
|
|
|
|
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
|