Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

24/11/2010 #141

Avatar de kiws

es preferible utilizar un micro controlador ya que es mas practico no digo que sea la única forma pero si es parte de un proyecto es preferible enfocarte el lo esencial que traumarte queriendo hacerlo con electrónica pura, yo hice un programa para un teclado matricial 4x3 con el pic 16f28a si lo ocupas te lo mando.
Suerte!!!
17/12/2010 #142


ya sabes si tu PICC cuenta con dicha libreria.????

En tu diagrama estas mal el LCD va en el puerto D porque la libreria esta por defult asi, a menos que la modifiques y peges el codigo, ademas te faltan muchos elementos.
22/12/2010 #143

Avatar de felicris

yohis960 espero que esto te sirva

yo hice algo similar a lo que tu estas haciendo, el programa que hice solicita la clave mostrando el display lcd la solicitud de los 4 numeros 7342 aunque si tu quieres se puede cambiar.... si la clave se ingresa mal con 3 intentos el programa se bloquea.... si la clave esta correcta lee 2 conversores analogos digitales y los muestra en display lcd....

saludos
Archivos Adjuntos
Tipo de Archivo: rar robotica.rar (17,3 KB (Kilobytes), 851 visitas)
22/12/2010 #144


Duda LCD con teclado matricial 3X4 con PIC16F876
Hola

Quisiera saber si me pueden ayudar con mi programa que tiene que leer un carácter del teclado matricial y después desplegarlo en la LCD.

Quiero utilizar un mismo puerto del pic, en este caso el B.

Adjunto el circuito en Proteus.

El código es el siguiente:

Código:
#include <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock= 4000000)        

#define use_portb_kbd TRUE 

#include <lcd.c>
#include <kbd.c>
        

void main() {
   char k; 
   int  x;
          
   lcd_init(); 
   kbd_init();
   port_b_pullups(TRUE); 

   lcd_putc("\fListo...\n");
                                    
   while (TRUE) {
      k=kbd_getc(); 
      x=k-48;                             //Conversión numérica
      if(k!=0){
        if(k=='*')  
          lcd_putc('\f'); 
        else
           lcd_putc(k);             //Imprime carácter
           delay_ms(500);
           
           
           printf(lcd_putc,"\f Car=%c",k); //Imprime carácter
           delay_ms(500);
           
           
           printf(lcd_putc,"\f Car=%u",k); //Imprime valor ASCII       
           delay_ms(500);
           
           
           printf(lcd_putc,"\f Num=%u",x); //Imprime valor numérico
           delay_ms(500);
           lcd_putc("\fListo...\n");
      }
   }
}
Imágenes Adjuntas
Tipo de Archivo: png Untitled.png (252,2 KB (Kilobytes), 92 visitas)
31/12/2010 #145


Ayuda
Hola a todos estoy realizando un control de temperatura donde es necesario que el set-point se ingrese por un teclado matricial 4x3 ya tengo la simulación en proteus y efectivamente muestra la tecla q uno presiona en la LCD, pero al montar el circuito las teclas 1-2-6-9 no funcionan las demas funcionan pero muestran numeros errados es decir si oprimo el 4 muestra 6 la verdad no se que hacer para que me funcione adjunto la simulacion y el codigo.


Código:
#include "main.h"
#include "LCD.C"
#include "kbd_lib.c"
int i=1,k;

void main()
{
 // port_b_pullups(TRUE);
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);

lcd_init();

    lcd_gotoxy(1,1); //pos 1 de la fila 1
    lcd_putc("teclas");
    lcd_gotoxy(1,2);

kbd_init();

while(1){

           k=kbd_getc();
    
                if(k!=0)
                       {
                    
                        output_toggle(PIN_C0);
                          lcd_gotoxy(i,2);//posicion i de la 2da linea
                          lcd_putc(k);
                        
                    i++;    
                    }
    
    
}


}
Imágenes Adjuntas
Tipo de Archivo: jpg conexion.JPG (247,4 KB (Kilobytes), 255 visitas)
08/01/2011 #146


