Autor Tema: Modulo Teclado 4x4 - bus expan PCF8574 - Interrupciones - Proteus - CCS  (Leído 7581 veces)

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

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Hola a todos,

Segun titula el mensaje pretendo, desde hace semanas crear un módulo, para poder usar dicho módulo con cualquier proyecto.

Consiste en adaptar un teclado matricial de 4x4 para su posterior uso en un bus i2c mediante un PCF8574x.

El circuito es muy simple, consta de un  teclado matricial de los que venden de 16 teclas,
un chip expansor de bus i2c PCF8574A(addr 0111xxxx) y 4 resistencias de 330R.

La configuración es sencilla al chip expansor le pongo la direccion 1 ya que en la direcion 0 tengo el Lcd.

La idea es :
el pic esta en sus cosas y cuando pulsamos un tecla cualquiera en el teclado recogemos la atención del pic (interrupcion porb) nos lee la tecla pulsada y nos la muestra por el lcd,  y el pic sigue  con lo que estaba haciendo, si vuelvo a pulsar la operacion se repite, de momento me conformo con que me lea la tecla pulsada.  

El problema llega cuando tengo que chequear el teclado he probado y adaptado muchos de los drivers de este foro, a mis necesidades la mayoria conectan el teclado directamente al puerto del pic, en otros hilos usan la interrupcion
por cambio de estado del puerto b, otros le ponen resistencias para utilizar un solo pin, otros pone un pic con el teclado y otro pic con el lcd, otros usan el mismo puerto para leer el teclado que para mostrar por el lcd .

No consigo comprender como lo hacen lo de chequear tecla y lo de la mascara que usan de 0bxxxx1110.
Si tenemos la mitad del puerto del PCF8574 como entrada y la lotra mitad como salida con sus correspondientes resistencias para evitar el cortocircuito, cuando pulsemos tecla como sabemos en esa linea que boton se pulso.


Tambien he consultado el libro del pic16F84A, en la seccion del teclado matricial y el expansor PCF8574 toda informacion en esta en asm, esta muy bien explicado pero aun no con segui solucion.

Tambien consulte otros foros, web, blog , (cursosmicros me gusto..) pero aun no di con la solución.

Estoy programando en C con el entorno de CCS, las simulaciones con proteus vesion 7.2

- Alguien conoce de una libreria preparada para  tal fin.
- Alguien podria explicarme como lo consiguio el o podria indicarme un enlace (no en asm) .


Un cordial Saludo a todos.
Gracias por su tiempo.


« Última modificación: 01 de Febrero de 2011, 23:55:55 por pajaro »

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: Modulo Teclado 4x4 - bus expan PCF8574 - Interrupciones - Proteus - CCS
« Respuesta #1 en: 01 de Febrero de 2011, 23:46:29 »

Hola a todos,

.....




Hola amigos,
despues del primier asalto con el tema del asunto teclado expansor i2c y salir casi cao.

Me he propuesto aplicar el divide y venceras, asi que manos a la obra.

1.- Problema encontrado.

Necesito un modulo de pulsadores que me consuman pocas pines en mis proyectos .

2.- Posible solución.

utilizar un teclado matricial de 4x4, el famoso keypad.
Con esta solucion solo gasto 8 pines y dispongo de 16 teclas,
pero si lo quiero usar con pic de pocas patas .
me quedo sin pines.

3.- Mejorar la solucion.

A este teclado conectarlo a un bus, yo elijo el bus i2c, para ello utilizamos un chip
que nos expande el bus, existen algunos como  PCF8574, PCF8574A, PCA9554, PCA9554A,
seguro que hay otros.

yo en mi caso usare el PCF8574x, es elque tengo a mano.

Con este chip he reducido el numero de pines, el del bus i2c 2 pines y el de interrupcion
 en total 3 pines si le sumamos la vcc y la masa son 5 pines no esta mal.

de cara al pic seria usar el bus i2c y la interrupcion.

4.- Puesta en practica

Con el proteus colocamos un teclado 4x4 , un bus expansor de i2c( PCF8574A) y un pic el 16f877A.

5.- Configuracion del circuito.

el expansor lo pondremos de formar que 4 pines sean de entrada y los otros 4 salida entre medio
pondremos los pulsadores.Para evitar que se contocircuiten las entradas con las salidas
colocaremos resistencias en la mitad del puerto su valor sera de 330 ohmios.

ahora en el pic pondremos la pata de la interupcion externa con la del bus expansor.
El pin del pic lo configuraremos como entrada de interupcion externa.

6.- Primera prueba:
Probar que el pic responde a la interupcion externa.
en el puerto d4y d3 le coloaremos dos led.
el pin de interupcion le colocamos una resistencia y
lo podemos poner a un estado alto a bajo, en este caso lo ponemos a alto.

      1.- pulsaremos a la simulacion de proteus.
      2.- se ve el led de PIN_D3 encendido y el estado de la interrupcion en rojo
      3.- pulsamos  sobre el boton P4 para producir cambio de estado.
      4.- se apagara el del de PIN_d3 y se encendera el led pin_d2      
      5.- Despuesde un tiempo sea pagara el led de pin_d2 y se encendera pin_D3

7.- codigo del programa

