Tuesday, September 16, 2008

What wiitle Wiimote gives out...

El Wiimote (Control Remoto Wii ) es el control principal de la consola Wii de Nintendo. Sus características más destacables son la capacidad de detección de movimiento en el espacio y la habilidad de apuntar hacia objetos en la pantalla. Este control, se está usando mucho ya, en video juegos, que pueden ser corridos en una PC, sin necesidad de la consola Wii. El Wiimote mantiene comunciación con la computadora, mediate Bluetooth.

Analicemos ahora, la salidas que posee este control

Salidas:

LEDS:Se encuentran en la punta del control, son 4 LEDS azules. Mientras se está jugando, estos LEDS se usan para indicar que el wiimote se encuentra en modo descubrible de Bluetooth (cuando parpadea, indica el nivel de batería) también sirven estos LEDS, para indicar el número de jugador al que corresponde ese control. (si es el número de jugador es 2, se prenderían dos LEDS) Los LEDS se pueden controlar de manera independiente.

Rumble:
El rumble se da via un motor, que posee un peso desbalanceado, este motor puede ser activado para hacer así que el control vibre. El motor puede ser activado, al enviar un paquete de salida
[SET_REPORT] a los canales 0x11, 0x13, 0x14, 0x15, 0x19 o 0x1a con el bit menos significativo puesto en: (52) 13 01
La vibración, se puede eliminar al poner ese bit en cero: (52) 13 00
Se puede utilizar cualquiera de los canales anteriores, aunque el canal 0x11 no es muy recomendable, ya que también se usa para controlar a los LEDS .


Bocina:
El Wiimote, posee una pequeña bocina de baja calidad, la cual se utiliza para dar durante el juego efectos de sonidos cortos. El flujo de sonido que se debe tocar, se obtiene del host directamente.
La bocina, es controlada mediante 3 reportes de salida, el reporte 0x14 se utiliza para habilitar o deshabilitar la bocina. Al poner en alto el segundo bit, se habilita la bocina, y al ponerlo en bajo, se deshabilita. Por ejmplo, para habiliar la bocina, se enviaría: (52) 14 04
El reporte 0x19, se usa para silenciar o des-silenciar la bocina, funciona de la misma manera, que el reporte 0x14. 0x04 callaría a la bocina, y 0x00 haría que nuevamente sonará. (Una especie de mute y de unmute!)
El reporte 0x18, se usa para enviar datos de sonido a la bocina. 1-20 bytes se pueden enviar en un sólo paquete.
Ejemplo de un paquete que se podría enviar a la bocina:
(52) 18 LL DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD

LL especifica el tamaño del dato que se enviará. Los bytes DD son el dato de sonido. Cuando el dato, posee un tamaño que es menor al de 20 bytes, se deben rellenar los lugares restantes. Los datos de sonido, por otro lado, se deben enviar a una frecuencia adeucada, se puede escojer la freucncia de muestreo durante la inicialización.

Secuencia de Inicialización de la bocina.
Las siguientes secuencias, inicializarían a la bocina:

*Habilita la bocina (Envia 0x04 la salida del reporte 0x14)
*Pon en silencio a la bocina (Envia 0x04 a la salida del reporte 0x19)
*Escribe 0x01 al registro 0x04a20009
*Escribe 0x08 al registro 0x04a20001
*Escribe una configuración de 7 byte a los registros 0x04a20001-0x04a20008
*Escribe 0x01al registro 0x04a20008 (La configuraión de 7 byte de la bocin, controlan justo la configuarión de la bocina, como es su frecuencia de muestreo. )
*Regresa el sonido a la bocina (Envía 0x00 al reporte de salida 0x19)

Formato del dato de sonido: Parece ser un sonido ADPCM de 4 bits. ADPCM (Adaptive Differential Pulse Code Modulation) utiliza una modulación, de modo que en vez de cuantificar la señal directamente, como el PCM, cuantifican la diferencia entre la señal y una predicción hecha a partir de la señal, por lo que se trata de una codificación diferencial

Monday, September 15, 2008

Undressing the Wiimote on a mexican night

Veremos más de cerca al Wiimote.

