Autor Tema: Proyecto: Emulación Teclado PS/2 con PIC (Engañe a su PC y dele gato por liebre)  (Leído 57633 veces)

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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Hace unos cuantos proyectos dejamos algo sin terminar de forma lógica y conveniente. Y eso es algo que mi religión no me permite. Ya decía Shakespeare: Bien estás lo que bien acaba. Asi que esto todavía no ha acabado ...

En nuestro anterior proyecto Ponga un teclado PS/2 en su PIC (vida) conseguimos que nuestro PIC reconociese a este tipo de teclado como suyo propio, hijo adoptivo y deseado, sin echar en falta a aquellos matriciales que tanto dan que hablar entre nuestros amables picmaníacos cuando comienzan en esto de la picmanía.

Pero este proyecto estaba cojo, leía lo que el teclado PS/2 tenía que decirle ... y ... nada más. Ahora vamos a ponerle la otra pata a este proyecto completándolo con lo que indica el título de este proyecto: Emulación Teclado PS/2 con PIC (Engañe a su PC y dele gato por liebre)

Mi propósito es darle a aquel proyecto la vuelta como un calcetín y hacer que sea el PIC quien hable "tecladés" y podamos así conectarlo a nuestro PC, sin que éste sea capaz de detectar que lo que le hemos conectado no es exactamente lo que el cree que tiene conectado ...

Aplicaciones posibles: Uffff ..... por ejemplo un conversor RS232 a PS/2 para conectar cacharros que solo dispongan de esa salida serie ... o ... que nuestro PIC pueda por ejemplo apagar al PC enviando la secuencia [Alt][Ctrl][Del][Alt][A] .... o un data aware ... o ... qué sé yo .... (yo si sé lo que quiero hacer con él pero es un asunto privado ja ja ja  :D  :D  :D )

Los principios teóricos son exactamente los mismos que en nuestro proyecto de referencia y lo único que vamos a hacer realmente es convertir en salidas lo que antes eran entradas ... así que decidiremos qué teclas vamos a mandar, leeremos a qué codigos de rastreo son equivalentes, contruiremos el churrete con los bytes que correspondan, calcularemos sus paridades y escupiremos los bites tal como haría un PS/2 de verdad ....

Enlaces donde hay de todo lo necesario para este proyecto:

Ratón PS/2 controlado por un dsPIC

Teclado AT-PS2 Interfaz y funciones v1.2

TECHNICAL SPECIFICATION FOR G83-6000

AT Keyboard Interface V1.04

The PS/2 Keyboard Interface

DIY hardware keylogger

As to connect pic to the connector mini din (ps/2) in CCS C Forum

Como os digo, aquí esta T O D O ... ahora hay que darle forma ...  :mrgreen:

« Última modificación: 06 de Enero de 2013, 15:05:54 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Después de la Consulta técnica sobre mezcla de señales PS/2 realizada en el Foro Técnico y las amables pero desafiantes respuestas de los amigos Chaly y Nocturno ... llega la hora de tomar decisiones ...

Afortunadamente los señores de Microchip tienen un micro para cada cosa ... y despues de realizar la operación matemática de extraer aquellos PIC's que estan al mismo tiempo incluidos en los dos conjuntos:

A.- El de PIC's que disponen de al menos dos interrupciones externas y

B.- El de PIC's que los amables señores de Microchip han tenido la gentileza de enviarme a casa ...

llego a la conclusión definitiva de utilizar para este proyecto el PIC 18F1320 (del que aquí tenéis su Datasheet)

Es pequeño, pero de gran corazón, tiene pocas patillas, las suficientes, y puede correr como un gamo ya que soporta hasta 40Mhz de reloj, tiene tres eran tres las interrupciones de Elena y por supuesto lleva en la mochila su correspondiente ICSP. ¿Que más quiero? Pues casi casi que funcionaría en la RRBOARD1 ... salvo las conexiones de los pines del RS232 que están un poco complicadillas .... en fin, no se puede tener todo en esta vida.

