Autor Tema: Proyecto : Ponga un teclado PS/2 en su PIC (vida)  (Leído 25029 veces)

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

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« en: 25 de Marzo de 2006, 15:39:00 »
A modo de Preludio:

En esto estoy ahora metido .... Voy a intentar conectarle un teclado estándar PS/2 de PC
a mi <a href="http://picmania.garcia-cuervo.net/Proyectos_RRBoard1.htm" target="_blank">RRBOARD1[/url]. Abro ya el proyecto por si alguno de ustedes tiene ya experiencia y puede
ya ir haciendome amables comentarios.

Me he pasado por la página de Nocturno, <a href="http://manolo.auna.net/proyectos-raton.html" target="_blank">El Rebujito[/url], que tiene algo muy similar pero
con Dspic y un Ratón PS/2 (el 90% de lo que me hace falta ya lo ha experimentado él)
y por otros enlaces en los que está todo comido y masticado ... pero hay que hacerlo, no leerlo BR]
La conexión PS/2 es una conexión serie síncrona bidireccional (hay una línea de
datos y una de clock). Utiliza 1 bit de inicio, 8 de datos, 1 de paridad y un bit o
un byte de ACK.

La comunicación del PIC-PC al Teclado PS/2 tiene este timming:



La comunicación del Teclado al PIC-PC este otro :

<img src="http://picmania.garcia-cuervo.net/images/PRJ_PS2_kbd2host.gif" border=0>

Los conectores PS/2 tienen este pinout:

<img src="http://picmania.garcia-cuervo.net/images/PRJ_PS2_Connector.GIF" border=0>

Como las líneas Data y Clock necesitan unas resistencias Pull-up voy a conectarlos
de esta forma:

<img src="http://picmania.garcia-cuervo.net/images/PRJ_PS2_Connection.GIF" border=0>

Una vez inicializado el Teclado PS/2 éste envía Scan Codes por la línea Data,
no carácters ASCII. Son códigos de rastreo de teclado, que envía uno al ser
pulsada una tecla y otro al ser soltada dicha tecla. Estos Scan Codes pueden se de
1, 2 o 3 bytes de largo:

Los códigos de rastreo de teclado son :

<img src="http://picmania.garcia-cuervo.net/images/PRJ_PS2_Scancode_01.gif" border=0>

<img src="http://picmania.garcia-cuervo.net/images/PRJ_PS2_Scancode_02.gif" border=0>

Con esto de los codigos de rastreo se produce una cosa curiosa:

Si por ejemplo queremos que nos transmita la letra "G", en mayúsculas, la secuencia
debe ser: Presionar la tecla "Shift", presionar la tecla "G", soltar la tecla "G" y soltar
la tecla "Shift". Los Scan Codes entonces serán los correspondientes a las pulsaciones
y "sueltas" de estas dos teclas : Pulsar Shift -> 12h, Pulsar "G" -> 34h, Soltar "G"
-> F0h 34h y soltar Shift -> F0h 12h por lo que la secuencia completa nos llegará
como: 12h, 34h, F0h, 34h, F0h, 12h. ( Casi ná )


Ahora voy a ponerme a publicarle a la RRBOARD1 los Pines RB0 que voy a utilizar para
detectar el Clock mediante la interrupción externa, y los pines RB3 o RB4 que voy a usar
para el Data. Los RB1 y RB2 los reservo para las comunicaciones RS232 con el PC para
poder monitorizar lo que vaya ocurriendo, Manolo Nocturno en su proyecto con el ratón
utiliza la USART para este cometido, yo creo que voy a implementar "a pelo" la
recepción de los códigos ....

En fin, os tendré al tanto.

Ya veremos cómo se me dá <img   src="http://pics.miarroba.net/caretos/smokie.gif" alt="Fumador" title="Fumador" />  ....




« Última modificación: 09 de Junio de 2007, 17:33:58 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
« Última modificación: 07 de Mayo de 2006, 10:04:48 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8259
    • Sitio de MigSantiago
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #2 en: 25 de Marzo de 2006, 16:32:00 »
Talvez ya tengas este archivo... o talvez no... Muchas risas

Teclado AT-PS2 Interfaz y funciones v1.2.pdf
http://www.4shared.com/dir/251403/ddb5213f/Todopic.html

