Documente Academic
Documente Profesional
Documente Cultură
DIAGRAMA DE BLOQUES
-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,
PIN R1
PIN DE RESET
Para apagarlo:
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)
CONEXIN DE ANTENA
PIENES DE AUDIO
MICROFONO
CONEXIN DE AUDIFONO
TECLADO
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.
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 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
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
// 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+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
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
EL PIC 18F2550
PINES
DIAGRAMA DE BLOQUES
Especificaciones:
Tamao memoria FLASH: 32KB
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.
* Pila:
* 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 //****************************************************************************
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,errors,stream=SIM900)
#include <string.h>
Interrupcin serial
#int_RDA //interrupcion serial
//cargamos dato entrante al buffer //le sumamos 1 a la posicin del //del buffer //si es 120 volvemos al inicio
void main() { enable_interrupts(GLOBAL); enable_interrupts(int_rda); SIM900_on(); // Encendemos el mdulo GSM SIM900. // Habilitamos interrupciones.
//**************************************************************************** //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
void SIM900_on(void);
short responde_OK(void); void inicializo_buffer(void)
//RUTINAS
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.
// 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.
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.