Autor Tema: teclado con pic  (Leído 5063 veces)

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

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
teclado con pic
« en: 06 de Julio de 2011, 22:03:31 »
¿seria alguien tan amable de decirme como se hace para que cuando prenda la computadora me entienda el pic como si fuese el teclado?att jose

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: teclado con pic
« Respuesta #1 en: 06 de Julio de 2011, 22:28:12 »
no entiendo que quieres hacer, si tienes un pic alimentado desde tu usb, en cuanto prendas la compu el pic se prende.
pero creo que no es lo que quieres, podrias especificar un poco mas
"Nada es imposible, no si puedes imaginarlo"

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: teclado con pic
« Respuesta #2 en: 06 de Julio de 2011, 23:50:38 »
Si no recuerdo mal, al alimentar un teclado AT, éste realiza una comprobación de su sistema y responde al host con un 0xAA... Entonces al iniciar el microcontrolador yo hago lo siguiente:

Código: C
  1. output_float(T_CLOCK);
  2.    output_float(T_DATA);
  3.    delay_ms(800);
  4.    vEnvia_Byte(0xAA);

Siguiendo la base que se realizo en este proyecto, se utiliza la interrupción por flanco descendente sobre la linea clock para determinar cuando el host quiere comunicarse con el "teclado", entonces se configura tal interrupción de la siguiente manera:

Código: C
  1. ext_int_edge(H_TO_L);
  2.    clear_interrupt(INT_EXT);
  3.    enable_interrupts(INT_EXT);
  4.    enable_interrupts(GLOBAL);

Y en la ISR:

Código: C
  1. #int_EXT
  2. void Leer_Host(){
  3. static char Dato_Host;
  4.  
  5.    Dato_Host=cLee_Byte();
  6.    if(Dato_Host!=0xEC){
  7.       if(Dato_Host==0xEE){
  8.          vEnvia_Byte(0xEE);
  9.       }else{
  10.          vEnvia_Byte(0xFA);
  11.          if(Dato_Host==0xF2){
  12.             vEnvia_Byte(0xAB);
  13.             vEnvia_Byte(0x83);
  14.          }
  15.          if(Dato_Host==0xFF){
  16.             delay_ms(1);
  17.             vEnvia_Byte(0xAA);
  18.          }
  19.       }
  20.    }
  21. }

Aquí vemos que dependiendo del dato que envie el host al "teclado", éste debe de responder de forma adecuada, sino el host inhibe el bus de comunicaciones... Para detalles leer el siguiente pdf: http://www.micros-designs.com.ar/downloads/TecladoAT-PS2_Interfazyfunciones.rar

Las rutinas que implementé para enviar y recibir datos fueron las siguientes:

Código: C
  1. #use fast_io(B)
  2. #define T_CLOCK PIN_B0
  3. #define T_DATA PIN_B1