Empezaremos analizando su origen: Es manufacturado por Mitsumi (FCC ID POO-WC45) y Foxconn (FCC ID UMB-WCF7).

Los componentes que conforman al Wiimote son:

Parte Functiones Localizacion
Documentacion
ADXL330 Acelerómetro Se encuentra en la parte de arriba, a la izquierda del botón A Data Sheet, Schematic
H7824HE Driver del la bocina Arriba, entre la bocina y el botón 1 Data sheet
ST 4128 BWP EEPROM Arriba entre home y botón A Data Sheet(?)
BCM2042 Bluetooth, 8051 core, RAM/ROM Hasta abajo, localizado un poco arriba de las baterías. Product Info
M 626 3322 ? Arriba, a la derecha del boton 1
?
U7849 6Q63 Audio DAC?
Convertidor digital analogico
Abajo, junto al boton naranja para sincronizar, cerca de la batería ?





Sí, es una foto de un Wiimote, que se compró por separado. Viendo su linda envoltura, uno se pregunta que secretos oscuros guarda este artefacto.




Abriéndolo, empezamos a descubrir todos sus "dirty little secrets":



Adentro, vemos algunas de las cosas que brinda Nintendo. La bocina, es el disco negro con las dos pestañas. El acelerómetro, ADXL330, está localizado justo donde se encuentra la cabeza del desarmador de la imagen anterior.







En esta vista, que está un poco de lado vemos muchos otros componentes. En la parte de abajo, encontramos un pequeño motor vibrador, que sirve para dar el efecto de "rumbling". Asimismo, tenemos al final el senor infrarojo. Pegado al sensor infrarojo, se encuentra un capacitor de 4V 3300uF . Pero, ¿Para qué serviría un capacitor tan grande? Se cree que se utiliza, para limpiar el circuito DC,es decir para mantener estable el voltaje de entrada.
Otra teoría, es que el capacitor funciona como una pequeña fuente de energia.
Lo que sucede, es que si un jugador, se encuentra jugando muy efusivamente, las baterias AA, pueden comprimir los resortes lo suficiente, para desconectarlas temporalemente, al menos medio segundo. El gran capacitor, por ello, serviría para brindar energía al sistema momentaneamente.


En la siguiente imagen, tenemos el botón scan push, y los muy elegantes clips para la batería AA.


Todas las "cositas redondas" (330,100,4R7) son inductores 33uH, 10uH, and 4.7uH. Son usados principlamente para corriente directa a corriente directa con entradas altas o entradas bajas. Se pueden usar, para hacer filtreo. El filtreo es muy importante para tener una señal de radio frecuencia proveniente del circuito integrado Broadcom del Bluethooth limpia.

BCM2042 es un circuito integrado de Broadband, de bajo costo para mouse/teclado inalambrico de Bluetooth. Utiliza un 8051 core, y una memoria RAM/ROM que guarda el perfil HID (HID, por sus siglas en inglés, human interface device , que significa dispositivo de interfaz con humanos, esto es un dispositvo de computadora que interacciona directamente con usuarios, toma entradas de humanos, y puede tener también una salida para entregar directo a humanos.) del bluetooth y la pila.

El wiimote, tiene además un pequeño cristal de 24MHz.

La imagen inferior, muestra el acelerometro y el EEPROM:




Finalmente tenemos al ADXL330, o acelerómetro, con código 0614 (Lo cul significa que este chip fue construido en la primera semana de Abril del 2006!) asi como las muy esperadas tapas de los 3 ejes y la capa de sumistro de energía.

La parte ST 4128 BWP , parece ser una EEPROM serial. Su hoja de especificaciones se encuentra : Aquí.
Los pines 1 al 4, se encuentran conectados a tierra. Vcc es el pin 8, el pin 7 tiene el control de la escritura, y está atado con la resistencia R38. Los pines 6 y 5 son las lineas de los datos seriales y reloj serial. La EEPROM, guarda información acerca del identificador Bluetooth, asi como algunos valores, que sirven para hacer cortes en las grandes cantidades de valores que arroja el acelerómetro ó el sensor infrarojo. Contiene muchas constantes como el ID del Bluetooth, revision de firmware etc.

