TODOPIC
FORO TÉCNICO => Telefonía, GPS y Microcontroladores => Mensaje iniciado por: Darukur en 04 de Noviembre de 2006, 09:41:25
-
Estoy creando este POST para ayudar a NEO 2K3 (y a todo el interesado) a lograr conectividad GPRS-GSM.
El método de comunicacion entre el PIC y el modulo GSM es la USART en modo FULL DUPLEX via comandos ASCII AT.
Un punto importante a ver es que salvo puntos en comun como:
-Encendido.
-Mensajes de SMS.
-Comunicacion tipo modem PPP.
EL resto es dependiente de cada módulo.
Yo conozco solamente al modulo G18/G20/G24 de Motorola y al SIM200.
Uno de los puntos mas importantes a ver es la atencion que se le da a la informacion proveniente del modulo, que puede ser de dos tipos:
- Solicitada: por ejemplo contestacion al estado de la conexion a la red
- No solicitada: Desconexion de un socket o del APN, mensajes de texto o paquetes por socket.
Si no se administra correctamente esto (atender en tiempo y forma lo que se manda) lo mas seguro es que va a haber un desfasaje entre lo que hace el modulo y lo que sabe el PIC.
-
Sigo:
Esto significa, que si uno cablea su programa para "enviar lo que quiero y escuchar lo que quiero" no va a andar.
Primero que nada:
En interrupciones se maneja la entrada de los datos que va a parar a un buffer circular. Se maneja un indice de lo entrante (HEAD) y un indice de lo saliente (TAIL).
El exito del funcionamiento del metodo es que el dispositivo remoto (GSM) llena esta memoria (aumenta HEAD) y mi programa toma despues con tiempo (en prog ppal) de ella (TAIL).
Como es memoria circular cuando se llega al valor max se vuelve a la pos cero, tanto para HEAD como TAIL.
Algo bueno del protocolo AT (que nos va a servir para "despertar" a la tarea de analisis) es que SIEMPRE los datos enviados estan separados por la secuencia de caracteres CR+LF (carry return + line feed).
Dicho datos servira para generar un evento que despierte a nuestra tarea de analisis de datos entrantes. Muy importante es que este evento lleve una marca de donde ocurrio ya que mientras estamos procesando pueden estar entrando mas datos.
-
Luego se debera hacer una tabla de busqueda de dicho texto ordenada alfabeticamente para que el programa sepa que se le mando y lo pueda analizar por casos.
Se que esto no es barato y limita el tipo de micros a usar, pero es la unica manera de manejarlo seriamente, mas si dicho aparato va a usarse en aplicaciones tipo AVL donde no puede fallar NUNCA.
Una vez analizado el caso se puede levantar los datos asociados y esta tarea podra informar a otras con tu sistema interno de flags, estados, semaforos, variables, lo que uses.
-
OK. e entendido algo de lo que tu dices.
Encuanto a la RX entre el GPS y el PIC te cuento que esta listo, lo hice por poleo y programado en asm, despues de mostrar LAT, LON, HORA UTC -5 "hora de colombia" hago TX con un PC de eso mismo lo veo con Hyperterminal y todo bien
"DVD183,1200,1023.1595N,07326.8015W,0.0[CR][LF]" esto es la trama que envio al PC.
DVD183=esto es para identificar el vehiculo.
Ahora que es lo que necesito?
*Activar otro COM "COM2" por software ya que el de Hardware ya esta ocupado con el GPS.
*Los pasos a seguir para
-Inicializar el Modulo.
-Como activar o decirle al modulo que trabajare con datos "GPRS" .
-Como enganchar o conectar a la red GPRS el Modem GSM (GR48).
-Cuales serian los comandos de respuesta o que debo esperar de confirmacion de envio de datos.
-Entre otras cosas que no me imagino........
Ojo no se nada de esto, pero es lo que me imagino que puede ser.
-
Lo estas haciendo en assembler? Te admiro ya que un proyecto de esta envergadura se puede complicar mucho y mas en assembler.
Ya se que no usas el modulo G20 pero te voy a pasar un PDF muy claro de una secuencia de conexion y envio de datos por socket, vos de ahi pensaras como hacerlo en el PIC (controles de secuencia etc)
http://www.megaupload.com/?d=YF8N4O4F
Te recomiendo usar siempre USARTs por hardware, o usas un DSPIC que tiene 2, o usas multiples micros comunicados por un bus compartido (I2C)
El metodo de BITBANGING para USART te va a usar mucho tiempo de micro que lo necestias para otras funciones escenciales.
-
Gracias MEN eres muy bueno en esto, bueno mirare la INFO esta y te contare que tal me fue....
PD:hasta yo estoy impresionado en hacerlo en ASM, pero es que me quiero graduar lo mas rapido posible, y comenzar a programar en C requiere aprender los codigos.
-
Me alegro que te sirva la info.
Despues me fijare en los modulos de sony ericsson que por lo pronto te cuento que va a ser absorvido por Multitech.
Saludos
-
Hola de nuevo quisiera saber otra cosa.....
Como se prepara o se configura el PC servidor para que entienda los Datos enviados por el GR48?, o cuales son los pasos para hacer que esta info la muestre el PC.
Saludos...
-
Hola NEO 2K3, en la página de Sasian tenes el código en C# para realizar pruebas con servidores TCP y UDP:
http://www.sasian.es/modules.php?name=News&file=article&sid=6
http://www.sasian.es/modules.php?name=News&file=article&sid=7
No tengo idea de como hacerlo pero tenés que programar alguna aplicación que lo haga.
Darukur está más orientado en el tema ya que trabaja con 2 programadores de PC que justamente están en eso.
Saludos.
Martín
-
Para empezar con las pruebas del lado de la PC te recomiendo el Essential Net Tools.
La parte que vas a usar es el RAW SOCKET tanto para UDP como TCP.
Tenes que ponerlo en modo escucha en el puerto que configuraste en el modulo.
Acordate que SIEMPRE las conexiones las establece el modulo, el servidor es siempre el lado que escucha y acepta la llamada.
Lo unico malo del programa es que solo acepta un socket por puerto.
Saludos.
-
Hola otra vez
Ahora me encuentro trabajando con esto que dicen, para hacer que nuestro servidor atienda múltiples conexiones uso el control winsock que viene en el visual basic. Con ayuda de un tutorial he podido establecer comunicación con dos módulos gr48, es decir, utilizo como servidor la PC y ambos módulos son los clientes. Te dejo el tutorial para que lo cheques.
Saludos
-
Gracias por el aporte.
Mejor asi se pueden abrir varios sockets, sino solo podrias tener un solo dispositivo de GSM por puerto.
-
Te paso como ejemplo la lista de comandos que acepta mi componente de GSM.
Fijate que estan ordenados del ASCII mas alto al mas bajo, esto es para que cuando se efectua la busqueda se pueda tomar textos que comparten palabras en comun. (EJ: PEPE y PEPE2)
char const R_GSM_MODULE_CMD_IN[16][12]=
{"OK", //R_GSM_LO_CMD_IN_OK
"NO CARRIER", //R_GSM_LO_CMD_IN_NO_CARRIER
"ERROR", //R_GSM_LO_CMD_IN_ERROR
"+MIPSTAT: ", //R_GSM_LO_CMD_IN_LINK_STAT
"+MIPSEND: ", //R_GSM_LO_CMD_IN_BUFF_SENT
"+MIPRUDP: ", //R_GSM_LO_CMD_IN_PQ_UDP
"+MIPRTCP: ", //R_GSM_LO_CMD_IN_PQ_TCP
"+MIPPUSH: ", //R_GSM_LO_CMD_IN_BLOCK_SENT
"+MIPOPEN: ", //R_GSM_LO_CMD_IN_IP_CNT
"+MIPCLOSE: ", //R_GSM_LO_CMD_IN_IP_DCNT
"+MIPCALL: ", //R_GSM_LO_CMD_IN_APN_CNT
"+CSQ: ", //R_GSM_LO_CMD_IN_SIGNAL
"+CREG: ", //R_GSM_LO_CMD_IN_GSM_REG
"+CMT: ", //R_GSM_LO_CMD_IN_SMS_RECEIVE
"+CMGS: " //R_GSM_LO_CMD_IN_SMS_SENT
"" //Necesario para fin de analisis
};
Se hace el analisis del texto entrante y se termina en un switch case de 16 casos.
El algoritmo de busqueda esta optimizado (Search + Deltasearch)
-
Bueno ahora mi ayuda es la siguiente, cual seria la conexion minima para que el GR48 funcione? ahi les agrego una imagen para que se hagan la idea, es el programador que me vendiron con el GR48, pero solo quiero transmitir datos por el momento, ya que con este entrenador se pueden hacer mas cosas, depues habra tiempo para aprender mas.
(http://img369.imageshack.us/img369/6489/placagmgr48dh3.th.jpg) (http://img369.imageshack.us/my.php?image=placagmgr48dh3.jpg)
PD:Como Habia contado este proyecto es para poderme graduar de ING Electronico..... por eso el poco tiempo para experimentar.
-
Los pasos minimos son:
-Encendido y testeo de respuesta (AT)
-Testeo de registracion sobre GPRS (AT+CREG?)
-Coneccion al APN (AT+MIPCALL)
-Coneccion al socket/s (AT+MIPOPEN)
-
Hola
Yo por ejemplo ya trabajo con el modem fuera de su tarjeta de evaluación, como mínimo debes conectar los siguientes pines:
1,3,5,7 a VCC
2,4,6,8,10,12 a DGND
14 ON/OFF el cual te permite iniciar el modem
15 SIMVCC
16 SIMPRESENCE
17 SIMRST
18 SIMDATA
19 SIMCLK
33 LED este pin yo sólo lo utilizo para ver el estado del modem
39 RTS se conecta al 40 en dado caso que requieras que siempre te responda el modem
40 CTS se conecta al 39 en dado caso que requieras que siempre te responda el modem
41 TD si usas comandos AT
42 RD si usas comandos AT
43 TD3 para comunicación con un micro sin usar comandos at directamente
44 RD3 para comunicación con un micro sin usar directamente los comandos AT
En mi caso estos son los que necesito y con ellos ya puedo establecer una conexión GPRS, de todos modos busca en el google "GR 47/GR 48 Technical Description" es un pdf que cuenta con la información de los pines del modem.
Saludos
-
Err, me parece que por la contestacion de badtzdizzy me equivoque en la comprension de la pregunta.
Yo pense que era conexion al socket y no el conexionado electrico.
Sorry.
:?
-
Tranquilo "Darukur" con lo que me pasate entendi bien la secuencia de comandos para establecer la conexion GPRS, el problema es que no encuentro los comandos "Sinonimos" para el GR48.
Este es el ejemplo que me enviaste lo posteare para que me ayuden con la analogia para el GR48
Los comandos indicados en negrita corresponden a los comandos enviados por el DTE
hacia el G20.
AT+CREG=1
OK
AT+CREG?
+CREG: 001,001
OK
AT+MIPCALL=1,"gprs.personal.com","gprs","gprs"
OK
+MIPCALL: 172.25.4.106
AT+MIPOPEN=1,25,"200.45.191.9",25,0
OK
+MIPOPEN: 1,1
AT+MIPSEND=1,"444444"
+MIPSEND: 1,1369
OK
AT+MIPPUSH=1
+MIPPUSH: 0
OK
+MIPRTCP:
1,0,32323020736D7470322E61726E65742E636F6D2E61722045534D54500D0A
AT+MIPCLOSE=1
+MIPCLOSE: 1
OK
AT+MIPOPEN?
+MIPOPEN: 1,2,3,4
OK
AT+MIPCALL=0
OK
NO CARRIER
+MIPCALL: 0
CONCLUSIÓN:
Como se puede ver, el stack interno del G20 nos permite cursar una comunicación
IP con muy pocos recursos del DTE. Solo es necesario un puerto serie asincrónico (UART) y un código bastante compacto lo que lo hace ideal para ser utilizado por
microcontroladores de baja gama y bajo costo.
***************************************************************************************************
Este es un post de badtzdizzy en donde me da la analogia de los comando, la cuestion que veo es que en esta secuencia de comados faltan cosas en comparacion al ejercicio anterior
Mira, todo depende de cómo quieras establecer la comunicación, si con comandos AT o programando el MODEM.
Para el caso de comandos AT yo hago lo siguiente:
Código:
AT+CGDCONT=1,"IP","internet.itelcel.com" Esto último es la APN de mi proveedor
luego
AT*E2IPA=1,1 Con esto activas la IP
y ya para conectar
AT*E2IPO=1,"dirección IP a la que te quieres conectar", puerto
por ejemplo
AT*E2IPO=1,"189.140.188.120",5000
Con esto ya puedes establecer una comunicación por GPRS siendo el MODEM un cliente y la PC el servidor.
Saludos
Yo creo que con esto podriamos armar completamente entre todos la secuencia de comandos AT para una comunicacion de DATOS GPRS entre un GR48 y un PC-Servidor, alguno otro que quiera agregar algo bienvenido.
Esto seria no solo para mi sino para todo aquel que quiera o este trabajando en rpyectos similares....
PD:estos comandos se envian con el [CR][LF] al final?
-
Otra cosa para estar mas en contacto este es mi msn personal neo_jose64@hotmail.com y el del proyecto gps_upc@hotmail.com
-
Mira, lo que pasa es que yo "sólo" hago la conexión, en el caso de Darukur el verifica estados cosa que también se podría hacer con el GR48 sólo que para mi esto no es muy importante en cuestiones de prueba. Esos comandos los puedes encontrar en el manual de comandos AT que tambien puedes buscar en la red.
Mira estas son algunas equivalencias para el GR
AT+CREG=1
para el GR seria AT+CGREG=1
AT+MIPCALL=1,"gprs.personal.com","gprs","gprs"
para el GR seria AT+CGDCONT=1,"IP","INTERNET.ITELCEL.COM"
AT+MIPOPEN=1,25,"200.45.191.9",25,0
para el GR seria AT*E2IPO=1,"189.140.188.120",5000
AT+MIPSEND=1,"444444"
Estas dos parece que no están en el manual
AT+MIPPUSH=1
AT+MIPCLOSE=1
para el GR seria AT*E2IPC
Saludos y pues a darle
-
En ese caso cual seria entonces para enviar el dato? en el GR?...
-
Ese es el punto porque en el manual de comandos AT no existe ningún comando para envío de datos y es que una vez creado el socket puedes enviar y recibir datos sin necesidad de ningun comando. Asi es como yo lo hago desde el gr con ayuda de la hyperterminal de windows y para la pc con el programa hecho en visual basic.
Para el caso de que programes el modem con el M2M si existen funciones que envian y reciben datos y son con las que me estoy peleando porque nada mas no se deja je je.
Saludos
-
Ok. men pero entonces dos cosas.
1. despues de esto que dices se puede enviar datos..
AT+CREG=1
para el GR seria AT+CGREG=1
AT+MIPCALL=1,"gprs.personal.com","gprs","gprs"
para el GR seria AT+CGDCONT=1,"IP","INTERNET.ITELCEL.COM"
AT+MIPOPEN=1,25,"200.45.191.9",25,0
para el GR seria AT*E2IPO=1,"189.140.188.120",5000
Envio: Ejemplo
TODO PIC[CR][LF]
Y como sierro el puerto nuevamente? o se mantiene el puerto activo hasta cortar la comunicacion?
2. Como hago para conseguir el M2MPower porque no lo tengo..... aunque si tienes problemas con el mejor lo dejo asi por el momento para programar lo que voy a enviar con el PIC.
-
Mira, una ves establecida la comunicación solo envias el dato y ya, para cerrar la conexión es con el último comando que te puse:
AT*E2IPC
Para conseguir el M2M creo que tienes que comprar la tarjeta de evaluación, yo con gusto te lo pasaría pero como todo revisan aquí y el proyecto no es mio pues mejor no me meto en problemas.
Bueno, cualquier cosa aqui andamos.
Saludos
-
hola a todos
quero saber si se puede hacer lo mismo con el nokia 3220
-
Hola, con respecto al servidor UDP, les dejo un tutorial para escribir uno en VB6, a mi me funciono de maravillas, es mas escribi un porgrama que recibe los datos de una estacion meteorlogica y os guarda en una base de dato, espero que les sirva como a mi.
http://www.monografias.com/trabajos30/tutorial-visual-basic/tutorial-visual-basic.shtml#prepar
-
Hola a todos
eh leidoo este post completo pero la verdad no estoy muy familiarisado con la terminologia y eh batallado un poco en la comprención del mismo quisiera ver si me puden guiar un poco de como resolver mi problema.
Lo que intento hacer es enviarle un archivo .hex a un pic para que se autoprograme (el pic ya tiene un bootloader instalado y funcionando) lo intento hacer por medio de un modulo gsm ya que cuento con un apn telcel qe me permite conexion a internet pero la verdad me siento un poco perdido en el tema agradeceria un poco de orientación
un saludo y gracias y todos