:-/ :mrgreen: :mrgreen: :mrgreen: :-/
Mi primer producto profesional ....
Aunque la primera tirada ha sido realizada de forma artesanal la siguiente va ya con todas las bendiciones de una fabricación profesional, profesional.
Muchas gracias al amigo Azicuetano por su apoyo y ayuda. :wink:
¡¡¡ Gracias Iván !!!
Primera remesa profesional de placas del KBDEMUL
A ver.....RedPic, corrigeme si estoy muy equivocado:
¿Seria posible usando lo expuesto en este hilo hacer una interfaz que "traduzca" la pulsacion de varios pulsadores robustos a "golpes de tecla" en la PC?
Tengo muchas ganas de armar una maquina tipo "fichines" con el MAME, con un mueble y todo, y la parte de los controles me tenia medio complicado...pero si se puede engañar al ordenador que esta dentro de la caja y hacerle creer que se estan pulsando teclas (las asignadas por el MAME) mientras que en realidad se estan machacando brutos e irrompibles pulsadores industriales, seria la ostia! :-/
Es posible?!?!? :shock:
Lo que voy a hacer es el mueble para esconder la compu dentro, y hacerme el bocho de que tengo una de las maquinas originales....prometo mostrar resultados, y si hay interes, abrir un hilo e ir mostrando resultados.
Hola,
En primer lugar felicitar a RedPic por este genial proyecto.
Yo queria comentar un problema que tengo. Necesito hacer que un pic me envie la pulsación de una tecla cada cierto tiempo.
Lo que he hecho es montar un 16F876A en una plaquita a 10Mhz y lo he programado con el codigo que ha colgado RedPic. Al no tener que conmutar de teclado a pic he obiado todo lo referente a este hw y en el main simplemente he hecho que mande una 'a' cada 3 segundo. El HW utilizado simplemente es el conector PS/2 macho con las dos R de 10K de pull-up en el data y el clk (pines RB5 y RB3). Todo el sistema se alimenta de la tension del PC (5V del conector PS/2).
Ahora viene cuando lo conecto al PC (y este con el cursor en un bloc de notas ) en teoria tendria que escribir a aaaaaaaaaaaaa... etc... y no hace nada... simplemente mi PC se pone a pitar... que puede suceder???
Muchas gracias por todo.
Atentamente Aleix.
Si no recuerdo mal, ya existe una librería completa, que hace lo que estas comentando, en MikroBasic, pero nada como hacer la librería propia ¿verdad? :D
Busquen por aquí: http://picmania.garcia-cuervo.net/proyectos.php
Saludos!
// Original de Nostrico del foro Todopic
// adaptado al 18f1320 por redpic
//
#include <18f1320.h>
#fuses HS,MCLR,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP,NOCPD,NODEBUG,NOWRT
#use delay(OUT_CLOCK=20000000)
#use rs232(baud=9600, xmit=PIN_B1, rcv=PIN_B4)
#define CONTROL_A PIN_A0
#define CONTROL_B PIN_A1
#define CONTROL_C PIN_A2
#define CONTROL_INH PIN_A4
#define OUT_CLOCK PIN_B3
#define OUT_DATA PIN_B5
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);
printf("\r\nKBDEMUL with a 18F1320\r\nInject signal for PS/2\r\n\n");
delay_ms(500);
output_high(CONTROL_A); // Conmuta CD4053 a salida PIC->PC
output_high(CONTROL_B);
output_high(CONTROL_C);
do{
rec_char=getch();
putc(rec_char;);
output_scancode_ps2(convert_ascci_to_scancode(valor));
}while(true);
} Por el momento no he podido programar un solo PIC :/rec_char = getch(); a lenguaje arduinopuct(rec_char;); como se haria?output_bit(OUT_DATA, unos&0x01);especificamente que significa la rutina "unos&0x01"?? lo entiendo como una comparacion en pic? de la cantidad de "1's" en el scancode comparndo con "1"???int clock = 10;
int data = 11;
char lectura;
byte peticion;
boolean bit_paridad = 0;
int delay_inicio = 20;
int delay_micro = 40;
void setup(){
pinMode(clock, OUTPUT);
digitalWrite(clock, HIGH);
pinMode(data, OUTPUT);
digitalWrite(data, HIGH);
Serial.begin(9600);
}
void loop(){
if(Serial.available()){
lectura = Serial.read();
if(lectura == 'A'){mayuscula(0x1c);}
else if(lectura == 'B'){mayuscula(0x32);}
else if(lectura == 'C'){mayuscula(0x21);}
else if(lectura == 'D'){mayuscula(0x23);}
else if(lectura == 'E'){mayuscula(0x24);}
else if(lectura == 'F'){mayuscula(0x2b);}
else if(lectura == 'G'){mayuscula(0x34);}
else if(lectura == 'H'){mayuscula(0x33);}
else if(lectura == 'I'){mayuscula(0x43);}
else if(lectura == 'J'){mayuscula(0x3b);}
else if(lectura == 'K'){mayuscula(0x42);}
else if(lectura == 'L'){mayuscula(0x4b);}
else if(lectura == 'M'){mayuscula(0x3a);}
else if(lectura == 'N'){mayuscula(0x31);}
else if(lectura == 'O'){mayuscula(0x44);}
else if(lectura == 'P'){mayuscula(0x4d);}
else if(lectura == 'Q'){mayuscula(0x15);}
else if(lectura == 'R'){mayuscula(0x2d);}
else if(lectura == 'S'){mayuscula(0x1b);}
else if(lectura == 'T'){mayuscula(0x2c);}
else if(lectura == 'U'){mayuscula(0x3c);}
else if(lectura == 'V'){mayuscula(0x2a);}
else if(lectura == 'W'){mayuscula(0x1d);}
else if(lectura == 'X'){mayuscula(0x22);}
else if(lectura == 'Y'){mayuscula(0x35);}
else if(lectura == 'Z'){mayuscula(0x1a);}
else if(lectura == 'a'){caracter(0x1c);}
else if(lectura == 'b'){caracter(0x32);}
else if(lectura == 'c'){caracter(0x21);}
else if(lectura == 'd'){caracter(0x23);}
else if(lectura == 'e'){caracter(0x24);}
else if(lectura == 'f'){caracter(0x2b);}
else if(lectura == 'g'){caracter(0x34);}
else if(lectura == 'h'){caracter(0x33);}
else if(lectura == 'i'){caracter(0x43);}
else if(lectura == 'j'){caracter(0x3b);}
else if(lectura == 'k'){caracter(0x42);}
else if(lectura == 'l'){caracter(0x4b);}
else if(lectura == 'm'){caracter(0x3a);}
else if(lectura == 'n'){caracter(0x31);}
else if(lectura == 'o'){caracter(0x44);}
else if(lectura == 'p'){caracter(0x4d);}
else if(lectura == 'q'){caracter(0x15);}
else if(lectura == 'r'){caracter(0x2d);}
else if(lectura == 's'){caracter(0x1b);}
else if(lectura == 't'){caracter(0x2c);}
else if(lectura == 'u'){caracter(0x3c);}
else if(lectura == 'v'){caracter(0x2a);}
else if(lectura == 'w'){caracter(0x1d);}
else if(lectura == 'x'){caracter(0x22);}
else if(lectura == 'y'){caracter(0x35);}
else if(lectura == 'z'){caracter(0x1a);}
else if(lectura == '0'){caracter(0x45);}
/* else if(lectura == '1'){caracter(0x16);}
else if(lectura == '2'){caracter(0x1e);}
else if(lectura == '3'){caracter(0x26);}
else if(lectura == '4'){caracter(0x25);}
else if(lectura == '5'){caracter(0x2e);}
else if(lectura == '6'){caracter(0x36);}
else if(lectura == '7'){caracter(0x3d);}
else if(lectura == '8'){caracter(0x3e);}
else if(lectura == '9'){caracter(0x46);}
else if(lectura == '0'){caracter(0x45);} */ //esto se usa en caso de querer pulsar las teclas de arriba,
else if(lectura == '1'){caracter(0x69);}
else if(lectura == '2'){caracter(0x72);} //estas otras para usar el num pad
else if(lectura == '3'){caracter(0x7a);}
else if(lectura == '4'){caracter(0x6b);}
else if(lectura == '5'){caracter(0x73);}
else if(lectura == '6'){caracter(0x74);}
else if(lectura == '7'){caracter(0x6c);}
else if(lectura == '8'){caracter(0x75);}
else if(lectura == '9'){caracter(0x7d);}
else if(lectura == '0'){caracter(0x70);}
else if(lectura == ' '){mayuscula(0x29);} //Espacio!!
else if(lectura == '>'){caracter(0x5a);} //Enter!!!!
else if(lectura == '<'){caracter(0x66);} //Borrar!!!
else if(lectura == '*'){ctrl();caracter(0x1c);F0();ctrl();} //Seleccionar todo!!!
else if(lectura == '+'){ctrl();caracter(0x76);F0();ctrl();} //Ctrl + Esc (inicio)
else if(lectura == '$'){caracter(0x0d);} //Tab!!!
else if(lectura == '|'){alt();caracter(0x0c);F0();alt();} //Cerrar!!!
else if(lectura == '.'){caracter(0x49);}
else if(lectura == ','){caracter(0x41);}
else if(lectura == '@'){alt();caracter(0x1c);caracter(0x74);caracter(0x6b);F0();alt();}
else if(lectura == '?'){alt();caracter(0x74);caracter(0x7a);F0();alt();}
}
}
void mayuscula(byte peticion){
shift();
bit_paridad = HIGH;
iniciar();
for(int contador = 0; contador <= 7; contador++){
digitalWrite(clock, HIGH);
digitalWrite(data, bitRead(peticion, contador));
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bitRead(peticion, contador));
delayMicroseconds(delay_micro);
if(bitRead(peticion, contador) ==1){bit_paridad = !bit_paridad;}
}
digitalWrite(clock, HIGH);
digitalWrite(data, bit_paridad);
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bit_paridad);
delayMicroseconds(delay_micro);
finalizar();
F0();
shift();
F0();
bit_paridad = HIGH;
iniciar();
for(int contador = 0; contador <= 7; contador++){
digitalWrite(clock, HIGH);
digitalWrite(data, bitRead(peticion, contador));
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bitRead(peticion, contador));
delayMicroseconds(delay_micro);
if(bitRead(peticion, contador) ==1){bit_paridad = !bit_paridad;}
}
digitalWrite(clock, HIGH);
digitalWrite(data, bit_paridad);
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bit_paridad);
delayMicroseconds(delay_micro);
finalizar();
}
void caracter(byte peticion){
bit_paridad = HIGH;
iniciar();
for(int contador = 0; contador <= 7; contador++){
digitalWrite(clock, HIGH);
digitalWrite(data, bitRead(peticion, contador));
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bitRead(peticion, contador));
delayMicroseconds(delay_micro);
if(bitRead(peticion, contador) ==1){bit_paridad = !bit_paridad;}
}
digitalWrite(clock, HIGH);
digitalWrite(data, bit_paridad);
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bit_paridad);
delayMicroseconds(delay_micro);
finalizar();
F0(); //Se suelta la tecla
bit_paridad = HIGH;
iniciar();
for(int contador = 0; contador <= 7; contador++){
digitalWrite(clock, HIGH);
digitalWrite(data, bitRead(peticion, contador));
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bitRead(peticion, contador));
delayMicroseconds(delay_micro);
if(bitRead(peticion, contador) ==1){bit_paridad = !bit_paridad;}
}
digitalWrite(clock, HIGH);
digitalWrite(data, bit_paridad);
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bit_paridad);
delayMicroseconds(delay_micro);
finalizar();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////Rutina de inicio///////////////////////////////////////////////////////////
void iniciar(){
delay(delay_inicio);
Serial.flush();
digitalWrite(clock, HIGH);
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
digitalWrite(clock, HIGH);
digitalWrite(data, LOW);
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, LOW);
delayMicroseconds(delay_micro);
}
void finalizar(){
digitalWrite(clock, HIGH); ////// STOP
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
digitalWrite(clock, HIGH);
digitalWrite(data, HIGH); ////// FIN
delay(delay_inicio);
}
void shift(){
iniciar();
for(int contador = 0; contador <= 7; contador++){
digitalWrite(clock, HIGH);
digitalWrite(data, bitRead(0x12, contador));
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bitRead(0x12, contador));
delayMicroseconds(delay_micro);
}
digitalWrite(clock, HIGH);
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
finalizar();
}
void F0(){
iniciar();
for(int contador = 0; contador <= 7; contador++){
digitalWrite(clock, HIGH);
digitalWrite(data, bitRead(0xf0, contador));
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bitRead(0xf0, contador));
delayMicroseconds(delay_micro);
}
digitalWrite(clock, HIGH);
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
finalizar();
}
void ctrl(){
iniciar();
for(int contador = 0; contador <= 7; contador++){
digitalWrite(clock, HIGH);
digitalWrite(data, bitRead(0x14, contador));
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bitRead(0x14, contador));
delayMicroseconds(delay_micro);
}
digitalWrite(clock, HIGH);
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
finalizar();
}
void alt(){
iniciar();
for(int contador = 0; contador <= 7; contador++){
digitalWrite(clock, HIGH);
digitalWrite(data, bitRead(0x11, contador));
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, bitRead(0x11, contador));
delayMicroseconds(delay_micro);
}
digitalWrite(clock, HIGH);
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
digitalWrite(clock, LOW);
digitalWrite(data, HIGH);
delayMicroseconds(delay_micro);
finalizar();
}
Estimados colegas, les comento que logre implementar exitosamente el codigo.1. CCS
Tengo el problema de que en algunas maquinas puedo enviar sin problema los scan codes, y en otras no. Supongo que es por el problema de hacer la comunicacion bidireccional.
En mi caso, use un PIC16F628a, pero lamentablemente la entrada de interrupcion externa las estoy usando para leer pulsos de sensores, y dichos pulsos son enviados hacia la PC a traves de PS2.
Como dije anteriormente, funciona correctamente sin la comunicacion bidireccional, pero como hago para leer lo que envia el host si no tengo acceso a la interrupcion.
Muchos saludos!
#include <16F628A.h> // Definiciones del PIC 16F628a
#fuses INTRC,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT // Los Fuses de siempre
#use delay(internal=4000000) // Oscilador a 4 Mhz
#define T_CLOCK PIN_B2
#define T_DATA PIN_B1
unsigned int8 valor;
char miletra;
/* ****************************************************************************************** */
void vEnvia_Byte(char Data){
char k=0,Unos=1;
while(input(T_CLOCK)==0);
output_high(T_CLOCK);
output_high(T_DATA);
output_drive(T_DATA);
output_drive(T_CLOCK);
/* ** Enviamos Bit Start ** */
output_high(T_CLOCK);
output_high(T_DATA);
delay_us(40);
output_low(T_DATA);
delay_us(40);
output_low(T_CLOCK);
delay_us(40);
/* ** Enviamos 8 bits de datos ** */
for(k=0;k<8;k++){
output_high(T_CLOCK);
delay_us(5);
output_bit(T_DATA,Data & 0x01);
delay_us(35);
output_low(T_CLOCK);
delay_us(40);
if(bit_test(Data,0)==1){Unos++;}
Data>>=1;
}
/* ** Enviamos bit de paridad ** */
output_high(T_CLOCK);
delay_us(5);
output_bit(T_DATA,Unos&0x01);
delay_us(35);
output_low(T_CLOCK);
delay_us(40);
/* ** Enviamos bit Stop ** */
output_high(T_CLOCK);
delay_us(5);
output_high(T_DATA);
delay_us(35);
output_low(T_CLOCK);
delay_us(40);
output_float(T_CLOCK);
output_float(T_DATA);
delay_us(100);
}
/* ****************************************************************************************** */
char cLee_Byte(void){
char k;
char Data=0xEC;
/* ** Condicion RTS ** */
delay_us(100);
if(input(T_DATA)==0){
/* ** Esperamos a que el Host este listo para enviar datos ** */
while(input(T_CLOCK)==0);
output_high(T_CLOCK);
output_drive(T_CLOCK);
output_high(T_CLOCK);
delay_us(200);
output_low(T_CLOCK);
if(input(T_DATA)==0){
/* ** Se recibe los 8 bits de datos ** */
for(k=0;k<8;k++){
delay_us(40);
output_high(T_CLOCK);
delay_us(20);
shift_right(&Data,1,input(T_DATA));
delay_us(20);
output_low(T_CLOCK);
}
/* ** Se ignora bit de paridad ** */
delay_us(40);
output_high(T_CLOCK);
delay_us(40);
output_low(T_CLOCK);
/* ** Se testea bit Stop ** */
delay_us(40);
output_high(T_CLOCK);
delay_us(20);
if(input(T_DATA)==1){
delay_us(15);
/* ** Se envia Ack ** */
output_drive(T_DATA);
output_low(T_DATA);
delay_us(5);
output_low(T_CLOCK);
delay_us(40);
output_high(T_CLOCK);
delay_us(10);
}
}
}
output_float(T_CLOCK);
output_float(T_DATA);
delay_us(100);
return(Data);
}
/* ****************************************************************************************** */
#int_EXT
void Leer_Host(){
static char Dato_Host;
Dato_Host=cLee_Byte();
if(Dato_Host!=0xEC){
if(Dato_Host==0xEE){
vEnvia_Byte(0xEE);
}else{
vEnvia_Byte(0xFA);
if(Dato_Host==0xF2){
vEnvia_Byte(0xAB);
vEnvia_Byte(0x83);
}
if(Dato_Host==0xFF){
delay_ms(1);
vEnvia_Byte(0xAA);
}
}
}
}
/* ****************************************************************************************** */
void main()
{
delay_ms(800);
vEnvia_Byte(0xAA);
ext_int_edge(H_TO_L);
clear_interrupt(INT_EXT);
enable_interrupts(INT_EXT);
enable_interrupts(GLOBAL);
do{
vEnvia_Byte(0x44); //O
delay_ms(100);
vEnvia_Byte(0x4b); //L
delay_ms(100);
vEnvia_Byte(0x1c); //A
delay_ms(100);
vEnvia_Byte(0x29); //ESPACIO
delay_ms(100);//
vEnvia_Byte(0x42); //K
delay_ms(100);//
vEnvia_Byte(0x24); //E
delay_ms(100);
vEnvia_Byte(0x29); //ESPACIO
delay_ms(100);//
vEnvia_Byte(0x1c); //A
delay_ms(100);//
vEnvia_Byte(0x1b); //S
delay_ms(100);//
vEnvia_Byte(0x24); //E
delay_ms(100);//
vEnvia_Byte(0x29); //ESPACIO
delay_ms(100);//
vEnvia_Byte(0x29); //ESPACIO
delay_ms(100);//
vEnvia_Byte(0x29); //ESPACIO
delay_ms(100);//
output_toggle(PIN_B3);
delay_ms(500);
}
while(true);
}
Le coloqué un led piloto en el pin B3 para ver si funcionaba, como dije, solamente al conectar otro teclado ps2 cuando la pc inicia, al sacar el teclado y conectar el pic al puerto ps2 me escribe..si conecto el pic al puerto ps2 al iniciar la pc, no escribe nada...disculpen las molestias...