Abajo os pongo un poco de la biografía de este micro por la que me he enamorado de él:



Esta es la asignación de funciones que le he previsto provisionalmente ...


Os mantendré informados.

« Última modificación: 06 de Enero de 2013, 15:01:00 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado nostrico

  • PIC10
  • *
  • Mensajes: 33
Amigo el proyecto que estoy queriendo hacer es alrevez es enviar datos del PIC al PS/2... puesto que deseo hacer mis tarjetas de presentación de un club de pana y dispongo de un PC pero he realizado tarjetas con memorias de 24LC02 que ocurre quiero enviar la data por el PS/2 para que valla contabilizando la información capturada en un word o excel... gracias...
 :) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-) :-)
"La electronica nos salvará..." CZWIENCZEK

Desconectado nostrico

  • PIC10
  • *
  • Mensajes: 33
Gracias RED PIC... Ya lo termine y funciona muy bien... NoStRiCo
"La electronica nos salvará..." CZWIENCZEK

Desconectado QUENELVI

  • PIC10
  • *
  • Mensajes: 1
Se un poquitin de programacion de pics, y pues dentro de un proyecto de manipulacion de software necesito  manipular el ordenador desde un pic, y me he  :shock: con la sabiduria que aqui se muestra.
pues bien como tu dices RedPic, esta funcion puede tener muchas aplicaciones,  entre ellas la de mi proyecto,
La ejecucion del teclado sin que este este presente,esta super! :)   Me podrias ilustrar acerca de como hacerlo te lo agradecería enormenente, pues la verdad si me hace falta una manita  :

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Del salón en el ángulo oscuro,
de su dueño tal vez olvidada,
silenciosa y cubierta de polvo,
veíase el arpa.


   Gustavo Adolfo Bécquer (1836-1870)

No creaís ni por un momento que la Emulación Teclado PS/2 con PIC es como el arpa de don Gustavo.  :mrgreen:

Ahora podéis comprender los post en el Foro Técnico que llevan por títulos Consulta técnica sobre mezcla de señales PS/2, Función del pin VEE en CD4051, CD4052 ó CD4053 y Mezclando Fuentes de Alimentación y otros asuntos relacionados con el PS/2.

Aquí está el resultado de todo ello: Mi Emulador de Teclado PS/2 versión Pachanga de Chiringito de Playa  :D  :D  :D









Ahora voy a implementar en la RRBOARD2 lo que estuvimos haciendo con la RRBOARD1 en Ponga un teclado PS/2 en su PIC (vida) con el fin de tener un "receptor" de teclado que no sea mi PC, se puede montar un follón demasiado gordo depurando con mi PC y su propio teclado.

Asi al montar el KBDEMUL podrá "emitir" señales de teclado que en vez de ir al PC irán a la RRBOARD2 y ésta los convertirá a RS232 que podré ver por el Monitor Serie del PC  :mrgreen:

Ea, a continuar currando ...  :P  :P  :P

Os mantendré informados.


« Última modificación: 06 de Enero de 2013, 14:57:59 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
En Ponga un teclado PS/2 en su PIC (vida) ya tenéis disponible la necesaria adaptación de la RRBOARD2 para que pueda recibir el Teclado y emitir vía RS232 al PC.

Con eso pretendo depurar el "emisor" antes de pasar a la prueba real de todo en serie PC <-> PIC <-> Keyboard  :mrgreen:  :mrgreen:  :mrgreen:

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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Este proyecto continúa adelante con buen pié ...  :mrgreen:  :mrgreen:  :mrgreen:

Soldados los componentes sobre el PCB, dado a la corriente contínua, reconocido el 18F1320 como amigo por el GTP-USB+, programado con el echo.c ...





