Autor Tema: Keyboard CheatBox  (Leído 16364 veces)

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

Desconectado elmasvital

  • Administrador
  • PIC24H
  • *******
  • Mensajes: 1713
Re: Keyboard CheatBox
« Respuesta #15 en: 16 de Febrero de 2007, 14:57:18 »
Enhorabuena SavageChicken por tus avances...

respecto a tu problema... en electronica hay que saber desarrollar la paciencia y el método analítico. Debes intentar buscar teorias de lo que está ocurriendo... aprender cómo funciona internamente y determinar cuando falla.


Intenta inyectarle basura literalmente por el ps2, todo caracteres permitidos por el ps2 pero muchas teclas seguidas... a distinta frecuencia... ... hasta que consigas que pite... luego le retiras parte de la basura y si deja de pitar ya sabes que el error estaba en lo que le quitaste y si no pues sigues quitando parte de la basura que le estas enviando hasta que deje de pitar.

Igual funciona ;-)

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Keyboard CheatBox
« Respuesta #16 en: 18 de Febrero de 2007, 21:03:16 »
El protocolo del teclado no soporta una gran cantidad de teclas presionadas a la vez. Si mantienes varias teclas del teclado presionadas a la vez, veras como comienza a pitar el parlantito.

Tal vez estes olvidando enviar algun "key_up", es decir, que has soltado la tecla o bien estes saturandolo enviando demasiadas teclas presionadas a la vez.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 936
Re: Keyboard CheatBox
« Respuesta #17 en: 19 de Febrero de 2007, 00:36:49 »
Gracias por sus aportes.

   Estoy añadiendo funciones y mejorando lo que tengo hasta el momento.
Uno de los errores que tiene el Assembler posteado es que no verifica que el bit de inicio y el bit de parada sean 0 y 1 respectivamente, puede que ahi haya estado el problema.

  Bruno, lo que indicas es 100% correcto, pero el host avisa poniendo a nivel bajo el clock cuando no esta preparado para recibir datos, y esa parte el programa la respeta.

   Creo que hay una cosa que tal vez no he dejado clara en mi post anterior, y es que por ahora el aparato no envía ninguna tecla extra, está en el medio sin añadir ni quitar nada a los datos que recibe o envía. Es decir que cada bit que recibe del teclado, tanto de la línea de clock como de la línea de datos, inmediatamente los refleja en las lineas que van al host, y lo mismo desde el host al teclado.
   Por decirlo de alguna manera, el aparato es transparente a ambos, host y teclado. Lo único que hace es copiar los bit del teclado en una variable que luego usaré para los propósitos que explique en mi primer post :lol: :lol:

   El Programa esta avanzando, pero cuando tenga lista una versión mas funcional la voy a postear, ahora si efectuando la función para la cual esta pensado, enviar mas teclas que las que estoy presionando  :D :D

Les agradezco mucho sus aportes. Gracias y...
Salud 8)
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 936
Re: Keyboard CheatBox
« Respuesta #18 en: 22 de Febrero de 2007, 00:23:51 »
Bien.
   El proyecto esta avanzando, creo alcanzar a ver la luz al final del tunel :shock:.
   Pero necesito algo de ayuda, tengo algunos problemillas, por momentos el invento se comporta extraño y no manda los datos al host de manera correcta.
   Estoy haciendo simulaciones en el propio MPLAB, pero es bastante engorroso aun con las herramientas que tiene.
   Creo que me ayudaría mucho poder hacer una simulación con Proteus, pero el problema es que estar inyectando estímulos por las patitas es igual de engorroso que hacerlo en el MPLAB, he visto que el Proteus tiene algunos keypad, la pregunta es existe alguna librería que tenga un teclado con protocolo ps/2 de existir les pido HELP :?: :!: y que me digan donde la puedo conseguir.
   A todo esto me surgió una duda, ¿hay posibilidad de que uno mismo pueda crear componentes interactivos nuevos para agregar a las librerías?. ¿Hay algún material para leer al respecto?

   Como siempre Gracias y espero su valiosa ayuda.
