# Envio de SMS con PBP



## Pull1988 (Oct 27, 2011)

Hola amigos del foro necesito un poco de su ayuda, estoy queriendo prender un led via sms, el cual lo recepta un modulo gsm este a su ves le envia ese mensaje al pic 16f628a y este activa el led, ya logre hacerlo desde la compu x ejm pulsando la letra p lo defini en la programacion del microcode, mi problema es cuando mando el sms con la letra "p" este no lo activa ya que la red del movil envia un encabezad primero con la informacion de la hora de llegada del sms asi como otros parametros mas y al ultimo esta la letra q yo envio, la pregunta es como quito ese encabezado o que linea aumento en el programa.Quisiera adjuntar mi programa pero la verdad no se en donde esta la opcion, asi que si un moderador logra ver este mensaje le pido de la manera mas respetuosa me la haga conocer. Grcias

Ya logre adjuntar el archivo esta en .txt amigos recalco esta en pbp gracias


----------



## lubeck (Oct 27, 2011)

no soy moderador pero.....

abajo de donde escribes estos mensajes hay dos botones uno que dice Enviar Respuesta y otro que dice Mas Opciones(antes Avanzado) 
presionas en el de mas opciones. y aparece una nueva pagina y abajo de los botones enviar respuesta y vista previa, hay otro boton que dice Gestionar Archivos Adjuntos, presiona y ahi puedes subir el archivo, preferentemente comprimido (.rar)


----------



## Pull1988 (Oct 27, 2011)

Gracias ludbek ya logre adjuntar el archivo si puedes ayudarm en lo que necesito te lo agradeceria.
saludos


----------



## lubeck (Oct 27, 2011)

----------------------------------------------

pues a ver si entendi bien....

segun yo lo que tienes que hacer es recibir en el pic todo lo que te mande el telefono o modulo o al ultimo no supe que es lo que esta conectado, y lo puedes meter en un arreglo y discriminas lo que no te sirva ya que lo recibiste....
podria poner el modelo del modulo GSM y Telefono y esquema o algo, es que,por lo menos yo no me ubico como lo haces....


----------



## Pull1988 (Oct 27, 2011)

Claro amigo te explico el modulo que uso es el sim340e este esta conectado al pic 16f628a, por lo tanto yo mando un sms con la letra "P" el modulo lo recibe y por el comando serin lo mando hacia el pic, este a la ves lo recibe y tendría que prender un led, cual es el problema...yo ya capture la trama de ese sms y me di cuenta que el mensaje no solo es la letra "P", sino tambien una serie de caracteres como el que describo aqui 
+CMGR: "REC UNREAD","+34630672901"„"02/06/23,11:57:20+00"; la cual me indica el numero de donde provino ese sms la fecha y hora que llego y al ultimo la letra "P", por lo tanto el pic en cuestion no sabe como leer esos caracteres ya que como adjunte anteriormente solo defino en el programa que vaya por el puerto serie con el comando serin la letra en mencion. No he logrado parametrizar esa cadena de caracteres que llegan antes de la letra, esa es mi gran incognita.
Gracias de antemano


----------



## MAXTORCAMPOS (Oct 27, 2011)

Hermano yo tengo el mismo problema que tu desde hace larga data, ya se como se envian desde el pic el mensaje que sea del tamaño que sea, y desde visual basic envio y recibo perfectamente pero lo que no he podido "que es el mismo problema que tu tienes" es lograr leer la cadena de caracteres que me envia el moden al pic, ya que Pbasic no maneja String, sin embargo alguien me dijo que se podia hacer vectores o Matrices, y quizas de esa manera se podian leer pero yo no se como se hace,  otra solucion que me dijeron es que enviando un comando AT+ sl modem... pero no me dijeron cual, se podia sacar un formato del mensaje mas corto creo que solo el cuerpo del mensaje sin la fecha, hora ni numero del que lo envia, pero igualito tendriamos el problema porque un mensaje minimo debe decir APAGARLUZ1, y alli es donde se nos presente el problema pues sabemos solo leer "A" un solo caracter por la entrada serial del pic, de pana ya estoy cansado y creo que voy a tirar la toalla el la mayoria de los foros me caen a cobas y la mayoria usa LA MENTIRA TIPICA DE LOS FOROS "*HACE TIEMPO YO HICE ALGO SIMILAR PEEEERO*" de pana molesta que si no saben algo lo ponen a uno a perder tiempo saludos si solucionas me avisas y si yo lo hago tambien te aviso :enfadado:

pd: Disculpen que uso mayuscula pero por alli ley que eso significaba gritar y eso fue lo que hice pero fue un grito de drenaje, mil gracias


----------



## Pull1988 (Oct 27, 2011)

Hola amigo MAXTORCAMPOS gracias por interesarte en el tema, veras como tu mencionas mandar desde el pic a un movil es lo mas facil de toda esa parte, la ciencia esta justamente en que el pic pueda leer el sms, voy a investigar mas acerca del comando at que tu mencionas para confirmar o no esa hipotesis, ahora con respecto de lo que tu dices que tendriamos un problema xq minimo tendria que decir "apagarluz1", eso desde mi puto de vista no es tanto problema ya que de que hay como meter toda esa palabra si hay como sino que se te hace mucho mas grande el programa, para eso yo utlizo maximo tres caracteres x ejm *P# con eso yo prendo un led y eso reemplazaria a la palabrita "apagarluz1", pero bueno lo importante aki es no darse x vencido y seguir hasta el final con nuestros proyectos, el secreto esta en la constacia y en no dejarse vencer, si el ser humano ha sido capaz de hacer muchas cosas impresionantes xq nosotros vamos hacer la excepcion???, para un problema siempre existe una solucion y estoy seguro que la hallaremos si me ayudas a investigar esa parte.
Saludos amigo


----------



## MAXTORCAMPOS (Oct 28, 2011)

ok amigo entiendo lo del tamaño del mensaje pero en mi caso yo voy a limitar el numero de ususario a 5 y para eso debo leer tambien el numero de telefono de donde se envia el mensaje y el mensaje cuando digo que es apagarluz1 es porque mis hijos no se aprenderan nunca claves para un comando. Por otro lado amigo quizas no hallas pensando un poco en la seguridad pues asi como tu dices que te sirve solo enviar "*P#" recuerda que cualquier persona desde cualquier celular puede enviar ese mensaje y te imaginaras lo que implica ese detalle, se que estaras pensando que ahora se puso la cosa mas cuesta arriba pues es verdad por eso te digo que estoy que dejo el proyecto, al menos mientras aprenda Lenguaje C o assemble pues alli si se puede hacer porque he visto que lo hagan, saludos y estamos en contacto


----------



## lubeck (Oct 28, 2011)

con respecto al problema del GSM



> sin embargo alguien me dijo que se podia hacer vectores o Matrices, y quizas de esa manera se podian leer pero yo no se como se hace



a eso me refiero con usar un arreglo, es lo mismo arreglo que matriz....

Yo pienso que hay que aprender a interpretar y buscar lo que les dicen, si lo que quieren es que con una sola instruccion, reciba el mensaje lo procese y de paso les prepare un sandwich, pierden el tiempo porque ni C ni mucho menos asambler lo hacen, hay que estudiar la capacidad de cada instruccion ...

lo que quiero decir es que si ya saben que solo recibe un solo caracter el SERIN