Una gran parte de la funcionalidad del Wiimote se quema dentro del circuito integrado BCM2042 ,el cual es producido por Broadcom Corportation (Es importante saber, que Broadcom Corporation es una compañia norteamericana que construye circuitos integrados para comunciaciones de banda ancha) Allí, se guarda la pila HID del Bluetooth así como su protocolo.
Uno, se podría preguntar, ¿Dónde hace su entrada aquí la EEPROM?
La EEPROM aparece, debido a que durante el booting, se hace un ping a ella, para que devuelva el firmware del controlador del Wii. Por otro lado, se ha visto que la EEPROM, también guarda 'Miis'. Un Mii es un personaje personalizado, creado por el usuario, que participa en los juegos del Wii. La EEPROM guarda la información de este personaje.

Monday, September 08, 2008

Las entradas del Wiimote

Aquí un poco de información, acerca de las entradas que tiene nuestro querido Wiimote:


Botones

Existen 12 botones, en el wiimote, 4 de ellos están en la cruzecita que sirve para dar dirección, y los demás están exparcidos a lo largo de todo el control.

Cuando algún botón, se presiona o se suelta, un paquete es enviado a la comptadora via un reporte de entrada HID (Un reporte HID se usa para transimitir datos de tipo HID control de y hacia dispositivos HIDClass, es importante aclarar de una vez, que un HD control, es una fuente de información ascoiada a un HIDClass devicereport) 30H, este paquete contiene una máscara de bit, con el estado actual de todos los botones. El estado de los botones, parece siempre incluirse en todos los reportes que brinda el Wimote a la computadora, esta información suele estar en los primeros dos bits.

Por ejemplo, cuando se presiona el boton A, el paquete de entrada HID DATA que recibe la computadora es:

 (a1) 30 00 08

y cuando se suelta, el paquete que se recibe es:

(a1) 30 00 00

La asignación de bit para los botones es:

Botón Numero (dec) Valor (hex)
Two 1 0x0001
One 2 0x0002
B 3 0x0004
A 4 0x0008
Minus 5 0x0010
? motion ? 6 0x0020
? motion ? 7 0x0040
Home 8 0x0080
Izquierda
9 0x0100
Derecha
10 0x0200
Abajo
11 0x0400
Arriba
12 0x0800
Más
13 0x1000
? motion ? 14 0x2000
? motion ? 15 0x4000
? Reading Mii ? 16 0x8000

El boton de encendido, es inusual debido a que cuando se aprieta, envia una petición de desconectar en vez de enviar un código normal de botón

Sensor de movimiento:




Tanzmaus


El movimiento del control, se sensa gracias a un acelerometro de 3 ejes lineal localizado a la izquierda de donde está el botón A. El circuto integrado es el ADXL330 , el cual es construido por Analog Devices. Este dispositivo se calibra para que pueda medir aceleraciones que se encuentran en un rango de +/- 3g con 10% de sensiblidad.

Dentro del chip, se encuentra una pequeña estructura micromecánica, la cual es sujetada por unos resortes hechos de silicon. Mediciones de diferencias en capacitancias, permiten que el desplazamiento neto de la pequeña masa, pueda ser convertido en un voltaje, el cual es digitalizado. Es importante aclarar, que el sensor no mide la aceleración del Wiimote, sino la fuerza ejercida por la masa de prueba a los resortes que la sujetan. Gracias a la convención de signo que se usa, esa cantidad es proporcional a la fuerza neta que ejerce la mano del jugador sobre el wiimote cuando lo agarra. Por eso, cuando se deja el wiimote sobre una mesa, el acelerometro marca la fuerza vertical de +g (la masa puede ser normalizada en unidades arbitrarias) y cuando cae se reporta una fuerza de casi zero.


El sensor utiliza un sistema coordenado de mano derecha, con el eje X positivo a la izquierda, y ele eje Z positivo apuntando hacia arriba.

El Wiimote, no suele reportar lecturas de los sensores a la computadora, aunque si se peuden pedir estos valores, al enviar al canal 0x12 SET_REPORT:


 (52) 12 00 31

