Autor Tema: teclado ps/2 y LCD 2x16 con pic16f88  (Leído 6084 veces)

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

Desconectado pepe_2009

  • PIC10
  • *
  • Mensajes: 9
teclado ps/2 y LCD 2x16 con pic16f88
« en: 18 de Diciembre de 2009, 00:01:50 »
Muchas felicitaciones a todos los usuarios y moderadores de esta red buenisima para emprender proyectos confiables.

Este proyecto surgio viendo en la web de RedPic la comunicacion de ps/2 con pic, pero esta vez quisiera desarrollarlo
enviando datos desde el teclado ps/2 al pic16f88 y este despliegue en una LCD, luego emprendere desarrollandolo
en una pantalla luminoso de led.

Para empezar quisiera comentarios para poder ir desarrollandolo junto a ustedes, ya que no tengo mucha experiencia
en el uso del teclado ps/2 pero aqui esta un tutorial para ir empezando y que es de REDPIC

http://picmania.garcia-cuervo.net/proyectos_teclado_ps2.php

mirenlo y comenten para desarrollarlo paso a paso

Saludos y gracias a todos de antemano

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: teclado ps/2 y LCD 2x16 con pic16f88
« Respuesta #1 en: 18 de Diciembre de 2009, 00:11:04 »
Hola.

No lo he probado, pero si es de RedPIC, seguro sale.

Creo que la mejor opción es primero guardar las letras del mensaje en un buffer (o en una memoria externa) y luego desplegarlas en la matriz de LED.

Saludos
El papel lo aguanta todo

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: teclado ps/2 y LCD 2x16 con pic16f88
« Respuesta #2 en: 18 de Diciembre de 2009, 00:11:24 »
Leer un teclado PS/2 es muy sencillo, cada vez que pulses una tecla recibirás un make code que es característico de la tecla pulsada y al soltarla 0xF0 + make Code, a este conjunto se lo denomina break code. Cuando la tecla se mantiene pulsada, se repite el make code cada ciertos ms (no me acuerdo cuanto  :mrgreen: )

Para leer los datos hay que basarse en el siguiente diagrama de tiempos:

Seguramente en el proyecto de Diego hay más información. Este es un muy buen tutorial que explica sobre el teclado PS/2.

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado pepe_2009

  • PIC10
  • *
  • Mensajes: 9
Re: teclado ps/2 y LCD 2x16 con pic16f88
« Respuesta #3 en: 18 de Diciembre de 2009, 09:10:02 »
ok, Vayamos paso a paso,
MLO_   solo me referia la informacion de RedPic ya que por lo visto lo que tiene no se adecua a este proyecto pero informacion si muy buena.

Y viendo en el tutorial que me dio Suky en su enlace hay una parte que dice señales pull-up a lo que entiendo es que en mi pic16f88
debo poner resistencias de pull-up a la salida de las señales clock y data:



y esto a las señales clock y data del teclado ps/2

Para leer estos datos como lo hago en el micro?, muy bien Suky te agradesco pero como lo hago con el micro??????

 



Desconectado pepe_2009

  • PIC10
  • *
  • Mensajes: 9
Re: teclado ps/2 y LCD 2x16 con pic16f88
« Respuesta #4 en: 18 de Diciembre de 2009, 09:11:55 »
esto es com quedaria???

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: teclado ps/2 y LCD 2x16 con pic16f88
« Respuesta #5 en: 18 de Diciembre de 2009, 09:25:25 »
Exactamente! Pero eso esta en la info del proyecto de Diego  :? En que lenguaje vas a trabajar? Si es en C revisa el código de Diego, allí veras como se captura un Byte, y capturando el byte ya podrás trabajar con la trama.
Si es en assembler, aquí hay un ejemplo similar.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado pepe_2009

  • PIC10
  • *
  • Mensajes: 9
Re: teclado ps/2 y LCD 2x16 con pic16f88
« Respuesta #6 en: 18 de Diciembre de 2009, 15:07:02 »
me parece mejor realizarlo en C, el software CCS

lo de la informacion que me diste en el enlace esta para comunicacion serial no quiero implementar eso, pero para lo de la trama esta bien

me puedes pasar el enlace que dices de la info de diego para ir empezando el proyecto

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: teclado ps/2 y LCD 2x16 con pic16f88
« Respuesta #7 en: 18 de Diciembre de 2009, 23:01:48 »
Es el enlace que pusiste en el primer post  :D :D
No contesto mensajes privados, las consultas en el foro

Desconectado pepe_2009

  • PIC10
  • *
  • Mensajes: 9