« Última modificación: 06 de Enero de 2013, 15:07:38 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado poseidon20

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 762
Hola que tal a todos, no se si preguntar, hasta verguenza me da por el contenido del tema, pero espero que el amigo RedPic se digne a mirar esta humilde pregunta. Aca va, Bueno para comenzar estoy tratando de utilizar el teclado de una PC para poder escribir mensajes en un panel matricial (de esos endonde la letra sale de un lado y todo ese rollo), bueno la mayoria que he visto graban los mensajes en esos paneles por medio de la PC pero lo que prentendemos hacer es que el panel sea independiente de esta y solo utilize el teclado, como se comprendera me baje los enlaces que el amigo RedPic pusos al inicio, sino no tendria base sobre la cual formular mis preguntas. La cuestion es que entiendo bien como el teclado envia la informacion, pero tengo una dudillas, digamos que al presionar una tecla el teclado envia el "make code", pero si la tecla se mantiene presionada seguira enviando ese make code hasta que se suelte o solo lo envia una vez a pesar de que la tecla siga presioanda. Bueno cuando la suelta siempre enviara las dos tramas del "brake code". Necesito saber esto para el programa que pienso hacer. Espero que no sea mucha molestia ni insolensia mia preguntar esto, espero que me puedan ayudar. Gracias

:-/ :-/ :-/Cada Uno es Dueño de Su Destino :-/ :-/ :-/

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Hola.
Pues si mal no recuerdo, si mantienes una tecla presionada, seguirá enviando "make codes" hasta que la sueltes.Momento en el cual enviará un "break code". El tiempo entre cada "make code" que enviará si mantienes una tecla presionada es configurable.
¿O estoy equivocado Redpic?
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 RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Exactamente Bruno. El teclado tiene una variable configurable que es el "repeat time" o tiempo de repetición de tecla pulsada.

Poseidon, puedes ver cómo manejo esto desde un PIC en el hilo Ponga un teclado PS/2 en su PIC (vida) Ahí publico el programa completo que lee el teclado y transmito por la RS232 lo que deseo ... tu puedes utilizarlo para guardar un texto, o dar ordenes al PIC o lo que quieras ...

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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Gracias al código escrito por Nostrico en su hilo NECESITO TRANSMITIR DATOS POR EL PS/2 DEL TECLADO...
este proyecto llega a buen puerto ...  :-/  :-/  :-/

He utilizado sus dos funciones para emular el PS/2 y funciona perfectamente.

Al final he realizado lo que os decía hace unos días:

Montar la KBDEMUL recibiendo códigos ASCII desde la RS-232 y convirtiendolos a PS/2, y después envíandoselos a la RRBOARD2 programada con el software del Ponga un teclado PS/2 en su PIC (vida), que a su vez lee PS/2 y convierte a la inversa en ASCII y lo transmite a otro canal serie  :D  :D  :D

O sea: PC Serie COM3 -> PS/2 en KBDEMUL -> PS/2 en RRBOARD2 -> PC Serie COM1




El programa de test queda tal como puede verse mas abajo