Lvcios dijo: Ver Mensaje
Hola, ya pude resolver el problema.
La libreria kbd.c viene por defecto para trabajar con el puerto D, si queremos trabajar con algun otro puerto debemos editarla:

Esta es la parte que debemos editar, por defecto viene comentada la linea del define use_portb_kbd TRUE, debemos "descomentarla" para que el teclado sea administrado por el puerto b.
Código:
// Un-comment the following define to use port B
#define use_portb_kbd TRUE
Posteriormente viene en la librera el orden en que se deben conectar los pines del teclado matricial:
Código:
#ifdef blue_keypad  ///////////////////////////////////// For the blue keypad
#define COL0 (1 << 2)
#define COL1 (1 << 3)
#define COL2 (1 << 6)

#define ROW0 (1 << 4)
#define ROW1 (1 << 7)
#define ROW2 (1 << 1)
#define ROW3 (1 << 5)

#else ////////////////////////////////////////////////// For the black keypad
#define COL0 (1 << 0)
#define COL1 (1 << 1)
#define COL2 (1 << 2)

#define ROW0 (1 << 4)
#define ROW1 (1 << 5)
#define ROW2 (1 << 6)
#define ROW3 (1 << 7)
La libreria por defecto trabaja con el orden del black key pad, si queremos trabajar con el blue key pad debemos añadir al principio de la libreria la linea "#define blue_keypad TRUE".
Los pines para las columnas del black key pad serian el 0,1,2 y para los reenglones seria 4,5,6,7.

Este es un código sencillo que imprime en el lcd todo lo que pulsas en el teclado.

Código:
#include <18f4550.h>
#include <18f4550.h>
#use delay(clock=48000000)
#include <KBD_PTOB.c> //windows 7 no dejó editar la libreria, por eso cree otra idéntica pero  para trabajar con el puerto b y la copié en la carpeta "Drivers" del compilador
#include <lcd.c>
#fuses XTPLL,NOMCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG
char k; //caracter que será leido
void main(void)
{
   lcd_init();
   kbd_init();
   port_b_pullups(TRUE); 
   while(true){
   k=kbd_getc();//para cachar lo que se pulse o no se pulse en el teclado
   if(k!=0){ //esta instrucción verifica si se ha pulsado una tecla      
      printf(lcd_putc,"%c",k);
      }
   }
}
Adjuntaria el código de la libreria pero seria poner en bandeja de plata el programa y no aprenderian nada y recordemos que aprender es el objetivo de esta comunidad xD.

Así queda finalmente el esquema:


Lo que deseen hacer ya depende de ustedes. Yo hice una cerradura electrónica comprendiendo solo el código que les proporciono y tomando en cuenta algunas propiedades de la pantalla LCD.

Dudas y aclaraciones por aquí, en cuanto tenga tiempo responderé.

Saludos.



Alguien sabe por que muchas personas tenemos el mismo problema con esta libreria???.......tampoco puedo usar el teclado.......ya le movi a todo lo que se le tiene que hacer a la libreria y nada......podrian ayudarme?.

Gracias!
08/01/2011 #147


Hola!
Podrias decirnos cual es el pic que esas usando, proporcionar un diagrama de conexiones o incluso el código para decirte en que parte te estas equivocando. Suerte!
10/01/2011 #148


Lvcios dijo: Ver Mensaje
Hola!
Podrias decirnos cual es el pic que esas usando, proporcionar un diagrama de conexiones o incluso el código para decirte en que parte te estas equivocando. Suerte!
Si claro, es el 16f887 o el 16f877......que lo unico que cambia es el oscilador interno.

Aun continuo con el problema, no se que pase con la libreria o con esa familia de pics y la libreria o el proteus, que se yo. Pronto armare el circuito para ver si es la simulacion y pasar el dato, pero mientras podrian ayudarme. Gracias!
21/01/2011 #149


gracias dpancheins. hace un tiempo que quiero saber cómo se hace para leer del teclado. Saludos
29/01/2011 #150

Avatar de gmua