Re: teclado ps/2 y LCD 2x16 con pic16f88
« Respuesta #8 en: 20 de Diciembre de 2009, 12:10:30 »
Bueno esto es lo que modifique del programa que esta en la web de RedPic, lo modifique para que muestra en valor
en el PORTA del pic16f88, esta bieb???

#include "C:\ps2_88\ps2_88.h"
unsigned char edge, bitcount;

char got_interrupt;
char interrupt_count;
char status_b3;

#bit INTF_BIT = 0x0B.1 // INTCON BIT 1 = INTF RB0/INT External Interrupt Flag Bit

//-------- Tabla de caracteres correspondientes a la pulsación de la tecla
//-------- en modalidad normal (sin pulsar SHIFT)

//-----------------------------------------------------------------------------
// Definición de protipos
//-----------------------------------------------------------------------------

void init_kb(void);
void decode(unsigned char sc);

//-----------------------------------------------------------------------------
// Rutina de gestión de interrupciones
//-----------------------------------------------------------------------------

#int_ext

void main()
{
   setup_oscillator(OSC_8MHZ|OSC_INTRC);
   setup_adc_ports(NO_ANALOGS|VSS_VDD);
   setup_adc(ADC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);

   delay_ms(100);
   init_kb();

   //-------- Los pins indicados (B0 y B3) son configurados como entradas.
   output_float(PIN_B0);
   output_float(PIN_B3);

   //-------- Activa pullups sobre todos los pins del puerto B.
   port_b_pullups(TRUE);

   //-------- Espera a que se activen.
   delay_us(5);

   //--------

   output_low(PIN_B5);

   //-------- Inicializa las variables usadas por la rutina de interrupción
   //-------- antes de activar las interrupciones
   interrupt_count = 0;
   got_interrupt = FALSE;
   status_b3 = 0;

   //-------- Desde que se activó el modo PULLUPS del puerto B, el estado
   //-------- normal del pin B0 es ALTO. La gestión de la interrupción externa
   //-------- se gestiona cuando se produce un cambio de nivel ALTO a BAJO.
   ext_int_edge(H_TO_L);

   //-------- Asegurarse de que el el bit de flag de la interrupción externa
   //-------- es borrado antes de activar la gestión de dicha interrupción
   //-------- externa.
   INTF_BIT = 0;

   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);

   //-------- Bucle principal.
   //-------- Chequear si se produce alguna interrupción (got_interrupt). Si es así, contar, borrar
   //-------- el flag y esperar 50 ms, reactivando la gestión de las interrupciones
   while(1)

      {

      //-------- Chequear si se produce alguna interrupción (got_interrupt).
      if(got_interrupt == TRUE)

         {

            //-------- Borrar el flag global que se inicio en la rutina de servicio
            //-------- de interrupciones externas.
            got_interrupt = FALSE;

            //-------- Esperar 50 ms para evitar rebotes en los contactos de las teclas.
            //delay_ms(50);

            //-------- Borrar cualquier interrupción producida durante el periodo de espera.
            INTF_BIT = 0;

            //-------- Reactivar interrupciones
            enable_interrupts(INT_EXT);

         } // --- End If ---

      } // --- End While ---

}

void int_ext_isr(void){

unsigned char data;
   //-------- Los bit 3 a 10 se considerran datos. Paridad, start y stop
   //-------- son ignorados
   if(bitcount < 11 && bitcount > 2){
      data = (data >> 1);
      status_b3 = input(PIN_B3);
      if((status_b3) == 1){
          data = data | 0x80;
      }
   }
   //-------- Todos los bits se han recibido
   if(--bitcount == 0){
      output_a(data);
      data = 0;
      bitcount = 11;
      got_interrupt = TRUE;
   }
   got_interrupt = TRUE;
   interrupt_count++;
   disable_interrupts(INT_EXT);
}
//-----------------------------------------------------------------------------
// Inicialización de teclado.
//-----------------------------------------------------------------------------
void init_kb(void)
{

   //-------- Longitud de la trama para cada pulsación y mensaje de bienvenida
   bitcount = 11;
}

Desconectado pepe_2009

  • PIC10
  • *
  • Mensajes: 9
Re: teclado ps/2 y LCD 2x16 con pic16f88
« Respuesta #9 en: 20 de Diciembre de 2009, 12:15:33 »
Lo modifique solo para probar si envia los scan code correspondiente al pic
Le puse oscilador interno de 8MHz y borre la parte que enviaba por rs232 y coloque output_a(data);

nada mas esta bien, espero su pronta respuesta????