Archive for the ‘Telit GM862’ Category

Mapping cellular signal strength to 5 bars

July 4, 2010

By now you may have heard about the reception problems with iPhone 4. Apple has mentioned that the real problem has been with the way they mapped signal strength to the famous AT&T 5 bars icon (where 5 bars denotes excellent reception and no bars means very poor reception). Recently I had tried to solve the same problem so here is the mapping that I used. I wonder what Apple is now using.

But first a few words on signal strength and its unit. The cellular signal strength is represented in -dBm: the power ratio in decibels of the measured power referenced to one milliwatt. The useful range is somewhere between -50dBm to -110dBm. The smaller the number the worse the signal. So -50dBm is much better than -110dBm. A 3 dB increase represents doubling the power. I’ve not researched if it is possible to get the the actual signal strength using the iPhone SDK. But I’ve been using the Tetlit cellular modems and there are a couple of AT commands that provide this information: MONI and CQS. The AT command MONI returns the received signal strength in dBM. Based on testing, I’ve seen MONI returning signal strength anywhere from -55dbM to -110dBm depending on location. At lower dbms, e.g., -109 or above, you can definitely still send SMS but the quality of reception is lower (more bit rate errors) and I’m not sure if you can hold a conversation at these dBm levels.

The AT command +CQS maps the signal strength into a signal quality number between 0 to 99 as shown in the table below:

Signal Quality dbM Power (milliwatt)
0 -113 or less 0.0000000000050119 or less
2 to 30 -109 to -53 0.0000000000125893 to 0.0000050118723363 (2 dBm per step)
31 -51 or greater 0.0000079432823472 or greater
99 not known or not detectable

AT&T converts the reception signal strength to a number between 0 to 5. The famous bars icons are used to denote this: 5 bars means excellent reception and 0 bars means almost no reception.

According to the CSQ command mapping -113 dBm maps to 0 and -51 is the best you can get. The difference between these two is about 62 dBm and if you divide 62 dBm range by 6 you get 10.3 dBm per step which must be more or less the dbM interval that AT&T uses to map the signal strength to bars. Based on this approach here is the rounded dBm table mapped to a number between 0 to 5.

dbM Signal Quality
-60 or greater 5
-61 to -73 4
-74 to -85 3
-86 to -98 2
-99 to -110 1
-111 or less 0

But if you use this it is very rare to get 5 bars, so it is possible that most cell phones will reduce the dBm interval mapping to bars and increase the lower range so that -75dBm or greater maps to 5 bars and end up with something like this:

dbM Signal Quality
-75 or greater 5
-83 to -74 4
-95 to -82 3
-105 to -94 2
-110 -104 1
-111 or less 0

How to sync real-time clock with network-time on Telit modules

June 30, 2009

You can configure the Telit GM cellular modem to set its internal real-time clock to the network time and have this value automatically updated each time the module is powered on. Here are the AT commands that you need to issue (I’ve omitted the AT response codes):

AT#NITZ=7,0 // sync network time to internal clock
AT&P0 // profile to be loaded on startup
AT&W0 // store the complete profile
AT#SHDN // this will turn off the modem
// now power on the modem
AT+CCLK? // get current time
// time response is +CCLK: "09/06/29,15:25:32-28"
// time format is yy/MM/dd,hh:mm:ss±zz

The command AT#NITZ=7,0 on your specific modem may not work, check the range of valid inputs for this command using AT#NITZ=?. If you’ve an old module from then AT#NITZ=? may return #NITZ:(0-1),(0-7). More recent firmwares return #NITZ:(0-7)(0,1). If you’ve an older firmware, then you should set the AT#NITZ=1,0. The difference is that with newer firmware, you will also get the time-zone zz, not so with the older firmware. If you set AT#NITZ=7,1, then when the module gets the network time it is supposed to be echoed as an unsolicited message on the serial port. This didn’t work in my tests. Just as well. In this case, I rather not deal with unsolicited messages for network time, since I can use the real-time clock to get the time when I want to (getting unsolicited messages for AT+CREG is valuable, however).

What do I mean by older firmware? The GM862 module that I bought from has this firmware:

PS:5.02.203/AL:6.04.204-GM862 QUAD

The module that I purchased from SemiConductorStore has this firmware:


AT&T network registration every 54 minutes

May 22, 2009

The Telit modem on the AT&T network will re-register every 54 minutes (if the modem is stationary, for a moving modem the re-registration will happen more frequently). For a GPRS session, you’ll lose your IP address assignment after 4 hours of inactivity. These are the properties of the network and have nothing to do with the make of the modem.


May 22, 2009

In US, AT&T operates on two frequencies 850MHz and 1900 MHZ. With the Telit GM862 module, the 850MHz frequency has current consumption peaks of 2 Amps and on the 1900 MHz network, current peaks of 1 Amps. The T-mobile network operates on 1900 MHz. You can use the AT SERVINFO command to find out which network (850MHz or 1900 MHz) are you on. If the channel number is between 128 to 251, then you’re on the 850 MHz network and for 512 to 810 channel numbers, you’re on the 1900 MHz network.

SMS to e-mail?

May 21, 2009

I knew that you were able to send e-mail and get it as SMS, but I was not aware the reverse also existed. On AT&T you can send an e-mail via SMS by sending a message that starts with e-mail address followed by a space and then the text of the message to the magic number “+121”. I wonder what other magic numbers there are out there?

Telit GM862 power consumption on GSM 850 & 900

April 7, 2009

The GSM frequencies for the AT&T network in USA are 850 MHz and 900 MHz. The power consumption of the Telit GM862 is determined by the strength of the signal of the closest cellular tower. If you’re in the he 850 MHz region, then you must prepare for peaks of 2A; the 900 MHz region are more efficient and only peaks of 1A need be anticipated. The peak current typically happens during network initialization, i.e., when you turn the module on and it attempts to register on the AT&T network. You can use various AT commands such as AT#MONI and AT+CSQ to find out which frequency region you fall under.

During normal operation in well served cellular regions, the peak current consumption seems to be a lot more reasonable (but still quite high) — around 150mA.


March 21, 2009

GM862 STAT_LEDIf you’re struggling with how to connect the STAT_LED pin of the GM862 Basic 50 pin evaluation board to Arduino, so that it shows the network activity, then look no further. I found the  circuit diagram in an out of date Telit document. Click on the thumbnail to see what to do.

Powering GM862 from a battery

February 24, 2009


Gm862 battery circuit

Gm862 battery circuit

To run the Telit’s GM862 cellular module/modem from a battery you must read the Telit documentation very carefully. It states that “A Bypass low ESR capacitor of adequate capacity must be provided in order to cut the current absorption peaks, a 100μF tantalum capacitor is usually suited.”


Well I read this point about a low ESR capacitor in the Telit’s hardware guide and didn’t think much about it. I used a 100μF capacitor, but it was not tantalum nor was it low ESR, and guess what it didn’t work. First I thought that it was my battery, a 19AH 3.6V Lithium Ion battery from Jameco. But after reading this very informative forum entry, I learned that the capacitor was the problem.

The only adequate capacitor that I had was a 1F (yes a monster 1F) capacitor from Sparkfun. I used this capcitor and after giving a few minutes for the capacitor to charge, the circuit worked and GM862 was able to register with the network.

Well I thought it worked with the 1F capacitor, but the reason was that GM862 was connected via the USB in addition to the battery, and after it registered with the network, I disconnected from the USB and it was able to continue with the operation using the battery. But I’m unable to start GM862 with the battery.

I’ve ordered a low ESR 100 mF Tantalum (with a 600 m Ohm ESR) from digikey – $7 each. I suspect that with this capacitor, I’ll be able to start the module with the battery.

I wish the Telit site and documentation included more information on how to connect a micro-controller to the modem and the list of alternative parts to use. I’ve not been able to find any of the transistor, voltage level translators, etc. that Telit recommends on Jameco, DigiKey or Sparkfun. More detailed information on how to use the Telit modems is badly needed.