Sonrisa Gigante

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #3 en: 25 de Marzo de 2006, 16:40:00 »
Muchas gracias Migsantiago ... no, no lo tenía ... lo subo inmediatamente y modifico el
post anterior para añadirlo. Puede ser muy util e intersante tener mas información en
español. Hay muchos amigos foreros que no tienen n.p.i. de Espikinglish Muchas risas


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

Desconectado atlasdelcarinakeel

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 277
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #4 en: 26 de Marzo de 2006, 11:28:00 »
Que tal, hace algun tiempo hice algo asi con un micro AT89C51. El siguiente enlace fue mi referencia:

http://www.beyondlogic.org/keyboard/keybrd.htm

Y aqui esta el codigo. Solo esta la parte de las letras en minusculas y mayusculas, asi como los numeros que estan arriba de las letras. El shift me parece que no me funciono. Sonrisa Gigante

;////////////AQUI TENGO CONECTADO UN TECLADO TIPO DIN DE 6 PINES AL MICROCONTROLADOR 89C51//////////////
;/////////// CON EL MICRO LEO EL DATO Y LO ENVIO SERIAL AL HIPERTERMINAL///////////////////////////////


$MOD51

VAL1   EQU   30H   ;AREA NO BIT A BIT
VAL2   EQU   31H
VAL3   EQU   32H
LETRA   EQU   33H

SEMAFOR   EQU   23H   ;AREA BIT A BIT
AUX_BIT   EQU   21H
COMP   EQU   22H

IN   BIT   P3.0

   ORG   00H
   JMP   CONFIG

   ORG   003H
   JMP   SERVI

CONFIG:   MOV   IE,#81H
   MOV   SP,#78H
   MOV   TCON,#01H
   MOV   SCON,#53H
   MOV   TMOD,#20h      
   MOV   PCON,#80H
   MOV   TH1,#0FDH
   MOV   P1,#00H
   MOV   R0,#00H
   CLR   COMP.0
   
CICLO:   NOP
   JMP   CICLO      ;Espero que llegue el primer clock y se interrumpe el micro

SERVI:   CALL   CARGA
   CLR   SEMAFOR.0

LOOP0:   JNB   IN,START   ;ESPERA BIT INICIO
   JMP   LOOP0

START:   JB   SEMAFOR.0,VISUAL ;Pregunto si la bandera es uno y salto a la etiqueta VISUAL
   CALL   RET_100Mseg
   
   JNB   IN,LOOP1   ;REVISA LOS BIT"S EN P3, A TRAVES DE ESTE PIN ENTRARAN LOS BITS DE DATOS
   CALL   UNO
   JMP   START
LOOP1:   CALL   CERO
   JMP   START
   

;////////////////AQUI LLEGO CUANDO LA BANDERA SEMAFOR.0 ES "1"////////////////

VISUAL:            
   ;MOV   P1,A      ;RESPALDO EL VALOR EN EL REGISTRO LETRA
   MOV   LETRA,A
   CALL   RET1      
   MOV   A,LETRA
   

;//////////////APARIR DE AQUI PREGUNTO QUE TECLA PRESIONE/////////////

ENTER:   CJNE   A,#5AH,BLOCK   ;AQUI PUEDES SUSTITUIR BLOCK POR SHIFIZ   Y PROBAR
   MOV   A,#0DH      ;VALOR PARA PASAR A LA SIGUIENTE LINEA
   CALL   Trans                    
   MOV   A,#0AH
   CALL   Trans
   MOV   A,#00H
   JMP   SAL


;//////////////LAS RUTINAS DE SHIFT NO RECUERDO QUE ME HALLAN FUNCIONARON/////////////////
SHIFIZ:   CJNE   A,#12H,SHIFDE   
   SETB   COMP.1
   ;MOV   R1,#00h
   JB   COMP.0,MINUS   ;JB   MINUS
   JNB   COMP.0,MAYUS   ;JB   MAYUS
   JMP   SAL

SHIFDE: CJNE    A,#59H,BLOCK
   SETB   COMP.1
   ;MOV   R1,#00h
   ;JB   COMP.0,CBLOQ
   ;JNB   COMP.0,SBLOQ
   JMP   SAL
;/////////////////////////////////////////////////////////////////////


BLOCK:   CJNE   A,#58H,BAND
   JMP   GRAND

GRAND:   INC   R0
   SETB   COMP.0
   CJNE   R0,#02H,SAL
   CLR   COMP.0
   MOV   R0,#00H
   JMP   SAL

