View previous topic :: View next topic |
Author |
Message |
mcr1981
Joined: 27 Oct 2010 Posts: 28
|
Problems with UART 18F45k22 |
Posted: Thu Nov 04, 2010 5:47 am |
|
|
Hi.
I have a problem with the hardware uart on the PIC18F45K22.
I use the pre processor directive #use rs233(uart1, baud=1200, errors).
If I send a character (char r='a') with putc(r), PUTTY prints it. If I try to send information with the printf function, it won't work. I looked at the forum and I'm using this as a template from here http://www.ccsinfo.com/forum/viewtopic.php?t=43829&highlight=pic18f45k22
Code: | #use rs232 ( uart1, baud=300, errors ) |
The Tx works until I try to use a getc() or printf().... strange since in a 16F887 works great.
Will try later, right now is 4:47 AM and I need some sleep, but it looks like (for me) that the configuration in assembler is not correct for the RX register. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Nov 04, 2010 12:09 pm |
|
|
Post your compiler version. With a new PIC, the compiler may have
some bugs depending upon the compiler version. |
|
|
bdeb
Joined: 05 Nov 2010 Posts: 42 Location: Sweden
|
|
Posted: Fri Nov 05, 2010 5:18 pm |
|
|
Hi mcr1981,
A little confused - are you using 1.200 baud or 300 baud?
(Hope you don´t have two different "#use rs232" statements.)
What´s your clock speed?
Have never tried to run UART so slow, can this cause problems?
Do you have a lot of code in your receive ISR?
Try to add "ERRORS" to the "#use rs232" statement, will clear read errors.
/BdeB |
|
|
mcr1981
Joined: 27 Oct 2010 Posts: 28
|
|
Posted: Sat Nov 06, 2010 3:08 am |
|
|
bdeb wrote: | Hi mcr1981,
A little confused - are you using 1.200 baud or 300 baud?
(Hope you don´t have two different "#use rs232" statements.)
What´s your clock speed?
Have never tried to run UART so slow, can this cause problems?
Do you have a lot of code in your receive ISR?
Try to add "ERRORS" to the "#use rs232" statement, will clear read errors.
/BdeB |
Hi.
I'm using 300 baud since I use the internal oscilator (4Mhz) and never had any problems with testing an UART at that rate.
I already have "errors" in the preprocessor options for #use rs232.
I don't use an ISR, what I want is for the micro to do a loopback. I can send information to the Terminal, the problem is with the RX module. Will post info later. Apparently the RX is set to an output instead of an input (with CCS pre-processor). Still working on a solution.
I already sent info to CCS regarding the Timer2 module on this PIC. The SFR has the correct address, but when you compile, the addresses of TIMER2 and T2CON are just like a PIC18F45k20, and any other for that matter (they even asigned a number to this issue). |
|
|
mcr1981
Joined: 27 Oct 2010 Posts: 28
|
|
Posted: Sat Nov 06, 2010 11:23 am |
|
|
PCM programmer wrote: | Post your compiler version. With a new PIC, the compiler may have
some bugs depending upon the compiler version. |
I'm using the 4.112 version.
Looks like you're using this PIC also, since you had the same problem for the PWM (Timer2 and T2CON not set by SETUP_TIMER2()). I already tested this issue with three PIC18F45k22 and nothing, not even changing the UART1 to UART2. I can send but can't receive; not only that, the micro won't even blink an LED (heartbeat LED).
Apparently the the interrupt flag won't activate and the input for the RX pin won't change. Will post a little more info later. |
|
|
Sergeant82d
Joined: 01 Nov 2009 Posts: 55 Location: Central Oklahoma
|
|
Posted: Tue Nov 09, 2010 2:12 am |
|
|
I use ver 4.110 w/ 45K22's and have had no problems with the UART... one of the few things I can say that about while using this great chip... the ECCP module/Timer setup was a nightmare that PCM Programmer solved for me...
I really like the peripherals packaged into the 'K22 chips; sure will be nice when the compiler is straightened out enough to use them all! |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Tue Nov 09, 2010 2:25 pm |
|
|
I was able to make it work. But vs. 4.112 does have a bug, compared to
vs. 4.114. In the 18F45K22, all the i/o pins come up in Analog mode after
a power-on reset. In vs. 4.114, CCS loads all the ANSEL registers with 0
in their start-up code. This sets all the i/o pins to be in digital mode.
But in your version (4.112) CCS doesn't do this.
So to fix it, I added a short routine that emulates the behavior of 4.114.
It sets all ports to be Digital i/o. Just call this routine at the beginning of
of main() as shown in the program below. Then it should work. I did this
and it worked at both 300 baud and at 9600 baud.
The program below just echoes a character that you type in a terminal
window, such as TeraTerm. Whatever you type, will be received by the
PIC and sent back to the PC where you can see it on the screen.
Code: |
#include <18F45K22.h>
#fuses INTRC_IO,NOWDT,PUT,BROWNOUT,NOLVP
#use delay(clock=4000000)
//#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, ERRORS)
#use rs232(baud=300, UART1, ERRORS)
void make_all_pins_digital(void)
{
#byte ANSELA = 0xF38
#byte ANSELB = 0xF39
#byte ANSELC = 0xF3A
#byte ANSELD = 0xF3B
#byte ANSELE = 0xF3C
ANSELA = 0;
ANSELB = 0;
ANSELC = 0;
ANSELD = 0;
ANSELE = 0;
}
#int_rda
void rda_isr(void)
{
int8 c;
c = getc();
putc(c);
}
//======================================
void main(void)
{
make_all_pins_digital();
printf("Start: ");
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
while(1);
} |
|
|
|
mcr1981
Joined: 27 Oct 2010 Posts: 28
|
Thanks for this info |
Posted: Wed Nov 17, 2010 3:51 am |
|
|
Maybe I was lost in all this bit-byte madness and did not see that configuration.
Will try your suggestion tomorrow and will keep you posted.
Should one go back to 4.110? I need to renew my licence but will like it to be more stable with this new PICs.
Thanks.
PS: I did not get a notification for your response, had to search the forum again for it. |
|
|
|