Uso de un celular GSM con PIC o PC

hola moyano muy bien te felicito estas avanzando muy rapido primero CPMS: 0,70,19,20,0,70 es la direccion de la memoria a la que accedes si te fijas al poner en vez de me sm veras que esta cambia pero bueno esto no nos sirve
ahora la trama al momento de leer el mensaje es toda la que observas ademas de otros caracteres basura que se cuelgan en la comunicacion serial y scomo vez te envia fecha hora numero de quien lo manda etc, y al final esta el texto que necesitas y eso de rele1 on es un buen ejemplo de comando crea tus comandos a tus necesidades pero te recomiendo que sean palabras juntas por ejemplo rele1on por que esos espacios en la decodificacion del comando te va a provocar eventos es mucho mejor que siempre en los comandos tengas dos partes una de acceso y otra de orden ejm
en mi tesis mi codigo de acceso es KM y un comando es IR1 asi que el comando completo es KMIR1 esta forma de crear un comando te ayudara para desechar los mensajes que sean incorrectos y para tener un mejor control del mismo.
ahora antes de empezar a leer un mensaje debemos seguir los pasos el siguiente es que consigas una buena comunicacion serial con el pic antes de entrar a comunicar con el cell crea un programa en el cual tengas una comunicacion entre el hiper y el cell y que te prenda un led cuando envies un letra por el hiper verifica el buen funcionamiento de la comunicacion serial para que te familiarices y asi poder decartar errores futuros.
entonces arma ese programa y verifica la comjunicacio: te doy unos tips.
siempre en comunicacin seerial utiliza un osc de 20mhz si usas mas alto o mas bajo que este te puede generar muchos problemas utiliza buenos cables en la conexion de rx y tx del pic pues tambien te pueden producir errores, continua y seguimos en contacto
 
no te confundas de gana lei el resto de mensajes que postearon y todos estan mal avancemos en orden no te preocupes por el codigo ahorita has lo que te digo crea una buena comunicacion serial entre el pic y hiper para salir de estas dudas que vez que se presentan por no ir en orden el ese circuito no funciona asi que primero has lo que te digo si quieres seguir avanzando verifica la buena comunicacion con el programa que dije que hagas y seguimos el cell y el pic se conectan directo asi que no te preocupes el max232 solo te sirve para realizar pruebas despues cuando estes seguro de todos los pasos pasamos a pruebas directo entre el pic y el cell ahi la conexion es directa asi aque no armes nada innecesario lo del max3232 es una compra innecesaria todo se hace con el max232.
si sabes muy bien c comienza programando en c pero primero yo te recomiendo que cuando comencemos a programar lo hagas en microcode es muy facil para empezar a enteder el funciinamiento despues podemos avanzar mas en el c bueno eso te recomiedo verifica la comunicacion serial y seguimos es muy importante
 
De antemano este diagrama no me convence, tu puedes conectar directo las terminales sin problema al PIC y al tel sin este armatoste.
Si del voltaje dependiera te comento que el MAX232 saca 5V a la salida en el TX y ya habría ocasionado algún problema en el Cel.
Prueba directo a ver que sucede, debe trabajar correctamente.
Igual sería bueno implementar una rutina "getc()" para que leas el "OK" del Cel y saber que estás transmitiendo correctamente.
Saludos.
Como comentario adicional observo que para el delay y el usart tienes puesto clock=400000, pero en el comentario mencionas a uno de 20Mhz, esta bien?
Por lo menos las "lecturas" las realizamos de manera correcta, no se y espero que el termino plural "están mal" no se refiera a algo de lo que he comentado ya que si lees bien lo que tengo escrito en la "cita" podrás darte cuenta que es lo mismo que comentas al final.
Saludos
 