The problem that I was having was the battery and its inability to maintain the minimum voltage (3.4V) at 150mA current peaks that GM862 required during network registration. I connected two 3.6 V batteries in parallel and that fixed the problem – lowered the internal resistance of the batteries and allowed the batteries to maintain a higher than the minimum 3.4V voltage.

GPRS AT Commands for the AT&T Network

February 1, 2009

Here is a note on how to do HTTP communication with Telit GM862 on the AT&T network using the module’s Easy GPRS AT commands (full AT commands reference) . To use the network you’ll a data plan and then you can use the need a userid and password, it appears that the same userid and password is used by anyone that has a data plan and wishes to connect to the AT&T network. I tried just leaving the userid/password blank, but that didn’t work. Here is the sequence of AT commands that you can use to HTTP GET a web page via the AT&T network. Note: All lines that start with AT are commands, and the following lines are the responses to these commands.


GET / HTTP/1.0^m^jHost:^m^j

If  you are typing this into a terminal application,  you need to enter (control-m aka carriage-return)(control-j aka linefeed) instead of ^m^j. In a program you replace ^m^j with \r\n (\r is carriage-return which is ascii 13, and \n is line-feed which is ascii 10. In the terminal you must enter control-m followed by control-j.

In the sequence above, I explicitly deactivate the GPRS context and then reactivate it. I found that during testing, you may need to reset the module, terminate your screen application, etc., and in these cases, you may not be able to activate the GPRS context unless you deactivate it first. Oddly enough, sometimes after a complete restart the above sequence will fail at the AT#GPRS=1 command. If this happens, then I’ve found that issuing the following two commands and trying again will work: AT#MONI and AT+CMGF=1, not sure why that is the case yet.

I’ve also found that some web sites, e.g., don’t seem to allow telnet-like connections, i.e., they immediately close a connection. So if the web site that you try to connect to results with No CARRIER line before you have had the chance to enter the HTTP GET request, then try another site.


Here is an example of POST issued in the Terminal.

POST /cgi-bin/aqua.cgi HTTP/1.1^m^j
Content-Type: application/x-www-form-urlencoded^m^j
Content-Length: 28^m^j

Here are a few additional AT&T commands that I found useful:

AT+CCLK? reads the current data and time. This is not the network time, simply the time since powered up the module.

AT#QDNS="" executes a DNS query and returns the ip address of the host name.

AT#GPRS=1 activates the GPRS context, on success this returns the IP address of the GM862 on the AT&T network. Activating a context implies getting an IP address from the network and this will be maintained throughout the session.

AT#GPRS=0 deactivates the GPRS context. Deactivating the context implies freeing the network resources previously allocated to the device.

AT#SKTD This is the socket dial command which is request to make a TCP/UDP connection with an internet host. Once the connection has been established, the module responds with the code CONNECT. From this moment on, all the data coming in the serial port is sent to the internet host and all the data received from the host is serialized and flushed to the Terminal Equipment.

AT+CMEE=0 or 1 or 2 0 means disable error reports; 1 means enable error reports in numeric format; 2 means enable error reports in verbose format.

Power Sparkfun USB Evaluation Board GM862 from Arduino

January 14, 2009


Power GM862 from Arduino's 5V output

Power GM862 from Arduino's 5V output

For lower current applications, e.g., sending SMS vs voice calling, it appears that you can readily power the Sparkfun’s USB GM862 module directly from the Arduino’s 5V output and ground pins. I connected Arduino’s 5V to GM862’s 3.8 V pin, Arduino’s ground to GM862 ground, Arduino digital 1 (TX) to GM862′ s TXD and finally Arduino’s digital 0 (RX) to GM862’s to RXD pin. 

Note that the 5 V output drops down to 4.91 when measured at the GM862 board. 

After you make the connections, you can control GM862 from your Arduino board without having to separately supply power to the GM862 board.


Crude battery power Arduino and GM862

Crude battery powered Arduino and GM862

To run fully on a battery, I had to use two batteries. One for Arduino and one high capacity/current Polymer Lithium Ion (3.7V – 860mAH) for GM862. This did the trick. The regular 9V battery didn’t seem to have enough juice to run both Arduino and GM862. There must be a single battery option, but that will have to wait for another day.