El tercer byte de la cadena anterior es una máscara de bit. 0x01 habilita el rumble o el vibreo del wiimote, 0x04 habiltia que las salida sean continuas. si 0x04 no está habilitado, los paquets sólo se sacan cuando sus valores cambian. (casi siempre, si es que el sensor de movimiento esta habilitado) . El Wiimote enivará a la computadora paquetes , donde los bytes 5, 6 y 7 contienen información acerca de las lecturas de X, Y y Z en el acelerómetro.

Un ejemplo del paquete que se envia cuando el Wiimote esta acostado hacia arriba en una mesa es:


 (a1) 31 40 20 86 8a a5

donde 0x86 es la medicion del eje de la X, 0x8a es la lectura en el eje Y, 0xa5, es la lectura en el eje Z.

Se pueden escojer otro canales para los reortes de movimientos, como peude ser 0x31, 0x33, 0x35, 0x37, 0x3e y 0x3f. Si 0x3e o 0x3f son seleccionados, entocnes las lecturas de los sensores se alternarán entre estos dos canales.

Se pude parar de hacer reportes de movimiento, al enviar al canal de salida un 0x30.
 (52) 12 00 30

Parece ser, que modo del canal es relamente un modo selección por máscara de bits. La salida de los botones, siempre se haya habilitada. el modo 0x30 son sólo boones, 0x31 es sólo sensado de movimiento, 0x32 se cree que es la cámara infraroja, y 0x33 es tanto la cámara infraroja, como el sensor de movimeinto.




Calibracion:
Los puntos de inicio, es decir los puntos que se consideran cero, asi como los valores de gravedad para los 3 ejes del acelerometro, se guardan al principio de la memoria Flash del Wiimote. La informacion se empieza a guardar apartir de la direccion 0x16 de la memoria. Esta informacion se repite en la direccion

0x20.0x16 punto cero para el eje X
0x17 Punto cero para el eje Y
0x18 Punto cero para el eje Z
0x19 no se sabe que guarda
0x1A +1G punto para el eje X
0x1B +1G punto para el eje Y
0x1C +1G punto para el eje Z
0x1D no se sabe
0x1E-0x1F checksum?



Friday, September 05, 2008

keep walking...

When real people fall down in life, they get right back up and keep walking...

Ja, mi robot no logró llegar a la final...better luck next year, pero seguiré trabajando!! :D

Friday, August 29, 2008

Una noche conociendo al Sr.Amplificador de Voltaje...

Amplificador de voltaje: Es un amplificador diseñado para hacer crecer el voltaje de una señal.
En generl,por su diseño, los amplifciadores pueden hacer que se tenga una ganacia grande de voltaje o una gran ganancia en corriente. Los amplificadores de voltaje son diseñados par maximizar la ganacia en voltaje, generalmente a expensas de una ganancia en corriente.

Basicamnete, el Amplificador de Voltaje, no es más que un amplificador diferencial, que amplifica la diferencia entre dos entradas. Una entrada tiene un efecto positivo en la señal de salida, la otra entrada tiene un efecto negativo en la salida. El amplificador de voltaje, se suele representar mediante:




2. Al amplificador de voltaje se le suele llamar Operacional, debido a que también puede servir para ejecutar numerosas operaciones, una de las más básicas funciones del amplificador de voltaje, es la de comparar voltajes. Aquí dos entradas se usan para comprar a dos voltajes diferentes. Si el voltaje de entrada , en la entrada + es mayor que el voltaje que existe en la entrada -, entocnes la sálida será 1000000 veces, la diferencia entre esas dos entradas.
Por ejemplo, si la entrada al +, fuese +3.2 vDC, y la entrada al -, fuese de 3.215vDC, entocnes el voltaje de salida, sería de 1000000 X -0.015vDC= -15000vDC. Ahora bien, debido a que el amplifciador no puede dar un voltaje mayor a lo que recibió de entrada, la salida sería de -20vDC.