BAND:   JB   COMP.0,MAYUS      ;AQUI PREGUNTO POR EL ESTADO DE LA BANDERA COMP.0 Y VOY A LA SUBRUTINA CORRESPONDIENTE
   JNB   COMP.0,MINUS

MINUS:   MOV   A,LETRA
   MOV   DPTR,#Minusculas
   MOVC   A,@A+DPTR
   CALL   Trans
   JMP   SAL
      
MAYUS:   MOV   A,LETRA
   MOV   DPTR,#Mayusculas   ;CARGO EL DPTR CON LA TABLA MAYUSCULA
   MOVC   A,@A+DPTR      ;INCREMENTO EL DPTR HASTA ENCONTRAR EL VALOR CORRESPONDIENTE EN LA TABLA Y LO CARGO EN EL ACUMULADOR
   CALL    Trans                   ;LLAMO LA RUTINA DE ENVIO
   JMP   SAL

;//////////////RUTINA DE ENVIO SERIAL AL PC//////////////////////////////

Trans:   MOV     SBUF,A     
   SETB   TR1      
   CLR   TI
   JNB    TI,$         
   CLR     TI   
   CLR   TR1
   CALL   RET1
   RET

SAL:   CLR   IE0
   RETI

UNO:   SETB   ACC.7      ;PONGO UN "1" EN EL ACUMULADOR SI EL PRIMER BIT DE DATO ES "1"
   DJNZ   AUX_BIT,ROTAR1  ;DECREMENTO AUX_BIT QUE ES EL CONTADOR DE 8 BITS QUE ME INDICA CUANDO LLEGAN TODOS LOS DATOS
   JMP   THEN1
ROTAR1:   RR   A      ;ROTO EL ACUMULADOR PARA IR ACOMODANDO EL DATO
   JMP   SALIR1      ;sALTO PARA SALIR DE LA SUBRUTINA Y ESPERAR EL SIGUIENTE BIT DE DATOS
THEN1:   SETB   SEMAFOR.0   ;LEVANTO LA BANDERA PARA INDICAR QUE LLEGARON LOS 8 BITS DE DATO
SALIR1:   RET


CERO:   CLR   ACC.7      ;IGUAL QUE LA SUBRUTINA UNO, PERO SE COLOCA "0" SEA NECESARIO
   DJNZ   AUX_BIT,ROTAR2
   JMP   THEN2
ROTAR2:   RR   A
   JMP   SALIR2
THEN2:   SETB   SEMAFOR.0
SALIR2:   RET


CARGA:   MOV   AUX_BIT,#08H
   MOV   ACC,#00H
   RET   

RET_100Mseg:
   MOV   VAL1,#28D
DESC:   DJNZ   VAL1,DESC
   RET

RET1:   
   MOV   VAL1,#10D
TERC1:   MOV   VAL2,#10D
SEGU1:   MOV   VAL3,#10D
PRIM1:   DJNZ   VAL3,PRIM1
   DJNZ   VAL2,SEGU1
   DJNZ   VAL1,TERC1
   RET



;/////////////////////////TABLAS/////////////////////
Minusculas:   
   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     09H   ;TABULADOR(14)   
   DB     ""      
   DB     00H      
   DB     00H      
   DB     00H      
   DB     00H   
   DB     00H         
   DB     00H         
   DB     "q"      
   DB     "1"      
   DB     00H      
   DB     00H   
   DB     00H      
   DB     "z"      
   DB     "s"      
   DB     "a"      
   DB     "w"         
   DB     "2"         
   DB     00H         
   DB     00H      
   DB     "c"      
   DB     "x"      
   DB     "d"      
   DB     "e"      
   DB     "4"      
   DB     "3"      
   DB     00H      
   DB     00H         
   DB     " "          
   DB     "v"         
   DB     "f"      
   DB     "t"   
   DB     "r"      
   DB     "5"      
   DB     00H      
   DB     00H      
   DB     "n"      
   DB     "b"      
   DB     "h"         
   DB     "g"         
   DB     "y"         
   DB     "6"      
   DB     00H      
   DB     00H      
   DB     00H   
   DB     "m"   
   DB     "j"      
   DB     "u"      
   DB     "7"      
   DB     "8"         
   DB     00H         
   DB     00H         
   DB     ","         
   DB     "k"         
   DB     "i"      
   DB     "o"      
   DB     "0"      
   DB     "9"      
   DB     00H      
   DB     00H      
   DB     "."         
   DB     "-"         
   DB     "l"         
   DB     164   ;ñ(77)   
   DB     "p"      
   DB     39   ;"(79)      
   DB     00H      
   DB     00H      
   DB     ","      
   DB     "{"      
   DB     00H      
   DB     "["         
   DB     173   ;?(86)*         
   DB     00H         
   DB     00H      
   DB     00H      
   DB     00H      
   DB     00H   ;ENTER(91)-13   
   DB     "]"      
   DB     00H   
   DB     "}"      
   DB     00H      
   DB     00H         
   DB     00H         
   DB     "<"         
   DB     00H   
   DB     00H
   DB     00H
   DB     00H
   DB     008H   ;RETROCESO(103)
   DB     00H   


