View previous topic :: View next topic |
Author |
Message |
MartinS
Joined: 22 Feb 2013 Posts: 6
|
PIC16F628A RS232 PC => PIC doesn´t work |
Posted: Fri Feb 22, 2013 12:20 pm |
|
|
Hello
I´m using the PIC16F628A with build-in UART in order to receive data from a PC with Hyperterminal. I can send strings using printf(); to the PC, but my code to flash a Led by hitting an 'A' at the Hyperterminal doesn´t work.
Code: |
void main(){
printf("/r/nHello, I´m PIC16F628A");
while(TRUE){
char answer;
do {
answer = getch();
}while(answer != 'A');
output_high(PIN_B3);
delay_ms(1000);
output_low(PIN_B3);
delay_ms(1000);
}
}
|
My MAX232 Driver is working fine, if I take out my pic out of my board and make a bridge between B1 and B2 (Uart pins) and type something in the Hypterterminal it comes back.
I would really looking forward to an answer.
MartinS |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19535
|
|
Posted: Fri Feb 22, 2013 12:44 pm |
|
|
Post your fuses and #rs232 setup. There are a couple of things here that could cause problems.
Add setup_spi(FALSE) to your code. The pins are shared with the SPI on this chip, and though it should default to off, better to be sure.
Best Wishes |
|
|
MartinS
Joined: 22 Feb 2013 Posts: 6
|
|
Posted: Fri Feb 22, 2013 12:57 pm |
|
|
Here my fuses and the rs232 setup
Code: |
#FUSES NOWDT
#FUSES HS
#FUSES NOBROWNOUT
#FUSES NOLVP
#use delay(clock=12000000)
#use rs232(baud=2400,parity=N,uart,bits=8,stream=PC)
|
Adding setup_spi(FALSE) has as a result a compiler error that says:
Code: | Undefined identifier -- setup_spi |
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19535
|
|
Posted: Fri Feb 22, 2013 1:46 pm |
|
|
Key thing add ERRORS to the RS232 setup.
Without this, if the RS232 line goes low during the boot-up, or at any time in the long pauses, the receive part of the UART _will_ be hung.
I thought that chip had SPI obviously it doesn't.
Best Wishes |
|
|
MartinS
Joined: 22 Feb 2013 Posts: 6
|
|
Posted: Fri Feb 22, 2013 3:32 pm |
|
|
Thanks for your information.
But unfortunately, with the ERRORS in the rs232 setup it doesn´t work.
I tried some other code:
Code: |
...
int is_charakter_ready;
do{
is_charakter_ready = kbhit();
}while(is_charakter_ready == 0);
...
|
But the Pic simply don´t want to receive my character.
The Pic is definitely getting the signal from the max232, because if i put a led between GND and the receive Pin, it is flashing a little bit, while I'm hitting keys.
MartinS |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Fri Feb 22, 2013 3:56 pm |
|
|
Hi,
What version is your compiler??? You can find the version number at the
top of the .lst file. It's in the format x.xxx, eg., 4.104.
For "test code", you sure do seem to favor "odd" configurations! Why not
keep it totally simple?
Put a While() loop in Main() like this:
Code: |
While(1){
putc(getc());
}
|
This code should echo back to the PC any characters that are received by
the PIC.
If it still doesn't work, can you post your schematic? If you've got a scope,
take a look at the Rx pin on the PIC while your send data from the PC.
John |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Fri Feb 22, 2013 4:37 pm |
|
|
As suggested: keep it simple.
Also, things are way easier when you always post the complete code. That way we know your exact configuration and can easily copy/paste your code.
Code: | #include <16F628A.h>
#FUSES NOWDT
#FUSES HS
#FUSES PUT
#FUSES NOLVP
#use delay(clock=12000000)
#use rs232(baud=2400, xmit=PIN_B2, rcv=PIN_B1, ERRORS)
void main()
{
while(1)
{
putc( getc() );
}
} | Note how I added the PUT fuse and removed NOBROWNOUT.
Personal preference is to always mention the UART pin numbers instead of using the 'UART' keyword. It helps me remember the correct connections. Disadvantage (or advantage if you want to) is that the CCS compiler will generate a software UART when I define the wrong pin numbers.
When the above posted program fails for you, then it is either your compiler (always post the compiler version number) or the hardware. |
|
|
MartinS
Joined: 22 Feb 2013 Posts: 6
|
|
Posted: Sat Feb 23, 2013 4:13 am |
|
|
Hi
My compiler version is 4.130. It still don´t works, even with the simple echo . Maybe you find a problem with my schematic. I already tryed a new PIC16F628A but there is no character recived by the pic.
@ckielstra If i use the pin numbers instead of UART in the rs232 setup the PC is reciving some character bullshit.
Here the schematic:
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19535
|
|
Posted: Sat Feb 23, 2013 5:06 am |
|
|
Some little comment things:
1) No loading capacitors shown on the crystal.
2) No HF blocking capacitors anywhere. Bigger is not always better. Electrolytic capacitors have poor HF performance. Look at a PC motherboard, and you will see the large electrolytic capacitors around where the supply comes in, but then dozens (even hundreds!) of small (normally ceramic or polyester) capacitors round the board. Usually one every couple of IC's. These are designed to block the HF, which each IC generates, and can otherwise cause problems (both in RFI, and in functional terms). You should _always__ have something like a 0.1uF ceramic by the supply legs of the PIC. As close as possible, and the same wherever there is an IC that does any significant amount of high frequency work. The MAX232, should have another 1uF, right by the chip to between ground and the Vcc. If you look at the data sheet, it shows five capacitors.
3) You should be driving all the pins that are currently floating. Either drive them in code, or add a pull up/down resistor. Leaving lines floating is not recommended.
Best Wishes |
|
|
MartinS
Joined: 22 Feb 2013 Posts: 6
|
|
Posted: Sat Mar 02, 2013 7:46 am |
|
|
Finally i've found the problem. I never thought of checking this, because if i took out the PIC and made a bridge I got a brilliant echo.
On my Max232 adapter i had two LEDs (not in the schematic because i thought they never could cause problems) with the same GND. After i put a diode there it was working fine.
Big thanks to you guys for your fast help.
MartinS
|
|
|
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Sat Mar 02, 2013 8:59 am |
|
|
Diodes? on A MAX232? what for? _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
|
|