con respecto a lo en el hiper se ve todo lo que se debe ever en el pic es mentira el hiper elimina muchos caracteres que los considera basura y muestra solo caracteres de infromacion el pic lee todos estos caracteres basura asi que no es tan simple como se ve en el hiper les pongo un ejemplo ustedes ven al momento que se lee un mensaje nuevo todos los caracteres antes de llegar al mensaje en si no son muchos seran unos 15 pero en la realidad los caracteres antes de llegar al mensaje en si son 27 los cuales la mayoria son caracteres basura, con estos toca estar pendiente en adelante
 
con respecto a lo de comparar dos tramas esta bien pero en esta aplicacion no sirve no podemos comparar dos tramas ya que el cell envia muchos caracteres basura que nos se pueden reconocer pero que igual ocupan espacio en la trama y no se puede comparar.
a lo te refieres esta correcto siempre y cuando sepas que la trama de datos enviados no lleban caracteres basura esos siempre se cuelgan en la trama por estas razones es las que digo que los mensajes posteados estan mal no por ofender a nadie sino por aclarar las cosas saludos
 
Pero de eso a decir que "todo lo que han escrito está mal" creo hay mucha diferencia, estoy de acuerdo con lo que comentas, pero no creo que moyano esté en "ceros" en cuestión de programación o de caracteres ocultos.
He manejado por mucho tiempo el hyperterminal y se que para que no de problemas mayormente solo los carateres de CR, LF, backspace, TAB y unos cuantos más son los que "aparentemente" no se ven. Los otros especiales si son introducidos modifican directamente parámetros del Hyperterminal. En fin.
Cuando comenté que lo que vé en hyperterminal es lo mismo que verá en el PIC me refería a que no serían menos los caracteres que el recibiría y que solo con contar la trama de inicio sería suficiente para saltarla y guardar solo el texto que es lo que importa.
En PICC que supongo es lo que Moyano usa, y en cualquier librería que maneje "C" existen comandos que nos ayudan a detectar cuando lo que recibimos son caracteres Numerico, Letras, Alfanuméricos o comandos. Con esto se simplifica por mucho la detección de la trama de texto.
Saludos
http://ascii.cl/es/codigos-de-control.htm
En esta página está la explicación completa del funcionamiento y valor de cada "comando".
 
Moyano Jonathan dijo:
Funcionooooooooooooooooooooooo ! El celular ya me acepta los comandos AT y los probé por hyperterminal. Ahora mi próximo paso es poder llamar y mandar SMS desde el teléfono celular usando los comandos AT.


hola moyano fijate q despues de buscar por todos lados un t237 por fin lo consegui y estoy probando conectarlo con el hyperterminal pero fiajte q no logro la comunicacion disculpa la molestia podes subir el diagrama de la pc al cel yo estoy utilizando la configuracion de un max232 donde los capacitores son 10 micros, aparte de eso no se si me podes decir con que parametros configuras el hyperterminal ya que a mi me deja escribir solo cuando pongo el control de flujo en xon xoff o en ninguno pero no me retorna el ok el cel me deja escribir pero cuando le doy enter me escribe en la misma linea entonces no estoy seguro si es una mala conexion del max232 o del hyperteminal porque ya e probado cambiarle todos los parametros al hyperterminal.
gracias!
 
marvinxela:
hola moyano fijate q despues de buscar por todos lados un t237 por fin lo consegui y estoy probando conectarlo con el hyperterminal pero fiajte q no logro la comunicacion disculpa la molestia podes subir el diagrama de la pc al cel yo estoy utilizando la configuracion de un max232 donde los capacitores son 10 micros, aparte de eso no se si me podes decir con que parametros configuras el hyperterminal ya que a mi me deja escribir solo cuando pongo el control de flujo en xon xoff o en ninguno pero no me retorna el ok el cel me deja escribir pero cuando le doy enter me escribe en la misma linea entonces no estoy seguro si es una mala conexion del max232 o del hyperteminal porque ya e probado cambiarle todos los parametros al hyperterminal.
gracias!

CEL + RS232 = No funciona he probado mil metodos y no me funcionó.

Este circuito es el que funciona:
http://www.geocities.com/adoleon2000/cableEd_charlyMa.htm