entonces lo que tiene que hacer es meter todos los caracteres en muchas memorias, o un arreglo(array, Matriz)

ejemplo:

mando una cadena string "NO SE PROGRAMAR A UN PIC".... y el pic lo acomoda en el arreglo SMS

SMS[0]="N"
SMS[1]="O"
SMS[2]=" "
SMS[3]="S"
SMS[4]="E"
SMS[5]=" "
SMS[6]="P"
SMS[7]="R"
.
.
.
etc

entonces si deseo procesar X cosa  apartir del "SE" entonces discrimino del arreglo los tres primeros y listo.
¿ Que si tienen que pensar en un algoritmo fregon para hacerlo? la respuesta es SI...
¿Si creen que alguien se los va a hacer?... la respuesta es Lo Dudo
¿si creo que exista alguno ya echo en la web?... la respuesta es Quizas


----------



## D@rkbytes (Oct 28, 2011)

Saludos.
Les envio un programa con el cúal pueden enviar los comandos AT esta escrito por mi en VB6
Lo adjunto con el código fuente por si lo quieren ver o modificar.
También adjunto un ejemplo de uso en MCS "MicroCode Studio" y una simulación en Proteus.
Espero sea de utilidad. 
Atte. D@rkbytes
BYE4NOW


----------



## lubeck (Oct 28, 2011)

> Les envio un programa con el cúal pueden *enviar* los comandos AT esta escrito por mi en VB6



pss:

Pense que era RECIBIR no ENVIAR..... 

Hagan caso omiso de mis comentarios


----------



## MAXTORCAMPOS (Oct 28, 2011)

Amigo lubeck. mil gracias por la explicación del arreglo y por tomarte el tiempo para responder, con respecto a lo que dices "*Yo pienso que hay que aprender a interpretar y buscar lo que les dicen*" con todo respeto te digo que se perfectamente lo que es un arreglo, array o matriz, pues soy ingeniero en sistemas y uso mucho estos menesteres, no se si tu no interpretaste lo que yo decía en el mensaje anterior "_*que no se como hacerlo en basic PBP*_" y aunque no pretendo que el PIC me prepare el desayuno se que si se hace con lenguaje c y hasta en MickroBasic, pues me consta que si se puede hacer porque estos lenguajes manejan variables de tipo string, quizás te pregunte porque no lo hago en alguno de esos programas!! la respuesta es porque no lo se hacer, y en el lenguaje donde medio programo es el PBC, de verdad no busco que me lo hagan y lo de tener que hacer un algoritmo inmenso y complicado eso no seria problema quizás así es mas regocijante terminarlo, de verdad aprecio y valoro mucho la ayuda y la intención de hacerlo, pero quiero que entiendas “al menos en mi caso” solo quiero aprender PBP no quiero que me hagan el trabajo, por eso me gusta este foro pues el amigo mecatrodatos, muy gentil y además muy pedagógicamente abrió este hilo que es un curso de valor incalculable, reitero mi agradecimiento por el dato que nos diste y ahora mismo me pongo a investigar sobre como se hace, lo de discriminar la información, un saludo amigo 

lubeck amigo 

Tu estas en lo cierto el problema es recibir mensajes largo en el PIC,


----------



## Pull1988 (Oct 28, 2011)

Hola amigo Darkbytes, muchas gracias por tu valioso aporte en mi caso me es de gran ayuda, no se si sea mucha molestia me puedas ayudar a interpretarlo un poco mejor en el lenguaje pbp, xq segun veo y no se si estoy bien esq con el programa que adjuntas tu puedes mandar un sms a esos numero que citas ahi, de ser asi el problema continua xq lo que quiero es receptar un sms en el modulo gsm y este le mande al pic para que el pic active un led, el proglema esq la operadora movil manda un encabezado mas o menos asi: +CMGR: "el numero del q envia","REC UNREAD","FECHA Y HORA DE LA LLEGADA DEL SMS" y despues de todo eso el cuerpo del mensaje com tal, por lo tanto el pic no interpreta ese encabezado ya que en mi programacion m faltan algunas cosas com mencionan otros panelistas de este foro, si sabes de alguna solucion te agradecere me la hagas conocer gracias


----------



## J2C (Oct 28, 2011)

Pull1988

Pues deberás averiguar a partir de que digito te es util a ti y descartar todos los previos (el ENCABEZADO) cada vez que recibes un SMS.

El encabezado es unico para todos los SMS (como lo es para el Correo Electronico [e-Mail]) sino tendrias tu mismo problema en cada telefóno celular que fabrican en el mundo.


Saludos, JuanKa.-


----------



## Pull1988 (Oct 28, 2011)