Mayusculas:   

   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     00H   
   DB     09H      
   DB     ""      
   DB     00H   
   DB     00H      
   DB     00H      
   DB     00H   
   DB     00H      
   DB     00H         
   DB     "Q"      
   DB     "1"      
   DB     00H      
   DB     00H      
   DB     00H      
   DB     "Z"      
   DB     "S"      
   DB     "A"      
   DB     "W"         
   DB     "2"         
   DB     00H         
   DB     00H      
   DB     "C"      
   DB     "X"      
   DB     "D"      
   DB     "E"      
   DB     "4"      
   DB     "3"      
   DB     00H      
   DB     00H         
   DB     " "          
   DB     "V"         
   DB     "F"      
   DB     "T"   
   DB     "R"      
   DB     "5"      
   DB     00H      
   DB     00H      
   DB     "N"      
   DB     "B"      
   DB     "H"         
   DB     "G"         
   DB     "Y"         
   DB     "6"      
   DB     00H      
   DB     00H   
   DB     00H      
   DB     "M"      
   DB     "J"      
   DB     "U"      
   DB     "7"      
   DB     "8"         
   DB     00H         
   DB     00H         
   DB     ","         
   DB     "K"         
   DB     "I"      
   DB     "O"      
   DB     "0"      
   DB     "9"      
   DB     00H   
   DB     00H   
   DB     "."         
   DB     "-"         
   DB     "L"         
   DB     165      
   DB     "P"      
   DB     39      
   DB     00H      
   DB     00H      
   DB     ","      
   DB     "{"      
   DB     00H      
   DB     "["         
   DB     173      
   DB     00H         
   DB     00H      
   DB     00H      
   DB     00H      
   DB     13   
   DB     "]"      
   DB     00H      
   DB     "}"      
   DB     00H      
   DB     00H         
   DB     00H         
   DB     "<"         
   DB     00H   
   DB     00H      
   DB     00H      
   DB     00H      
   DB     08H      
   DB     00H      

END

         
Si tienes un problema y tiene solucion, para que te preocupas? y si no tiene solucion, para que te preocupas?

Desconectado atlasdelcarinakeel

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 277
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #5 en: 26 de Marzo de 2006, 11:37:00 »
Vaya el archivo perdio el formato, ni yo mismo lo entiendo loco. He querido subir el archivo pero me dicen que no hay espacio suficiente solo pesa 6,62 KB. loco
Si tienes un problema y tiene solucion, para que te preocupas? y si no tiene solucion, para que te preocupas?

Desconectado microcarsil

  • PIC10
  • *
  • Mensajes: 44
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #6 en: 26 de Marzo de 2006, 11:47:00 »
Me parece bueno el proyecto Rebotado  hago mi pequeño aporte con un enlace que hace tiempo hice acerca de una interface de teclado.

 aqui esta el enlace al hilo

http://miarroba.com/foros/ver.php?foroid=46840&temaid=4627644&marcar=interrupcion

Microcarsil

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #7 en: 26 de Marzo de 2006, 14:19:00 »
Gracias a ambos .... Rebotado

pero esto no es ayuda, es hacerme el proyecto completo ... así no tiene gracia ....  Muchas risas  Muchas risas  Muchas risas

El camino es llano, el horizonte despejado .... ja, ja, ja .... solo tengo que copiar
y pegar .... ja, ja, ja ....  Muchas risas  Muchas risas  Muchas risas



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

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #8 en: 26 de Marzo de 2006, 17:16:00 »
disculpen esta interesante el proyecto pero en este enlace no se nota muy bien las conecciones
http://conket.com/modules.php?name=Sections&op=viewarticle&artid=39
me refiero a las conecciones en la parte q esta conectado el pic 16f877 al teclado veo dos pull up , dos transistores y dos buffer o eso esta internamente en el teclado loco
por otra parte no sabia q habia tanta informacion al respecto q bien caramba q buenos enlaces Rebotado