Fotos de mis conexiones:

Del cable de comunicaciones:

Del circuito para la PC:


de la configuración del hyperterminal:


Haciendo así va a funcionar seguro.

Otra cosa ! no uses cables USB serial de los celulares ya que con esos cables lo probé tambien y no funciona.
 
Respondiendo a comentarios anteriores:
De antemano este diagrama no me convence, tu puedes conectar directo las terminales sin problema al PIC y al tel sin este armatoste.
Si del voltaje dependiera te comento que el MAX232 saca 5V a la salida en el TX y ya habría ocasionado algún problema en el Cel.
Prueba directo a ver que sucede, debe trabajar correctamente.
Igual sería bueno implementar una rutina "getc()" para que leas el "OK" del Cel y saber que estás transmitiendo correctamente.
Saludos.
Como comentario adicional observo que para el delay y el usart tienes puesto clock=400000, pero en el comentario mencionas a uno de 20Mhz, esta bien?

Pruebo sin el circuito de transistores y te comento.
Lo de la rutina getc....no lo veo muy necesario.
y tenés mucha razón con respecto a lo de la configuración de los fuses.

Meta:

Lo probé y no me funcionó los MAX232.

rizy:
hola moyano muy bien te felicito estas avanzando muy rapido primero CPMS: 0,70,19,20,0,70 es la direccion de la memoria a la que accedes si te fijas al poner en vez de me sm veras que esta cambia pero bueno esto no nos sirve
ahora la trama al momento de leer el mensaje es toda la que observas ademas de otros caracteres basura que se cuelgan en la comunicacion serial y scomo vez te envia fecha hora numero de quien lo manda etc, y al final esta el texto que necesitas y eso de rele1 on es un buen ejemplo de comando crea tus comandos a tus necesidades pero te recomiendo que sean palabras juntas por ejemplo rele1on por que esos espacios en la decodificacion del comando te va a provocar eventos es mucho mejor que siempre en los comandos tengas dos partes una de acceso y otra de orden ejm
en mi tesis mi codigo de acceso es KM y un comando es IR1 asi que el comando completo es KMIR1 esta forma de crear un comando te ayudara para desechar los mensajes que sean incorrectos y para tener un mejor control del mismo.
ahora antes de empezar a leer un mensaje debemos seguir los pasos el siguiente es que consigas una buena comunicacion serial con el pic antes de entrar a comunicar con el cell crea un programa en el cual tengas una comunicacion entre el hiper y el cell y que te prenda un led cuando envies un letra por el hiper verifica el buen funcionamiento de la comunicacion serial para que te familiarices y asi poder decartar errores futuros.
entonces arma ese programa y verifica la comjunicacio: te doy unos tips.
siempre en comunicacin seerial utiliza un osc de 20mhz si usas mas alto o mas bajo que este te puede generar muchos problemas utiliza buenos cables en la conexion de rx y tx del pic pues tambien te pueden producir errores, continua y seguimos en contacto

OK pruebo los consejos y te digo.

rizy:
con respecto a lo de comparar dos tramas esta bien pero en esta aplicacion no sirve no podemos comparar dos tramas ya que el cell envia muchos caracteres basura que nos se pueden reconocer pero que igual ocupan espacio en la trama y no se puede comparar.
a lo te refieres esta correcto siempre y cuando sepas que la trama de datos enviados no lleban caracteres basura esos siempre se cuelgan en la trama por estas razones es las que digo que los mensajes posteados estan mal no por ofender a nadie sino por aclarar las cosas saludos

Pero una vez hecha la "limpieza de los caracteres basura" y filtrado el mensaje se podría hacer comparaciones de cadenas.
 
