View previous topic :: View next topic |
Author |
Message |
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
UART 2 on PIC 24FJ not receiving data |
Posted: Wed Oct 23, 2019 2:58 pm |
|
|
Device: PIC24FJ1024GB606
CCS: v5.078
MPLAB X IDE: v5.15
I have a working program with two UARTs, on UART 1 I receive GPRS data and is working ok at 115200bps.
UART 2 same configuration different pins not receiving at all.
The data is present on PIN RG9; I already check it with an oscilloscope and have the same shape as UART 1 RX.
This is a summary of the code used to setup the UART2
Code: | #pin_select U2TX=PIN_D5
#pin_select U2RX=PIN_G9
#use rs232(UART2,stream=GPS,NOINIT)
#INT_RDA2
void RX2_ISR()
{
}
void main()
{
set_tris_d(0b111100000011);
set_tris_g(0b11001000000);
setup_uart(115200,GPS);
enable_interrupts(INT_RDA2);
enable_interrupts(GLOBAL);
} |
Am I forgetting something? _________________ Electric Blue
Last edited by E_Blue on Wed Oct 23, 2019 3:09 pm; edited 1 time in total |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Oct 23, 2019 3:06 pm |
|
|
You're missing the fgetc(GPS) statement in the isr. |
|
|
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
|
Posted: Wed Oct 23, 2019 3:11 pm |
|
|
No, I do have code inside the UART 2 ISR, I just don't show it to make more clear how I set it up UART 2. _________________ Electric Blue |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9226 Location: Greensville,Ontario
|
|
Posted: Wed Oct 23, 2019 4:33 pm |
|
|
You should always post a small, complete compilable program , that way we can 'cut/paste/compile/test'....and report back fast, maybe in minutes. Leave 'something', anything out and well, it's a guessing game as to why it doesn't work.
Jay |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19513
|
|
Posted: Thu Oct 24, 2019 12:27 am |
|
|
Disable the comparator.
Generally analog functions have higher priority than RP functions, and these
then have higher priority than normal I/O. You have to ensure the higher
priority uses are disabled on pins. The compiler (on reasonably recent versions)
automatically disables the ADC I/O, but the comparator normally requires
explicit turning off. Pin G9 has comparator inputs on it by default. |
|
|
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
|
Posted: Thu Oct 24, 2019 7:51 am |
|
|
I just added at main start
Code: | setup_comparator(1,NC_NC);
setup_comparator(2,NC_NC);
setup_comparator(3,NC_NC);
|
And also a 16bit variable to count the times that RG9 is in 1 every 33mS and doesn't change from zero.
Is like the inside logic doesn't notice the external pin level.
Now I'm checking Parallel Master/Slave Port and Output Compare registers; I'm getting out of options. _________________ Electric Blue |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9226 Location: Greensville,Ontario
|
|
Posted: Thu Oct 24, 2019 8:50 am |
|
|
hmm.. this...
Quote: | set_tris_d(0b111100000011);
set_tris_g(0b11001000000); |
while I don't use that PIC, does PORT G really have 11 bits and PORTD 12 bits ??
again, please show use ALL your code, the complete program.
Jay |
|
|
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
|
Posted: Thu Oct 24, 2019 9:07 am |
|
|
As far I know 0b00001100 = 0b1100
The complete program have more than 12K lines and some minor .h files.
Now I'm writing a smaller program to only use the USARTs and some pins to turn up the Modem & GPS. _________________ Electric Blue |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19513
|
|
Posted: Thu Oct 24, 2019 11:26 am |
|
|
Try explicitly setting ANSG.
I remember an issue a few versions ago, where the compiler was not
correctly setting the bits for this.
#WORD ANSG=getenv("SFR:ANSG")
ANSG=0; |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Oct 24, 2019 12:03 pm |
|
|
Try making a test program without the 12K lines. Maybe something in those
12K lines is clobbering the Rx pin. Make a short program that only talks
to UART2. Don't include UART1 in the program. See if you can make that
work. Also, it would be short and you could post the whole thing. |
|
|
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
|
Posted: Fri Oct 25, 2019 7:24 am |
|
|
I made a program to send a text every 500mS on UART2 and made a short circuit with a 220ohm resistor and works ok.
The GPS and Modem are 1.8V logic and the PIC is 3.3V logic so I'm using this to both, the modem and the GPS TX UART interface.
Here the GPS data on RG9
Here the Modem data on RB6
Although both signals seems the same levels and rise times the modem is running ok on RB6(RX1) but the same doesn't work for RG9(RX2). _________________ Electric Blue |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9226 Location: Greensville,Ontario
|
|
Posted: Fri Oct 25, 2019 7:39 am |
|
|
You really need proper 'logic level translators' ! Those are TERRIBLE 'squarewaves'.....A risetime of 50-70% is totally unacceptable.
Now you _might_ get better results at a slower baud rate, say 300 or 600, but really, you need to havve sharp, crisp edges. |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19513
|
|
Posted: Fri Oct 25, 2019 7:48 am |
|
|
The big reason with the circuit, is the use of 10K for the pullups.
At 3.3v, just 0.33mA and falling as the voltage rises. Something like 3mA
is a much more sensible current to slew the rail at a reasonable rate.... |
|
|
E_Blue
Joined: 13 Apr 2011 Posts: 417
|
|
Posted: Fri Oct 25, 2019 2:59 pm |
|
|
Ttelmah wrote: | Try explicitly setting ANSG.
I remember an issue a few versions ago, where the compiler was not
correctly setting the bits for this.
#WORD ANSG=getenv("SFR:ANSG")
ANSG=0; |
Guess what...was the stupid ANSG.
I know it! It had to be something very stupid, damn!
Two days and half because this stupid thing, unbelievable. _________________ Electric Blue |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9226 Location: Greensville,Ontario
|
|
Posted: Fri Oct 25, 2019 3:32 pm |
|
|
Some days you have to read the datasheet.... whatever you need is usually BURIED in the 'fine print' 2-3 HUNDRED pages in......
The real 'gotcha' is when 'they' change the default values to some bits or some registers for some reason...
also
Never, EVER trust a 'Wizard'...they were programmed by someone else who's idea of 'defaults' are never yours !
Look on the bright side, you only lost 2.5 days.......BUT you got it 'up and running' !
Jay |
|
|
|