Vamos a programar #86 - Reasignando teclas del teclado.
Hola de nuevo a todos, el día de hoy vamos a ver cómo reasignar algunas botones de nuestro teclado para que hagan otra cosa.
Hace unos días en la eterna lucha del hombre contra la máquina, mi teclado
simplemente decidió que 15 años de uso eran suficientes y simplemente ya no
quiso funcionar. Mi teclado compaq 5185 fue el primero que tuve y lo use de
forma bastante extenuante.
Algo paso que simplemente ya no quiso reconocer las pulsaciones. Cómo siempre
que "reparo" algo hay una enorme tendencia a que me "sobren" piezas,
simplemente decidí guardarlo. Para su reemplazo, saque un teclado que un amigo
me regaló hace mucho (cómo el de la primer imagen), es más compacto y mas
viejo que el mio pero totalmente funcional salvo por unos cuantos botones.
Mi primer teclado tenía la ventaja que tenia varios botones adicionales; los
mas importantes (para mi) eran: volumen arriba, volumen abajo, silencio y
calculadora. El reemplazo también tiene unos botones extra (seis para ser
exacto), pero al conectarlo y presionarlos, ninguna hizo nada. Busqué los
controladores pero no encontré ninguno para mi sistema operativo. Las teclas
"normales" funcionan cómo deben, pero las "especiales" no.
Para solucionar mi problema busque en internet y encontré que todas las
pulsaciones del teclado son gestionadas por el sistema operativo, es decir, si
presionamos una tecla, está genera un código pero nuestro amigo Windows es el
responsable de que pasa después y no solo eso, posee la capacidad de reasignar
las pulsaciones.
Tomando en cuenta lo anterior, vamos a buscar una forma de re-asignar una
tecla, pero hay una advertencia, vamos a modificar el registro de Windows (el
registro prácticamente es un lugar donde se guardan las configuraciones de una
computadora con ese sistema operativo), si sigues los pasos que voy a mostrar
no habrá ningún problema, pero si mueves más "cosillas" puedes hacer que el PC
no inicie correctamente.
Antes que nada veamos unos cuantos códigos para algunas teclas.
|
US key assignment |
Base Make |
|---|---|
| Insert |
E0 52 |
| Delete |
E0 53 |
|
Left Arrow |
E0 4B |
| Home |
E0 47 |
| End |
E0 4F |
|
Up Arrow |
E0 48 |
|
Dn Arrow |
E0 50 |
|
Page Up |
E0 49 |
|
Page Down |
E0 51 |
|
Right Arrow |
E0 4D |
Para nuestra demostración vamos a usar la tecla "Page Up" y la vamos a
reasignar para silenciar el volumen del sistema. La siguiente tabla
muestra algunos de los códigos de teclas multimedia.
| CODE | ALIAS |
|---|---|
| E0 6A | VK_BROWSER_BACK |
| E0 69 | VK_BROWSER_FORWARD |
| E0 67 | VK_BROWSER_REFRESH |
| E0 68 | VK_BROWSER_STOP |
| E0 65 | VK_BROWSER_SEARCH |
| E0 66 | VK_BROWSER_FAVORITES |
| E0 32 | VK_BROWSER_HOME |
| E0 20 | VK_VOLUME_MUTE |
| E0 2E | VK_VOLUME_DOWN |
| E0 30 | VK_VOLUME_UP |
| E0 19 | VK_MEDIA_NEXT_TRACK |
| E0 10 | VK_MEDIA_PREV_TRACK |
| E0 24 | VK_MEDIA_STOP |
| E0 22 | VK_MEDIA_PLAY_PAUSE |
| E0 6C | VK_LAUNCH_MAIL |
| E0 6D | VK_LAUNCH_MEDIA_SELECT |
| E0 6B | VK_LAUNCH_APP1 |
| E0 21 | VK_LAUNCH_APP2 |
El código de la tecla que queremos usar es "E0 20" y el código de la tecla "Page UP" es "E0 49" pero ¿y después? Cómo ya mencione antes, Windows es el encargado de gestionar las pulsaciones y guarda esta configuración en el registro. Para acceder a ella, necesitamos encontrar la siguiente clave:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout]
Ahí crearemos un nuevo valor binario.
La estructura que debe de tener el valor es de la siguiente forma:
- 00,00,00,00 > encabezado
- 00,00,00,00 > flags
- 02,00,00,00 > número de entradas más uno
- xx,xx,xx,xx > el código de las teclas a reasignar empezando por el código que queremos que se aplique seguido por el código de la tecla
- 00,00,00,00 > terminación.
Hay que notar que cada código tiene los valores "invertidos", es decir, la tecla de silencio tiene el código "E0 20" pero al momento de escribir el valor en el registro, lo ponemos cómo "20 E0" y lo mismo va para todas las teclas, la tecla "Page Up" tiene el codigo "E0 49" pero lo escribimos cómo "49 E0". Al reiniciar la computadora y presionamos la tecla "Page Up", el sistema se debería de silenciar (en caso contrario algo salio mal). Si quieres hacer el proceso de forma automática, puedes copiar el siguiente texto y guardarlo cómo "key.reg" usando el bloc de notas.
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] "Scancode Map"=hex:00,00,00,00,00,00,00,00,02,00,00,00,20,E0,49,E0,00,00,00,00
Cada vez que hagas un cambio se debe de reiniciar la computadora.
Finalmente y a manera de ejemplo, supongamos que queremos cambiar las teclas que ya cambiamos, pero ademas queremos que la tecla numérica 7 suba el volumen, tendríamos algo cómo lo que sigue:
- 00,00,00,00 > encabezado
- 00,00,00,00 > flags
- 03,00,00,00 > número de entradas más uno
- 20,e0,49,e0 > el código del primer juego de teclas
- 30,e0,47,00 > el código del segundo juego de teclas
- 00,00,00,00 > terminación.
Los leo luego.
Cumplimos 4 Años!!!!!!
Hola de nuevo a todos, el día de hoy solo escribo para recordar que un día cómo hoy pero de hace cuatro años, surgió el blog de Xwork.Si bien ha sido una historia de sube y bajas, actualmente la cosa se ha mantenido por el piso. Al inicio del año supuse que al menos iba a publicar un par de entradas al mes, pero entre batallas de diferentes índoles y me puesta de atención a unas cosas que me la exigen, poco a poco el contenido a ido disminuyendo. Cómo político en campaña prometo hacer post, pero no especificaré el número para no quedar mal así que siempre te puedes dar una vuelta para ver si hay algo nuevo.
Al igual que el tema anterior, este se va a mantener un buen rato, aún me quedan algunos detalles por arreglar para que este listo totalmente.
Cómo los músicos del Titanic me despido por ahora mientras el blog se hunde, pero no lo dejaré hundir totalmente, pues me lo debo (e indirectamente a la persona que fue la que me dio la idea) y les recuerdo que si alguien quiere colaborar a crear contenido acorde a lo que trata el blog, con gusto acepto.
Nos seguimos leyendo.
Learning machine #15 - Operaciones a nivel del bits.
Hola de nuevo a todos, el día de hoy vamos a ver cómo es que se realizan las operaciones a nivel de bit usando cómo referencia a los operadores de C#. Hay que tener en cuenta que dependiendo de la plataforma y del lenguaje que se use, las operaciones pueden variar un poco, pero el concepto sigue siendo el mismo.
Para empezar, hay que tomar en cuenta que este tipo de operador solo se aplica
a los números enteros "int", por lo que podemos decir que aplicar cierta
operación puede producir un resultado no esperado si no tomamos en
consideración lo anterior.
Operadores de desplazamiento (<< y >>)
El operador "<<" o "operador de desplazamiento a la izquierda" (Left
shift para los cuates). Sirve para desplazar los bits a la izquierda, es decir
mueve el valor de un bit. Para poder observar un poco mejor a lo que me
refiero, tomemos el número 101 en base dos, si desplazamos un bit a la
izquierda, tendremos el número 1010. Hay que tener en cuenta lo que mencione
al inicio, las operaciones se hacen en número enteros, si el número está
definido cómo "int" tendríamos en memoria algo cómo la imagen que sigue:
Si lo desplazamos un lugar a la izquierda tendremos:
En c# podemos indicar cuantos "lugares" queremos desplazar nuestro número. Si
por ejemplo desplazamos nuestro número ocho lugares, tendremos:
Nuestro número original era 5, cuando lo desplazamos un lugar obtuvimos 10 y
cuando lo desplazamos 8 obtuvimos 1280.
¿Pero que pasa si lo desplazamos 29 lugares? Simple, obtenemos lo siguiente:
Y no parece nada del otro mundo, pero que pasa si le pedimos a c# que nos diga
cual es el valor de este número, nos dirá que es -1610612736 que está bien
pero si no esperamos un número negativo podría sorprendernos un poco (hace un tiempo en un post, mas o menos expliqué por que pasa, sientete
libre de revisarlo).
Si desplazamos el número 30 lugares tendremos:
El desplazamiento es realmente intuitivo, solo hay que tener las
consideraciones necesarias.
El operador ">>" o "operador de desplazamiento hacia la derecha" (right
shift) sirve para desplazar los bits a la derecha. Al igual que el operador
"<<" se aplica a los números enteros y sirve para "mover" los números.
Tomemos cómo ejemplo el mismo número; es decir 5 o 101 en base dos; tendremos:
Si desplazamos un lugar a la derecha tendremos:
Es muy fácil ver que en efecto se "movió" a la derecha y ahora en lugar de ser
el número cinco, es el número dos. Si al número cinco lo desplazamos tres
lugares a la derecha, tendremos;
Por lo que la variable si es que le asignamos el mismo valor pero con el
desplazamiento habremos perdido nuestro valor y si aplicamos el desplazamiento
contrario no lo podemos recuperar. Por eso lo que yo hago es siempre asignar
una variable auxiliar para solo modificar el valor en ella y dejar intacta la
variable original.
Operador Not (~).
Dependiendo del lenguaje que se use varia un poco cómo se especifica este
operador. En C# el operador "not" se escribe usando "~". Su función es la de
invertir los bits de un número. Para demostrar con mayor claridad tomemos de
nueva cuenta al número cinco;
Si usamos el operador "~" obtenemos:
Ahora tenemos que si le aplicamos el operador "~" al número 5 nos resulta el
valor de -6 (recordatorio amable, el tipo "int" usa un bit para indicar el
signo).
Operador AND (&).
El operador "and" aplica la operación and a dos números. Hay que
recordar que "and" solo produce un uno cuando ambas valores son uno, en
cualquier otro caso devuelve cero. Cómo ejemplo tomemos el número diez decimal
o 1010 en binario y el número dos o 10 en binario.
Cómo podrás observar, al aplicar la operación al número diez junto con el
número dos obtenemos el número dos.
Operador Or (|).
El operador " Or" aplica la operación or a dos números. Tomemos cómo ejemplo
los números cinco decimal o 101 en binario y el número diez decimal o 1010 en
binario, tendremos lo siguiente.
Recordemos que la operación or devuelve un uno cuando cualquiera de los dos
valores es uno, por lo que al aplicar la operación or al número cinco y diez
en decimal, nos resulta quince.
Y bien, por ahora es todo, en el siguiente post veremos unos ejemplos en c#
donde haremos uso de los operadores para agilizar nuestro trabajo. Recuerda
que en este mes cumplimos años por lo que espero publicar unos cuantos post
mas para "celebrar".
Los leo luego.
Back to basics #10 - Reguladores de voltaje
Hola de nuevo a todos, el día de hoy vamos a ver el uso del regulador de voltaje.A veces cuando trabajamos con algunos componentes, es necesario tener una fuelte de voltaje que nos suministre un voltaje constante. Por lo regular, la mayoria de las aplicaciones del blog necesitan un voltaje de 5v. Si trabajamos con una fuente de voltaje de laboratorio, podemos confiar que tendremos siempre disponible "la energia necearia", pero que pasa si queremos usar un eliminador y solo tenemos uno de 12v? Simple, no podremos usarlo o no de forma directa (al menos que nos guste ver el mundo arder).
![]() |
| Este tipo de eliminador es bastante barato. |
En la medida de lo posible deberíamos de usar componentes que soporten un rango amplio de operación, pero el caso de que queramos combinar componentes que usen 5v y 12v es donde surgirá un problema.
El circuito LM7805 (o simplemente 7805) sirve para regular un voltaje, éste modelo en especifico sirve para regularizar el voltaje a un nivel de 5v. Existen mas variantes del integrado; el 7809 y el 7812 y el voltaje de regulación de cada uno es 9v y 12v respectivamente. Su uso es realmente sencillo y si miramos la siguiente imagen, veremos el diagrama de conexión.
Físicamente el regulador puede tener alguno de los siguientes aspectos:
Y nosotros por ahora usaremos el T0-220. La pata uno será por donde conectaremos el voltaje a regular; 12V en este caso. La para 2 es tierra y la pata 3 es por donde saldrá el voltaje ya regulado.Si observamos bien el diagrama, solamente necesitaremos un capacitor a la entrada y uno más a la salida y obtendremos un voltaje. Los valores de estos dependerán en gran medida de la corriente que el regulador deberá suministrar. En la hoja de datos para el integrado LM7805 se indica que dependiendo de la lejanía de la entrada con respecto a la fuente de alimentación, el capacitor C1 puede ser omitido, mientras que el capacitor C2 ayuda a mantener un valor estable. Cómo recomendación puedes probar con distintos valores o solo usar los valores recomendados en la hoja de datos que son: C1 = 0.22µf y C2= 0.1µf. Personalmente he probado con valores de 2µf en la entrada y salida para cuando uso una carga de 400mA.
Una de las consideraciones que debemos de tomar en cuenta, es que el regulador va a disipar todo el exceso de voltaje en calor por lo que si queremos hacer uso de este y le vamos a exigir corrientes superiores a 500mA, debemos de utilizar un disipador de calor.(aunque se supone que tiene protección contra sobre-corriente y sobre-calentamiento probablemente los vecinos sufran si no hay una buena disipación)
![]() |
| Las cosas se pueden poner "calientes" si la disipacion adecuda |
Para recapitular. El integrado lm7805 (y todos sus amigos) pueden ser una alternativa realmente rápida y sencilla para obtener un voltaje regulado, pero está por demás decir que debido a que todo el "voltaje extra" se convierte en calor, no es la manera más eficiente para hacerlo pero si la corriente que usamos no es tan alta sin duda es una buena alternativa , para corrientes mayores existen otro tipo de reguladores (que eventualmente veremos) pero si no queremos complicarnos, está sin duda es una buena alternativa.
Y bien, por ahora es todo. La cuarentena lejos de permitirme crear cosas para el blog, me alejo de él, pero aprovechando que en este mes cumplimos un año más, trataré de subir algunos post útiles
Suscribirse a:
Entradas
(
Atom
)















No hay comentarios. :
Publicar un comentario