Sunteți pe pagina 1din 69

GSM SIM900

DIAGRAMA DE BLOQUES

VOLTAJE DE TRABAJO DEL SIM900

-Vbat: Voltaje de alimentacin de 4.00v con una tolerancia de variacin de +/800mV. El consumo de corriente puede tener picos de hasta 2Amp -RX y TX: Puerto serial, el mdulo viene con un puerto serie completo El puerto maneja niveles CMOS , por lo que si necesitamos usar la PC usaremos un MAX232. -POWERKEY: pin usado para encender, resetear y apagar el mdulo GSM,

-R1: Nos da un 0 (cero) lgico cuando llega un mensaje o una llamada

Esta es el circuito Que nos recomienda El fabricante

PIN R1

el pin POWERKEY tiene una secuencia de inicializacin especfica

PIN DE RESET

El diagrama de tiempos para resetear el mdulo es el siguiente:

Para apagarlo:

Fuentes recomendadas por SIMCOM

Batera de respaldo y sus diferentes formas de conectarse al pin VRTC (El control de la carga de la batera se puede controlar con comandos AT)

RF_ANT: La interface RF con el modem tiene una impedancia de 50R

conector que recomienda SIMCOM

CONEXIN DE ANTENA

SALIDA PARA PARLANTES Y MICROFONO

PIENES DE AUDIO

MICROFONO

CONEXIN DE AUDIFONO

CONEXIN DE LCD SPI

Para la depuracin y actualizacin del firmware

TECLADO

YA CON ESTO TENEMOS EL TELEFONO COMPLETO AHORA CONSTRUYAMOS LA CARCASA

CONEXIN DE LA SIM

PINES SIMCARD:
el SIM900, soportan ambos tipos de memoria SIM de 1.8v y de 3.0v. El mdulo GSM se encarga, mediante un regulador de tensin interno de alimentar la memoria. Los pines involucrados en la comunicacin con la memoria SIM son los siguientes:

1 - SIM_VDD: Voltaje de alimentacin comprendido entre 1.8v +/- 10% de tolerancia y 3.0v +/- 10% de tolerancia. El consumo de corriente ronda los 10mA. 2 - SIM_DATA: Seal de datos. 3 - SIM_CLK: Seal de reloj. 4 - SIM_RST: Seal de reset. 5 - SIM_PRESENCE: Seal de presencia de la SIM.

El pin SIM_PRESENCE puede colocarse a tierra en caso de usar conectores que no tengan el switch para detectar la memoria SIM. Si usamos el conector con detector de presencia hay que activar la deteccin mediante comandos AT. Esta funcin no es estrictamente necesaria para el buen funcionamiento del mdulo GSM..

Pueden usarse muchos conectores para la tarjeta SIM estas son unas de las que se consiguen local mente.

- NETLIGHT: Esta seal nos indica el estado de la red GSM mediante un led que tiene que estar conectado de la siguiente manera:

Los posibles estados son los siguientes: ESTADO 1: LED apagado - SIM apagado ESTADO 2: LED encendido durante 64ms y apagado durante 800 ms SIM no ha encontrado seal o la est buscando. ESTADO 3: LED encendido durante 64ms y apagado durante 3000ms SIM ha encontrado seal del prestador de servicio y est ONLINE. ESTADO 4: LED encendido durante 64ms y apagado durante 300ms SIM se ha conectado a una red GPRS.

FRECUENCIAS Y SENSIBILIDAD DE LOS MODULOS

LOS COMANDOS AT
Son instrucciones codificadas que conforman un lenguaje de comunicacin entre el hombre y un Terminal MODEM. Fueron desarrollados en 1977 por Dennis Hayes como un interfaz de comunicacin con un MODEM para as poder configurarlo y proporcionarle instrucciones, tales como marcar un nmero de telfono. Ms adelante, fueron las compaas Microcomm y US Robotics las que siguieron desarrollando y expandiendo el juego de comandos hasta universalizarlo. Los comandos AT se denominan as por la abreviatura de attention. Aunque la finalidad principal de los comandos AT es la comunicacin con modems, la telefona mvil GSM tambin ha adoptado como estndar este lenguaje para poder comunicarse con sus terminales. De esta forma, todos los telfonos mviles GSM poseen un juego de comandos AT especfico que sirve de interfaz para configurar y proporcionar instrucciones a los terminales, permiten acciones tales como realizar llamadas de datos o de voz, leer y escribir en la agenda de contactos y enviar mensajes SMS, adems de muchas otras opciones de configuracin del terminal.

La notacin de los comandos AT, es la siguiente:


AT <CR> --> Enviamos el comando AT + retorno de carro. Resp: <CR><LF>OK<CR><LF> --> Retorna OK entre 2 retornos de carro y de nueva lnea.