Código: C
  1. void vEnvia_Byte(char Data){
  2. char k=0,Unos=1;
  3.  
  4.    while(input(T_CLOCK)==0);
  5.    output_high(T_CLOCK);
  6.    output_high(T_DATA);
  7.    output_drive(T_DATA);
  8.    output_drive(T_CLOCK);
  9.    /* ** Enviamos Bit Start ** */
  10.    output_high(T_CLOCK);
  11.    output_high(T_DATA);
  12.    delay_us(40);
  13.    output_low(T_DATA);
  14.    delay_us(40);
  15.    output_low(T_CLOCK);  
  16.    delay_us(40);
  17.    /* ** Enviamos 8 bits de datos ** */
  18.    for(k=0;k<8;k++){
  19.       output_high(T_CLOCK);
  20.       delay_us(5);
  21.       output_bit(T_DATA,Data & 0x01);
  22.       delay_us(35);
  23.       output_low(T_CLOCK);
  24.       delay_us(40);
  25.       if(bit_test(Data,0)==1){Unos++;}
  26.       Data>>=1;  
  27.    }
  28.    /* ** Enviamos bit de paridad ** */
  29.    output_high(T_CLOCK);
  30.    delay_us(5);
  31.    output_bit(T_DATA,Unos&0x01);
  32.    delay_us(35);
  33.    output_low(T_CLOCK);
  34.    delay_us(40);
  35.    /* ** Enviamos bit Stop ** */
  36.    output_high(T_CLOCK);
  37.    delay_us(5);
  38.    output_high(T_DATA);
  39.    delay_us(35);
  40.    output_low(T_CLOCK);
  41.    delay_us(40);
  42.  
  43.    output_float(T_CLOCK);
  44.    output_float(T_DATA);
  45.  
  46.    delay_us(100);
  47. }
  48. /* ****************************************************************************************** */
  49. char cLee_Byte(void){
  50. char k;
  51. char Data=0xEC;
  52.  
  53.    /* ** Condicion RTS ** */
  54.    delay_us(100);
  55.    if(input(T_DATA)==0){
  56.       /* ** Esperamos a que el Host este listo para enviar datos ** */
  57.       while(input(T_CLOCK)==0);
  58.       output_high(T_CLOCK);
  59.       output_drive(T_CLOCK);
  60.       output_high(T_CLOCK);
  61.       delay_us(200);
  62.       output_low(T_CLOCK);
  63.       if(input(T_DATA)==0){
  64.          /* ** Se recibe los 8 bits de datos ** */
  65.          for(k=0;k<8;k++){
  66.             delay_us(40);
  67.             output_high(T_CLOCK);
  68.             delay_us(20);
  69.             shift_right(&Data,1,input(T_DATA));
  70.             delay_us(20);
  71.             output_low(T_CLOCK);
  72.          }
  73.          /* ** Se ignora bit de paridad ** */
  74.          delay_us(40);
  75.          output_high(T_CLOCK);
  76.          delay_us(40);
  77.          output_low(T_CLOCK);
  78.          /* ** Se testea bit Stop ** */
  79.          delay_us(40);
  80.          output_high(T_CLOCK);
  81.          delay_us(20);
  82.          if(input(T_DATA)==1){
  83.          delay_us(15);
  84.          /* ** Se envia Ack ** */
  85.          output_drive(T_DATA);
  86.          output_low(T_DATA);
  87.          delay_us(5);
  88.          output_low(T_CLOCK);
  89.          delay_us(40);
  90.          output_high(T_CLOCK);
  91.          delay_us(10);
  92.          }
  93.       }
  94.    }
  95.    output_float(T_CLOCK);
  96.    output_float(T_DATA);
  97.    delay_us(100);
  98.    return(Data);
  99. }


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

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re: teclado con pic
« Respuesta #3 en: 07 de Julio de 2011, 01:24:12 »
Cosa curiosa:Lo estoy probando con una cpu pci100(10 años de antigüedad),y no necesito ningun codigo para reconocer el pic como teclado,pero lo hago con una board mas moderna y se bloquea hasta el mouse:att jose

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: teclado con pic
« Respuesta #4 en: 07 de Julio de 2011, 01:40:21 »
Exactamente, es un mismo bus, así que lo bloquea. Yo el código me acuerdo haberlo probado en XP y Linux... Puedes ayudarte con un osciloscopio o analizador lógico para saber que datos envía, si lo recibes adecuadamente y si respondes como se debe.


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

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re: teclado con pic
« Respuesta #5 en: 07 de Julio de 2011, 12:27:51 »
Ojala tuviese un osciloscopio.Si alguien tuviese el codigo de esta parte  en asembler o indicarme pasos a seguir,creo poder hacerlo.att jose

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: teclado con pic
« Respuesta #6 en: 07 de Julio de 2011, 13:23:09 »
Bueno, está en C y creo que se entiende bastante...  :tongue:
No contesto mensajes privados, las consultas en el foro

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re: teclado con pic
« Respuesta #7 en: 07 de Julio de 2011, 15:00:12 »
Sin osciloscopio,mal y en C,ni te cuento.De todas formas gracias suky:att jose

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re: teclado con pic
« Respuesta #8 en: 15 de Julio de 2011, 16:22:00 »
Un saludo Suky:Si espero un segundo a que el computador me envie su dato(cualquiera),y le respondo con el pic,EE o FA o AB+83 o AA,deberia reconocer el pic como teclado.¿Por donde estoy perdido?.He variado el tiempo de retardos y tampoco.Estoy colgado solo en esta parte.att jose antonio

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re: teclado con pic
« Respuesta #9 en: 18 de Julio de 2011, 15:26:59 »
No pude con esto.Como no tengo el codigo de reconocimiento del teclado (llevo toda la semana dandole por todos los lados y no puedo),la solucion seria:un 4066.Hacer un retardo para que  reconozca el teclado,y despues que cambie al pic.No es lo que deberia ser,pero lo necesito urgente,mientras alguien del foro me echa un mano con este asunto.Cualquier ayuda se agradece:att jose

Desconectado PacoP

  • PIC10
  • *
  • Mensajes: 21
Re: teclado con pic
« Respuesta #10 en: 18 de Julio de 2011, 17:44:17 »
Esta dirección probablemente te ayude.

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

Un Saludo.

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re: teclado con pic
« Respuesta #11 en: 18 de Julio de 2011, 19:55:27 »
Gracia Pacop:Revise esta pagina y unos cuantos pdf un monton de veces y cuanto mas miro,menos me entero.De todas formas gracias:att jose

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re: teclado con pic
« Respuesta #12 en: 02 de Agosto de 2011, 19:11:39 »
Lo consegui a las malas.Chip del teclado+2 reles+pic.conecto el chip del teclado para que reconozca el teclado,espero 60 segundos,cambio de estado los reles,y paso ha trabajar con el pic.Consigo que me haga las funciones,F1,F2,F3 etc,pero me hace un bip el computador cuando activo estas funciones.¿que sera?att jose

Desconectado PacoP

  • PIC10
  • *
  • Mensajes: 21
Re: teclado con pic
« Respuesta #13 en: 03 de Agosto de 2011, 17:23:17 »
Bueno y en vez de hacer eso, porqué no le dices a la bios del pc que no indique error cuando no detecte el teclado?
así arrancas normal, y despues le mandas los comandos del teclado que quieras.
Si te pita es porque le envias un comando fuera de tiempo, sin que lo pida ni lo espere.
El teclado tambien es muy sensible a los rebotes.

Desconectado jo.an.

  • PIC16
  • ***
  • Mensajes: 120
Re: teclado con pic
« Respuesta #14 en: 04 de Agosto de 2011, 22:58:44 »
Saludos PacoP:¿Y como hago eso?,seria la solucion.Con una board antigua si fuciona pero con una moderna no .att jose


 

anything