Salud 8)
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 936
Re: Keyboard CheatBox
« Respuesta #19 en: 26 de Enero de 2008, 00:02:12 »
Finalmente he terminado.
Me quedaron algunas cositas que hubiese querido agregar, pero este año estuve trabando y estudiando, lo que me ha dejado muy poco tiempo para cacharrear.
Dentro del archivo assembler encontrarán un código bien documentado para el manejo del teclado y el envío de datos desde el pic al teclado y desde el pic a nuestro computador, lo que permitiría darle otros usos, además transmite simultaneamente los datos tecleados por teclado via RS232, lo que puede también servir para otras aplicaciones.

Espero sea útil a muchos.

Salud  8)
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Keyboard CheatBox
« Respuesta #20 en: 26 de Enero de 2008, 01:57:41 »
 :shock: magnifico trabajo SavageChicken, te has lucido, lei todo lo que has escrito, muy bien trabajado, una prueba más de, el que perseverá consigue, el que machaca corta :mrgreen:

seguro qeu será de mucha ayuda a los que entren a manejar el teclado, yo queria iniciarme con ello :mrgreen:

y ahora como vas en el UT?? ya eres el rey de todos? :mrgreen:
.

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 936
Re: Keyboard CheatBox
« Respuesta #21 en: 26 de Enero de 2008, 02:28:55 »
Gracias Cryn. Lamentablemente todavía no soy el rey del UT, pero he mejorado con el invento, jajaja
Lo malo es que el resto ha estado practicando mientras yo he estado programando, asique la lucha esta pareja.  :mrgreen:

Salud  8)
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Keyboard CheatBox
« Respuesta #22 en: 26 de Enero de 2008, 02:34:05 »
Lo malo es que el resto ha estado practicando mientras yo he estado programando, asique la lucha esta pareja.  :mrgreen:

jajaja, pero ellos avanzaron a velocidad humano, tu ya en unos dias a la velocidad del PIC les alcanzas y les pasas y les pisas y les escupes y les vuelves a pisar :D :D
.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Keyboard CheatBox
« Respuesta #23 en: 26 de Enero de 2008, 05:41:47 »
Tu fanatismo por ese "UT" es increible...

¿No seria mas fácil hacer un pequeño software para la PC que capte lo que presionas en el teclado y en base a eso envíe estímulos de teclas presionadas como mas te agrade?

Saludos.

Nooooo. Nuncaaaaaa. Jamás de los jamasessssss. Para encender una simple bombilla hay que alimentar una fuente, que ésta alimente un circuito rectificador - estabilizador - reductor de voltaje, que a su vez da vida a un PIC con su POR,BOR y BROWNOUT, que controla un transistor que a su vez alimenta un Rele que es el encargado de encender y apagar la Bombilla. PIC's hasta en la sopa (lo siento por MAfalda). Ja, ja, ja   :D :D :D


SavageChicken, acabo de descubrir este hilo y me has dejado anonadado, asombrado y maravillado.  :mrgreen: :mrgreen: :mrgreen:

Una pregunta: ¿Has implementado en tu firmware la respuesta estándar al PC cuando inicializa el teclado?
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 936
Re: Keyboard CheatBox
« Respuesta #24 en: 26 de Enero de 2008, 15:56:59 »
SavageChicken, acabo de descubrir este hilo y me has dejado anonadado, asombrado y maravillado.  :mrgreen: :mrgreen: :mrgreen:

Una pregunta: ¿Has implementado en tu firmware la respuesta estándar al PC cuando inicializa el teclado?


Hola RedPic.