Código: C
  1. // Original de Nostrico del foro Todopic
  2. // adaptado al 18f1320 por redpic
  3. //
  4.  
  5. #include <18f1320.h>
  6. #fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
  7. #use delay(OUT_CLOCK=20000000)
  8. #use rs232(baud=9600, xmit=PIN_B1, rcv=PIN_B4)
  9.  
  10. #define CONTROL_A    PIN_A0
  11. #define CONTROL_B    PIN_A1
  12. #define CONTROL_C    PIN_A2
  13. #define CONTROL_INH  PIN_A4
  14.  
  15. #define OUT_CLOCK    PIN_B3
  16. #define OUT_DATA     PIN_B5
  17.  
  18. unsigned int8 rec_char;
  19.  
  20. unsigned char convert_ascci_to_scancode(unsigned char c){
  21.  
  22.    unsigned char scancode;
  23.  
  24.         if (c == 'a' || c == 'A') {scancode = 0x1c;}
  25.    else if (c == 'b' || c == 'B') {scancode = 0x32;}
  26.    else if (c == 'c' || c == 'C') {scancode = 0x21;}
  27.    else if (c == 'd' || c == 'D') {scancode = 0x23;}
  28.    else if (c == 'e' || c == 'E') {scancode = 0x24;}
  29.    else if (c == 'f' || c == 'F') {scancode = 0x2b;}
  30.    else if (c == 'g' || c == 'G') {scancode = 0x34;}
  31.    else if (c == 'h' || c == 'H') {scancode = 0x33;}
  32.    else if (c == 'i' || c == 'I') {scancode = 0x43;}
  33.    else if (c == 'j' || c == 'J') {scancode = 0x3b;}
  34.    else if (c == 'k' || c == 'K') {scancode = 0x42;}
  35.    else if (c == 'l' || c == 'L') {scancode = 0x4b;}
  36.    else if (c == 'm' || c == 'M') {scancode = 0x3a;}
  37.    else if (c == 'n' || c == 'N') {scancode = 0x31;}
  38.    else if (c == 'o' || c == 'O') {scancode = 0x44;}
  39.    else if (c == 'p' || c == 'P') {scancode = 0x4d;}
  40.    else if (c == 'q' || c == 'Q') {scancode = 0x15;}
  41.    else if (c == 'r' || c == 'R') {scancode = 0x2d;}
  42.    else if (c == 's' || c == 'S') {scancode = 0x1b;}
  43.    else if (c == 't' || c == 't') {scancode = 0x2c;}
  44.    else if (c == 'u' || c == 'U') {scancode = 0x3c;}
  45.    else if (c == 'v' || c == 'V') {scancode = 0x2a;}
  46.    else if (c == 'w' || c == 'W') {scancode = 0x1d;}
  47.    else if (c == 'x' || c == 'X') {scancode = 0x22;}
  48.    else if (c == 'y' || c == 'Y') {scancode = 0x35;}
  49.    else if (c == 'z' || c == 'Z') {scancode = 0x1a;}
  50.  
  51.    else if (c == '0') {scancode = 0x45;}
  52.    else if (c == '1') {scancode = 0x16;}
  53.    else if (c == '2') {scancode = 0x1e;}
  54.    else if (c == '3') {scancode = 0x26;}
  55.    else if (c == '4') {scancode = 0x25;}
  56.    else if (c == '5') {scancode = 0x2e;}
  57.    else if (c == '6') {scancode = 0x36;}
  58.    else if (c == '7') {scancode = 0x3d;}
  59.    else if (c == '8') {scancode = 0x3e;}
  60.    else if (c == '9') {scancode = 0x46;}
  61.  
  62.    else if (c == '/') {scancode = 0x5a;}   // ENTER
  63.    else if (c == ' ') {scancode = 0x29;}   // ESPACIO
  64.    else if (c == '>') {scancode = 0x0d;}   // TABULADOR
  65.    else if (c == '<') {scancode = 0x66;}   // BORRADOR
  66.    else if (c == '$') {scancode = 0x58;}   // TAG DE MAYUSCULA $m$yuscula
  67.    else if (c == '-') {scancode = 0x4a;}   // -_
  68.  
  69.    else {scancode = 0x29;}                 // Cualquier otra cosa ESPACIO
  70.  
  71.    return scancode;
  72. }
  73.  
  74.  
  75. void output_scancode_ps2(unsigned char scancode){
  76.  
  77.    int contador;
  78.    int salida, unos=1;
  79.    boolean paridad=true;
  80.  
  81.    output_high(OUT_CLOCK);        // START -------------------------------
  82.    output_high(OUT_DATA);
  83.    delay_us(40);
  84.  
  85.    output_high(OUT_CLOCK);
  86.    output_low(OUT_DATA);
  87.    delay_us(40);
  88.  
  89.    output_low(OUT_CLOCK);
  90.    output_low(OUT_DATA);
  91.    delay_us(40);
  92.  
  93.    salida =1;
  94.  
  95.    do{
  96.       output_high(OUT_CLOCK);
  97.       output_bit(OUT_DATA, scancode&0x01);
  98.       delay_us(40);
  99.       output_low(OUT_CLOCK);
  100.       output_bit(OUT_DATA, scancode&0x01);
  101.       delay_us(40);
  102.  
  103.       if ((scancode & 0x01) == 0x01) {unos++;}
  104.  
  105.       scancode = scancode>>1;
  106.       salida++;
  107.  
  108.    }while(salida <  9);
  109.  
  110.    output_high(OUT_CLOCK);        // PARITY ------------------------------
  111.    output_bit(OUT_DATA, unos&0x01);
  112.    delay_us(40);
  113.    output_low(OUT_CLOCK);
  114.    output_bit(OUT_DATA, unos&0x01);
  115.    delay_us(40);
  116.  
  117.    output_high(OUT_CLOCK);        // STOP --------------------------------
  118.    output_high(OUT_DATA);
  119.    delay_us(40);
  120.    output_low(OUT_CLOCK);
  121.    output_high(OUT_DATA);
  122.    delay_us(40);
  123.  
  124.    output_high(OUT_CLOCK);        // FIN ---------------------------------
  125.    output_high(OUT_DATA);
  126.  
  127.    delay_ms(175);
  128. }
  129.  
  130.  
  131. void main(){
  132.  
  133.    delay_ms(300);
  134.    printf("\r\nKBDEMUL with a 18F1320\r\nInject signal for PS/2\r\n\n");
  135.    delay_ms(500);
  136.  
  137.    output_high(CONTROL_A); // Conmuta CD4053 a salida PIC->PC
  138.    output_high(CONTROL_B);
  139.    output_high(CONTROL_C);
  140.  
  141.    do{
  142.       rec_char=getch();
  143.       putc(rec_char;);
  144.       output_scancode_ps2(convert_ascci_to_scancode(rec_char));
  145.    }while(true);
  146.  
  147. }