<CR><LF>ERROR<CR><LF> --> Si el modem tiene algn error.

La sintaxis para los dems comandos es similar. En la hoja de comandos de cada mdulo GSM el fabricante especifica que respuesta nos da ante cada comando enviado, como as tambin los comandos AT soportados. Muchos de estos comandos pueden ser estndar y algunos pueden ser propios de cada mdulo. Para este curso solo usaremos comandos estndar. Nota: <CR> retorno de carro <LF> cambio de linea

1 - AT Comando para alertar al mdulo GSM. Resp: OK--> Modem OK, listo para recibir comandos. ERROR--> ERROR, no se pueden recibir comandos.

2 - ATE0 Desactivamos el ECO del modem ante comandos AT. Resp: OK--> Desactivacin del eco OK. Por ejemplo: Si enviamos AT , y no ponemos ATE0, el modem retorna:
AT OK Con el comando ATE0, retornara solamente: OK

HAGAMOS UNA LLAMADA


3 - ATDT (nmero de telfono). Llamamos al nmero de telfono indicado. Los pasos que realiza el mdulo son los siguientes: A - Descuelga y llama al telfono solicitado. B - Si hay un error con la memoria SIM retorna: +CME:ERROR--> Error encontrado. C - Si el telfono al cul llamamos est ocupado retorna: BUSY
D - Si el telfono al cul llamamos no nos atiende retorna: NO ANSWER E - Si la conexin no se pudo realizar retorna: NO CARRIER

Si no hubo inconvenientes....
F - Espera tono de llamada.. NO DIALTONE--> Espera 6 segundos, si no hay tono, marca NODIALTONE. G - Si hay tono el modem espera 7 segundos. Si no se establece la conexin el telfono entra en modo de comandos ; en caso de que se establezca la conexin el modem entra en estado ONLINE. Luego de la llamada, si todo fue OK, retorna: OK 4 - ATH Cuelga el telfono y finaliza la llamada. Si colg exitosamente retorna: OK

COMANDOS PARA MENSAJES DE TEXTO:


1 - AT+CMGF=? Configuramos el modo texto o PDU. AT+CMGF=0 --> Modo PDU. AT+CMGF=1 --> Modo Texto. Resp: OK--> Modem OK, listo para recibir comandos.

2 - AT+CMGS=? Comando para enviar mensaje de texto.

AT+CMGF=1 AT+CMGS= >TEXTO <CRTL+Z>

// Configuramos modo texto. (nmero de telfono.) // Texto del mensaje. // Equivalente a 0x1A.

Si hay un error con la memoria SIM retorna: +CME:ERROR--> Error encontrado. Si el envo result exitoso: OK--> Modem OK, listo para recibir comandos. El modem SIM900 soporta un mensaje de texto con 160 caracteres mx. Si nos pasamos del mximo, automticamente corta el mensaje y lo enva en partes 3 - AT+CMGD=? Borra un mensaje de texto de la posicin indicada. AT+CMGD=1 --> Borra mensaje de la posicin 1. Anteriormente la memoria hay que configurarla para que guarde los mensajes en la SIM. Si hay un error con la memoria SIM retorna: +CME:ERROR Si el borrado result exitoso: OK--> Modem OK, listo para recibir comandos.

Este comando tiene un consideracin especial ya que no lo entrega el modem cada Que llega un mensaje, tambin puede ser configurado

4 - AT+CNMI=? Indica que un nuevo mensaje de texto ha llegado. Este comando puede tener varios parmetros, pero lo configuraremos solo para que nos enve por el puerto serie un mensaje de texto cada vez que llegue. Ejemplo:

AT+CNMI=1 mensaje entrante en posicin de memoria 1

VAMOS A CONFIGURAR EL MODEM


---- AT+IPR=? Configuramos la velocidad de trasmisin Ejemplo: AT+IPR=9600 AT+IPR=4800 a 9600bd a 4800 bd

El SIM900 trae este nuevo comando: EL ajuste de fbrica es :

AT+IPR=0

auto-bauding.

--- AT+IFC=0 Software de control de flujo (XON / XOFF control de flujo) Ejemplo: AT+IFC=0,0 le quitamos el control de flujo

La configuracin queda as entonces :


AT Comando opcional

AT+IPR=9600
AT+IFC=0,0

Velocidad de trasmision
Control de flujo desactivado

AT+CMGF=1
ATE0

Modo texto
Desactivamos el eco del modem

UN PEQUEO EJEMPLO DEL CODIGO PDU

EL PIC 18F2550

PINES

DIAGRAMA DE BLOQUES

Especificaciones:
Tamao memoria FLASH: 32KB

Tamao EEPROM: 256BYTE


Tamao memoria RAM: 2.048 bytes Lneas de E/S: 24 Entradas ADC: 10 Temporizadores: 4 PWM Channels: 2 Frecuencia Reloj: 48MHz Tipo de interfaz:EUSART, I2C,Interfaz serie a paralelo, USB

