TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: therionx en 10 de Abril de 2009, 03:47:22

Título: MODIFICAR LIBRERIAS EN PICC
Publicado por: therionx en 10 de Abril de 2009, 03:47:22
hola amigos soy nuevo en el foro, actualmente estaba programando un lcd grafico y teclado, me doy cuenta q al usar la libreria para estos dispositivos el teclado queda unido con el lcd, en el CCS, si alguno pudiera decirme como modificar la libreria kbd para q funcionase en otro puerto q no fuese el b o el d, tal vez el a mezclado con el c, se los agradeceria
Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: RedPic en 10 de Abril de 2009, 05:47:33
Si, therionx, aquí tienes un ejemplo de exactamente eso que tu planteas que hice modificando el original kbdd.c para adaptarlo a mi hardware en particular, mi kbd_lib.c: Una librería para rastrear un Teclado matricial 4x4 (http://picmania.garcia-cuervo.net/picc.php#KBDLIB)

Y lo mismo pero para usar el LCD en : Una librería para manejar un LCD con los Pines que deseemos: flex_lcd.c (http://picmania.garcia-cuervo.net/picc.php#FLEXLCD)

Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: therionx en 10 de Abril de 2009, 19:44:54
muchas gracias, la libreria q tienes esta modificada para el puerto b, s yo quisiera modificarla para los puertos A y C seria posible simplemente cambiando

#define COL0 (1 << 0) // PIN_B0
#define COL1 (1 << 1) // PIN_B1
#define COL2 (1 << 2) // PIN_B2
#define COL3 (1 << 3) // PIN_B3

#define ROW0 (1 << 4) // PIN_B4
#define ROW1 (1 << 5) // PIN_B5
#define ROW2 (1 << 6) // PIN_B6
#define ROW3 (1 << 7) // PIN_B7


?
Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: setshomaru en 10 de Abril de 2009, 19:57:44
hola therionx yo tambien tengo un teclado 4x4 conectados a diferentes pines del pic te dejo un ejemplo de mi codigo puedes modificarlo para lo que necesitas

//julian alvaran 25_03_09
//programa que escribe en una lcd lo que obtiene de una teclado matricial 4x4
//la interface de la lcd es de 4 bits
//
//conexion en ths2008
//
// teclado matricial 4x4
//
//          C0 C1 C2 C3
//       F0 [1][2][3][A]
//       F1 [4][5][6]
//       F2 [7][8][9][C]
//       F3
  • [0]
  • [D]

//
//       DESCRIPCION PINES TECLADO
//
//        C1  C2  C3  C4  F1  F2  F3  F4
//       RC1/RC2/RD0/RC0/RD1/RC5/RD3/RD2
//

///////////////////////////////////////////////////////////////////////////
//definimos tipo de pic, fuses, y clock////////////////////////////////////
///////////////////////////////////////////////////////////////////////////

#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)

//////////////////////////////////////////////////////////////////////////
//con estas librerias utilizamos los puertos como in o out////////////////
//////////////////////////////////////////////////////////////////////////

#use standard_io(b)
#use standard_io(c)
#use standard_io(d)

//////////////////////////////////////////////////////////////////////////
//libreria que controla la lcd dentro de esta se defines los pines////////
//del pic que controlaran la lcd//////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////

#include <flex_lcd.c>

//////////////////////////////////////////////////////////////////////////
//declaracion de constantes y variables///////////////////////////////////
/////////////////////////////////////////////////////////////////////////

int codigo_tecla[16]={1,2,3,'A',4,5,6,'B',7,8,9,'C','*',0,'#','D'};//distibucion de simbolos en teclado
                                                                   //se cambia segun distribucion en el mismo
                                                                   //empezando por cero codigo_tecla[0]=1
int  cont_tecla,i_col,i_fil;

//////////////////////////////////////////////////////////////////////////
//constantes utilizadas para manejo de lcd (opcional)/////////////////////
//////////////////////////////////////////////////////////////////////////

#define  sig         0x06
#define  clear       0x01
#define  cursor_no   0x0C
#define  lin1        0x85
#define  ren1        0x80
#define  ren2        0xC0

//////////////////////////////////////////////////////////////////////////
//declaro los pines utilizados para teclado///////////////////////////////
//////////////////////////////////////////////////////////////////////////

int  columna[4]   =  {pin_c1,pin_c2,pin_d0,pin_c0};//aqui se pueden cambiar los pines de las columnas
int  fila[4]      =  {pin_d1,pin_c5,pin_d3,pin_d2};//aqui se pueden cambiar los pines de las filas

//////////////////////////////////////////////////////////////////////////
//subrutina encargada de revisar las columnas y filas, para asignar un
//valor segun columna y fila testeada asigna el valor correspondiente
//////////////////////////////////////////////////////////////////////////


void key_press () {
 
   delay_ms(200); //retardo para evitar armonicos
   cont_tecla=0;  //borramos contador codigo_tecla
   i_col=0;       //borramos subid de columna este determina la col utilizada
   i_fil=0;       //borramos subid de fila este determina la fila utilizada
     
no_pulsa:         //si no hay tecla pulsada

      output_high(columna[i_col]);//enviamos alto a la col
     
      if (!input(fila[i_fil]))   //si es cero se pulsó una tecla(segun hardware) cambialo por if (input(fila[i_fil])) si
             // nesecitas testear un alto
         goto tecla_pulsada;     //vamos a tecla_pulsada si es cero
      output_low(columna[i_col]);//enviamos un bajo a la columna
      ++cont_tecla;  //incrementa contador de la tecla, determina el valor en codigo_tecla[cont_tecla]
      ++i_col;       //incrementa la col a revisar
      if (i_col==4){ //si se revisaron las 4 col incrementa la fila y volvemes a col cero
         i_col=0;
         ++i_fil;
      }
     
      if (i_fil==4){ //se se revisaron las 4 filas salimos de subrutina
         return;
      }
     
      goto no_pulsa; //si no se an revisado las 4 col y 4 filas volvemos a no pulsa
     
   
tecla_pulsada: //si se pulsa tecla
   
   if (codigo_tecla[cont_tecla]<10){   //si es un #
      printf(lcd_putc,"%u",codigo_tecla[cont_tecla]);//"%u"para visualizar enteros delo contrario veremos el ascii
      output_low(columna[i_col]);      //bajo para limpiar puerto
      return;
   }
   printf(lcd_putc,"%c",codigo_tecla[cont_tecla]);//"%c" para visualizar caracteres
   output_low(columna[i_col]);//bajo para limpiar puerto
       
}

void main() {
 
   lcd_init();       //inicializa lcd
   lcd_gotoxy(1,1);  //empieza en la 1ra pos de la 1er fila
 
   do {
     
      key_press ();  //bucle infinito para revisar el teclado
     
   } while (TRUE);
}


Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: setshomaru en 10 de Abril de 2009, 20:00:02
lo que hago es enviar altos por cada columna a unos transistores si hay una tecla pulsada llegara un bajo en alguna de las filas
Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: therionx en 14 de Abril de 2009, 23:33:43
hmm si mas sencillo de loq pensaba  :-/

me preguntaba si alguno de ustedes tendira la libreria del ds 1307 seria interesante, vincularlo
Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: RedPic en 15 de Abril de 2009, 02:41:43
Parece que vas recorriendo el mismo camino que yo.  :mrgreen:

Ahí tienes Real Time Clock o el DS1307 desatado (http://www.todopic.com.ar/foros/index.php?topic=13282.0)
Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: setshomaru en 17 de Abril de 2009, 12:05:26
aqui tienes otra libreria del ds1307, y la libreria completa del teclado para que cambies los pines a tu antojo
Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: setshomaru en 17 de Abril de 2009, 12:08:53
alguna duda o sugerencia por favor. Otra cosa aprovecho para dar gracias al gran maestro redpic casi todo lo que se de lenguaje c 
lo aprendi de ti excelente programador, que excelente pagina. espero segir tus pasos
Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: rodrigo_control2009 en 19 de Abril de 2009, 19:57:36
aqui tienes otra libreria del ds1307, y la libreria completa del teclado para que cambies los pines a tu antojo
hola  la  libreria  para  el  teclado  4*4   es  para  el  de  tipo  membra   y   para  el  tipo  que  use   alimentacion  y  q  incluye   las  resistencias  pull_ups ?????
Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: setshomaru en 20 de Abril de 2009, 14:38:02
solo es un teclado matricial de 4x4, su configuracion de pines es : c1,c2,c3,c4,f1,f2,f3,f4 no nesecita alimentacion y no tiene pullups internas, pero deberia funcionar para cualquier tipo de teclado 4x4, es solo configurar los pines que vas a utilizar, si inicialmente mandas altos o bajos y que esperas recibir, por defecto manda altos y espero bajos.
Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: therionx en 23 de Abril de 2009, 21:22:33
cierto muchas gracias jejeje usando un 18f4550  ya logre sacareesto aunq tuve q programar todo XD, desde el ds hasta el teclado pero bueno, seria interesante postear este ejemplo ps usa lcd grafica el ds el teclado y un pin de alarma
Título: Re: MODIFICAR LIBRERIAS EN PICC
Publicado por: setshomaru en 24 de Abril de 2009, 14:33:26
postealo, compartelo, por favor
Título: Re:MODIFICAR LIBRERIAS EN PICC
Publicado por: irwing en 09 de Octubre de 2022, 22:05:58
hola que tal  una pregunta y para la creación de un teclado matricial de 5x4 como seria?
Título: Re:MODIFICAR LIBRERIAS EN PICC
Publicado por: DominusDRR en 09 de Octubre de 2022, 22:16:27
hola que tal  una pregunta y para la creación de un teclado matricial de 5x4 como seria?

Suponiendo que ese código funciona, debes cambiar uno de los siguientes arreglos a 5.

Código: C
  1. int  columna[4]   =  {pin_c1,pin_c2,pin_d0,pin_c0};//aquí se pueden cambiar los pines de las columnas
  2. int  fila[4]      =  {pin_d1,pin_c5,pin_d3,pin_d2};//aqui se pueden cambiar los pines de las filas

Por ejemplo podría ser así:

Código: C
  1. int  columna[5]   =  {pin_c1,pin_c2,pin_d0,pin_c0,pin_X};//pin_X es el nuevo terminal
  2. int  fila[4]      =  {pin_d1,pin_c5,pin_d3,pin_d2};//aqui se pueden cambiar los pines de las filas

Y donde verificas el índice máximo del vector columnas igual a 4.

Código: C
  1. if (i_col==4){ //si se revisaron las 4 col incrementa la fila y volvemes a col cero
  2.          i_col=0;
  3.          ++i_fil;
  4.       }

Deberías verificarlo que sea igual a 5.

Código: C
  1. if (0x05 == i_col) //si se revisaron las 5 col incrementa la fila y volvemos a col cero
  2. {          i_col=0;
  3.          ++i_fil;
  4. }
Título: Re:MODIFICAR LIBRERIAS EN PICC
Publicado por: AleSergi en 09 de Octubre de 2022, 22:35:59

(no te estás esforzamdo mucho... eh?)