Hola nuevamente amigo MAXTORCAMPOS, entiendo tus requerimientos, para el primero que quieres que te salga toda la palabra apagarluz1, existen dos posibles soluciones: una que vayas ingresando letra por letra como lo que cita ludbeck la palabra ponerla en vertical; dos(y es x la que me voy a ir yo): crear una aplicacion en J2ME la cual contenga botones ya con las palabras xejm apagarluz1 y dentro de ese boton ya que vaya definido el mensaje (*P#) y el numero al que quieres mandar, para asi tan solo con pulsarlo este ya ya sepa a donde y como debe mandar el sms; se le puede poner a la appl un usuario y contraseña.
saludos

Gracias JuanKa por tu respuesta, justamente eso mism es lo que quiero hacer ir descartando caracter x caracter la parte del encabezado, para que asi solo le llegue al pic el cuerpo del mensaje, el problema que tengo esq no se con que ir haciendo ese proceso de descartar, si me pueden ayudar con alguna idea seria de mucha utilidad para mi.
saludos y gracias


----------



## J2C (Oct 28, 2011)

Pull1988

Pues si el encabezado son 31 digitos, puse ese numero por colocarlo pero hay que averiguar bien la longitud del encabezado.

Deberás colocar un contador (N) de los digitos recibidos en tu PIC desde la entrada que cuente cada digito y recién procese el digito recibido a partir de N=32 y lo compare con los caracteres que tu piensas utilizar para tu programa.

Atención, es solo una idea.


Saludos, JuanKa.-


----------



## Pull1988 (Oct 28, 2011)

Me parece una excelente idea amigo juanKa en mi caso son 60 caracteres de encabezado(solo encabezado) y el 61 ya es mi mensaje, para el caso yo solo como prueba quiero enviar la letra P para que prenda el led, voy hacer las pruebas si talves se te ocurriera otra idea agradecere me la hagas conocer.
saludos cordiales


----------



## MAXTORCAMPOS (Oct 28, 2011)

Amigo Pull1988, pense que teniamos la misma necesidad pero creo que no, en mi caso yo no voy a usar pc, solo el modulo conectado directamente al pic a traves del puerto serial de ambos, como te dije por pc ya lo hice y puedo enviar, recibir, filtrar y procesar cualquier mensaje para que me haga lo que quiera, en este proyecto especificamente no quiero usar PC, o si la uso que sea opcional o que el sistema no dependa de ella, Saludos

PD: El modulo que estoy usando es el F1103 es muy eficiente


----------



## Pull1988 (Oct 28, 2011)

Amigo MAXTROCAMPOS yo tampoco voy a utilizar una pc yo tambien voy hacer la conexion directamente el modulo con el pic, sino que utilice la compu para ver la trama del mensaje de texto ahi me di cuenta como estaba configurado como le llegaba al pic el mensaje. La idea que dio juanKa es muy buena en este momento voy hacer la prueba ya que logre realizar la programacion voy a ver si sirve o no, cualquier cosa te comento


----------



## MAXTORCAMPOS (Oct 28, 2011)

Ok ojala puedas hacerlo, te comento que hace unos minutos hable con un amigo que esta en otra ciudad que pudo hacerlo en MickroBasic me dijo que pudo discriminar el numero de telefono y el mensaje, el me esta ayudando en esto el problema es que apenas programa en PBP y de MickroBasico no se nada!


----------



## Pull1988 (Oct 28, 2011)

Tiene que ser lo mismo amigo xq sigue siendo basic el lenguaje, con todo si tu amigo te llega a dar el programa si quieres me lo puedes mandar para yo reisarle y verle que se le puede sacar para que funcione


----------



## MAXTORCAMPOS (Oct 28, 2011)

Darkbytes: saludos, estuve viendo tu blog y te felicito hermano eres un verdugo mucho exito y gracias por los aportes.

PD: en Venezuela verdugo = que dominas muy bien lo tuyo

Pull1988; lo que pasa es que él y yo tenemos un acuerdo el me ayuda con el codigo y yo le compro los modulos a él, pero como no se MICKROBASIC, no quiero ser desleal al acuerdo osea que el me de el codigo y despues yo valla a usar otro, eso no lo quiero hacer, por eso estoy tratando de resolverlo en PBP, si no, no me queda mas remedio que fajarme aprender MICROBASIC, se que si le digo que me envie el codigo el lo hara pero no quiero comprometerme aun


----------



## Pull1988 (Oct 28, 2011)

Te entiendo amigo no hay ningun problema, la lealtad ante todo


----------



## MAXTORCAMPOS (Oct 28, 2011)

Por cierto me acaba de decir como te dije anteriormente que ya lo termino y que le funciona perfectaemente, que impotencia siento con el PBP, que es el que medio domino!!!!


----------



## Pull1988 (Oct 28, 2011)

No tranquilo ya solo falta una cosita no mas de parametrizar, yo estoy jugando con esto ya mismo tiene que salir


----------



## lubeck (Oct 28, 2011)

> lo que pasa es que él y yo tenemos un acuerdo el me ayuda con el codigo y yo le compro los modulos a él, pero como no se MICKROBASIC,



Ostia...

Haberlo dicho antes.... pues no dicen....

ahi tengo un codigo que me quedo bestial para la comunicacion serial bidireccional.... 
como dicen que mandan los modulos


----------



## MAXTORCAMPOS (Oct 28, 2011)

pues como dicen en Mexico, te deseo un CHORRO de suerte jejejje, saludos

Lubeck si eso fue un chiste, lamento no haberlo entendido de todas formas es bueno tener sentido del humor, si fue una burla (que no creo que lo sea) ten cuidado que no te vallan a tildar el mensaje de inapropiado, saludos


----------



## lubeck (Oct 28, 2011)

Fue entre chiste y en serio 

si tengo el codigo, de echo si van a unas cuantas o muchas paginas para atras(no se con exactitud), recuerdo haber puesto parte del codigo....

la parte de chiste fue lo de mandar los modulos (saldria mas caro el caldo que la albondigas, como se dice)

yo tambien te o les deseo un chorro de suerte! eso tambien es en serio...

y no entiendo que de inapropiado tiene el mensaje...
lo que entendi es que el te hace el codigo y tu le compras (y supongo que le mandas los modulos GSM) como pago. aunque suena tambien a que el vende y te manda los modulos ,pero bueno en realidad no importa... eso era chiste...

Saludos...


----------



## Pull1988 (Oct 28, 2011)

Amigo DarkBytes acabo de revisar tus aportes y me parece genial ese programita para generar hexadecimales, ahoara mi pregunta es la siguiente: yo quiero recibir un sms proveniente de un modulo al pic puedo utilizar el comando serin y poner la cadena de hexadecimal?


----------



## MAXTORCAMPOS (Oct 28, 2011)

(Lubeck )  Amigo mio te haria un dibujo a ver si asi logras entender

pero tratare otra vez, el vende los modulos y el negocio fue, si me ayuda con el codigo debo comprarle todos los demas modulos que necesite a el, cosa que me parece justa, 

por otro lado te invito a que compartas el codigo bestial que tienes con nosotros, ya que nos ves que estamos desesperado y apreciariamos mucho tu ayuda

gracias de antemano


----------



## lubeck (Oct 28, 2011)

> (Lubeck ) Amigo mio te haria un dibujo a ver si asi logras entender
> pero tratare otra vez, el vende los modulos y el negocio fue, si me ayuda con el codigo debo comprarle todos los demas modulos que necesite a el, cosa que me parece justa,


 
Ok... te creo amigo en realidad no preste mucha atencion, y  fue un chiste... ahi que quede...



> por otro lado te invito a que compartas el codigo bestial que tienes con nosotros, ya que nos ves que estamos desesperado y apreciariamos mucho tu ayuda



lo haria.... pero.... como tu dices el pero....lo hice hace ya rato y suena a lo que tu digiste, pero es verdad,no tengo la menor idea de donde quedo  te invito a que veas la fecha en la que estuve comentando cosas del puerto serial en este tema y por esa fecha lo termine....

en realidad por lo que digo "bestial" es porque fueron un par de subrutinas de no mas de 10 lineas y se comunicaba bidireccionalmente con PC o con otro pic... no porque tuviera algo que no este explicado en este tema....

si lo encuentro les prometo que lo subo... en realidad he subido otros con mas grado de dificultad, me explico....

intentenlo las cosas que les han o hemos dicho van por el camino que buscan...

Saludos


----------



## Pull1988 (Oct 28, 2011)

Sabes amigo lubeck estoy todavia intentanlo y logré ver que talves pueda hacerlo utilizando interrupciones, pero la verdad y siendo sincero no he manejado aun interrupciones y la verdad q no entiendo esa parte si puedes darme un mano con eso te agradeceria o talves alguna idea


----------



## D@rkbytes (Oct 29, 2011)

Pull1988 dijo:


> Hola amigo Darkbytes, muchas gracias por tu valioso aporte en mi caso me es de gran ayuda, no se si sea mucha molestia me puedas ayudar a interpretarlo un poco mejor en el lenguaje pbp, xq segun veo y no se si estoy bien esq con el programa que adjuntas tu puedes mandar un sms a esos numero que citas ahi, de ser asi el problema continua xq lo que quiero es receptar un sms en el modulo gsm y este le mande al pic para que el pic active un led, el proglema esq la operadora movil manda un encabezado mas o menos asi: +CMGR: "el numero del q envia","REC UNREAD","FECHA Y HORA DE LA LLEGADA DEL SMS" y despues de todo eso el cuerpo del mensaje com tal, por lo tanto el pic no interpreta ese encabezado ya que en mi programacion m faltan algunas cosas com mencionan otros panelistas de este foro, si sabes de alguna solucion te agradecere me la hagas conocer gracias


Saludos Pull1988
 Pues lo que hace el programa que puse aquí convierte los caracteres a hex por que hay comandos AT
que tienen caracteres reservados para PBP (como las comillas y las comas etc.)
Y este programa al generar todos los caracteres en hex es mas fácil el envio con SEROUT
Y bien, como lo que tu quieres es mas que nada omitir la cabecera del SMS y extraer solo el mensaje
te recomiendo que le des un vistazo a la función HSERIN esta tiene varios modificadores,
entre uno de ellos esta uno que es SKIP n donde n son los caracteres que quieres saltar.
"Skip n received characters" No he usado ese modificador pero puedes probar y nos cuentas que tal te fue.




MAXTORCAMPOS dijo:


> Darkbytes: saludos, estuve viendo tu blog y te felicito hermano eres un verdugo mucho exito y gracias por los aportes.
> 
> PD: en Venezuela verdugo = que dominas muy bien lo tuyo


 Gracias. No habia escuchado eso del verdugo.
Siempre se aprende algo nuevo. 
Y Gracias por tus palabras que Igualmente son reciprocas de mi parte.




Pull1988 dijo:


> Amigo DarkBytes acabo de revisar tus aportes y me parece genial ese programita para generar hexadecimales, ahoara mi pregunta es la siguiente: yo quiero recibir un sms proveniente de un modulo al pic puedo utilizar el comando serin y poner la cadena de hexadecimal?


Me supongo que si recibes la cadena en bytes lo puedes hacer con la función HEX 
Te sugiero que subas algo de lo que estas haciendo para poder ayudarte mejor.
;*******************************************************************
Y bueno por otro lado creo que estamos ocupando un tema acerca de programar en PBP
por mecatrodatos y aunque se trate de resolver el asunto de los SMS en PBP
creo que se deberia de abrir un tema en particular sobre esto para dejar libre este thread.
Creo que debe estar en *Tecnologías móviles*  
;*******************************************************************
BYE4NOW


----------



## MAXTORCAMPOS (Oct 29, 2011)

*"PULL41998 TENEMOS ESPERANZA ESTO LO DICE EN LA AYUDA DEL PBP" debemos enfocarnos en la parte que resalte de futcia,  *
[/SIZE] 

*HSERIN* {_ParityLabel_,}{_Timeout_,_Label_,}[_Item_{,...}]*
*Receive one or more items from the hardware serial port on devices that support asynchronous serial communications in hardware.
HSERIN is one of several built-in asynchronous serial functions. It can only be used with devices that have a hardware USART. See the device data sheet for information on the serial input pin and other parameters. The serial parameters and baud rate are specified using DEFINEs:
_' Set receive register to receiver enabled_
*DEFINE* HSER_RCSTA 90h 
_' Set transmit register to transmitter enabled_
*DEFINE* HSER_TXSTA 20h 
_' Set baud rate_
*DEFINE* HSER_BAUD 2400 
_' Set SPBRG directly (normally set by HSER_BAUD)_
*DEFINE* HSER_SPBRG 25
HSERIN assumes a 4MHz oscillator when calculating the baud rate. To maintain the proper baud rate timing with other oscillator values, be sure to DEFINE the OSC setting to the new oscillator value. An optional Timeout and Label may be included to allow the program to continue if a character is not received within a certain amount of time. Timeout is specified in 1 millisecond units.
The serial data format defaults to 8N1, 8 data bits, no parity bit and 1 stop bit. 7E1 (7 data bits, even parity, 1 stop bit) or 7O1 (7data bits, odd parity, 1 stop bit) can be enabled using one of the following DEFINEs:
_' Use only if even parity desired_
*DEFINE* HSER_EVEN 1 
_' Use only if odd parity desired _
*DEFINE* HSER_ODD 1
The parity setting, along with all of the other HSER DEFINEs, affect both HERIN and HSEROUT. An optional ParityLabel may be included in the statement. The program will continue at this location if a character with a parity error is received. It should only be used if parity is enabled using one of the preceding DEFINEs. Since the serial reception is done in hardware, it is not possible to set the levels to an inverted state to eliminate an RS-232 driver. Therefore a suitable driver should be used with HSERIN. HSERIN supports the same data modifiers that SERIN2 does.
​*Modifier*​*Operation*​​*BIN{1..16}​​*​Receive binary digits​​*DEC{1..5}​​*​Receive decimal digits​​*HEX{1..4}​​*​Receive hexadecimal digits​​*SKIP n​​*​Skip n received characters​​*STR ArrayVar\n{\c}​​*​Receive string of n characters optionally ended in character c​​*WAIT ( )​​*​Wait for sequence of characters​​*WAITSTR ArrayVar{\n}​​*​Wait for character string​​On 17Cxxx devices with 2 serial ports, HSERIN will only access the first port. The second port should be set up and read by accessing the registers directly.
*See Also*
SERIN
SERIN2
SEROUT
SEROUT2
HSEROUT
Copyright © 1999 microEngineering Labs, Inc.
All rights reserved.
<B></B> ​


----------



## mecatrodatos (Oct 29, 2011)

Para la selección del dispositivo es importante considerar: la interfaz de comunicación, los protocolos de comunicación, el modo de manejo de datos y la disponibilidad en el mercado, es importante tomar consideración que solo ciertas marcas de telefonía celular ofrecen un puerto de comunicación que permita interactuar con un microcontrolador, ente los que conozco son Nokia y Sony.De acuerdo a los diferentes tipos de teléfono se desarrollo el protocolo de comandos AT, estas son instrucciones que conforman un lenguaje entre el hombre y un terminal MODEM, que son cadenas de caracteres ASCII que comienzan con AT y terminan con un retorno de carro (ASCII13) ._Cada vez que el MODEM recibe un comando este lo procesa y emite su respuesta dependiendo como se lo haya configurado al MODEM._*Comando de configuración:*
*AT, *es un comando cuya función es monitorear si existe una buena conexión en el canal de comunicación.AT +CMGT= “A”, permite elegir el modo de interpretación de los datos por parte del teléfono, si la equivalencia de A = 1 los datos son interpretados como texto, es decir la secuencia de caracteres que se envían al teléfono son ASCII normales. Si A = 0 los datos son interpretados en modo PDU, por lo tanto los datos son interpretados en HEX.
*Comandos para envió de SMS**AT+CMGW =”# Telefónico”, *permite cargar en el teléfono la información del SMS.*AT+CMPS=”LOCALIDAD MEM”, *permite enviar el SMS cargado en el teléfono.
Hay otros tantos que no me acuerdo pero que son aplicados a NOKIA, en la parte de recepción, en la eliminación de mensaje ubicados en la memoria de teléfono o en el BUZON de mensajes del mismo.
Para comunicación con pic - ( NOKIA) y el PBP los comandos son:
HSEROUT, con este comando se envía uno o más caracteres al puerto serial de hardware en dispositivos que soportan comunicación serial asincrónica.
HSERIN que tiene unas particularidades para su utilización. El tema se ve bueno y estare atento en ayudar en lo que pueda.


----------



## MAXTORCAMPOS (Oct 29, 2011)

Saludos y mil gracias @mecatrodatos:

nuestro amigo Pull1998 y yo no tenemos problemas en lo de los comandos AT, pues de tanto buscar la solución a esta necesidad hemos aprendido bastante de dichos comandos, en mi caso he hecho varios programitas en Visual Basic, con el cual puedo administrar muy bien la recepción y envío de mensajes de texto y poder gobernar cosas desde el móvil con solo un mensaje, de hecho ya termine una aplicación que es para toda la casa el cual envío un mensaje al MODEM este al PC y PC a través del com2 se lo envía a un PIC por conexión Max232, hasta allí todo va muy bien, el problema radica en que quiero en vez de usar la PC de intermediario poner el MODEM directamente al PIC y poder discriminar los mensajes como lo hago con la PC, ya que con la PC le envío por ejemplo "MENSAJE ENVIADO DESDE EL NUMERO 0414158965 APAGAR BOMBA DE AGUA" y de allí solo extraigo el numero del celular y las palabra apagar bomba, y desde el PC al PIC le envío "A" al PIC ya que solo se leer un caracter, como veras lo único que nos falta es poder leer cadenas de caracteres desde el PIC, pues enviarla ya sabemos, si tienes alguna solución te estaremos agradecidísimos o alguna luz, lo que nos recomendó el amigo darkbytes es lo mas cerca de la solución que tenemos ahora estoy en eso. Un saludo y mil gracias


----------



## mecatrodatos (Oct 29, 2011)

MAXTORCAMPOS prueba este codigo y me comentas como te fue 


```
DEFINE OSC 4                    
'DEFINE OSC 8                 
DEFINE HSER_TXSTA 20h   
DEFINE HSER_RCSTA 90h   
DEFINE HSER_BAUD 2400   
'DEFINE HSER_BAUD 4800  
'DEFINE HSER_BAUD 9600  
DEFINE HSER_SPBRG 25            
DEFINE HSER_CLROERR 1   
 
i var byte
TRISB=%00000000
PORTB=%00000000
TRISD=%00001111
PORTD=%00000000
 
FIRSTCHECK:
    HIGH PORTB.7
    PAUSE 500
    HIGH PORTB.6
    PAUSE 500
    HIGH PORTB.5
    PAUSE 500
    HIGH PORTB.4
    PAUSE 500
    PORTB=%00000000
GSM_CHECK:
HSEROUT ["AT",13]          'Enviar AT al módem seguido por un retorno de carro
HSERIN 5000, GSM_CHECK, [WAIT("OK")]'Comprobar respuesta OK, espere 5 segundos max.
HIGH PORTB.7
PAUSE 1000
HSEROUT ["AT+GMM",13]                           'Pregunte el nombre del modelo
HSERIN 5000, GSM_CHECK, [WAIT("T610 series")]   'Comprobar nombre del modelo
HIGH PORTB.6
PAUSE 1000
HSEROUT ["AT+IPR=2400",13]      'Establece la velocidad de transferencia
HSERIN 5000, GSM_CHECK, [WAIT("OK")]'Comprobar respuesta OK, espere 5 segundos max
HIGH PORTB.5
PAUSE 1000
HSEROUT ["AT+CMGF=1",13]            ''envía AT al módem seguido por un retorno de carro y salto de línea
HSERIN 5000, GSM_CHECK, [WAIT("OK")]''Comprobar respuesta OK, espere 5 segundos max.
HIGH PORTB.4
PAUSE 1000
PORTB=%00000000
BEGIN:
IF PORTB.5=1 THEN ERROR_CALL
IF PORTB.6=1 THEN ERROR_SMS
HIGH PORTB.7
pause 1000
LOW PORTB.7
if PORTD.2 = 0 then SEND_SMS
IF PORTD.3 = 0 THEN CALL_PHONE
PAUSE 1000
GOTO BEGIN
SEND_SMS:
HIGH PORTB.6
HSEROUT ["at+cmgs=",34,"xxxxxxxxx",34,13]
PAUSE 1000
HSEROUT ["este es un mensaje de prueba",26]    'ENVIAR MENSAJE
HSERIN 10000, BEGIN, [WAIT("OK")]''Comprobar respuesta OK, espere 5 segundos max.
LOW PORTB.6
GOTO BEGIN
CALL_PHONE:
HIGH PORTB.5
HSEROUT ["atd[0xxxxxxxxx];",13]
HSERIN 5000, BEGIN, [WAIT("OK")]'Comprobar respuesta OK, espere 5 segundos max.
PAUSE 2000
LOW PORTB.5
GOTO BEGIN
ERROR_CALL:
FOR i = 1 to 5
HIGH PORTB.4
PAUSE 500
LOW PORTB.4
PAUSE 500
next i
PORTB=%00000000
GOTO BEGIN
 
ERROR_SMS:
FOR i = 1 to 5
HIGH PORTB.4
PAUSE 500
LOW PORTB.4
PAUSE 500
next i
PORTB=%00000000
GOTO BEGIN
 
End
```


----------



## MAXTORCAMPOS (Oct 29, 2011)

Saludos Mecatrodatos, 

lamentablemente estoy fuera de casa, y no  traje mis juguetes para probar el código que me diste, sin embargo leyéndolo creo que su función es activar algunas funciones del MODEM y luego enviar un mensaje y esperar la palabra OK en cada devolución que reciba, ahora bien supongamos que este código nos funcione perfectamente; como haría yo para condicionar la palabra que llega desde el MODEM o sea "OK" con una variable que se llame recepción "por ejemplo" ? como seria la línea si quisiera decir por ejemplo (*If OK*_* = recepción then portb = %11111111*_)?  eso es lo que me falta como comparar la cadena que llega desde el MODEM para hacer una determinada función, yo he escrito varios códigos para enviar y recibir desde el PIC y lo hace bien pero no se como condicionar esa cadena que viene del moden en este caso no se si al "*OK*" hay que meterlo en paréntesis o en corchetes o en comillas? espero me halla explicado, saludos y gracias


----------



## lubeck (Oct 29, 2011)

Disculpen que me meta....
es la ultima vez...



> lamentablemente estoy fuera de casa,


osea que para cuando llegues a tu casa ya debe de estar el codigo???
no amigo, prueba el codigo, y ojala cuando vuelvas a postear un... *"Gracias amigo Mecatrodatos con tu ayuda y con el esfuerzo que yo hice ya logre el algoritmo que necesitaba..."*

o  un *"mira modifique el codigo y asi pienso que deberia de ser en que me equivoco..."* y anexas un intento de programa aunque este mal.... 

y si gustan tilden mi mensaje de inapropiado... por mi no hay ningun problema...

SAludos y suerte....


----------



## MAXTORCAMPOS (Oct 29, 2011)

Pero de que estas hablando lubeck,? 

escuchate a ti mismo amigo!!! te estas consumiendo en tu propia hiel, eres una persona mal intencionada, te lo dije antes y te lo repito no quiero que me hagan el trabajo no estoy acostumbrado a eso, yo se cual es tu dolor pero eso solo te puede ayudar un profesional, aunque no deberia explicar cual es la situacion lo hare para que tu mala intencion no influya a los demas, los fines de semana me voy a mi finca a descansar y eso es lo que pretendo hacer, pero eso no me priva de leer el foro y preguntar, quiero que sepas algo para mi es mucho mas gratificante decir "*Gracias amigo Mecatrodatos con tu ayuda y con el esfuerzo que yo hice ya logre el algoritmo que necesitaba" *a decir gracia por haberme hecho el trabajo, por ultimo debo decirte que yo soy un viejo quizas mucho mas que tu y por eso te pido que respetes, te repito yo se cual es tu dolor pero alli no te puedo ayudar yo, no voy a marcar tu mensaje como inapropiado pues no voy a caer en tu juego, y si respondi a esto fue para que los demas compañeros del foro sepan cual es la situacion, buenas noches


----------



## lubeck (Oct 29, 2011)

y donde esta la falta de respeto???
y segun tu o usted,cual es mi dolor???
y donde hay algo que usted haya aportado para intentar ayudarlo?


----------



## MAXTORCAMPOS (Oct 29, 2011)

Disculpas pido al amigo Mecatrodatos, pues comenzo el hilo con un excelente curso de lenguaje PBP,  y le invadimos el tema y aunque nos esta apoyando con nuestro problema de comunicacion GSM, se que deberiamos migrar y ahora de paso esta telenovela!!!! mil disculas señores del foro


----------



## mecatrodatos (Oct 29, 2011)

No hay problema o no lo leo, son cosas que pasan amigo MAXTORCAMPOS si deseas habre un hilo nuevo, con repecto a:



> como haría yo para condicionar la palabra que llega desde el MODEM o sea "OK" con una variable que se llame recepción "por ejemplo" ? como seria la línea si quisiera decir por ejemplo (*If OK*_* = recepción then portb = %11111111*_)?


 lo podrias realizar con un Select Case y crear variables para comparar y condicionar los datos, las comillas son para texto ("Ok")  los parantesis para variables [10], por ejemplo si desde el celular envias "P" con el select case puedes establecer algunas condiciones: prender, apagar o enviar cualquier mensaje, el MODEM en este caso podria ser como un teclado matrixal o un recepcionador de eventos.  Te invito a que subas lo que tienes para poder ayudarte mejor todo depende de los comandos At que se utilicen o Modem que se pretende utilizar.


----------



## MAXTORCAMPOS (Oct 29, 2011)

Perfecto amigo muchas gracias meñana el la tarde ya estare en casa y te envio lo que tengo para que le des un vistazo, y pondre en practica lo que me acabas de recomendar mil gracias nuevamente


----------



## MAXTORCAMPOS (Oct 30, 2011)

Amigo Mecatrodatos: aca estoy dejando el codigo que tengo aemas dejo el proteus para que lo simulen, el programa esta en capacidad de enviar mensajes al numero que le programas al producirse un cambio en cualquiera de los 4 pines del pic ademas recibe mensaje y los muestra por el lcd 16x2.  Para que simules el modem anexo un programa que hice el cual funciona con cualquier dispositivo que soporte comandos AT a traves del com1, cualquiera que tenga un moden éste programa le va perfecto, saludos y espero puedas ayudarme en lo que necesito que es poder leer cadenas el PBP como veras alli si puedo leer pero si le envio PRENDERLUZ, solo me toma la "P"

PD: el software para el PC no lo pude subir pues pesa mas de dos megas, pero si alguien lo necesita se lo envio a su correo, adjunto captura del mismo, Saludos


----------



## Pull1988 (Oct 30, 2011)

Hola amigo MAXTRCAMPOS disculapame por ausentarme este tiempo, pero como es fin de semana preferi relajarme un poco para continuar con fuerza en esta semana, he visto la novela y la polemica que se armado, pero bueno es algo totalmente secundario y lo que hay que rescatar esq el amigo mecatrodos nos esta dando una mano en este problema que es la recepcion de los sms a un pic, bueno un muy amigo mio me ayudo con este problema, el maneja el pic mas que yo y me dio un codigo fuente que pongo a su consideracion para que prosigan con las pruebas, segun mi colega y amigo me dijo que esta listo para mandar un sms y que el pic lo reciba y haga cualquier actividad, para el caso que prenda un led, no lo he provado todavia asi que me gustaria que lo prueben y me comenten cualquir situacion, x mi lado mañana en la mañana lo pruebo tambien y comentare cualquier situacion, esta realizado en microcode studio con un PIC 16F628A.
saludos compañeros

Amigo MAXTROCAMPOS perdon me estaba olvidando de comentar algo: con respecto a lo que resaltaste en los mensajes de arriba que el help del pbp salian unas opciones, sabes justamente el viernes en la noche tambien recurri al help del pbp y di con lo mismo justamente me llamo mucho la atencion de la instruccion skip, segun investigue esa es la instruccion clave ya que como sabes con esa instruccion se pude saltar n caracteres, ahora lo q se me ocurre es contar el encabezado del sms y poner el skip con el numero de caracteres que queremos que se salte,
saludos


----------



## MAXTORCAMPOS (Oct 30, 2011)

Saludos Pull, vi el codigo y aunque no le he simulado porque ya es tarde aca, mañana lo hago, sin embargo por lo que logre ver tu amigo esta capturando una sola letra, la cual es "A", lo que no entiendo mucho es que quiere decir esta linea

SERIN Rx,N1200,5000,INICIO,["OK"] en mi modesto entender esa linea diria recibir por rx a una velocidad de 1200, esperar 5 segundos si no pasa nada ir a inicio, lo que no entiendo es que hace alli ese ,["OK"] quizas esa sea una forma de capturar dos letras o un mensaje espeficico???
[/COLOR]
esta linea tampoco la entiendo amigo
SERIN  Rx,N1200,5000,INICIO,["REC UNREAD"] alli le esta pidiendo al pic que reciba ese comando "REC UNREAD" supongo, pero ese comando deberia salir del pic hacia el modem, ya que ese comando sirve para recuperar los memsajes no leidos que esten en la memoria de la simcard,

aca si le pide que reciba 5 veces lo que llegue por serin y lo almacene en la variable dato pero como veras estas esperando es una sola letra la cual es la "A" pues cuando hace la condicion dice que si dato es igual a "A" irse a ZZ, osea que alli no esta manejando cadenas que es lo que necesitamos.

FOR X=1 TO 5
SERIN  Rx,N1200,5000,INICIO,DATO
IF DATO = "A" THEN ZZ
NEXT X

revisa el programa que anexe ese esta probado y envia y recibe mensajes desde el pic, prueba activando las entras y veras que envia 4 mensajes diferentes y recibe lo que le envies desde el moden pero solo te toma la primera letra... espero que en base a ese programa puedas hacer algo, un saludo amigo


----------



## Pull1988 (Oct 31, 2011)

hola amigo MAXTROCAPOS, con respecto a tus inquietudes el ok que tu observas ahi es la confirmacion para el comndo at que envias es com si trabajaras por hyperterminal para un comando at siempre te mandan una confirmacion con un ok, para la linea del REC UNREAD todavia no le pruebo ahorita en unos minutos le voy a probar y con lo que me salga te aviso que significa todos los demas requerimientos. 
saludos amigo


----------



## lubeck (Oct 31, 2011)

MOTORES PRUEBA.rar


----------



## reyvilla (Oct 31, 2011)

Hola lubeck muy bueno tu ejemplo jajajaja voy a probar a ver si descubro el secreto jajaja....me tiene curioso como hacerlo asi que a penas tenga algo te lo envio


----------



## MAXTORCAMPOS (Nov 1, 2011)

Esta tonteria no es lo que necesito




 


yo lo que quiero es adaptarle el modem a este proceso que implemente en una empresa


----------



## FernandoMontenegro (Nov 1, 2011)

javicone dijo:


> hola amigo patico21, tu codigo es correcto te explico cual es la configuracion que te ha pasado nuestro amigo mecatrodatos,
> 
> 
> Define LCD_DREG PORTB     Define por que puerto vas a conectar en lcd en este caso el PORTB
> ...



Hola estaba leyendo este foro para aprender a manerar el LCD y lo He logrado muchas gracias por las respuesta .SALUDOS


----------



## D@rkbytes (Nov 1, 2011)

Saludos MAXTORCAMPOS
Upps, Con el Off Topic de FernandoMontengro
Me parece un execelente proyecto el que estas llevando a cabo.
Te deseo mucha suerte y exito en ello.
Y bueno pues ya demostraste que no hay truco para recibir cadenas con el PIC
Yo tambien lo he hecho y no es nada dificil ingresando los datos en un array.
Lo que que si no he podido hacer es juntar todos los datos recibidos con PICBASIC.
y poder extraer solo lo que interesa para hacer SELECT CASE
Lo intentare con Proton y vere que pasa.
Buen Slogan el de la empresa. 
Aqui les dejo un proyecto de como lo hice yo, por si les llega a interesar.
Hasta pronto.


----------



## lubeck (Nov 1, 2011)

> Yo tambien lo he hecho y no es nada dificil ingresando los datos en un array.



Efectivamente, Como dije!!!, nada fuera de lo ordinario...

lo malo es que no se haga el mínimo esfuerzo.... y solo esperar que alguien suba el codigo!

te mereces la mitad del premio Dark 

Fin de la telenovela


----------



## Pull1988 (Nov 1, 2011)

Buen aporte Darkbytes, "no como otros"


----------



## MAXTORCAMPOS (Nov 1, 2011)

Saludos amigo Darkbytes:

"Lo que que si no he podido hacer es juntar todos los datos recibidos con PICBASIC.
y poder extraer solo lo que interesa para hacer SELECT CASE" 

ese es exactamente el problema que tengo amigo, quizas sea muy facil quizas no pero el que no sabe es como el que no puede ver, voy a seguir tratando quizas tenga suerte, 

Felicitaciones excelente algoritmo el que compartiste con nosotros, Saludos


----------



## MAXTORCAMPOS (Nov 4, 2011)

Saludos señores del Hilo: tomando el excelente codigo que dejo el amigo Darkbytes y anexandole unas lineas ya he podido capturar la parte del mensaje que deseo, aca les dejo el codigo pues falta la parte de poder almacenar este pedazo estraido de la cadena y poder compararla con una constante prestablecida para poder hacer las condiciones y hacer que el pic haga lo que deseemos dependiendo del mensaje que le enviemos.

su logica es que el extraera todo lo que este dentro de la comillas por ejemplo el mensaje completo llega asi:

CMI+(5804141578805)+04/12/2011+01-52-PM+"*APAGAR LUZ 1*"+OK+13
Entonces el cogera "*APAGAR LUZ 1*" Pues eso es loq ue esta dentro de la comillas, pueden  probarlo introduciendo manualmente cualquier cosa y luego de tipear las comillas veran que desde alli y hasta que escriban de nuevo comillas eso sera lo que captura, voy a seguir en eso a ver si logro hacer las condiciones y si alguien lo hace antes pues se lo agradecerem espero les sirva este codigo


----------



## Chico3001 (Nov 11, 2011)

Temas separados...


----------



## guigo (Feb 16, 2012)

Pull1988 dijo:


> Hola amigos del foro necesito un poco de su ayuda, estoy queriendo prender un led via sms, el cual lo recepta un modulo gsm este a su ves le envia ese mensaje al pic 16f628a y este activa el led, ya logre hacerlo desde la compu x ejm pulsando la letra p lo defini en la programacion del microcode, mi problema es cuando mando el sms con la letra "p" este no lo activa ya que la red del movil envia un encabezad primero con la informacion de la hora de llegada del sms asi como otros parametros mas y al ultimo esta la letra q yo envio, la pregunta es como quito ese encabezado o que linea aumento en el programa.Quisiera adjuntar mi programa pero la verdad no se en donde esta la opcion, asi que si un moderador logra ver este mensaje le pido de la manera mas respetuosa me la haga conocer. Grcias
> 
> Ya logre adjuntar el archivo esta en .txt amigos recalco esta en pbp gracias



me gustaria mucho saber cuales son los parametros para enviar el mensaje. me refieroa la informacion o comando debe entregarse al celular. como en tu ejemplo que dice at y otras cosas que escribiste.





mecatrodatos dijo:


> No hay problema o no lo leo, son cosas que pasan amigo MAXTORCAMPOS si deseas habre un hilo nuevo, con repecto a:
> 
> lo podrias realizar con un Select Case y crear variables para comparar y condicionar los datos, las comillas son para texto ("Ok")  los parantesis para variables [10], por ejemplo si desde el celular envias "P" con el select case puedes establecer algunas condiciones: prender, apagar o enviar cualquier mensaje, el MODEM en este caso podria ser como un teclado matrixal o un recepcionador de eventos.  Te invito a que subas lo que tienes para poder ayudarte mejor todo depende de los comandos At que se utilicen o Modem que se pretende utilizar.



me podrias enviar informacion sobre como es que funcionan los datos o mejor, cuales son los parametros a tener en cuenta para hacer el programa que enviara mensajes?

yo conozco el lenguaje pero manejar los parametros en un celular nada.....

asi sea un ejemplito explicando que es lo que recibe el celular para enviar el mensaje.





			
				guigo dijo:
			
		

> me gustaria mucho saber cuales son los parametros para enviar el mensaje. me refieroa la informacion o comando debe entregarse al celular. como en tu ejemplo que dice at y otras cosas que escribiste.
> 
> 
> 
> ...



me inquieta saber que es lo que esta en las llaves enserrado en comillas. SEROUT  Tx,N1200,["AT+CMGD=1",13,10]


----------



## guigo (Feb 17, 2012)

MAXTORCAMPOS dijo:


> Pero de que estas hablando lubeck,?
> 
> escuchate a ti mismo amigo!!! te estas consumiendo en tu propia hiel, eres una persona mal intencionada, te lo dije antes y te lo repito no quiero que me hagan el trabajo no estoy acostumbrado a eso, yo se cual es tu dolor pero eso solo te puede ayudar un profesional, aunque no deberia explicar cual es la situacion lo hare para que tu mala intencion no influya a los demas, los fines de semana me voy a mi finca a descansar y eso es lo que pretendo hacer, pero eso no me priva de leer el foro y preguntar, quiero que sepas algo para mi es mucho mas gratificante decir "*Gracias amigo Mecatrodatos con tu ayuda y con el esfuerzo que yo hice ya logre el algoritmo que necesitaba" *a decir gracia por haberme hecho el trabajo, por ultimo debo decirte que yo soy un viejo quizas mucho mas que tu y por eso te pido que respetes, te repito yo se cual es tu dolor pero alli no te puedo ayudar yo, no voy a marcar tu mensaje como inapropiado pues no voy a caer en tu juego, y si respondi a esto fue para que los demas compañeros del foro sepan cual es la situacion, buenas noches



haaaaa tam vacano parce....jajajaja
hey me van a enviar una explicacionsita de porlo menos una instruccion. 
porque el comando es lo colocan luego = 1 o 13  porque despues de que el comando AT lo envian entre comillas y despues una coma y despues un numero pequeño. me explican jajajajaaa.


----------



## MaShicO (Sep 17, 2018)

Hola amigos. Estuve buscando informacion sobre modulos GSM para programarlo en Basic y he llegado hasta unos posts de unos años anteriores y me he topado con el código del amigo mecatrodatos. 
Lo he probado pero no me funciona, es decir, al inicio se prenden los 4 leds, se apagan como está en la programación y veo en el hyperterminal que solo se envia AT CADA 5 SEGUNDOS, es decir, el módulo GSM no me responde con un OK como debería ser.
Cuento con un módulo GSM SIM900 y estoy buscando información para poder presentar mi proyecto de titulación.

Quiero un programa donde pueda establecer la comunicación entre el PIC y el Módulo GSM mediante sus comandos AT.
En otras palabras, quiero que me responda y transmita del PIC a Movil y viceversa.
Es un programa para encender un led desde el celular y que me mande mensaje cuando este se encienda.
Luego añadiré sensores con salidas analógicas y otras cosas mas que son más sencillas.
Quisiera que me orienten por favor, entiendo el lenguaje basic pero estoy en proceso de poder desarrollarme por completo en este lenguaje.
Espero que puedan orientarme, amigos.

Adjunto el código:

```
DEFINE OSC 4                
'DEFINE OSC 8              
DEFINE HSER_TXSTA 20h
DEFINE HSER_RCSTA 90h
DEFINE HSER_BAUD 2400
'DEFINE HSER_BAUD 4800
'DEFINE HSER_BAUD 9600
DEFINE HSER_SPBRG 25        
DEFINE HSER_CLROERR 1

i var byte
TRISB=%00000000
PORTB=%00000000
TRISD=%00001111
PORTD=%00000000

FIRSTCHECK:
    HIGH PORTB.7
    PAUSE 500
    HIGH PORTB.6
    PAUSE 500
    HIGH PORTB.5
    PAUSE 500
    HIGH PORTB.4
    PAUSE 500
    PORTB=%00000000
GSM_CHECK:
HSEROUT ["AT",13]          'Enviar AT al módem seguido por un retorno de carro
HSERIN 5000, GSM_CHECK, [WAIT("OK")]'Comprobar respuesta OK, espere 5 segundos max.
HIGH PORTB.7
PAUSE 1000
HSEROUT ["AT+GMM",13]                           'Pregunte el nombre del modelo
HSERIN 5000, GSM_CHECK, [WAIT("T610 series")]   'Comprobar nombre del modelo
HIGH PORTB.6
PAUSE 1000
HSEROUT ["AT+IPR=2400",13]      'Establece la velocidad de transferencia
HSERIN 5000, GSM_CHECK, [WAIT("OK")]'Comprobar respuesta OK, espere 5 segundos max
HIGH PORTB.5
PAUSE 1000
HSEROUT ["AT+CMGF=1",13]            ''envía AT al módem seguido por un retorno de carro y salto de línea
HSERIN 5000, GSM_CHECK, [WAIT("OK")]''Comprobar respuesta OK, espere 5 segundos max.
HIGH PORTB.4
PAUSE 1000
PORTB=%00000000
BEGIN:
IF PORTB.5=1 THEN ERROR_CALL
IF PORTB.6=1 THEN ERROR_SMS
HIGH PORTB.7
pause 1000
LOW PORTB.7
if PORTD.2 = 0 then SEND_SMS
IF PORTD.3 = 0 THEN CALL_PHONE
PAUSE 1000
GOTO BEGIN
SEND_SMS:
HIGH PORTB.6
HSEROUT ["at+cmgs=",34,"xxxxxxxxx",34,13]
PAUSE 1000
HSEROUT ["este es un mensaje de prueba",26]    'ENVIAR MENSAJE
HSERIN 10000, BEGIN, [WAIT("OK")]''Comprobar respuesta OK, espere 5 segundos max.
LOW PORTB.6
GOTO BEGIN
CALL_PHONE:
HIGH PORTB.5
HSEROUT ["atd[0xxxxxxxxx];",13]
HSERIN 5000, BEGIN, [WAIT("OK")]'Comprobar respuesta OK, espere 5 segundos max.
PAUSE 2000
LOW PORTB.5
GOTO BEGIN
ERROR_CALL:
FOR i = 1 to 5
HIGH PORTB.4
PAUSE 500
LOW PORTB.4
PAUSE 500
next i
PORTB=%00000000
GOTO BEGIN

ERROR_SMS:
FOR i = 1 to 5
HIGH PORTB.4
PAUSE 500
LOW PORTB.4
PAUSE 500
next i
PORTB=%00000000
GOTO BEGIN

End
```


----------



## ricbevi (Sep 18, 2018)

Hola...¿previamente pusiste o el modulo SIM900 esta escuchando a 2400bps?

Los que he tenido a mano por aquí, estaban a mas velocidad.

Otro detalle, no es lo mismo "AT" que "at", veo que mezclas "alegremente" en tu programa las mayúsculas y minúsculas en los textos literales a enviar.

Comienza por conectar el modulo a una PC y verifica que responda y a que velocidad.

Lo puedes hacer con la terminal de Win o alguna otra mas flexible.

Saludos.

Ric.


----------



## MaShicO (Sep 18, 2018)

ricbevi dijo:


> Hola...¿previamente pusiste o el modulo SIM900 esta escuchando a 2400bps?
> 
> Los que he tenido a mano por aquí, estaban a mas velocidad.
> 
> ...


 Hola estimado Ric , eh conectado el modulo GSM SIM900 al Pic TX con RX y viceversa , y lo eh conectado a la PC por medio de un convertidor USB a TTL , estoy usando el software Microcode Studio y este programa posee un hyperterminal donde se puede transmitir y recepcionar datos , tambien eh cambiado por mayusculas el "at" .Ahora al conectar todo tal cual , se puede visualizar en el hyperterminal que en recepcion llega AT cada 5 segundos como esta en el programa , pero el modulo GSM en sí no responde y me eh dado cuenta que cuando aparece "AT" en el hyperterminal yo tengo que enviar un "OK" para que pueda aparecer la siguiente linea del programa y recien aparece el comando AT+ GMM y nuevamente tengo q escribir y enviar "T610 series" , esto es repetitivo si no se hace dentro de los 5 segundos .Si has podido notar yo estoy haciendo el trabajo del modulo GSM . Solo quisiera que alguien amable comparta una configuracion de comunicacion que al enviar por el hyperterminal los comandos AT el modulo GSM SIM900 me reponda como deberia y basandonos en esto una aplicacion basica del envio de mensajes para prender un led y que al encender me mande un mensaje de confirmacion . Espero no causar molestias en el grupo , no es mi intencion , solo deseo aprender y que alguien pueda despejar mis dudas e inquietudes .


----------



## ricbevi (Sep 18, 2018)

Primero debes hacer que el modulo funcione, trabaja solo con el adaptador del puerto y una terminal, si no te contesta, hará lo mismo con tu programa.

No se que modulo estas usando ni como se usa, debes leer los manuales.
Los que he trabajado yo son los de desarrollo y había que prenderlos primero y colocarse a la velocidad por defecto de 115.200bps y cambiarle la velocidad a lo que trabajaba el PIC.



En la pagina del fabricante tienes la ultima documentación disponible, revisa allí.

Primero debes configurar el puerto en la computadora a la velocidad que esta el modulo por defecto(en mi caso 115.200bps) luego mandas el comando AT y te debe contestar, una vez que te conteste escribes  AT+IPR=9600 y "enter" para pasarlo a 9600 si quieres o a la velocidad que decidas(en el programa que subiste esta a 2400bps....AT+IPR=2400).

Hace mas de 7 años que no todo nada de eso por lo que no lo tengo del todo fresco.

Te subo lo que tengo sobre los comandos del SIM900 pero es de esa época.


Ric.


----------