Tensin de alimentacin mn.: 4,2V Tensin de alimentacin mx.: 5,5V

Temperatura de funcionamiento: -40 C a +85 C


Temperatura de op. mn , Mx. : -40C 85C Nmero de Bits temporizador: 16 Nmero de Bits ADC:10 Nmero genrico CI: 18F2550 Interruptores internas: 19 Rango de temperatura: Industrial

ORGANIZACIN DE MEMORIA: El uC PIC18F2550 dispone de las siguientes memorias: * Memria de programa: memria flash interna de 32.768 bytes

* Memoria RAM de datos: memoria SRAM interna de 2048 bytes en la que estn incluidos los registros de funcin especial.

* Memoria EEPROM de datos: memoria no voltil de 256 bytes.

* Pila:

bloque de 31 palabras de 21 bits (Stact)

* Memoria de configuracin: memoria en la que se incluyen los bits de configuracin (12 bytes de memoria flash) y los registros de identificacin (2 bytes de memoria de solo lectura).

#include <18F2550.h> #FUSES NOWDT //#FUSES WDT128 #FUSES PLL5 #FUSES CPUDIV4 #FUSES USBDIV #FUSES HSPLL #FUSES FCMEN #FUSES IESO #FUSES PUT #FUSES NOBROWNOUT #FUSES BORV20 #FUSES VREGEN #FUSES NOPBADEN #FUSES LPT1OSC #FUSES MCLR #FUSES STVREN #FUSES NOLVP //No Watch Dog Timer //Watch Dog Timer uses 1:128 Postscale //Divide By 4(16MHz oscillator input) //System Clock by 4 //USB clock source comes from PLL divide by 2 //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD //Fail-safe clock monitor enabled //Internal External Switch Over mode enabled //No Power Up Timer //No brownout reset //Brownout reset at 2.0V //USB voltage regulator enabled //PORTB pins are configured as analog input channels on RESET //Timer1 configured for low-power operation //Master Clear pin enabled //Stack full/underflow will cause reset //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#FUSES NODEBUG //No Debug mode for ICD #FUSES NOPROTECT //Code not protected from reading #FUSES NOCPB //No Boot Block code protection #FUSES NOCPD //No EE protection #FUSES NOWRT //Program memory not write protected #FUSES NOWRTC //configuration not registers write protected #FUSES NOWRTB //Boot block not write protected #FUSES NOWRTD //Data EEPROM not write protected #FUSES NOEBTR //Memory not protected from table reads #FUSES NOEBTRB //Boot block not protected from table reads //****************************************************************************

CRISTAL Y ARCHIVOS ADJUNTOS


#use delay(crystal=20000000, clock=48000000) //cristal y frec de trabajo

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors,stream=SIM900)

#include <string.h>

// Funciones para el manejo de //cadenas.

#include <sim900.c> // Manejo del modem sim900 //****************************************************************************

Interrupcin serial
#int_RDA //interrupcion serial

void RDA_isr() { BUFFER[NEX_BUFFER] = fgetc(SIM900);


if(BUFFER[NEX_BUFFER]!=0x78) NEX_BUFFER++;

//cargamos dato entrante al buffer //le sumamos 1 a la posicin del //del buffer //si es 120 volvemos al inicio

if(NEX_BUFFER== BUFFER_TOTAL) NEX_BUFFER=0; }

void main() { enable_interrupts(GLOBAL); enable_interrupts(int_rda); SIM900_on(); // Encendemos el mdulo GSM SIM900. // Habilitamos interrupciones.

//Aqui v el resto del programa


}

Analicemos el #include sim900


//PINES DE CONEXION #define RESET PIN_B2 #define PWRKEY PIN_B3 #define PSSIM900 PIN_B4 //RESET // Pin PWRKEY SIM900.

//**************************************************************************** //FUNCIONES DE LOS PINES DE CONEXION #define SIM900_PWRKEY_ON output_high(PWRKEY); #define SIM900_PWRKEY_OFF output_low(PWRKEY); #define PSSIM900_ON output_high(PSSIM900); #define PSSIM900_OFF output_low(PSSIM900); // SIM900 ON. // SIM900 OFF. // Power Supply SIM900 ON. // Power Supply SIM900 OFF.

//PINES DE LOS LED INDICADORES #define led_verde PIN_B6 #define led_rojo PIN_B7 #define prende output_high #define apaga output_low //Conexin de led verde //Conexin de led rojo //encender //apagar

//********************************************************************* // VARIABLES INTERRUPCIONES. #define BUFFER_TOTAL 120 volatile int8 BUFFER [BUFFER_TOTAL]; Volatile int8 NEX_BUFFER =0; Char *ptr; // Tamao del buffer de la USART. // Buffer de la USART. // Contador de caracteres recibidos. //variable de comparacin

