Autor Tema: Problema con la interrupcion RB  (Leído 2617 veces)

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

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
Problema con la interrupcion RB
« en: 13 de Mayo de 2005, 09:29:00 »
Despues de estar trasteando con la libreria del teclado y hacerla conseguir andar mediante "poleo", quise probar con interrupción, pero al ver que no iba me puse a probar la interrupción y lo que ocurre es bastante estraño. Sin haber nada externo, salta a la interrupcion una y otra vez sin parar. No soi capaz de encontrarle explicacion puesto que hice el programa anteriormente en ASM y no tube problemas.

Codigo:

  unsigned int k=1;

  #int_rb // Interupcion cambio de estado RB4:7
  void control_rb() {
   printf(lcd_putc, "%d
", k);
   k=++k;
   delay_ms(1000); }

  void main() {
   lcd_init();
   port_b_pullups(TRUE);
   //kbd_init();
   printf(lcd_putc, "fPreparado (int_RB)
"Giño;
   delay_ms(1500);
   printf(lcd_putc, "f"Giño;
   enable_interrupts(int_rb);
   enable_interrupts(global);
   sleep(); }

Si juegas contra el mejor, pierdes como los demás.

Desconectado T0ni0

  • PIC16
  • ***
  • Mensajes: 196
RE: Problema con la interrupcion RB
« Respuesta #1 en: 13 de Mayo de 2005, 11:14:00 »
Mira de borrar la interrupcion antes de salir

clear_interrupt(int_rb);

o desactivarlas mientras estas en ella

o

quizas sea por los rebotes, por lo que seria aconsejable poner un pequeño retarno antes de salir de la interrupcion

a mi me paso y era por los rebotes aunque era en RB0
- T0ni0 -
30RCF112

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: Problema con la interrupcion RB
« Respuesta #2 en: 14 de Mayo de 2005, 09:02:00 »
Cambia la subrutina de interrupción como te indico a continuación.


 
Codigo:
#int_rb // Interupcion cambio de estado RB4:7
  void control_rb()
 {
   char auxiliar;

   printf(lcd_putc, "%d
", k);
   k=++k;
   delay_ms(1000);
  auxiliar = input_B();
   output_B(auxiliar);

 }


Pruebalo, y cuentame como te ha ido.

Salu2

Adrian.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Problema con la interrupcion RB
« Respuesta #3 en: 17 de Mayo de 2005, 10:18:00 »
A T0ni0, decirle que probe con ponerle un pequeño delay (100 ms), y parece que va. Pero al complicarle el codigo, por ejemplo para detectar la tecla del teclado matricial empieza a hacer el payaso. En cuanto a limpiar y desactivar las interrupciones cuando entra en una, ¿no lo hacia ya el compilador?

A adrian2a1, pedirle que me explique el codigo que posteo (soi novato) y por mas que lo miro no lo acabo de entender del porque.

Lo que siempre ocurre es entrar al menos la primera vez en la interrupcion sin que haya ocurrido el cambio de estado en r4:7. Me da la sensacion que el compilador no va lo fino que deberia ... loco

Gracias a los 2 y a todos los que me estais ayudando, aver si puedo controlar esto. Si alguien ha pasado por la misma experiencia que yo, por favor que me postee posibles soluciones Angelito
Si juegas contra el mejor, pierdes como los demás.

Desconectado badtzdizzy

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 234
RE: Problema con la interrupcion RB
« Respuesta #4 en: 17 de Mayo de 2005, 12:45:00 »
Hola

Mira, un amigo tuvo un problema similar y lo que hace es testear el cambio en el pin pero solo de alto a bajo o al revés, ya que como es cambio de estado al pulsar un botón pues te interpretará ambos cambios de estado y dependiendo del tiempo que tarde en ejecutarse la función de interrupción pues puede llegar a darse el caso de que al pulsar se llame a la función y al soltar el botón también lo haga.

Checa este post, tal vez te ayude:

http://miarroba.com/foros/ver.php?foroid=46840&temaid=2690669

Saludos

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: Problema con la interrupcion RB
« Respuesta #5 en: 17 de Mayo de 2005, 15:41:00 »
radon, ¿has probado el código que te dejé?.
¿Donde tienes conectada el LCD?, ¿qué esquemas estás utilizando?.

Pruebalo y después te explico que te está pasando en detalle ya que es largo y no quiero soltarte la parrafada sin comprobar antes ver si es cierta mi hipótesis.

Saludos.

Adrian.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Problema con la interrupcion RB
« Respuesta #6 en: 18 de Mayo de 2005, 11:03:00 »
Acabo de probarlo, y parece que si que va, aunque a veces al encenderlo entra 1 vez si que haya ocurrido nada y reseteando el PIC se corrije ... El lcd esta conectado al puerto D (es un 16f877) con la libreria de CCS modificada conforme a mi distribucion de pines a 4 bits.

Permanezco impaciente que para saber que hace el codigo que me posteastes y a que se debe la entrada de la 1ª vez a la interrupcion Fumador
Si juegas contra el mejor, pierdes como los demás.

Desconectado adrian2a1

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 75
RE: Problema con la interrupcion RB
« Respuesta #7 en: 18 de Mayo de 2005, 17:01:00 »
Si quieres evitar que interrumpa la primera vez que se ejecuta el programa , debes repetir las líneas que te puse en rojo también en el programa principal, antes de habilitar las interrupciones.

¿LCD conectada al Puerto D?.

Saludos.

Adrian.

Desconectado RaDoN

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1498
RE: Problema con la interrupcion RB
« Respuesta #8 en: 20 de Mayo de 2005, 13:09:00 »
Si la LCD esta conectada al puerto D del 877:
 
*D0 --> RS
*D1 --> RW
*D2 --> E

*D4:7 -> RD4:7

Podrias explicarme el porque de tu codigo, soi nuevo en esto de C y no lo comprendo como funciona, muchas gracias.
Si juegas contra el mejor, pierdes como los demás.