:( :( Bueno sigo con los resultados negativos:

- Configuré bien los fuses.
- Use un relog de 4.0Mhz.
- Conecté el teléfono directamente al PIC.

resultado: Sigue sin funcionar.

Código:
// Programa de control de dispositivos mediante SMS Prueba N°1. //
// Programador: Moyano Jonathan.                                //
// Fecha: 29/07/09                                              //
//////////////////////////////////////////////////////////////////

// Encabezado del programa:
#include <18F2550.h> // Definición de registros internos del PIC18F2550.
#fuses NOMCLR        // Pin MCLR como entrada digital RE3.
#fuses XT            // Cristal XT.
#fuses NOWDT         // No activamos el WatchDog.
#fuses NOPROTECT     // No activamos la protección contra lecturas.
#fuses NOLVP         // No activamos el modo de programación a bajo voltaje.
#fuses NODEBUG       // No incluimos código para debug.
#fuses USBDIV        // 96Mhz del PLL/2 = 48Mhz para USB en Full speed.
#fuses PLL1          // Factor de división de la entrada del PLL = 1 para 4mhz.
#fuses CPUDIV1       // El PLL postscaler decide la división en 2 de la frecuencia de salida del PLL de 96MHZ.
#fuses NOVREGEN      // Desactivamos el regulador de 3.3v del puerto USB.
#fuses NOPBADEN      // Puerto B como I/O digital.

#use delay(clock=4000000)      // Frecuencia de trabajo = 4Mhz.
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) // Configura la USART.

void main()
{

// Configuraciones varias:

   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   setup_low_volt_detect(FALSE);
   
while(true){  
printf("AT\r\n"); // Le llama la atención al teléfono.  
delay_ms(2000); //espera 5 segundos
printf("AT+CMGF=1\r\n"); //configura modo texto
delay_ms(1000);
printf("AT+CMGS=\"02616943559\"\r\n"); //0123456789 es el nro del destinatario.
delay_ms(1000); //del celular al que se envia el sms
printf("Esto es una prueba");
putc(26); //ascii(26)=(ctrl+z) envia el mensaje
printf("\r\n");
delay_ms(1000);
}
}

La verdad no sé cual puede llegar a ser el problema.
 
no se porque utilizas reloj de 4 mhz no es recomendable utilizar un reloj de 4 mhz en comunicacion serial utiliza uno de 20mhz con el de cuatro no te sirve, otra cosa trata primero de enviar un mensaje con el pic es mas facil hasta que logres una buena comunicacion y sepas muy bien de como esta funcionando todo trata primero eso despues lo de la trama de comunicacion yo le doy otro trato y es mas facil y tienes un mejor control y te da mejores resultados que solo compararar dos tramas ya lo dije en otro mensaje eso de comparar esta bien pero para esta aplicacion no funciona muy bien yo ya la he probado y es mejor utilizar otra forma de manejo de la trama lo unico que te puedo adelantar es que el manejo se lo hace de caracter en caracter.
sigue avanzando no te estanques concentrate en la buena comunicacion serial y tratar de enviar un mensaje primero.
suerte
 
Hola Moyano, una vía rápida para que te saques de dudas si es el PIC, es conectarlo al puerto COM tal y como lo conectarias al Cel. De esta forma verías los caracteres que envíe el PIC y te quitas de la duda que es lo que está fallando. Lo único es considerar que la salida TX del PIC debe ir conectada al RX del Cel y el RX del PIC al TX del Cel. Y para la conexión del PIC al COM se conecta como si fuera el Cel idéntico.
Que valiente de intentarlo con la familia 18, a mi siempre me han dado mucha lata en las configuraciones. Ni queriendo a la primera me sale el programa.
Saludos
 
no se porque utilizas reloj de 4 mhz no es recomendable utilizar un reloj de 4 mhz en comunicacion serial utiliza uno de 20mhz con el de cuatro no te sirve, otra cosa trata primero de enviar un mensaje con el pic es mas facil hasta que logres una buena comunicacion y sepas muy bien de como esta funcionando todo trata primero eso despues lo de la trama de comunicacion yo le doy otro trato y es mas facil y tienes un mejor control y te da mejores resultados que solo compararar dos tramas ya lo dije en otro mensaje eso de comparar esta bien pero para esta aplicacion no funciona muy bien yo ya la he probado y es mejor utilizar otra forma de manejo de la trama lo unico que te puedo adelantar es que el manejo se lo hace de caracter en caracter.
sigue avanzando no te estanques concentrate en la buena comunicacion serial y tratar de enviar un mensaje primero.
suerte

Por que rizy decis que no anda a 4Mhz ? En que falla si pones esa frecuencia de trabajo ? Si la configuración de la USART poniendole el cristal que le ponga es :
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) // Configura la USART. ?