Desconectado microcarsil

  • PIC10
  • *
  • Mensajes: 44
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #9 en: 26 de Marzo de 2006, 17:41:00 »
Escrito originalmente por electronando
disculpen esta interesante el proyecto pero en este enlace no se nota muy bien las conecciones
http://conket.com/modules.php?name=Sections&op=viewarticle&artid=39
me refiero a las conecciones en la parte q esta conectado el pic 16f877 al teclado veo dos pull up , dos transistores y dos buffer o eso esta internamente en el teclado loco
por otra parte no sabia q habia tanta informacion al respecto q bien caramba q buenos enlaces Rebotado


Efectivamente  electronando Rebotado  las  dos pull up , los dos transistores y los dos buffer esta internamente en el teclado, solo tienes que conectar los pines del teclado a los correspondientes del pic (RB0 y RB7) y alimentar el teclado (+ 5v) yo ya lo probe con el codigo anteriormente publicado en el enlace y funciona de perlas Sonrisa Gigante .
Microcarsil

Desconectado electronando

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 427
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #10 en: 27 de Marzo de 2006, 22:45:00 »
aya gracias por el dato lo preguntaba tb porque redpic muestra un esuqema en que tienen pull up externos si no mira al cvomienzo del post gracias por responder Sonrisa

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #11 en: 28 de Marzo de 2006, 01:56:00 »
Eso me ha extrañado .... porque todos los montajes que he visto usan las pull-up externas ... loco

Y yo voy a ponerlas .... imagino que no pasa nada por hacerlo así ya que si el teclado
las tiene internas y yo las pongo tb pues tenemos mas de lo mismo y ...

¿no?

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

Desconectado microcarsil

  • PIC10
  • *
  • Mensajes: 44
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #12 en: 28 de Marzo de 2006, 04:33:00 »
Tienen razon Muchas risas las lineas clock y data son de colector abierto y se necesita resistencias pull-up para obtener niveles logicos altos. Una disculpa por semejante aseveracion que hice anteriormente loco, pero recuerdo que cuando experimente la interface conecte las lineas data y clock directamente y me funciono Muchas risas por cierto RedPic esto ultimo podrias checarlo para sacarme de dudas, te lo agradeceria.
Microcarsil

Desconectado atlasdelcarinakeel

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 277
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #13 en: 28 de Marzo de 2006, 08:47:00 »
Que tal a mi tambien me funciono sin las resistencias loco, pero despues las coloque y tambien me funciono. Se las deje por que el clock y el dato son colector abierto.

Estoy buscando mi esquematico para subirlo. Por ahi tengo otro codigo en donde se pueden teclear las teclas extendidas (valga la redundancia Sonrisa Gigante), que son teclas que envian mas de un valor de dato como las teclas de direccion. Tengo un desorden, si lo consigo lo subo. Sonrisa Gigante
Si tienes un problema y tiene solucion, para que te preocupas? y si no tiene solucion, para que te preocupas?

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5415
    • Picmania by Redraven
RE: Proyecto : Ponga un teclado PS/2 en su PIC (vida)
« Respuesta #14 en: 02 de Abril de 2006, 04:06:00 »
Acabo de darme cuenta de un detalle tonto, pero importante:

Hemos estado hablando de las resistencias Pull-Up que necesitamos para poder
conectar convenientemente el teclado PS/2 con el PIC ... muy cierto y muy importante.

De hecho he incluido en la conexión dichas resistencias .... y sin embargo no son
necesarias ya que si uso, como pretendo, RB0 para el Clock y RB3 para el Data ...
en un PIC 16F628 con solo usar:

Codigo:

   port_b_pullups(TRUE);



Tenemos todas las Pull-Up"s que deseemos y no necesitamos añadir nada fuera
de nuestro PIC. Conectamos la alimentación del Teclado y las dos señales directamente
a nuestros pines y , voilá, ya lo tenemos todo.

Atlasdelcarinakeel, mira si en tu programa tb hacías uso de esto y por eso te
funcionó sin resistencias. Giño

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


 

anything