Es un honor para mi que leas este post, ya que la información más vital para el desarrollo del presente apartado ha sido justamente provista por ti en el famoso: Emulación Teclado PS/2 con PIC (Engañe a su PC y dele gato por liebre)
Antes de contestarte, te comento que el artilugio es transparente al host y "casi" transparente al teclado, y paso a explicar esto.
La forma en que está pensado el aparatito, hace que todo lo que el teclado quiera transmitirle al host sea enviado en forma inmediata al host y viceversa, esto hace innecesario implementar la inicialización del teclado en ningún sentido, porque entre ellos conversarán como si estuviesen conectados directamente.
Esto es muy sencillo de hacer, basta con leer permanentemente el clock y el data del teclado y mandarlo a los pines donde tengo conectado el host y viceversa.
El truco está en que el PIC debe simultáneamente identificar las pulsaciones de teclas y determinar si debe hacer algo o no.
En caso de ser un SI, inhibe al teclado de comunicarse con el host, poniendo a nivel bajo el pin del clock del teclado y entonces enviarle "los teclazos" que se estimen convenientes al host y luego volver a liberar al teclado para que siga comunicándose en forma normal.
Lo que si está implementado es el envío de comandos al teclado, lo que permitiría cambiar el "typematic rate" o pedirle al teclado que haga un reset, por ejemplo.
Otro detalle, como ya había aclarado, los datos mandados por el host como los mandados por el teclado son enviados via RS232 en tiempo real a 115200 baudios.

Otro dato interesante, es que utilizando el USART en modo síncrono y con 9 bits de datos, podría emularse un teclado, ya que estudiando la comunicación del teclado y comparándola con la comunicación serie antes mencionada, veo que son compatibles, eso si, el baud rate debería ajustarse a un valor poco estándar, pero nada complicado.

Aprovecho de aclarar que los pines que estoy usando en la última versión difieren de los pines presentados en los primeros post, ya que en un intento de utilizar interrupciones fueron utilizados los pines RB4-7

Salud  8)
« Última modificación: 26 de Enero de 2008, 22:04:34 por SavageChicken »
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Keyboard CheatBox
« Respuesta #25 en: 26 de Enero de 2008, 16:41:38 »
nos colocas el esqeumatico tb?  :mrgreen:

gracias
.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Keyboard CheatBox
« Respuesta #26 en: 26 de Enero de 2008, 19:21:33 »
Si, señor. Muy bueno el análisis y la implementación. Sencilla a la par que elegante. Recibe mis mas sinceras felicitaciones. Si, señor.  :wink:

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 936
Re: Keyboard CheatBox
« Respuesta #27 en: 26 de Enero de 2008, 22:12:21 »
nos colocas el esqeumatico tb?  :mrgreen:

gracias

Con Mucho gusto amigo Cryn, aquí va.




Salud  8)
« Última modificación: 27 de Enero de 2008, 17:04:04 por SavageChicken »
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Keyboard CheatBox
« Respuesta #28 en: 27 de Enero de 2008, 15:32:54 »
ok muchas gracias :-/

y felicitaciones nuevamente por qeu es un excelente trabajo el que hiciste :-/
.

Desconectado rod232

  • PIC10
  • *
  • Mensajes: 3
Re:Keyboard CheatBox
« Respuesta #29 en: 18 de Octubre de 2016, 15:46:58 »
Buenas tardes, quiero implementar el mismo proyecto pero en c, ya que el código en assembler por mas que esté tan bien comentado como está el que se realizó en éste hilo me cuesta entenderlo, lo que tengo es una placa sin clock ya que uso el clock interno del 16f628a a 4 mhz, quiero enviar, para probar la letra a, pero no envía nada, les paso mi código en c si es posible que me digan lo que está mal, usé el código de RedPic "adaptado"

Código: [Seleccionar]
#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(internal=4000000)




// Original de Nostrico del foro Todopic
// adaptado al 18f1320 por redpic
//


#define OUT_CLOCK PIN_B2
#define OUT_DATA PIN_B1

unsigned int8 rec_char;

