TODOPIC

Microcontroladores PIC => Almacén del Assembler => Mensaje iniciado por: jo.an. en 06 de Julio de 2011, 22:03:31

Título: teclado con pic
Publicado por: jo.an. 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
Título: Re: teclado con pic
Publicado por: rivale 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
Título: Re: teclado con pic
Publicado por: Suky 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!
Título: Re: teclado con pic
Publicado por: jo.an. 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
Título: Re: teclado con pic
Publicado por: Suky 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!
Título: Re: teclado con pic
Publicado por: jo.an. 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
Título: Re: teclado con pic
Publicado por: Suky en 07 de Julio de 2011, 13:23:09
Bueno, está en C y creo que se entiende bastante...  :tongue:
Título: Re: teclado con pic
Publicado por: jo.an. 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
Título: Re: teclado con pic
Publicado por: jo.an. 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
Título: Re: teclado con pic
Publicado por: jo.an. 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
Título: Re: teclado con pic
Publicado por: PacoP 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.
Título: Re: teclado con pic
Publicado por: jo.an. 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
Título: Re: teclado con pic
Publicado por: jo.an. 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
Título: Re: teclado con pic
Publicado por: PacoP 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.
Título: Re: teclado con pic
Publicado por: jo.an. 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
Título: Re: teclado con pic
Publicado por: PacoP en 12 de Agosto de 2011, 15:15:01
Saludos PacoP:¿Y como hago eso?,seria la solucion.Con una board antigua si fuciona pero con una moderna no .att jose
Pues arrancas el PC, entras en la bios, buscas en las pantallas "halt on keyboard error" y lo desactivas.
Título: Re: teclado con pic
Publicado por: jo.an. en 12 de Agosto de 2011, 17:56:03
Saludos pacop:No todas las board tienen esa opcion.asrock y fosconn,no le aparecen esa opcion por ningun lado
Título: Re: teclado con pic
Publicado por: jo.an. en 16 de Agosto de 2011, 19:42:31
Ya encontre halt on keyboard error.No da error cuando arranca xp,pero si lo conectas despues de entrar windos y le das a cualquier tecla,se bloque a el mouse y no funciona nada.El problema esta en xp,ya que instalo el windos 98 en la misma board y funciona conectado el teclado despues.Si hay algun fenomeno de esos que le dan 800 vueltas al xp y sabe como desactivar esta opcion(ya que el 98s no la tiene) seria de gran ayuda,pues simplificaria mucho las cosas:att jose