Código: CSS
  1. #include <16F877A.h>
  2. #device adc=8
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  6. #FUSES NOPUT                    //No Power Up Timer
  7. #FUSES NOPROTECT                //Code not protected from reading
  8. #FUSES NODEBUG                  //No Debug mode for ICD
  9. #FUSES NOBROWNOUT               //No brownout reset
  10. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  11. #FUSES NOCPD                    //No EE protection
  12. #FUSES NOWRT                    //Program memory not write protected
  13. #FUSES RESERVED                 //Used to set the reserved FUSE bits
  14.  
  15. #use delay(clock=20000000)
  16. #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
  17. #use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)
  18.  
  19. // si se produce interrupcion hara...
  20. #int_EXT
  21. void  EXT_isr(void){
  22.   output_low(PIN_D3);    //apago led
  23.   output_high(PIN_D2);   //enciendo led
  24.   delay_ms(2000);
  25.   output_low(PIN_D2);    //apago led
  26.   output_high(PIN_D3);  //enciendo led
  27.  
  28. }
  29.  
  30.  
  31.  
  32. void main()
  33. {
  34.  
  35.    
  36.    set_tris_b(0b00000001);   //configuramos pin_b0 como entrada
  37.  
  38.    output_high(PIN_D3);
  39.    enable_interrupts(INT_EXT);
  40.    enable_interrupts(GLOBAL);
  41.    
  42.    printf("\r hola"); //por terminalvirtualnos mostrara hola
  43.  
  44.    while(true){  //se metera en un bucle del que lo sacara la interupción
  45.        
  46.    }
  47.  
  48.  
  49.  
  50. }
« Última modificación: 02 de Febrero de 2011, 00:00:50 por pajaro »

Desconectado Lobo_Azul

  • PIC10
  • *
  • Mensajes: 29
Re: Modulo Teclado 4x4 - bus expan PCF8574 - Interrupciones - Proteus - CCS
« Respuesta #2 en: 18 de Mayo de 2011, 23:52:03 »
         Orale, esta chido lo que explicas pajaro, al parecer no es tan dificil manejar interrupciones, solo tengo unas dudas, en este caso: ¿digamos que activas la interrupcion con:

enable_interrupts(INT_EXT);
 enable_interrupts(GLOBAL);

ese codigo?

y la otra, por lo que veo, tu funcion de interrupcion es:

void  EXT_isr(void){
 output_low(PIN_D3);    //apago led 
output_high(PIN_D2);   //enciendo led 
delay_ms(2000); 
output_low(PIN_D2);    //apago led
  output_high(PIN_D3);  //enciendo led
}

donde dentro contiene el codigo a realizar, en este caso mi pregunta es: ¿es necesario ponerle ese nombre a la interrupcion, o se puede declarar el nombre como sea? y otra, ¿como sabes en CCS cuales son los pines que aceptan interrupciones? ¿o donde se ve eso? o ¿a caso cada pin de interrupcion tiene un nombre especifico por el que se deberia llamar?, y bueno, gracias por tu ayuda, espero me puedas aclarar estas dudas :D .



Desconectado Lobo_Azul

  • PIC10
  • *
  • Mensajes: 29
Re: Modulo Teclado 4x4 - bus expan PCF8574 - Interrupciones - Proteus - CCS
« Respuesta #3 en: 19 de Mayo de 2011, 00:08:08 »
Oye y otra pregunta..... con poner:

enable_interrupts(INT_EXT);
 enable_interrupts(GLOBAL);

se habilita la interrupcion???

¿ya no importa que parte de codigo este ejecutando el micro en ese momento, y despues de eso si regresa a la linea de codigo que dejo pendiente el micro?

Gracias de nuevo.

Desconectado Cristobal Nicolas

  • PIC10
  • *
  • Mensajes: 3
Re:Modulo Teclado 4x4 - bus expan PCF8574 - Interrupciones - Proteus - CCS
« Respuesta #4 en: 29 de Mayo de 2018, 00:34:14 »
hola qué tal
se ha encontrado alguna respuesta al tema?
yo encontré esto
pero no se si está bien
 no logro entender 100% el código ....

http://www.instructables.com/id/I2C-keypad/

saludos, gracias

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Modulo Teclado 4x4 - bus expan PCF8574 - Interrupciones - Proteus - CCS
« Respuesta #5 en: 29 de Mayo de 2018, 10:37:41 »
no logro entender 100% el código ....

Ese codigo esta realizado para XC8, no CCS como este link, ademas buscan hacerlo por interrupciones y ese codigo esta realizado esperando que se termine de enviar y no por interrupcion.

Desconectado Thulsa Doom

  • PIC24F
  • *****
  • Mensajes: 805
    • https://electronicadicto.wordpress.com/
Re:Modulo Teclado 4x4 - bus expan PCF8574 - Interrupciones - Proteus - CCS
« Respuesta #6 en: 29 de Mayo de 2018, 20:34:10 »
Hola, eso que quieren lo he implementado hace tiempo y me hice un manual para manejarlo, espero les sirva, esta en C18
Teclado 4×3 con el expansor PCA9838
Más códigos y desarrollos en https://electronicadicto.wordpress.com/ date una vuelta y curiosea un rato...