Asimismo puede funcionar también como Seguidors: aquel circuito que proporciona a la salida la misma tensión que a la entrada
Seguidor de tensión
Se usa como un buffer, para eliminar efectos de carga o para adaptar impedancias (conectar un dispositivo con gran impedancia a otro con baja impedancia y viceversa)Como la tensión en las dos patillas de entradas es igual: Vout = Vin
  • Zin = ∞
  • También peude funcionar como un Inversor

    Amplificador inversor


    Se denomina inversor ya que la señal de salida es igual a la señal de entrada (en forma) pero con la fase invertida 180 grados.

    • El análisis de este circuito es el siguiente:
      • V+ = V- = 0
      • Definiendo corrientes: \frac{V_{in}-0}{R_{in}}=-\frac{V_{out}-0}{R_{f}} y de aquí se despeja
      • V_{OUT}=-V_{in}\frac{R_f}{R_{in}}
    • Para el resto de circuitos el análisis es similar.
    • Zin = Rin

    Por lo cual podemos controlar la impedancia de entrada mediante la elección de R1

    • V_{o} = -\frac{R_2}{R_1}*V_{in}
    Esta configuracion es una de las mas importantes, porque gracias a esta configuracion, se puede elaborar otras configuraciones, como la configuracion del derivador, integrador, sumador.

    No inversor Amplificador no inversor


    Sumador inversor

    Amplificador sumador de n entradas

    • La salida está invertida
    • Para resistencias independientes R1, R2,... Rn
      • V_{out}=-R_f(\frac{V_1}{R_1}+\frac{V_2}{R_2}+...+\frac{V_n}{R_n})
    • La expresión se simplifica bastante si se usan resistencias del mismo valor
    • Impedancias de entrada: Zn = Rn

    Restador

    Amplificador diferenciador

    • Para resistencias independientes R1,R2,R3,R4:
      •  V_{out} = V_2 \left( { \left( R_3 + R_1 \right) R_4 \over \left( R_4 + R_2 \right) R_1} \right) - V_1 \left( {R_3 \over R_1} \right)
    • Igual que antes esta expresión puede simplificarse con resistencias iguales
    • La impedancia diferencial entre dos entradas es Zin = R1 + R2

    Integrador ideal

    Amplificador integrador

    • Integra e invierte la señal (Vin y Vout son funciones dependientes del tiempo)
    •  V_{out} = \int_0^t - {V_{in} \over RC} \, dt + V_{inicial}
      • Vinicial es la tensión de salida en el origen de tiempos

    Nota: El integrador no se usa en la práctica de forma discreta ya que cualquier señal pequeña de DC en la entrada puede ser acumulada en el capacitor hasta saturarlo por completo. Este circuito se usa de forma combinada en sistemas retroalimentados que son modelos basados en variables de estado (valores que definen el estado actual del sistema) donde el integrador conserva una variable de estado en el voltaje de su capacitor.

    Derivador ideal

    Amplificador derivador

    • Deriva e invierte la señal respecto al tiempo
    •  V_{out} = - R C \, {d V_{in} \over dt}
    • Este circuito también se usa como filtro

    NOTA: Es un circuito que no se utiliza en la práctica porque no es estable, esto se debe a que al amplificar más las señales de alta frecuencia se termina amplificando el ruido por mucho.

    Otros


    • Convertidores carga-tensión
    • Convertidores corriente-tensión
    • Filtros activos
    • Girador permite construir convertidores de inmitancias (empleando un condensador simular un inductor , por ejemplo)

    3) La salida de un amplifciador operacional esta dado por:


    donde A es la ganancia de ciclo abierto del amplificador, Vp es el voltaje positivo de la entrada, Vn es el voltaje negativo de entarda. Es interesnate señalar, que A suele estar en el orden de
    .



    5. Se suele asumir que un Amplificador Operacional tiene las siguientes características:
    *Ganancia Infinita
    *Una impedancia de entrada infinita, lo que hace que no haya corriente en las entradas.
    *Cero impedancia en la salida.





    Figure 1

    6.
    Ahora bien, hay ciertos conceptos, que debemos entender, para comprender mucho mejor, como es que funciona el amplificador operacional. Estos conceptos son:
    *Voltaje de Offset:
    El voltaje de offset es el voltaje equivalente en la entrada de un amplificador operacional.
    Si un amplificador tiene un voltaje de ganancia de 10, y un voltaje de entrada de offset de 10 microvolts, se tendrían 100 microvolts a la salida, cuando no se presentase voltaje de entrada.

    *Ganancia:
    En electronica, la ganancia mide la habilidad de un circuito para incrementar el voltaje o amplitud de una señal. Se suele medir, como un cociente, este cociente posee a la señal de salida del sistema, así como la señal de entrada del mismo. Tambien se puede definir como un logarimto base 10 de la racion anterior.

    *Voltaje Pico a pico: no es otra cosa que la suma de las dos amplitudes máximas de la corriente alterna, la del sentido directo y la del inverso.

    Sunday, August 17, 2008

    Como funciona el teclado

    Un teclado, se parece mucho a una computadora en miniatura. Posee su propio procesador y circuitos, que sacan y reciben información de ese procesador. Una gran parte de esos circuitos,conforman la matriz de teclas. La matriz de teclas, es una especie de rejilla que se encuentra debajo de las teclas. Cada uno de los circuitos, se rompe en algún punto debajo de cada una de las teclas.
    Denker
    Cuando se aprieta una tecla, se presiona un switch, el cual hace que se cierre el circuito, lo cual provoca que una pequeña cantidad de corriente pueda fluir por él.

    Cuando el procesador encuentra que un circuito se ha cerrado, compara la localización del circuito en la matriz de teclas, con el mapa de caracteres que posee en su ROM. Un mapa de caracteres es básicamente un "lookup table" o una especie de catalogo. Le dice al procesador, la posición de cada tecla en la matriz, y lo que cada combinación de teclas significa, por ejemplo, el mapa de caracteres, le dice al procesador, que apretar la tecla 'a' por si sola, corresponde a la letra en minúscula 'a', pero que la combinación de Shift y 'a' corresponde a la letra en mayúscula 'A'.
    Denker

    Así que mientras uno escribe, el teclado analiza a la matriz de teclas, y determina que caracteres enviar a la computadora. Mantiene estos caracteres en su memoria buffer un tiempo, y después envía estos datos.
    El teclado, puede enviar estos datos ya sea por cable o por wireless, la señal del teclado es monitoreada por el controlador de teclado de la computadora. El cual es un circuito integrado, que procesa todo los datos que vienen del teclado y lo reenvía al sistema operativo. Cuando el sistema operativo, es notificado que el teclado ha enviado datos, checa si los datos son comandos a nivel de sistema. Un ejemplo claro, para entender esto, es cuando se presiona Ctrl-Alt-Delete en una computadora corriendo Windows, el sistema operativo se reiniciará.
    Si no se trata de ningún comando de sistema, el sistema operativo pasará la información del teclado a la aplicación que este corriendo.
    La aplicación determinará, si los datos del teclado, son un comando, como Alt-f, que abre el menú de archivo en una aplicación de Windows. Si los datos no son un comando, la aplicación, los aceptará como contenido. Ahora bien, si la aplicación actual, no acepta datos del teclado, simplemente ignorará la información.
    Todo este proceso es casi instantánea.

    Si pensamos que la relación CPU- memoria es una relación de marido-mujer, la relación de CPU-teclado, se podría considerar como una realción de buenos amigo. El CPU recibe la información, primero checa si es un comando de sistema, para checar si es un comando de sistema, se alia con su querida esposa MEMORIA. La esposa llamada Memoria, es un mujer un tanto timida, lista pero timida, que ayuda a entretener a los amigos de su esposo. Dependiendo del contexto en el cual se haye su marido y su amigo teclado, ella ya tiene lista sus tablas que entrega felizmente a su esposo CPU, su esposo CPU interpreta la información que le fue brindada, y hace con ellas maravillas. Se podría decir que el Sr. Teclado es un invitado en la casa de los CPU-Memoria. Un invitado el cual es entretendio por la audaz memoria y listo CPU

    Sunday, August 03, 2008

    guilt is like a seat belt for your soul.

    People are free to live whatever lives they so choose, but must be prepared to accept whatever consequences stem from their actions.