View previous topic :: View next topic |
Author |
Message |
koirnaos
Joined: 23 Dec 2009 Posts: 6
|
I need help with my thesis project |
Posted: Thu Sep 02, 2010 9:41 am |
|
|
Hi all, my name is Kostas and I'm facing a problem with my thesis and I need help about solving it.
Well the problem that I'm facing has to do with the communication of a pic microcontroller ( 16f628 ) and a gsm modem (Siemens T35i terminal). I can't send or receive commands between those two devices.
For example, I'm trying to send the "AT" command to the modem with a program that I wrote for the microcontroller. The whole idea for the program is to send this command and to receive and read the "OK" response and if it is the right response, light up a led or for everything else, light up another.
The program was made with CCS compiler:
Code: | #include <16F628.h>
#include <string.h>
#fuses XT,NOWDT,PUT,NOBROWNOUT,NOMCLR,NOLVP,INTRC_IO
#use delay(clock=4000000)
#byte PORTB = 0x06
#byte PORTA = 0x05
#use rs232(baud=9600,xmit=PIN_B2,rcv=PIN_B1)
unsigned char cmd_at[]="AT";
unsigned char answer[2];
unsigned char aok[]="OK";
int i;
int p;
void main(void) {
set_tris_a(0x00); //Set PortA as OUTput
delay_ms(7000);
for (i=0; i<sizeof(cmd_at); i++){
putc(cmd_at[i]);
}
putc(13);
delay_ms(100);
gets(answer);
p=strcmp(answer, aok);
if (p=0){
output_high(PIN_A0);
delay_ms(5000);
}
else{
output_high(PIN_A1);
delay_ms(5000);
}
}
|
here is the circuit:
http://i.imagehost.org/view/0115/circuit
What I do wrong, and I can't get the result that I want?
please help me because I run out of ideas!
thanks in advance. |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Thu Sep 02, 2010 11:22 am |
|
|
There are many threads in the archives about this. Use the forum's
search page to find them:
http://www.ccsinfo.com/forum/search.php
Search for these terms:
Set it to: Search for all terms
Also, this whole huge construct can be replaced with one printf:
Quote: |
unsigned char cmd_at[]="AT";
for (i=0; i<sizeof(cmd_at); i++){
putc(cmd_at[i]);
}
putc(13);
|
|
|
|
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Thu Sep 02, 2010 1:19 pm |
|
|
I have already coded this before....
I posted my code on the code library under: Receiving txt messages
http://www.ccsinfo.com/forum/viewtopic.php?t=42527
It should get you going.
Hope that helps.
g. _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
|
arunb
Joined: 08 Sep 2003 Posts: 492 Location: India
|
re |
Posted: Fri Sep 03, 2010 2:29 am |
|
|
The delays look large, though I don't think that's your problem, but having large delay values will prevent the pic from doing other job.
thanks
a |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
Re: re |
Posted: Fri Sep 03, 2010 4:38 am |
|
|
arunb wrote: | The delays look large, ... | Yes, that's what I thought too. Especially here: Code: | putc(13);
delay_ms(100);
gets(answer); | There should be no delay between sending the newline character and waiting for the response. Most likely the 100ms is too long and the whole response is missed.
As said earlier in this thread; this kind of project has been done many times before. Have a look at these older threads. |
|
|
koirnaos
Joined: 23 Dec 2009 Posts: 6
|
|
Posted: Sat Sep 04, 2010 3:18 am |
|
|
Thank you all for the answers. They helped me a lot!
PCM programmer: I changed the piece of code that you indicated with a printf and it works fine!
Gabriel: Thanks for the code. It helped to correct some mistakes I made.
Arunb, ckielstra: I didn't know that 100ms is too large delay.
I used this value because the instructions indicate that the modem after sending a command has a 100ms delay before the response is send. (I did that to avoid reading wrong data). I will check how the program works without the delay and I will post the results.
Ricalyn03: Thanks for the suggestion. I'll look at the structure of my code, maybe there is another problem that I didn't noticed.
kostas |
|
|
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Sat Sep 04, 2010 7:11 am |
|
|
your welcome...
Just as a suggestion you could just sent all the set up commands
without checking for their replys.
Basically what I wind up doing in my next versions of the posted code is just checking for the "OK" of the AT command... if the check is passed... I just send a burst of commands.... and then repeat the same initial test.
This ensures that my comunication with my cell is working before I send and after I send set up commands.... if your burst of commands is correct( as in commpatible commands and correct spelling and format) then you should not have any issues thus making response checking useless....and only needing to test that communications with the cell are indeed working.
This simplifies your set up code to basically a bunch of printf().
Also... send a command and store anything the cell responds in big array and later check the array.... as oposed to checking for a string as it comes char by char..... its simple... but doing it on the fly would probably be more efficient. _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
|
|