Autor Tema: Será por las interrupciones?  (Leído 15298 veces)

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

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Será por las interrupciones?
« en: 29 de Diciembre de 2007, 14:46:31 »
Hola chicos, que tal...? Feliz navidad... tengo un planteamiento - pregunta... Les echo el cuento...

Estoy haciendo un programa el cual me lea y mande a un display las teclas que presione desde un teclado matricial, además los displays deben mostrar la causa del reset cuando este se produzca, ya sea por MCLR, POR, BOR y WDT (es por eso mi insistencia en temas anteriores por los resets)... además de que tiene dos switechs externos que cuando aprete me aparezca o interrpción 1 o interrupción 2 en el display, de acuerdo a cual accione... además un dipswitch que me deshabilite cada interrupción por separado y todas juntas (globales)... La Buena Noticia es que ya lo hice gracias a mis lecturas de tutoriales, datasheet, trasnochos, la colaboración de mucho de ustedes y gracias a las correcciones y orientaciones de mi amigo Henry (micro_cadaver)... pero me encuentro en un dilema con el programa y la simulación en proteus... estuve haciendo mis observaciones y las anote, a continuación se las expongo...

Primera observación:
Cuando via dipswith deshabilito las interrupciones; pues  el MCLR, el WDT y el teclado matricial funcionan correctamente, a que me refiero con esto: Bueno, aprieto el teclado y los números se me ven en el display, el WDT se me desborda a los 2:12 (excelente) y cuando le doy al pulsador del MCLR, se me reinicia el programa apareciendo la C de Clear (todo bello :mrgreen:) todo chevere (Ojo esto con el dipswith puesto en bajo, es decir, sin interrupciones habilitadas)

