CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

Problem with Rx UART port with GPS module
Goto page 1, 2  Next
 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
samus111



Joined: 28 Aug 2014
Posts: 29
Location: Colombia

View user's profile Send private message AIM Address

Problem with Rx UART port with GPS module
PostPosted: Fri Aug 29, 2014 9:15 am     Reply with quote

Good day
I have a problem that still I have not been able to figure out what is the root of the problem. I want to communicate a Iridium GPS module with a PIC (does not matter the Pic family, I only need that be able to communicate, and that be the most small as possible) I attach the code:
Code:

#include <16f628.h>
#include <string.h>
#fuses intrc, nobrownout, noput
#use delay (internal=4000000)
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_B2,RCV=PIN_B1)
#define GP2 PIN_B4
#define GP3 PIN_B3


void main(){

 char tmp;
 
 set_tris_b(0b00000010); // 0b00000100
 
  INI:

 
 delay_ms(3000);
 output_high(PIN_B3);
 puts("AT\r");
 output_low(PIN_B3);
 
CHAIN:

 tmp=getc();
 if (tmp==75) {
 goto SBDWT;
 };
 goto CHAIN;

 
SBDWT:


 delay_ms(1000);
 output_high(PIN_B3);
 puts("AT+SBDWT=HOLA MUNDO\r");
 output_low(PIN_B3);
 
 CHAIN2:
 tmp=getc();
 
 if (tmp==75) {
 goto CSQ;
 };
 goto CHAIN2;
 
 
CSQ:

 delay_ms(1000);
 output_high(PIN_B3);
 puts("AT+CSQ\r");
 output_low(PIN_B3);
 
 CHAIN3:
 tmp=getc();
 if ((tmp<48)&(tmp>53)) {
 goto SBDIX;
 };
 if (tmp==75) {
 goto CSQ;
 };
 goto CHAIN3;
 
SBDIX:

delay_ms(1000);
 output_high(PIN_B3);
 puts("AT+SBDIX\r");
 output_low(PIN_B3);
delay_ms(8000);
goto SBDIX;
 
   }

The procedure is easy, I must to send commands to the module, and the module answer (This answer is very fast). This answer is important to me to analyze, and once I got the answer I am looking for, I send another command.
Practically the answer I search in the first two commands is a OK, the problem is, always, the PIC gets lost searching in the second command. I can not understand, the first and the second command structure are the same.
I have tried with three programmers, and with the next PICs: 16F628, 16F88, 16F886, 16F688, 18F2550, and even, now I am trying with a dsPIC33FJ128MC, but in all the PICs, the result is similar (some gets to the third command, others send me trash, etc, etc).
I am sure the problem is with the code. There must be a sentence or something that is wrong in this project. I think maybe the Buffer or the way how I am using the fgetc is having problems but I am not sure. I hope someone can help me, excuse for my english, but is not my native language. Thanks
ezflyr



Joined: 25 Oct 2010
Posts: 1019
Location: Tewksbury, MA

View user's profile Send private message

PostPosted: Fri Aug 29, 2014 11:19 am     Reply with quote

Hi,

No offense, but your 'C' code is some of the worst I've ever seen posted on the forum in a long time..... As another user recently said "I found myself gently retching in the corner" while reading it.... Clearly, based on your posted code, you haven't spent a lot of time browsing the forum archives, or studying the CCS provided example programs, to try to learn 'proper' 'C' language coding......

First of all, can you post a link to the 'GPS' module that you are using. Before proceeding, we need to know the interface specifications, the baud rate, etc. Also, are you sure this is a GPS project? You code doesn't seem to be written to read/interpret typical GPS data. Frankly, it seems more like a GSM project to me.

As to your code, there are lots of problems. First, for reliable data reception via the hardware UART, you really should be using a serial interrupt to receive data. Look at the example program 'ex_sisr.c' to see how this is done properly. You also need to add the 'Errors' keyword to your #use rs232 directive to prevent the UART from locking up if an over-run condition occurs..... This has been covered many, many times before! You use of 'goto's' is really poor 'C' form, and should be avoided if possible. All of your 'goto's' can be replaced with other constructs, such as 'Do-While' loops..... Finally, your formatting is terrible. Learn to write code with proper indenting, so as to be easily readable.

Your #fuses are a bit on the light side. Many fuses default to the desired value, but for critical ones, I like to explicitly state them. Examples would be the 'NOLVP', and the 'NOWDT' fuses.

John
ckielstra



Joined: 18 Mar 2004
Posts: 3680
Location: The Netherlands

View user's profile Send private message

PostPosted: Fri Aug 29, 2014 12:57 pm     Reply with quote