//OK >> COMANDO DE RESPUESTA DEL MDULO. char OK_RESP[]="OK"; le int8 i=0; //string que el modem debe responder cuando //se le envia un comando //variable de uso general

//**************************************************************************** //RUTINAS A UTILIZAR

void SIM900_on(void);
short responde_OK(void); void inicializo_buffer(void)

// Encendemos y configuramos el mdulo //SIM900. // Determina si un comando AT responde OK.


//para iniciar el buffer de recepcin

//RUTINAS

void inicializo_buffer(void) { NEX_BUFFER =0; // Inicializo el contador de datos entrantes.

for(i=0; i<= BUFFER_TOTAL; i++){

// Borro el contenido del buffer de datos.

BUFFER [i]='\0';} }

//VAMOS A DECIRLE AL MODEM COMO TRABAJARA void SIM900_on(void) { PSSIM900_OFF SIM900_PWRKEY_OFF delay_ms(1000); PSSIM900_ON delay_ms(500); SIM900_PWRKEY_ON delay_ms(1500); SIM900_PWRKEY_OFF delay_ms(40000); // Apagamos la fuente del SIM900. (B_4) // PRWKEY=0 (B_3) // Esperamos 1 seg. // Encendemos la fuente del SIM900. // Esperamos 1/2 seg. // PWRKEY=1; // Esperamos 1-1/2 seg. // PRWKEY=0; // Esperamos 40 segundos el Call Ready.

//****************************************************************************

fputs("AT+IPR=9600",SIM900); delay_ms(500); responde_OK(); puts("AT+IFC=0,0",SIM900); delay_ms(500); responde_OK(); PUTS("AT+CMGF=1",SIM900); delay_ms(500); responde_OK(); PUTS("AT+CMGD=1",SIM900); delay_ms(500); responde_OK(); fprintf("AT\n\r",SIM900); delay_ms(500); responde_OK(); fprintf("ATE0\n\r",SIM900);

//programamos modem a 9600Bd // Esperamos 500ms. // Espera la respuesta al comando. //control de frujo // Esperamos 500ms. // Espera la respuesta al comando. //modo texto // Esperamos 500ms. // Espera la respuesta al comando. //borro primer mensaje de la sim // Esperamos 500ms. // Espera la respuesta al comando. // Comando de verificacin. // Esperamos 500ms. // Espera la respuesta al comando. // Eco OFF.

fprintf(SIM900,"AT+CPMS=\"SM\",\"SM\"\n\r");

// Selecciono la mememoria SIM //para recibir y leer SMS. // Esperamos 500ms. // Espera la respuesta al comando.

delay_ms(500); responde_OK();

fprintf(SIM900,"AT+CNMI=2,2,0,0,0\n\r");

// Los mensajes de texto, una vez //recibidos son enviados //directamente al buffer de la USART.
// Esperamos 500ms. // Espera la respuesta al comando. // Limpiamos el buffer de recepcin.

delay_ms(500); responde_OK(); inicializo_buffer();

// Si el modem responde OK -> retorna 1. caso contrario retorna 0. short responde_OK(void) { short respuesta=0x00; ptr=strstr(BUFFER , OK_RESP); if(strncmp(ptr,OK_RESP,2)==0){ respuesta=0x01; prende(led_verde), apaga(led_rojo); } else {respuesta=0x00; apaga(led_verde), prende(led_rojo); } // Busca el comando OK en el buffer. // Si lo encuentra.. // respuesta vlida --> 0x01.

// Enciende led_verde. (OK).


// Enciende led_rojo. (ERROR). // Si no lo encuentra, respuesta errnea --> //0x00. // Limpiamos el buffer de recepcin. // Retornamos con la respuesta al comando.

inicializo_buffer();
return(respuesta); }

//EJEMPLO DE ENVIO DE MENSAJE char tel1[12]="xxxxxxxxxxxx"; char msg[14]="HOLA MUNDO !!"; // Telfonos de destinatario: // Mensajes fijos.

void enviar_SMS(char *texto, char *tel) { fprintf(SIM900,"AT+CMGS=\"%s\"\r" ,tel); delay_ms(500); fprintf(SIM900,"%s",texto); delay_ms(500); fprintf(SIM900,"%c",0x1A); delay_ms(5000); responde_OK(); }

// Telfono al cul le enviaremos el mensaje. // Esperamos 500ms. // Imprimimos mensaje a enviar. // Esperamos 500ms. // Comando para enviar el mensaje. Equivale al //CRTL+Z. // Esperamos 5 segundos. // Espera la respuesta al comando.

Francisco A Velez Z Cel 3206898403- 3117640146 Email: desarrollo@icomsat.net

S-ar putea să vă placă și