Segunda Observación:
Cuando habilito las interrupciones, estás funcionan de maravilla(es decir, si aprieto el pulsador RB0(primera interrupción) me aparece el 1 y si aprieto el segundo pulsador (interrupción por RB1) me aparece el 2.... pero el MCLR, el WDT y el teclado no funcionan correctamente, me explico: Habilito via dipswith cada interrupción por separado y funcionan fino, le doy al teclado y funciona también, muestra los números, todo esto sin haber resetado via MCLR, pero cuando ahora le doy al pulsador del MCLR pues este me manda la causa del reset al display, es decir una C, como deberia ser, pero se queda pegado allí, el teclado no reacciona, lo único que funcionan son las interrupciones que cuando apriento el pulsador me aparece correctamente que fue la primera interrupción, y cuando apreto el segundo pulsador pues me aparece el 2, todo fino con ellas... Ahora con respecto al WDT, este se activa despues de 2:31 minutos, (mucho más tarde) y aparece la P de perro(lo que deberia hacer), pero cuando aprieto el pulsador del MCLR, no me aparece la C que deberia aparecer, sino que sigue la P del WDT allí pegada, y cuando le doy al pulsador de las interrupciones cada una sirve por separado (mostrando 1 o 2 dependiendo de cual active), pero cuando reseteo de nuevo por MCLR, pues sigue apareciendo la P del WDT en vez de la C del MCLR.

Este es mi dilema pergunta muchachos-.... que creen que pueda ser... :o

Les voy a anexar el codigo a ver si le quieren echar una ojeada...

Atte: Enigma... La llanerita de Guayana :-)
« Última modificación: 01 de Enero de 2008, 20:02:51 por Enigma »
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Será por las interrupciones?
« Respuesta #1 en: 29 de Diciembre de 2007, 17:04:08 »
Bru, bru, bru  :(

Atte: Enigma... La llanerita de Guayana :?
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Será por las interrupciones?
« Respuesta #2 en: 01 de Enero de 2008, 16:49:45 »
Rayos, nadie me quiere ayudar!!!!  :(


Atte: Enigma... La llanerita de Guayana :(
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Será por las interrupciones?
« Respuesta #3 en: 01 de Enero de 2008, 19:50:22 »
ya te lei, jejje solo que no te entendi muy bien, le doy unas leidas mas para poder tratar de ayudarte, ok? un saludo, feliz año nuevo! :mrgreen:
.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Será por las interrupciones?
« Respuesta #4 en: 01 de Enero de 2008, 19:57:49 »
Jejejeje... O.k... pense que era que nadie me queria ayudar!!! :(... Bueno sino entiendes algo pregunta, y te explico con más claridad!!! feliz Año nuevo para ti también!!!!! :-/

Atte: Enigma... La llanerita de Guayana :(
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Será por las interrupciones?
« Respuesta #5 en: 01 de Enero de 2008, 21:02:06 »
parece que voy entendiendo un poco :mrgreen: mira, nose si tendras un esquema de tu circuito para tener las cosas mas claras

que problema tuviste con la simulacion? o con el proteus??
.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Será por las interrupciones?
« Respuesta #6 en: 01 de Enero de 2008, 21:23:58 »
O.k, te mando el esquema de proteus, la verdad no creo que sea problema de la simulación... creo que es el programa, no se, un error de teoria o algo que estoy pasando por alto... Porque todo el meollo del asunto se concentra en las interrupciones, es decir, cuando le doy al dpswitch para desactivar las interrupciones todo funciona como deberia funcionar, pero cuando las activo pues todo se vuelve un ocho!!! todo se enreda!!!



Atte: Enigma... La llanerita de Guayana :?
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Re: Será por las interrupciones?
« Respuesta #7 en: 01 de Enero de 2008, 21:29:09 »
Has intentado seguir la simulacion paso a paso? para que veas que es lo que hace tu programa justo cuando ocurre el loquerio  :mrgreen:

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Será por las interrupciones?
« Respuesta #8 en: 01 de Enero de 2008, 21:46:44 »
ok. creo que en tu fuses mejro le cambies INTRC_IO por INTRC, porque en el primero creo que esta involucrado en pin 14 que es OSC2/RA6/CLKO, y ese pin lo estas usando en tu teclado

viendo tu esquema si ABCyD controlan los catodos será mejor que uses transistores en vez de los negadores, ya que por la corriente qeu llega a consumir un display con todos sus segmentos encendidos puede ser muy lamentable para el negador porque puede arruinarse, aunque depende cuanta corriente aguante, pero no creo que sea mucha, fijate por aca: http://www.todopic.com.ar/foros/index.php?topic=19435.0

en cuanto a lo de tu programa me parece que esta bien, que opinas si en vez de usar un dipswitch usas solo pulsadores tb??
seguire dandole la mirada minusiosa de todas maneras, talvez se me ha escapado algo, aunque lo veo muy bien :mrgreen:

un saludo, espero logres pronto acabar este dilema que tienes :mrgreen:


pd... si es muy buena la idea de poseidon, eso lo haces cargando en el micro, en proteus el archivo .cof que te genera el ccs en vez del .hex, son lo mismo solo que el cof te sirve para la depuracion, para ver paso a paso lo que hace tu programa, lo cargas, lo ejecutas normalito, y le das pause, y aparecera una ventana con tu codigo y ya te daras cuenta como es que funciona ese cof, es muy bueno, te ayuda bastante, a mi me hizo ver los errores que algunas cometi, bueno muchos errores :D
« Última modificación: 01 de Enero de 2008, 21:50:01 por Cryn »
.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Será por las interrupciones?
« Respuesta #9 en: 01 de Enero de 2008, 21:48:27 »
Correr el programa paso a paso??? donde? en el compilador??? pero me han dicho que en el CCS no se puede hacer eso....

Atte: Enigma... La llanerita de Guayana :(
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Será por las interrupciones?
« Respuesta #10 en: 01 de Enero de 2008, 21:54:37 »
 :mrgreen: te deje eso en el pd (postdata, jejeje) de mi anteriro mensaje, que lo edite :mrgreen:
.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Será por las interrupciones?
« Respuesta #11 en: 01 de Enero de 2008, 22:00:43 »
Hola.... Bueno lo del INTRC_IO tengo que dejarlo así porque, por eso mismo porque estoy usando el teclado allí... y si coloco INTRC pues me empezará a contar el reloj interno y los números del teclado cambiarán como locos :-)... en cambio con el INTRC_IO lo que hago es hacer que ese pin trabaje como entrada/salida....
igual gracias por esa observación.... jejejeje :-/

Lo de los transistores, pues si tienes mucha razon los voy a colocar.... pero no creo que sea por eso que no funcione el programa verdad correctamente cuando activo las interrupciones?? o si??

Y por último con respecto al Dpswitch bueno yo queria hacerlo con pulsadores, pero es un requisito hacerlo con dpswitch... igual los probe con pulsadores y tampoco funciona....  :(

Atte: Enigma... La llanerita de Guayana :(
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Será por las interrupciones?
« Respuesta #12 en: 01 de Enero de 2008, 22:15:23 »
si si, lo de los transistores solo es para resguardar las espaldas a los negadores o al PIC :mrgreen:

segurolas que pasa eso con el INTRC?? porque yo siempre uso ese y no me ha dado problemas.

prueba con el modo depuracion, con el .COF en el proteus y checa donde esta el error para que sea mas facil resolver el problema
.

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: Será por las interrupciones?
« Respuesta #13 en: 01 de Enero de 2008, 23:05:43 »
Hola... si el INTRC es para eso... lo probe, y pues con el INTRC se me cambiaban los números solitos, como si contase... y le coloque el INTRC_IO y pues quedo muy bien...

Probe lo que me dijeron y pues de pana que es bien chevere, puedo los registros del pic, y observe algo... Cuando habilito las interrupciones, y provoco una por RBO, no se supone que el bit INT0F, del registro INTCON1 deberia irse a uno??? o es que lo hace tan rapido que no veo el cambio de 0 a 1 de ese bit.... Estoy observando el comportamiento de ese registro y pues no veo el cambio.

Ahora cuando deshabilito la interrupciones, y le doy al pulsador de RB0, pues se supone que si deshabilite todas las interrupciones pues no deberia cambiar el bit INT0F a 1 y pues si cambia, no entiendo esa reacción....

Atte: Enigma... La llanerita de Guayana :(
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Será por las interrupciones?
« Respuesta #14 en: 01 de Enero de 2008, 23:29:54 »
Citar
Cuando habilito las interrupciones, y provoco una por RBO, no se supone que el bit INT0F, del registro INTCON1 deberia irse a uno???
o es que lo hace tan rapido que no veo el cambio de 0 a 1 de ese bit.... Estoy observando el comportamiento de ese registro y pues no veo el cambio.
si te refieres al bit INT0IF, si (porque es el unico parecido con ese nombre que veo en ese registro)

talvez estas presionando algun boton equivocado, aunque no creo porque te das cuenta rapidamente de como funciona jeje :mrgreen:

yo uso:

el que esta marcado como 1º en la imagen, ya que ese va instrucción por instrucción
el que puse como 2do lo utilizo como breakpoint (en realidad es eso, jeje), en cualquier linea me posiciono y le doy click ahi, y se pone una bolita roja que indica que ahi se detendrá la ejecución del programa en modo PLAY, si clikeas otra vez la bolita solo se pone rojo en el borde, y nose para que servira, pues tb hace un breakpoint, y si haces click otra vez en la bolita (icono 2º) la bolita roja se borra
el tercero parece que hace lo mismo que el 1ro, y el 4to no lo uso pues es como darle play

entonces lo que hiciste es colocar un breakpoint en la primera instruccion de la rutina de interrupción?? para que se detenga justo ahi y veas ese bit?? porque si haces con pausas seguro que la ejecucion te gana :D

Citar
Ahora cuando deshabilito la interrupciones, y le doy al pulsador de RB0, pues se supone que si deshabilite todas las interrupciones pues no deberia cambiar el bit INT0F a 1 y pues si cambia, no entiendo esa reacción....
esta no entendi :(

pero como usas esta instruccion:
void deshatodas(void)
   {
      disable_interrupts(global);                     // Deshabilito todas las interrupciones
   }

el bit que deberia cambiar es GIE/GIEH, a cero si deshabilitas

bueno haber como va en la depuracion :mrgreen: suerte

un saludo
« Última modificación: 01 de Enero de 2008, 23:33:15 por Cryn »
.