TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: sha en 30 de Septiembre de 2010, 07:40:59
-
Buenas a todos.
Estoy intentando comunicar un Modem gsm WAVECOM FASTRACK.
El programa es el siguiente:
#include <16F870.h>
#fuses XT,NOWDT,PUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT
#use delay (clock=4000000)
#use rs232 (baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8) //manejo del RS232
void main (void)
{
SET_TRIS_A(0xFF);
SET_TRIS_B(0x00);
OUTPUT_B(0x00);
delay_ms(5000);
printf("AT+CPIN=2805\r\n");
delay_ms(2000);
printf("AT+CMGF=1\r\n");
delay_ms(2000);
printf("AT+CMGS=\"667616058\"\r\n");
delay_ms(2000);
printf("hola");
putc(26);
}
Cuando los conecto el modem se inicia, lo se porque tiene un piloto que parpadea cuando meto el pin, osea que la primera parte funciona.
Pero luego no me manda el mensaje, no se porque.
Una ayudita, por favor.
-
Hola otra vez.
He conectado el cto del pic al modem solo para escribir y luego el modem al pc con hiperterminal para leer.
Me falla a la hora de ingresar el número de telefono, que me da error.
-
Que es cto?
-
Hola otra vez.
He conectado el cto del pic al modem solo para escribir y luego el modem al pc con hiperterminal para leer.
Me falla a la hora de ingresar el número de telefono, que me da error.
Si has conectado el circuito y no funciona yo daría más tiempo al delay. Cinco segundos sería mejor.
-
Despues de enviar el numero del telefono al que quieres enviar el SMS, deja que el PIC reciba el caracter ">" y seguidamente envia el texto "hola" y el caracter CTRL-Z.
No vendria de mas que despues de cada comando "AT" que envies al modem esperes con el PIC la confirmacion de la recepcion del mismo por parte del modem.
-
Hola, tal como dijo AG1, debes esperar por el prompt, en algunos módulos te llega esta secuencia CR LF > ESP ( Carriage return, Line Feed, Prompt y espacio ), recién ahí podes enviar el texto del mensaje y luego enviar el caracter CTRL-Z ( 0x1A ). Como nota aclaratoria, no todos los comandos en estos módulos tardan lo mismo, vos estas produciendo un delay fijo para cada comando, para jugar esta bien, pero para cosas serias deberias implementar una máquina de estado que vaya analizando las posibles respuestas del módulo ( OK, ERROR, etc ) y tardar solo el tiempo necesario. Otra cosa mas, el printf es muy util pero el tamaño de código que agrega puede llegar a ser restrictivo.
Saludos !
-
Buenas a todos.
Ya consegui mandar mensajes.
He tenido que poner número de centro de mensjes y modo de datos justo antes de mandar mensaje.
Muchas gracias a todos por responder.
-
Hola de nuevo a todos.
Ahora estoy intentando recibir mensajes.
Pero no consigo leer lo que me manda el moden.
El codigo es este.
#int_rda
void serial_isr()
{
if(kbhit())
{ // Si hay algo pendiente de recibir ...
Add_buffrec(getc()); // lo recibo y lo añado al Buffer de Recepción
}
}
void Add_buffrec (char c)
{ // Añade carácter al Buffer de Recepción
putchar(c);
if (nbu==0)
{
switch(c)
{
case 0x0A:
{
if (saltb==0) // [Enter] -> Habilita Flag para procesar comando en Main
{
smsr=1;
break;
}
else
saltb=0;
nbu=1;
break;
}
case 0x22:
{
saltb=1;
buffrec[xbuffrec++]=c;
break;
}
default:
saltb=0;
buffrec[xbuffrec++]=c; // Añade carácter recibido al Buffer
}
}
else
{
switch(c)
{
case 0x0D:
smsr=1;
break;
default:
buffrec1[xbuffrec1++]=c;
}
}
}
Quizas el error este en como distingo el final del envío.
No lo se.
-
Un pequeño fallo que he encontrado y que había puesto para simularlo en hiperterminal es putchar(c);
La e quitado y sigue sin funcionar.