TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pantera en 08 de Octubre de 2006, 21:07:02

Título: Interrupcion en puetoB B4-B7. teclado matricial
Publicado por: pantera en 08 de Octubre de 2006, 21:07:02
Hola tengo un pequeño problema con la interrupcion externa,  me detecta los dos bordes  o nose bien cual podria ser mi problema.

el codigo de  la interrupcion es:

Código: Matlab M
  1. #int_RB
  2. RB_isr(){
  3.         lcd_gotoxy(1,1);
  4.         printf(lcd_putc,"Contador %LU    ",ContB++);
  5.        
  6.         tecla=PUERTOB;
  7.      set_tris_b(0b00000000);                    // Inicializacion del Teclado
  8.         switch (tecla) {
  9.           case 0xEE : tecla=15;         break;
  10.           case 0xED : tecla=9;               break;
  11.           case 0xEB : tecla=8;          break;
  12.           case 0xE7 : tecla=7;          break;
  13.  
  14.           case 0xDE : tecla=14;         break;
  15.           case 0xDD : tecla=6;          break;
  16.           case 0xDB : tecla=5;          break;
  17.           case 0xD7 : tecla=4;          break;
  18.  
  19.           case 0xBE : tecla=13;         break;
  20.           case 0xBD : tecla=3;          break;
  21.           case 0xBB : tecla=2;          break;
  22.           case 0xB7 : tecla=1;          break;
  23.  
  24.  
  25.           case 0x7E : tecla=12;         break;
  26.           case 0x7D : tecla=11;         break;
  27.           case 0x7B : tecla=10;         break;
  28.           case 0x77 : tecla=0;             break;
  29.           default: tecla=16 ;      break; }
  30.  
  31.         if (tecla!=16){
  32.         lcd_gotoxy(1,2);
  33.         printf(lcd_putc,"Tecla: %u B: %u     ",TECLA,PUERTOB);
  34.      BEEP=0;
  35.         }
  36.     set_tris_b(0b11110000);                     // Inicializacion del Teclado
  37. }

El problema es que cada vez que presiono un boton se surge dos veces la interrpcion.  Pero creo que eso no deberia de ser.


y la creacion de la interrpcion es:
Código: Matlab M
  1. void inicializar(){
  2.    lcd_init();
  3.  
  4.    set_tris_b(0b11110000);                      // Inicializacion del Teclado
  5.    port_b_pullups(TRUE);
  6.    LSB=0b11111110;
  7.    PUERTOB=LSB;
  8.  
  9.    setup_adc_ports(AN0|VSS_VDD);                // Inicializacion del ADC
  10.    setup_adc(ADC_CLOCK_DIV_8);
  11.    set_adc_channel( 0 );
  12.    
  13.    setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);
  14.    setup_timer_3(T3_INTERNAL|T3_DIV_BY_8);
  15.  
  16.    enable_interrupts(INT_TIMER1);
  17.    enable_interrupts(INT_TIMER3);
  18.  
  19.    enable_interrupts(INT_RB);
  20.    EXT_INT_EDGE(1,H_TO_L);
  21.    port_b_pullups(TRUE);
  22.    
  23.    enable_interrupts(GLOBAL);
  24.  
  25. }
Título: Re: Interrupcion en puetoB B4-B7. teclado matricial
Publicado por: pantera en 09 de Octubre de 2006, 00:24:46
Hola ya resolvi mi problema era cosa de nada pero esta bien.

Tenia que salvar de nuevo la variable, para preguntar mas adelante si continua presionada.

Código: Matlab M
  1. #int_RB
  2. RB_isr(){
  3.  
  4.         tecla=PUERTOB;
  5.         tecla1=PUERTOB;
  6.         switch (tecla) {
  7.           case 0xEE : tecla=15;         break;
  8.           case 0xED : tecla=9;               break;
  9.           case 0xEB : tecla=8;          break;
  10.           case 0xE7 : tecla=7;          break;
  11.           case 0xDE : tecla=14;         break;
  12.           case 0xDD : tecla=6;          break;
  13.           case 0xDB : tecla=5;          break;
  14.           case 0xD7 : tecla=4;          break;
  15.           case 0xBE : tecla=13;         break;
  16.           case 0xBD : tecla=3;          break;
  17.           case 0xBB : tecla=2;          break;
  18.           case 0xB7 : tecla=1;          break;
  19.           case 0x7E : tecla=12;         break;
  20.           case 0x7D : tecla=11;         break;
  21.           case 0x7B : tecla=10;         break;
  22.           case 0x77 : tecla=0;          break;
  23.           default       : tecla=16 ;            break; }
  24.  
  25.         if (tecla!=16){
  26.         lcd_gotoxy(1,2);
  27.         printf(lcd_putc,"Tecla: %u          ",TECLA);
  28.         while(tecla1==PUERTOB)
  29.      BEEP=1;
  30.         BEEP=0;
  31.         }
Título: Re: Interrupcion en puetoB B4-B7. teclado matricial
Publicado por: pantera en 09 de Octubre de 2006, 03:08:59
Hola como ya estuvo bien todo doy por cerrado el tema.
Título: Re: Interrupcion en puetoB B4-B7. teclado matricial
Publicado por: pantera en 09 de Octubre de 2006, 03:25:54
jeee creo que ya dedo de dormir un rato

bye
Título: Re: Interrupcion en puetoB B4-B7. teclado matricial
Publicado por: santipic_9 en 09 de Octubre de 2006, 19:15:32
Hola  a todos.
Hola Pantera podrías poner, por favor, el esquema de conexión del teclado con el pic.
Muchas gracias.
Saludos
Título: Re: Interrupcion en puetoB B4-B7. teclado matricial
Publicado por: pantera en 15 de Octubre de 2006, 01:43:03
Disculpa la tardanza.
A qui dejo anexado el teclado matricial.

Es para protel DXP

Título: Re: Interrupcion en puetoB B4-B7. teclado matricial
Publicado por: pantera en 15 de Octubre de 2006, 01:44:33

Espero les ayude ahorrar algo de tiempo

DXP

Saludos
Título: Re: Interrupcion en puetoB B4-B7. teclado matricial
Publicado por: santipic_9 en 15 de Octubre de 2006, 16:26:32
Hola a todos.
Muchas gracias Pantera voy a hacer unas prácticas con tu ejemplo.

Saludos desde A Coruña, España
Título: Re: Interrupcion en puetoB B4-B7. teclado matricial
Publicado por: pantera en 15 de Octubre de 2006, 17:00:27
Gracias
saludos y suerte en tu proyecto