|
|
View previous topic :: View next topic |
Author |
Message |
Dempsey
Joined: 24 Oct 2013 Posts: 13
|
TC35 and PIC18F25K20 UART problem |
Posted: Mon Oct 05, 2015 12:34 pm |
|
|
Hello,
I have a problem with my GSM module and PIC18F25K20 UART communication. First I would like to display the RING string on the LCD. Unfortunately it doesn't work because when I call the module, only two "characters" appears on the LCD instead of RING string. http://kepfeltoltes.hu/151005/DSC_0291_www.kepfeltoltes.hu_.jpg) Anyone can help me what's wrong in my code?
Code: | #include <18f25k20.h>
#include <string.h>
#fuses put,nolvp,noprotect,intrc_io,nowdt,
#use delay (clock=16MHz)
#use rs232(baud=9600, xmit=PIN_C6,rcv=PIN_C7,bits=8,parity=N,stop=1,ERRORS)
/////////////////////////////////////////////////////////////
#include<flex_lcd.c>
#include <input.c>
#define BUFFER_SIZE 32
BYTE buffer[BUFFER_SIZE];
BYTE next_in = 0;
BYTE next_out = 0;
#int_rda
void serial_isr() {
int t;
buffer[next_in]=getc();
t=next_in;
if(++next_in==BUFFER_SIZE)
next_in=0;
if(next_in==next_out)
next_in=t;
}
#define bkbhit (next_in!=next_out)
BYTE bgetc() {
BYTE c;
while(!bkbhit) ;
c=buffer[next_out];
next_out=(next_out+1) % BUFFER_SIZE;
return(c);
}
////////////////////////////////////////////////////////////////
void main(){
lcd_init();
enable_interrupts(int_rda);
enable_interrupts(global);
do {
delay_ms(10000);
printf(lcd_putc,"Data:");
while(bkbhit)
lcd_putc( bgetc() );
} while (TRUE);
}
|
|
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Mon Oct 05, 2015 1:00 pm |
|
|
Hi,
Purely from a historical perspective, I'd guess that you've got a hardware interface issue between your TC35 GSM modem and your PIC. Saying that you have a 'TC35' is pretty meaningless, because most of the time (again from a historical perspective) you've actually got a TC35 module that is mounted to a breakout board that has other support components, such as TTL-to-RS232 conversion, etc. You should *really* post a link to the exact module you are using so that we can look at the schematic! I'd bet a milkshake that your Tx/Rx levels are not compatible
A couple of comments about your code. Why the 10 second delay? The 'bkbhit' statement will wait until a character is available, so you really don't need this delay. Your code looks like it will basically do what you want, however, I generally try to avoid using an LCD for this type of diagnostics. LCDs can deal with some characters in unexpected ways, and will sometimes mask what you are trying to look at. I much refer to use a MAX232 device and send diagnostic messages to my PC.
I realize I'm probably sounding like 'Johnny one-note' on this GSM interfacing, but it is a perennial problem!! _________________ John
If it's worth doing, it's worth doing in real hardware! |
|
|
Dempsey
Joined: 24 Oct 2013 Posts: 13
|
|
Posted: Tue Oct 06, 2015 5:01 am |
|
|
Hi,
I don't use level converter because the PIC and the GSM module are using 3,3V power supply. When I linked the PC and the PIC the communication was fine. On the PC side I used FT232R USB->Serial converter with 3,3V Rx/Tx level. I don't know what is wrong, programming or hardware error. What do you think? |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9246 Location: Greensville,Ontario
|
|
Posted: Tue Oct 06, 2015 6:02 am |
|
|
I'm with John on this..please post a link to the TC35 you're using. It might be that the TC35 defaults to something other than 9600-8-n-1 for serial communications that the PIC is setup for.
Since your program works using a PC as the 'TC35', code should be good.
2 garbage characters from the TC35 could easily be a baudrate issue.
Jay |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19552
|
|
Posted: Tue Oct 06, 2015 7:20 am |
|
|
There is also the problem of timing, though the data should eventually get returned.
When a character arrives, it'll get displayed, then the code goes off and pauses for 10 seconds, before displaying the next character. At this point the following characters should be in the buffer, so should be displayed one after the other, but the approach is not a terribly 'good' way of doing things.
However it does look massively like a baud problem as Temtronic says.
What compiler version are you on?. |
|
|
Dempsey
Joined: 24 Oct 2013 Posts: 13
|
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Tue Oct 06, 2015 7:54 am |
|
|
Hi,
I tried to download the datasheet for that module, but gave up after 10 minutes of trying...... Unfortunately, lack of proper & correct documentation is what plagues these 'cheap' hardware boards from Asia. Unless you are very experienced, it's often a hurdle that cannot be overcome..... Seriously, do a forum search for 'TC35' and you'll find a number of such projects using similar hardware that ultimately went no where.....
Clearly, that module has an RS232 driver chip on-board, probably a MAX232 or equivalent. The 'raw' TC35 TTL level RxD and TxD pins are probably broken out on either J5 or J6 as well? The silkscreen is not very clear, so it's hard to say for sure. Since you can communicate wit the module using your PC, at least this part is working. Are you connecting the PIC to the DB9 connector, or to pins on J5 or J6? If you are using the DB9 connector, you'll need to add a MAX232 to your PIC, and if you are using the TC35 RxD and TxD pins (presumably on J5/J6) then you'll have to disable the MAX232 on the TC35 board. You may need to find some jumpers to do this, or simply pull the MAX232 chip! _________________ John
If it's worth doing, it's worth doing in real hardware! |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19552
|
|
Posted: Tue Oct 06, 2015 8:08 am |
|
|
Even without data though, the fact it connects to the PC, and the visible MAX232, tells us why there is a problem. U2 is the MAX232 (you can just make this out in the pictures).
If the MAX232, is socketed as shown then his easiest way, would be to unplug the MAX232, and make the connections either directly to it's socket, or to the pins on JP6. If you look carefully at the pictures you can see the serial pins from the module are brought out here.
Lest make this clear to him:
RS232, is a signalling standard using (by PC standards) quite high voltages. The PIC does not develop/handle RS232.
It handles 'async serial TTL', which can be converted to RS232, using a TTL to RS232 converter chip. The MAX232 is the commonest such chip.
The TC35, also does not develop/handle RS232.
The breakout board you have has a MAX232, to convert the TTL signals, on the TC35, to RS232 to talk to a PC. The resulting signals cannot connect to a PIC without a MAX232 on the PIC.
However the TTL signals on the PIC _would_ happily connect directly to the TC35.
Currently you are feeding higher voltages than the PIC is designed to handle, directly into it's pins.... :( |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9246 Location: Greensville,Ontario
|
|
Posted: Tue Oct 06, 2015 8:57 am |
|
|
Obviously lots of options to get the PIC connected to the TC35. I second adding a MAX232( or equal) to your PIC project.
1) NO modifications to the TC35 module,less chance of breaking it...
2) Having real RS232 on the PIC allows connecting to a PC (that has RS232)
Jay |
|
|
Dempsey
Joined: 24 Oct 2013 Posts: 13
|
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19552
|
|
Posted: Tue Oct 06, 2015 10:56 am |
|
|
We can't tell.
You need to measure whether these connect to the pins on the DB-9, or to the pins on the tc35.
If they go to the pins on the tc35, then you don't need level translators, but you do need to disconnect the MAX232 on the board. If they go to the DB9, then you need to add a max232 to the PIC. |
|
|
Dempsey
Joined: 24 Oct 2013 Posts: 13
|
|
Posted: Tue Oct 06, 2015 11:03 am |
|
|
Ok! Thank you. I understand. I'll try your advice tomorrow. |
|
|
Dempsey
Joined: 24 Oct 2013 Posts: 13
|
|
Posted: Tue Oct 06, 2015 11:24 am |
|
|
I couldn't wait. I measured a little. Between the DB9 and the Tx/Rx pins aren't connection. The Rx pin connect to the Max232 IC's 11 pin and the Tx pin connect to the Max232 IC's 12 pin. |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9246 Location: Greensville,Ontario
|
|
Posted: Tue Oct 06, 2015 12:07 pm |
|
|
OK the second picture is NOT the same TC35 module as the first one.
Makes life challenging......a link to the real module would really help !
One way to tell TXD is that IF it is from a MAX232 it will have -5 to -12 volts on it at idle. Pin 2 of the DE9 connector should have that voltage.
Jay |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Tue Oct 06, 2015 12:20 pm |
|
|
Dempsey wrote: | I couldn't wait. I measured a little. Between the DB9 and the Tx/Rx pins aren't connection. The Rx pin connect to the Max232 IC's 11 pin and the Tx pin connect to the Max232 IC's 12 pin. |
Are you sure about that?? I would expect the 'Tx' pin to be connected to either pin 10 or 14. These are the inputs to the two TTL-to-RS232 OUT drivers on the chip. I would expect the 'Rx' pin to be connected to either pin 9 or 12. These are the outputs to the two TTL-to-RS232 IN drivers on the chip.
Again, where is the documentation for this module? It doesn't exist, I believe? Moreover, it's interesting that your module doesn't even seem to be the same as the one shown in the eBay listing...... I'm afraid, my friend, that you are on a slippery slope here, and its going to be tough to get any traction on this issue.....
OK, so taking a step back, you have a working configuration - the RS232 output mode of the module, right? So, I'd recommend that you just add a MAX232 to your PIC and get on with your program!! _________________ John
If it's worth doing, it's worth doing in real hardware! |
|
|
|
|
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
|