Ya probé PIC + Hyperterminal y los comandos AT los envía correctamente.

En que me puede estar fallando la conexión del PIC con el teléfono ?
Hola Moyano, una vía rápida para que te saques de dudas si es el PIC, es conectarlo al puerto COM tal y como lo conectarias al Cel. De esta forma verías los caracteres que envíe el PIC y te quitas de la duda que es lo que está fallando. Lo único es considerar que la salida TX del PIC debe ir conectada al RX del Cel y el RX del PIC al TX del Cel. Y para la conexión del PIC al COM se conecta como si fuera el Cel idéntico.
Que valiente de intentarlo con la familia 18, a mi siempre me han dado mucha lata en las configuraciones. Ni queriendo a la primera me sale el programa.
Saludos

Las pruebas de para ver que me envía el PIC por el puerto serie ya las hice y envía bien los caracteres.

Yo estoy conectado el microcontrolador de la siguiente manera:

 
Con el cristal que menciona Risy es por el porcentaje de error que se genera en el usart a ciertas velocidades, aunque tu pongas baud = 9600, la velocidad real tiene una leve diferencia por los registros de configuración del USART del PIC que trabajan directamente con la velocidad del cristal.
En lo personal no lo considero muy crítico ya que no ronda por más del 2%, pero podría ser que para el Cel si sea crítico.
Prueba conectando el Cel, hyperterminal y el PIC. Conecta directo el Cel y el PIC y solo conectas el PIN TX del Cel al COM para checar que el Cel esté respondiendo o en su caso podría estar generando un error y checar que es ese error.
A lo demás no le veo problemas, si está raro. Saludos
 
PD: Encontré una nota de aplicación de ATMEL que habla justamente sobre la comunicación con los celulares mediante comandos AT.

Dentro del archivo RAR están los códigos fuentes del programa y sus correspondientes encabezados.

La nota está en un inglés bastante entendible y con muy buena información.



Yo todavía no me puedo comunicar con el teléfono ops: pero mi filosofía de vida es probar hasta que funcione :cool:
 

Adjuntos

  • cdigo_ansi_c_para_avr_gsm__pic_527.rar
    197.6 KB · Visitas: 354
Con el cristal que menciona Risy es por el porcentaje de error que se genera en el usart a ciertas velocidades, aunque tu pongas baud = 9600, la velocidad real tiene una leve diferencia por los registros de configuración del USART del PIC que trabajan directamente con la velocidad del cristal.
En lo personal no lo considero muy crítico ya que no ronda por más del 2%, pero podría ser que para el Cel si sea crítico.
Prueba conectando el Cel, hyperterminal y el PIC. Conecta directo el Cel y el PIC y solo conectas el PIN TX del Cel al COM para checar que el Cel esté respondiendo o en su caso podría estar generando un error y checar que es ese error.
A lo demás no le veo problemas, si está raro. Saludos
Otro problema pordría ser que algún comando no le estés poniendo si lo que esperas es que el Cel envíe el mensaje. Posiblemente si esté reconociendo los comandos pero no esté enviando el mensaje por algún error de comando o configuración.
 
la respuesta de erik esta y como digo en esta aplicacion se debe usar uno de 20 mhz si usas uno de 4 no funcionara cambi ael oscilador porque tu programa esta bien y si ya le revisaste por el hiper y te envia los at normalmente con los tiempos y esta correcta es el osc y si no hay que seguir revisando la parte fisica en si solo es eso lo fisico revisale bien y vemos
 
Atrás
Arriba