View previous topic :: View next topic |
Author |
Message |
amit78
Joined: 17 Jul 2009 Posts: 22 Location: Kolkata, India
|
Problem in sending SMS using SIM300 and PIC18F452 |
Posted: Mon Jun 04, 2012 8:14 am |
|
|
Hi all
I am trying to connect a GSM Modem (SIM300) to send SMS using PIC18F452.
1. While I am connecting SIM 300 module with PC HyperTrm its working file with the At commands. Using AT+CMGS, I can send SMS too.
2. Now while I wrote the following code using the PIC18F452, nothing is happening.
Code: |
#include <18F452.h>
#FUSES HS, NOWDT, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOWRT
#use delay(clock=20000000)
#use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8, stream=GSM, ERRORS)
#include <stdio.h>
void main()
{
char s = 26; //0x1A;
char b = 34;
fprintf(GSM, "AT\r");
delay_ms(900);
fprintf(GSM, "ATE0\r");
delay_ms(900);
fprintf(GSM, "AT+CMGF=1\r");
delay_ms(900);
fprintf(GSM, "AT+CMGS=%c9674170493%c\r", b, b);
delay_ms(3000);
fprintf(GSM, "hello FROM mcu%c", s);
while(1)
{
delay_ms(1000);
}
}
|
I have connected both with a RS232 cross cable. Note: only three pins are used: Pin 5(GND), Pin2(Rx) and Pin3(Tx).
3. Interesting thing is, while connecting this PIC board with my PC HyperTerm with 9600 baud, I am getting the strings in the Hypertrm. So I hope the Serial connection is OK.
4. I am using the following connection:
PIC->Max232-> || Max232->SIM300
Any Suggestion? |
|
|
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Mon Jun 04, 2012 8:34 am |
|
|
Make sure to disable Flow control on the Module when using 3 wires.
What is this
Try this better its clearer Hex 0x22 = "
(i know its the same... IMO i thing its better to keep things in hex)
try swapping your tx/rx lines between your MAX 232 chips...
Sound dumb but who is who ( DTE / DCE ) sometimes gets confusing.
Swapping the lines usually gets rid of my problems.
Before trying to go directly to sending an SMS... code a small programm that detects if when you send AT you get OK back...
then move on.
G. _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
|
amit78
Joined: 17 Jul 2009 Posts: 22 Location: Kolkata, India
|
|
Posted: Mon Jun 04, 2012 11:25 pm |
|
|
Yes Gabriel, you were right. Just swapping the rx/tx solves the problem. But I am not convinced. Because now it is a straight cable, not cross cable.
[PIC=>MAX232] Rx----> Rx [MAX232=>SIM300]
[PIC=>MAX232] Tx----> Tx [MAX232=>SIM300]
Any way I am getting the SMS.
Surely I will maintain the norms to write things in hex. So, from now I will use:
Thanks dude. |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Tue Jun 05, 2012 2:02 am |
|
|
amit78 wrote: | Yes Gabriel, you were right. Just swapping the rx/tx solves the problem. But I am not convinced. Because now it is a straight cable, not cross cable.
[PIC=>MAX232] Rx----> Rx [MAX232=>SIM300]
[PIC=>MAX232] Tx----> Tx [MAX232=>SIM300] | In the RS232 standard two types of devices are devined: DTE and DCE. DTE is short for Data Terminal Equipment; a device that converts user information into signals or reconverts received signals. Examples are computer, printer or terminal.
DCE stands for Data Communications Equipment and is the device sitting in between the DTE and the physical communication wire, i.e. your modem.
The DCE and the DTE are always connected with a straight cable. If you want to connect to DTE devices together this requires crossing the receive and transmit wires, a so called null modem or crossover cable.
Now your confusion comes from the standard definitions that say the signals are named from a DTE point of view. The Tx output on the DTE (computer) is connected to the Tx input on the DCE (modem). The name of the signal is the same on both sides, but what is an output on one side is connected to the same named input on the other side.
More info: http://www.bb-elec.com/bb-elec/literature/tech/faq_rs232_connections_work.pdf |
|
|
ckielstra
Joined: 18 Mar 2004 Posts: 3680 Location: The Netherlands
|
|
Posted: Tue Jun 05, 2012 2:17 am |
|
|
amit78 wrote: | Surely I will maintain the norms to write things in hex. So, from now I will use:
| Using hex, decimal, binary or ASCII is a matter of personal preference. I myself like to write ASCII when I want to define a specific character.
But to avoid confusion I probably wouldn't writeand use instead:And when specifying the I/O bits in a TRIS register I use binary: Code: | TRIS_A = 0b00110011; |
Just use the notation that best fits the job. But what I don't like is your construct: Code: | char s = 26; //0x1A; | If you have to add comments to explain the hex-value then you are doing something wrong and should have coded the hex value immediately: |
|
|
amit78
Joined: 17 Jul 2009 Posts: 22 Location: Kolkata, India
|
|
Posted: Tue Jun 05, 2012 6:26 am |
|
|
Thanks Ckielstra for your valuable comment. I will surely keep these in my mind.
Amit |
|
|
ezflyr
Joined: 25 Oct 2010 Posts: 1019 Location: Tewksbury, MA
|
|
Posted: Tue Jun 05, 2012 7:00 am |
|
|
Hi All,
Everyone seems to be missing an important point with this discussion. When you send the CMGS command, you need to enclose the phone number inside of quotation marks. You can do that right inside your fprintf statement directly by preceding the quotation marks with an escape character '\'. Do it like this, and get rid the the silly way you are doing it now.
Code: |
fprintf(GSM, "AT+CMGS=\"5085551212\"\r");
|
John |
|
|
Gabriel
Joined: 03 Aug 2009 Posts: 1067 Location: Panama
|
|
Posted: Tue Jun 05, 2012 8:01 am |
|
|
@ezflyr: Right on! . . . indeed that was the key issue _________________ CCS PCM 5.078 & CCS PCH 5.093 |
|
|
|