juandamendez dijo: Ver Mensaje
Hola a todos estoy realizando un control de temperatura donde es necesario que el set-point se ingrese por un teclado matricial 4x3 ya tengo la simulación en proteus y efectivamente muestra la tecla q uno presiona en la LCD, pero al montar el circuito las teclas 1-2-6-9 no funcionan las demas funcionan pero muestran numeros errados es decir si oprimo el 4 muestra 6 la verdad no se que hacer para que me funcione...
Puede que esté mal conectado tu teclado, la conexión correcta está definida en el archivo <kbd.c> (no conozco la configuración que se utiliza en kbd_lib.c).

#define COL0 (1 << 5)
#define COL1 (1 << 6)
#define COL2 (1 << 7)

#define ROW0 (1 << 1)
#define ROW1 (1 << 2)
#define ROW2 (1 << 3)
#define ROW3 (1 << 4)

Saludos.

nachoacos dijo: Ver Mensaje
Necesito algo de ayuda con un la librería KBD.C de pic-c, el asunto es el siguiente:

Lo único que quiero hacer es mostrar por un puerto un valor y exhibirlo por un display 7 segmentos, el valor exhibido depende de la tecla que se oprima, uso un pic18f452.

El problema es que parece que esta funcionando el teclado, lo simulo en proteus y no funciona...
Armé tu circuito en el Proteus, agregué una linea a tu código y funcionó:

#use fast_io(c)
#define use_portb_kbd TRUE
#include <KBD.C>

Saludos y ojalá te sirva.
23/02/2011 #151


Alguien podria decirme si en el ORCAD se encuentro el componente de teclado matricial? o hay que crearlo? un saludo y gracias por adelantado. Si pudieran aconsejarme algun programa de simulación para circuitos digitales se lo agradeceria. Gracias
23/02/2011 #152
Excluido


Dudo que encuentres el teclado matricial para el orcad, pero en el multisim, una vez hice una matriz de switches (cochinero de conexiones de por medio) para simularlo.
23/02/2011 #153

Avatar de Scooter

Pones un conector de 8 pines y listo.
17/03/2011 #154

Avatar de Darzeck

Teclado Matricial a BDC con LCD
Lineal.
Me encuentro diseñando un teclado lineal y/o de matriz con retencion de datos.
A consecuencia de la descontinuacion del 74147 me veo obligado a realizar un teclado de matriz.

Realizaré un control de un teclado para manipulacion de datos con capacidad de 2 Bits para ser representado en BCD con 2 displays de 7 segmentos y un LCD de 16 pines (no conozco muy bien el LCD).

El teclado lineal lo dejaré a parte por que no se muy bien sobre los registros para retencion de datos y el uso de flip-flop. Tengo los diseños siguientes que he hecho, pero no retiene datos. (Teclado lineal adjunto).


Matricial.

Para el diseño de mi teclado de matriz, tengo el teclado 3x5 como el ilustrado en conexion paralelo.
Aunque tengo la opcion del 4x4 para utilizar el integrado 74922.

Del teclado matricial con el 74922, a dos displays, debo hacer la retención de un segundo display.

Adjunto mi segundo diseño con el tecado de matriz. El integrado 74922 retiene los datos en el primer display pero en el segundo no logro hacer el cambio y que retenga los dos digitos (ya que quiero que se marque el segundo digito tal y como los tecleo) mi duda es sobre los FF.

De aqui debo configurar un LCD para que me aparezcan los 2 Bits de los display.


El circuito aun no puedo hacerlo con un PIC desafortunadamente.
Imágenes Adjuntas
Tipo de Archivo: jpg teclado de matriz Sim!.JPG (180,5 KB (Kilobytes), 226 visitas)
Tipo de Archivo: jpg Tecado Lineal.!.JPG (186,3 KB (Kilobytes), 172 visitas)
Tipo de Archivo: jpg Teclado 3x5 Paralelo.JPG (23,3 KB (Kilobytes), 79 visitas)
17/03/2011 #155


Hola Darzeck

Lo que hace falta en los circuitos que adjuntaste es una circuiteria para que detecte cuando una tecla fue presionada y como respuesta, que los datos se canalicen al siguiente Display.

Creo esto se puede lograr con un Flip-Flip y unas cuantas compuertas. Para hacer cambiar al Flip-Flip se puede utilizar la salida DA(xx) Del 74922. Esta señal se llama DATA AVAILABLE y se genera cada que se presiona una tecla.