Y por último el montaje completo conectado al PC de mi hija, que alimenta y "habla" con el teclado salvo que el PIC "inyecte" algun texto, que entonces aparece en el PC tal cual se hubiese tecleado  :mrgreen:  :mrgreen:  :mrgreen:




Y con esto y un bizcocho, hasta mañana a las ocho  :D  :D  :D

« Última modificación: 06 de Enero de 2013, 15:09:49 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado nostrico

  • PIC10
  • *
  • Mensajes: 33
Re: Proyecto: Emulación Teclado PS/2 con PIC (Engañe a su PC y dele gato por liebre)
« Respuesta #12 en: 11 de Septiembre de 2006, 09:41:34 »
Saludos REDPIC te felicito por este proyecto amigo... y estamos a la orden... Tengo otros codigitos que le pueden servir a mucha gente por acá... pronto se los enviaré...

 :-/ NOSTRICO  :-/  NOSTRICO  :-/ NOSTICO  :-/ JGCJ ... OPEN SOURCE...
"La electronica nos salvará..." CZWIENCZEK

Desconectado ESTECA55

  • PIC24H
  • ******
  • Mensajes: 1404
Re: Proyecto: Emulación Teclado PS/2 con PIC (Engañe a su PC y dele gato por lie
« Respuesta #13 en: 11 de Septiembre de 2006, 12:08:49 »
hola

RedPic, fantastico este proyecto, la verdad que tiene muchas aplicaciones, y paso a contarles una que pienso darle muy pronto,

El programa de CNC Mach, tiene la posibilidad de asignar como entradas cualquier tecla del teclado, ya que por el puerto paralelo se disponen solo de 5 entardas, de esta manera, se puede ampliar la cantidad de entradas.

Gracias, ya les contare cuando arme algo

Exitos
Hay que esforzarse por ser el mejor, no creerse el mejor

Desconectado jel_75

  • PIC10
  • *
  • Mensajes: 10
Re: Proyecto: Emulación Teclado PS/2 con PIC (Engañe a su PC y dele gato por liebre)
« Respuesta #14 en: 20 de Octubre de 2006, 18:08:18 »
Hola, los felicito por este proyecto la verdad que muy bueno, pero ahora los molesto con una pregunta se podria hacer que tambien leyese e indicase el estado de los 3 leds? alguna pista...

Muchas Gracias de parte de "El Rengo de la Maraton de los PICs".
Leer dos veces, preguntar una.