Autor Tema: SIM 800L v2 Recibir mensaje con PIC16F877A  (Leído 3320 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado alebus26

  • PIC10
  • *
  • Mensajes: 5
SIM 800L v2 Recibir mensaje con PIC16F877A
« 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.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:SIM 800L v2 Recibir mensaje con PIC16F877A
« Respuesta #1 en: 02 de Noviembre de 2019, 23:09:06 »
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?

Desconectado alebus26

  • PIC10
  • *
  • Mensajes: 5
Re:SIM 800L v2 Recibir mensaje con PIC16F877A
« Respuesta #2 en: 04 de Noviembre de 2019, 00:48:46 »
#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
« Última modificación: 04 de Noviembre de 2019, 01:01:24 por alebus26 »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:SIM 800L v2 Recibir mensaje con PIC16F877A
« Respuesta #3 en: 04 de Noviembre de 2019, 08:11:50 »
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)
« Última modificación: 04 de Noviembre de 2019, 08:14:23 por KILLERJC »

Desconectado alebus26

  • PIC10
  • *
  • Mensajes: 5
Re:SIM 800L v2 Recibir mensaje con PIC16F877A
« Respuesta #4 en: 04 de Noviembre de 2019, 09:30:01 »
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

Desconectado ivan elias

  • PIC10
  • *
  • Mensajes: 3
Re:SIM 800L v2 Recibir mensaje con PIC16F877A
« Respuesta #5 en: 14 de Abril de 2021, 00:03:41 »
te funciono? por que yo estaba intentando hacer un proyecto similar y tengo problemas en la recepcion del sms....


 

anything