TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: alebus26 en 02 de Noviembre de 2019, 21:26:01
-
Buenas tenemos el problema de recibir SMS con el sim 800l v2 lo que queremos es que al recibir un mensaje con la palabra "Compuerta" se prenda un LED y con otra palabra especifica se apague el led muchas gracias !!! ((:-)) ((:-)) ((:-)) ((:-)) Si en lo posible es utilizando interrupciones.
-
Buenas tenemos el problema de recibir SMS con el sim 800l v2 lo que queremos es que al recibir un mensaje con la palabra "Compuerta" se prenda un LED y con otra palabra especifica se apague el led muchas gracias !!! ((:-)) ((:-)) ((:-)) ((:-)) Si en lo posible es utilizando interrupciones.
¿Y cual es el problema? ¿Que es lo que probaron de lo que no funciono para tratar de averiguar donde estaba el problema?
¿Lenguaje?¿Compilador?
-
#include <16F877A.h>
#FUSES HS,NOWDT,NOPROTECT,PUT,NOBROWNOUT,NOLVP
#use delay(clock=20M)
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)
#USE standard_io(b)
char dato_recibido[20]; // Buffer de recepción
int con_recepcion=0;
int bandera=0;
void decodificar()
{
if(dato_recibido[1] == 'a' && dato_recibido[2] == 't')
{
output_low(pin_a1);
output_low(pin_a2);
output_high(pin_a3);
bandera=1; //Aqui el problema
}
}
#int_rda //Vector de interrupcion de la recepcion de datos
void interrupcion_rx() //por el usart
{
output_high(pin_a1);
char respaldo;
respaldo = getc();
if(respaldo == 'D')
{con_recepcion = 0;
}
dato_recibido[con_recepcion] = respaldo;
if(respaldo == 'o')
{decodificar();}
con_recepcion++;
if(con_recepcion == 19)
{con_recepcion = 0;}
}
///////////////////////////////////////////////////////////////////////////////
void main()
{
enable_interrupts(global);
enable_interrupts(int_rda);
set_tris_a (0x00) ;
delay_ms(10000);
printf("AT+CMGF=1\r\n"); //Habita el modo texto de los sms
delay_ms(1500);
printf("AT+CNMI=2,2,0,0,0\r\n");//los sms se envían directamente al puerto serie
delay_ms(1500);
printf("AT+CMGDA=DEL ALL\r\n"); //BORRAMOS SMS
delay_ms(1500);
output_low(pin_a1);
while(true)
{
if (bandera==1){
printf("AT+CMGF=1\r");
delay_ms(500);
printf("AT+CMGS=\"Numero de telefono\"\r\n");
printf("Dato recibido");
delay_ms(500);
putchar(0x1a);
}
else{
output_high(pin_a2); //Indicador que esta esperando SMS
delay_ms(1000);
output_low(pin_a2);
delay_ms(1000);
output_low(pin_a3);
output_low(pin_a1);
bandera=0;
}
}
}
Nuestro problema es que al enviar el mensaje con la palabra Dato se me prende un led del pin a3 pero queremos que el modulo me responda diciendo que es correcto el mensaje recibido pero cuando le declaro una variable como bandera justo despues de escribir que se prenda el a3 para que luego en while(true) me mande el mensaje evaluado en una condicion if no c por que no me funciona no c si si el problema es mandar mensajes como respuesta mientras estoy usando interrupciones por puerto serial si puede usar el puerto para mandar el mensaje mientras esta la interrupción o cual seria !!
estoy usando CCS COMPILER
y programo en C muchas gracias
-
La parte del transmisor de la UART funciona aparte de la recepcion, por lo que si estas usando el receptor en la interrupcion, no te afecta en nada a la transmision.
Asi que ese motivo queda descartado.
Nunca use el modulo SIM800L, pero mirando un par de codigos especifican que se debe enviar el 0x1A como ustedes enviaron.. Lo que no entiendo es porque hacerlo luego de ese delay de 500ms.
¿Que responde el SIM800L al enviarle ese comando asi como se lo estan enviando?¿Tenes un conversor UART/USB para probarlo con una PC y ver lo que llega (digo por que son baratos y es mas simple de verlo en la PC)
No tendras un problema de voltajes? Observo que necesita de 3.6 a 4.2V, no le estaras enviando los 5V directos del microcontrolador imagino.
Respecto al programa.. Considero que no es muy linda la parte de la recepcion como esta planteada, pero aca el problema que tenes es en la transmision, por lo tanto me centro sobre esta.
Y tenes mal puesto el "bandera = 0" en el programa, deberia estar dentro del if, y no del else. Sino le estarias pidiendo que siempre envie (Nunca se pondria a 0 bandera)
-
No tengo un conversor UART/USB pero vi foros del problema de voltajes y le puse dos transistores para llegar bien a los 5v igual a mi salida ya me tiraba 4.2V lo eleve a 5V y un poco mas
Respecto a la bandera=0 la puse en el else por que si la bandera es =1 me mandaria el mensaje lo puse en el else por que siempre deberia ser 0 excepto cuando llegue el mensaje correcto esa bandera va a cambiar a 1 igual voy a ponerla dentro del if haber si ahora funciona saludos
-
te funciono? por que yo estaba intentando hacer un proyecto similar y tengo problemas en la recepcion del sms....