In addition to all the above:
Code:
 if ((tmp<48)&(tmp>53)) {
 goto SBDIX;
Not sure what you want to do here, but this is never going to work. How can a variable ever be smaller than 48 AND at the same time be larger than 53? Impossible...

Also, study the difference between the commands '&' and '&&'.
samus111



Joined: 28 Aug 2014
Posts: 29
Location: Colombia

View user's profile Send private message AIM Address

PostPosted: Fri Aug 29, 2014 1:12 pm     Reply with quote

ok
samus111



Joined: 28 Aug 2014
Posts: 29
Location: Colombia

View user's profile Send private message AIM Address

PostPosted: Fri Aug 29, 2014 1:12 pm     Reply with quote

sorry, I am a beginner in CCS codes, but I like that you be so honest, Ok I will take the changes you have advised me, I will run again the program and I will answer in few minutes, Thanks (the range error, was a modification that I made for look something, and I forgot to return it to it real value)

Last edited by samus111 on Fri Aug 29, 2014 1:21 pm; edited 1 time in total
samus111



Joined: 28 Aug 2014
Posts: 29
Location: Colombia

View user's profile Send private message AIM Address

PostPosted: Fri Aug 29, 2014 1:13 pm     Reply with quote

For other side, the device is not a GPS module, is a Iridium module (IRIDIUM MODULE 9603), so, this one only takes a message from a manufactured device, and send them to the Iridium network, for later, be received in a email account. In this case, I want to send the message :Hola Mundo. the device, first must be activated by the command "AT", after this, the device will answer with a OK, later, I must to write the message in the module memory, then, I must to send the command "AT+SBDWT:(my text is here)". With this, the Module will answer with a OK, and I have to go with the third command, but in this part, the PIC does not recognize the OK answer from the module. I will take in mind your tips, I will answer soon today.

Last edited by samus111 on Fri Aug 29, 2014 1:34 pm; edited 1 time in total
ezflyr



Joined: 25 Oct 2010
Posts: 1019
Location: Tewksbury, MA

View user's profile Send private message

PostPosted: Fri Aug 29, 2014 1:40 pm     Reply with quote

Hi,

Just out of curiosity, why did you chose this for your topic title, "Problem with Rx UART port with GPS module", if this is not a GPS project?

Rather that reading the module communications requirements to us, please post a link to the exact module you are using, as requested in my 1st reply!

John
samus111



Joined: 28 Aug 2014
Posts: 29
Location: Colombia

View user's profile Send private message AIM Address

PostPosted: Fri Aug 29, 2014 1:57 pm     Reply with quote

You are right, the true is that, the message I send by the iridium network, the idea is to send a GPS coordinate obviously gotten through a GPS module (I will use the L70 quectel GPS module), that's why my project is a GPS position sender, but the first part, I try to communicate the module with the PIC , and I am having problems here. Thanks
ezflyr



Joined: 25 Oct 2010
Posts: 1019
Location: Tewksbury, MA

View user's profile Send private message

PostPosted: Fri Aug 29, 2014 2:39 pm     Reply with quote

Hi,

OK, but you've now ignored two requests that you post a link to the module that you are interfacing to the PIC, so I'm going to abandon this thread. Without the requested data you are just wasting everybody's time. If you come here asking for help, you really should be willing to cooperate with any requests for additional information that are made.....

Good Luck!

John
samus111



Joined: 28 Aug 2014
Posts: 29
Location: Colombia

View user's profile Send private message AIM Address

PostPosted: Fri Aug 29, 2014 2:43 pm     Reply with quote

but I answered before, the module is a IRIDIUM 9603, that is its name, do you need that I attach a file??
ezflyr



Joined: 25 Oct 2010
Posts: 1019
Location: Tewksbury, MA

View user's profile Send private message

PostPosted: Fri Aug 29, 2014 3:36 pm     Reply with quote

Hi,

You've come here asking for our help, so you should make it as easy for us as possible to help you. That means if there are any pertinent documents to help us, you should post links so that we can easily find them. In this case, at a minimum, we would need to see the module datasheet so that we could verify the hardware interface. We would also need to see the (AT) command reference so that we could see how to 'talk' to the module, and make it work as intended. Your interpretations of these documents are not good enough, and we should not be expected to have to go search for them on our own.

John
temtronic



Joined: 01 Jul 2010
Posts: 9228
Location: Greensville,Ontario

View user's profile Send private message

PostPosted: Fri Aug 29, 2014 4:09 pm     Reply with quote

As John says, we need more information...

one HUGE problem could be the 'interface'. Most, if not all GPS devices run on 3 volts and the PIC is a 5 volt device. That alone is a big problem !!

hth
jay
samus111



Joined: 28 Aug 2014
Posts: 29
Location: Colombia

View user's profile Send private message AIM Address

PostPosted: Fri Aug 29, 2014 4:18 pm     Reply with quote

ok Jhon, and sorry, I am new in this forum, and I need to learn the procedure, Thanks for you help:
here is the developer guide:
http://www.pacificrim.com.au/media/custom/upload/File-1383622151.pdf

I have the AT Acommands in a pdf file, but I do not know how share it here, there is a way?

I think the problem is some issue with the schmitt trigger, but I am not sure, how can I configure the schmitt trigger in my 16f688?
dyeatman



Joined: 06 Sep 2003
Posts: 1934
Location: Norman, OK

View user's profile Send private message

PostPosted: Fri Aug 29, 2014 4:22 pm     Reply with quote

The developers manual says the default RS232 data rate is 19200...not 9600
It also says the module acts as DCE.
_________________
Google and Forum Search are some of your best tools!!!!
samus111



Joined: 28 Aug 2014
Posts: 29
Location: Colombia

View user's profile Send private message AIM Address

PostPosted: Fri Aug 29, 2014 4:25 pm     Reply with quote

Of course, I set the baud rate to 9600 in the module before (that is the baud rate of the GPS module too) and I stored that baud rate in a user profile, so always when the device starts, is transmitting and receiving to 9600.
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
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