(xx) es el número de PIN del integrado y está de acuerdo al paquete que utilizas.

saludos
a sus ordenes
19/03/2011 #156

Avatar de Darzeck

He intentado hacer algunos arreglos para que me den el corrimiento al siguiente display, el que retengan la cifra no es mucho problema con los flip-flop de una entrada con su respectiva salida, pero en la entrada del teclado afectan al 1° display y el segundo a veces no tiene ningun cambio, e propósito es que pueda introducir dos datos continuos retenidos.

No he podido tener mucho avance en mi trabajo,
si de favor alguien me podria dar alguna bibliografia o ayudar en mi diseño.
Estaré agradecido.

Sin embargo me agradaria más la idea de algún libro, tengo el Tocci,
pero se me ha complicado un poco el entendimiento.

Pff!
20/03/2011 #157


Hola Darzack

De lo que encuentras en el Tocci, cuál es el diagrama que se te complica un poco el entendimiento ?.
Podrías adjuntar algún diagrama para analizarlo y ayudarte en el entendimiento ?.

Podrías también utilizar Flip-Flop’s tipo D como por ejemplo el 74LS273 y entre sus D’s y Q’s ir deslazando los datos.
Has una prueba con el circuito contenido en la imagen adjunta.
En lugar del DigiSwitch conecta las salidas de tu sistema de teclado y aplica las señales Reset y Clock.
Te serviría ese circuito ?

saludos
a sus ordenes

Perdón. Hay Un Error En La Secuencia, Lo Correcto es:
A- Pulso En Reset. B- Programar Número En DigiSwitch. C- Pulso En Clock. E- Volver a B. 6 Vueltas.
Imágenes Adjuntas
Tipo de Archivo: jpg Shift Numbers With 74LS273.jpg (387,6 KB (Kilobytes), 138 visitas)
21/03/2011 #158


Chvase dijo: Ver Mensaje
Si claro, es el 16f887 o el 16f877......que lo unico que cambia es el oscilador interno.

Aun continuo con el problema, no se que pase con la libreria o con esa familia de pics y la libreria o el proteus, que se yo. Pronto armare el circuito para ver si es la simulacion y pasar el dato, pero mientras podrian ayudarme. Gracias!
espero que esto les sirva este es mi codigo fuente; el programa es muy simple:
#include <16f877a.h>
#fuses XT,NOLVP,NOPROTECT,NOWDT
#use delay (clock=4000)
#define use_portb_kbd TRUE // trabaja en portb, puedes cambiarlo tambien en kbd.c
#include <lcd.c>
#include <kbd.c>
#use standard_io (b)
#use standard_io (d)

char k;
char l;
void main(void)
{
lcd_init();
kbd_init();
port_b_pullups(TRUE);
lcd_putc("\fBIENBENIDO\n");
delay_ms(1000);
lcd_putc("LEYENDO NUMEROS");
while (true)
{
k=kbd_getc();
if (k!=0)
{
l=k-48;
printf(lcd_putc,"\fEL NUMERO LEIDO ES: %u",l);
delay_ms(50);
}
}
return;
}
21/03/2011 #159

Avatar de Darzeck

Aplique el circuito analizando un poco la aplicacion.

El número aparece en el 1° display, pasa al 2° y desaparece en el paralelo, en el de matriz los retiene.

Sigo con el de matriz como en un principio, ya se ha logrado que permanezcan en los displays los datos, lo que no consigo es que en el 2° aparezca si introduzco algun otro dato con la misma entrada (teclado: paralelo/matriz).

Adjunto los circuitos de prueba.
Imágenes Adjuntas
Tipo de Archivo: jpg Corrido de displays.JPG (70,3 KB (Kilobytes), 90 visitas)
Tipo de Archivo: jpg Corrido de displays (matrix).JPG (68,3 KB (Kilobytes), 97 visitas)
21/03/2011 #160


Hola Darzeck

Prueba haciendo las conexiones que vienen marcadas en la imagen adjunta.
Tal vez se requiera intercalar un inversor en la línea verde.

saludos
a sus ordenes
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.