Autor Tema: problemas con interupciones para verificar codigo dtmf  (Leído 2126 veces)

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

Desconectado eduardoy2kk

  • PIC10
  • *
  • Mensajes: 9
problemas con interupciones para verificar codigo dtmf
« en: 04 de Abril de 2005, 16:18:00 »
Hola amigos bueno de nuevo aqui , estoy teniendo un problema con un 16f877A , lo que quiero lograr es recibir 4 digitos DTMF (como si fuera un codigo de acceso)por medio de un 8870 y compararlos con los que estan grabados en la eeprom para dar acceso a una funcion especifica , cosa que no me sale ya que al arancar la interupcion se queda en el primer numero y no me actualiza al segundo para seguir la verificacion del codigo.
alguien sabe como hacerlo , por favor una ayuda o un ejemplo
Aqui les doy un fragmento de mi rutina pero no funciona alguna idea????


#int_EXT
EXT_isr()
{


   a=((portd & 0xF0) >> 4);
   if (codigo_almacenado == 0)
   {
      write_eeprom (numero, a);
      ++numero;
      if (numero == 3){printf(lcd_putc, "fCodigo completo"Giño; }
   }
      numero =0;
      pasw1= read_eeprom (numero);
      if (pasw1 == a)
      {  ++numero;
         pasw2= read_eeprom (numero);
         if (pasw2 == a)
         {  ++numero;
            pasw3= read_eeprom (numero);
            if (pasw3 == a)
            {  ++numero;
               pasw4= read_eeprom (numero);
               if (pasw4 == a) codigo_ok = 1;
               else codigo_ok = 0;
         }else codigo_ok = 0;
      }else codigo_ok =0;
      }else codigo_ok = 0;
      if (codigo_ok == 1) printf(lcd_putc, "fCodigo OK"Giño;
      if (codigo_ok == 0) printf(lcd_putc, "fCodigo incorrecto"Giño;

}

No se pero se me hace que me estoy complicando por demas

A!!! y otra duda para despues como hago para llamar una rutina desde una interupcion nunca me sale de ella , Se puede????
Disculpen las molestias y mi ignorancia soy bastante nuevo en esto.

Desconectado eduardoy2kk

  • PIC10
  • *
  • Mensajes: 9
RE: problemas con interupciones para verificar codigo dtmf
« Respuesta #1 en: 05 de Abril de 2005, 08:20:00 »
Hola ya encontre como hacer funcionar los llamados a sub rutinas desde la interupcion , solo era un problema de sintaxis .
por lo otro aun tengo dudas si alguien tiene alguna idea sera muy agradcida.

Eduardo

Desconectado Mariano_47

  • PIC10
  • *
  • Mensajes: 2
Re: problemas con interupciones para verificar codigo dtmf
« Respuesta #2 en: 11 de Abril de 2007, 15:14:15 »
Hola Eduardo:
                     No soy ningún experto en el tema pero me parece que estás haciendo "demasiado" dentro de la rutina de interrupción. Sobre todo el manejo de la EEPROM y los printf, creo recordar que las lecturas/escrituras de la eeprom llevan su tiempo y a lo mejor te está llegando un nuevo tono antes de poder procesar toda tu rutina.

 Alguien dijo por ahí que es buena costumbre usar rutinas de interrupción "short and sweet" (traducción: bien cortita :()

 A lo mejor podrías simplemente almacenar el tono en un buffer cuando se produce la INT y despué, en el main() analizar si coincide, etc.

 Espero haberte ayudado......y sinó.....perdón. :?

Saludos. Mariano

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: problemas con interupciones para verificar codigo dtmf
« Respuesta #3 en: 11 de Abril de 2007, 15:39:41 »
Siempre en las rutinas a ejecutar en la interrupcion debes usar el minimo de instrucciones que permita entrar y salir rapidamente de la misma.
En tu caso te aconsejo capturar el dato y poner una bandera (flag de 1 bit) en uno para avisarle a la rutina que corre en main() que debe analizar ese dato nuevo y validarlo contra el valor de EEPROM.

Si tienes en cuenta que estas almacenando el dato si es igual a cero, y que cada dato que almacenas el micro espera 18 milisegundos (no importa que reloj tengas, es la latencia de las celdas de memoria EEPROM) te daras una idea como esta rutina que utilizas ahora se comporta.

Propongo que hagas algo muy simple, cada dato que recibes guardalo en un nuevo byte de RAM y cuando termine grabalo en EEPROM, luego analiza si realmente tu comunicacion con el 8870 anduvo bien o no, de esa forma puedes comprobar si lo que haces esta correcto y ya tienes un buen avance.

Marcos
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


 

anything