unsigned char convert_ascci_to_scancode(unsigned char c){

  unsigned char scancode;

       if (c == 'a' || c == 'A') {scancode = 0x1c;}
  else if (c == 'b' || c == 'B') {scancode = 0x32;}
  else if (c == 'c' || c == 'C') {scancode = 0x21;}
  else if (c == 'd' || c == 'D') {scancode = 0x23;}
  else if (c == 'e' || c == 'E') {scancode = 0x24;}
  else if (c == 'f' || c == 'F') {scancode = 0x2b;}
  else if (c == 'g' || c == 'G') {scancode = 0x34;}
  else if (c == 'h' || c == 'H') {scancode = 0x33;}
  else if (c == 'i' || c == 'I') {scancode = 0x43;}
  else if (c == 'j' || c == 'J') {scancode = 0x3b;}
  else if (c == 'k' || c == 'K') {scancode = 0x42;}
  else if (c == 'l' || c == 'L') {scancode = 0x4b;}
  else if (c == 'm' || c == 'M') {scancode = 0x3a;}
  else if (c == 'n' || c == 'N') {scancode = 0x31;}
  else if (c == 'o' || c == 'O') {scancode = 0x44;}
  else if (c == 'p' || c == 'P') {scancode = 0x4d;}
  else if (c == 'q' || c == 'Q') {scancode = 0x15;}
  else if (c == 'r' || c == 'R') {scancode = 0x2d;}
  else if (c == 's' || c == 'S') {scancode = 0x1b;}
  else if (c == 't' || c == 't') {scancode = 0x2c;}
  else if (c == 'u' || c == 'U') {scancode = 0x3c;}
  else if (c == 'v' || c == 'V') {scancode = 0x2a;}
  else if (c == 'w' || c == 'W') {scancode = 0x1d;}
  else if (c == 'x' || c == 'X') {scancode = 0x22;}
  else if (c == 'y' || c == 'Y') {scancode = 0x35;}
  else if (c == 'z' || c == 'Z') {scancode = 0x1a;}

  else if (c == '0') {scancode = 0x45;}
  else if (c == '1') {scancode = 0x16;}
  else if (c == '2') {scancode = 0x1e;}
  else if (c == '3') {scancode = 0x26;}
  else if (c == '4') {scancode = 0x25;}
  else if (c == '5') {scancode = 0x2e;}
  else if (c == '6') {scancode = 0x36;}
  else if (c == '7') {scancode = 0x3d;}
  else if (c == '8') {scancode = 0x3e;}
  else if (c == '9') {scancode = 0x46;}

  else if (c == '/') {scancode = 0x5a;} // ENTER
  else if (c == ' ') {scancode = 0x29;} // ESPACIO
  else if (c == '>') {scancode = 0x0d;} // TABULADOR
  else if (c == '<') {scancode = 0x66;} // BORRADOR
  else if (c == '$') {scancode = 0x58;} // TAG DE MAYUSCULA $m$yuscula
  else if (c == '-') {scancode = 0x4a;} // -_

  else {scancode = 0x29;} // Cualquier otra cosa ESPACIO

  return scancode;
}


void output_scancode_ps2(unsigned char scancode){

  int contador;
  int salida, unos=1;
  boolean paridad=true;

  output_high(OUT_CLOCK); // START -------------------------------
  output_high(OUT_DATA);
  delay_us(40);

  output_high(OUT_CLOCK);
  output_low(OUT_DATA);
  delay_us(40);

  output_low(OUT_CLOCK);
  output_low(OUT_DATA);
  delay_us(40);

  salida =1;

  do{
    output_high(OUT_CLOCK);
    output_bit(OUT_DATA, scancode&0x01);
    delay_us(40);
    output_low(OUT_CLOCK);
    output_bit(OUT_DATA, scancode&0x01);
    delay_us(40);

    if ((scancode & 0x01) == 0x01) {unos++;}

    scancode = scancode>>1;
    salida++;

  }while(salida < 9);

  output_high(OUT_CLOCK); // PARITY ------------------------------
  output_bit(OUT_DATA, unos&0x01);
  delay_us(40);
  output_low(OUT_CLOCK);
  output_bit(OUT_DATA, unos&0x01);
  delay_us(40);

  output_high(OUT_CLOCK); // STOP --------------------------------
  output_high(OUT_DATA);
  delay_us(40);
  output_low(OUT_CLOCK);
  output_high(OUT_DATA);
  delay_us(40);

  output_high(OUT_CLOCK); // FIN ---------------------------------
  output_high(OUT_DATA);

  delay_ms(175);
}


void main(){

  delay_ms(300);
 
  delay_ms(500);

  do{
   
    char rod = 'a';
    output_scancode_ps2(convert_ascci_to_scancode(rod));
    delay_ms(1000);
  }while(true);

}   

debería enviar la letra a cada segundo o estoy equivocado?.
desde ya les agradezco!.
Saludos!.


 

anything