miércoles, 27 de marzo de 2013

Problema: Mi Raspberry Pi no saca video por el HDMI

En muchas ocasiones he hablado con gente que me ha comentado que su Raspberry no sacaba ninguna señal, y no sabían exactamente cual era el motivo. Pareceque el dispositivo se enciende pero no hace nada, me comentaban. Este problema lo ha sufrido mucha gente y yo mismo lo he experimentado algunas de las distribuciones que he instalado en mi Raspberry.

En ocasiones, por algún motivo, la Raspberry Pi no saca imagen por el puerto HDMI. Por defecto las configuraciones de los sistemas basados en Raspbian (Whezzy) suelen estar configurados para que autodetecte el monitor CRT o el HDMI según si el HDMI está o no conectado. Sin embargo, a veces esta autodetección no funciona correctamente.

Pero este problema tiene una solución muy sencilla. Si introducimos la tarjeta SD en nuestro PC, veremos que aparece una pequeña partición de unos 90Mb aproximadamente. En ella además se encuentra un archivo llamado config.txt. Este archivo contiene la mayor parte de la configuración de nuestra raspberry pi, y editándolo podemos cambiar la resolución, el overclock, la memoria asignada para vídeo y muchas otras cosas.

Concretamente para solucionar el problema que comentamos hay varios parámetros que nos interesan En primer lugar, tenemos el parámetro hdmi_force_hotplug. Este parámetro fuerza la detección en caliente del HDMI, lo que da una segunda oportunidad si hemos encendido la raspberry sin haber conectado previamente el cable HDMI.


 hdmi_force_hotplug=1 Use HDMI mode even if no HDMI monitor is detected


Con esto debería ser suficiente, pero aún así es posible, que no funcione correctamente. En este caso, habrá que configurar la resolución ya que puede no estar emitiendo una resolución compatible con nuestra pantalla. En mi caso he utilizado full-HD con los siguientes parámetros:

hdmi_group=2

hdmi_mode=68

El primero se refiere al grupo tipo de resolución y el segundo a la resolución concreta. Para más información podéis referiros al wiki de referencia sobre la configuración de Raspbian. Otro parámetro de configuración importante para que el HDMI funcione correctamente, es configurar si queremos emitir a través de HDMI como DVI o como HDMI. El primero no incluye el sonido en la emisión mientras que el segundo si emite el sonido a través del HDMI, con esto podemos elegir si queremos obtener el sonido a través del puerto analógico o a través del digital.


 hdmi_drive=1 Normal DVI mode (No sound)
 hdmi_drive=2 Normal HDMI mode (Sound will be sent if supported and enabled)


Con esto debería funcionar correctamente, pero si esto no fuese suficiente, es posible forzar por completo la unidad HDMI con la opción hdmi_safe que equivale a forzar varios parámetros que obligan a la salida por el HDMI.

hdmi_safe=1

Además de esto, en el archivo config.txt se pueden modificar otras cosas interesantes, como por ejemplo el modo de vídeo, entre NTSC americano, Japonés o PAL.

sdtv_mode=0    Normal NTSC
sdtv_mode=1    Japanese version of NTSC – no pedestal
sdtv_mode=2    Normal PAL
sdtv_mode=3    Brazilian version of PAL – 525/60 rather than 625/50, different subcarrier

El modo de pantalla 4:3, 14:9 o 16:9

sdtv_aspect=1  4:3
sdtv_aspect=2  14:9
sdtv_aspect=3  16:9

Y para los que quieran experimentar, también se puede modificar cosas como, si queremos que rote la imagen, si queremos que la invierta verticalmente u horizontalmente.

display_rotate=0        Normal
display_rotate=1        90 degrees
display_rotate=2        180 degrees
display_rotate=3        270 degrees
display_rotate=0x10000  horizontal flip
display_rotate=0x20000  vertical flip

Y por supuesto se pueden modificar cosas el overclock de la Raspberry y la memoria asignada a la GPU. Pero no sólo es posible hacer estas modificaciones, hay muchas más, pero ten cuidado con las opciones avanzadas y sobretodo con el overclock porque puedes dañar tu raspberry.

A continuación os dejo los parámetros con los que yo he hecho funcionar por el HDMI mi dispositivo. Simplemente he añadido estas lineas a mi archivo, si algún parámetro ya está en vuestro archivo, podéis modificarlo, pero no borréis lo que haya de antemano sin hacer una copia de seguridad previamente.

hdmi_force_hotplug=1

hdmi_group=2

hdmi_mode=68

sdtv_mode=2

sdtv_aspect=3

hdmi_drive=2

sábado, 23 de marzo de 2013

Electrónica para dummies 1: ¿Que es el Voltaje?

En esta nueva serie de entradas pretendo ilustrar conceptos básicos de electrónica, de forma que sean fáciles de comprender por cualquiera, independientemente de los conocimientos en electrónica que posea. Esto no significa que vaya a ser fácil, sino que comenzaremos por el principio. Estos conceptos son importantes y necesarios para aquel  que quiera realizar  cualquier proyecto de electrónica de forma autónoma, por sencillos que sean. Además, dominar estos conceptos, le permitirá reconocer problemas en sus circuitos, que de otra forma no sería capaz de detectar. Para comenzar, hoy vamos a hablar del voltaje. Aunque parezca raro, no siempre se tiene un concepto adecuado del término voltaje y eso impide entender el funcionamiento de los sistemas electrónicos. Como he dicho antes, voy a intentar explicarlo desde el principio, ciñéndome a los principios físicos fundamentales del fenómeno.
En la figura anterior, se muestra una resistencia $R1$ y conectada entre dos valores, por un lado el valor $+5$ y al otro $GND$. Para comenzar habría que definir que significan estos valores. Como explicaré mas adelante, el símbolo $GND$ se refiere al punto de referencia de nuestro circuito, es lo que vendríamos a definir como el valor de voltaje 0 de nuestro circuito, aunque como veremos un poco más adelante esto no es del todo así. Para ser estrictos, $GND$ es la referencia sobre la que debemos medir el voltaje de cualquier punto en nuestro circuito, por lo que se debe entender que en el punto donde está escrito el valor $+5$ hay 5 voltios más que en el punto $GND$. Particularizando esto, para el caso de una placa arduino, el pin marcado como $+5$ es la salida del regulador de tensión, esto significa que hay un elemento en la placa, que se ocupa de garantizar que en entre $GND$ y ese punto siempre hayan $5V$ de diferencia. Pero cuidado, un regulador de tensión, será capaz de garantizar esto, hasta un limite, si le pedimos demasiada energía, en este caso está limitado por la corriente, esta tensión ya no serán $5V$ sino que podría caer, pero a esto le dedicaremos una entrada mas adelante. Para lo que vamos a explicar, supondremos que nuestro regulador es capaz de darnos una corriente infinita, tanta como le exijamos.

El primer concepto que debemos corregir es, el de pensar en la tensión como un valor único en un punto. Cuando decíamos en el caso anterior, que a un lado de la resistencia hay $0V$ o $GND$ y en el otro $+5V$ lo que estamos diciendo que es que están cayendo $5V$ en la resistencia que hemos puesto entre esos dos puntos, o lo que es lo mismo, que entre los dos bornes de la resistencia hay una diferencia de tensión de $5V$.
Para ver esto, en mas detalle, veamos el ejemplo siguiente:

En este caso, la diferencia de tensión entre los bornes exteriores sigue siendo de $5V$, pero ¿Que tensión hay en el punto intermedio?. Pues para responder a esta pregunta habría que establecer que la tensión será igual a la tensión que hay entre los bornes exteriores, menos la que caiga en la resistencia R1. Si por ejemplo, establecemos que $R1=R2$, la tensión que caerá en cada resistencia será de aproximadamente $2,5V$, es decir la diferencia de tensión entre sus bornes será de $2,5V$ y por lo tanto si medimos la tensión del punto $P1$ respecto a $GND$ veremos ese valor de tensión. Esto es lo que se llama, divisor de tensión, y le dedicaremos una entrada mas adelante. Este comportamiento, tiene su explicación en el fundamento físico que explica el voltaje y que se basa en la energía potencial. Para explicar lo que viene a continuación introduciremos la conocida formula que define la tensión como $V=IR$. Si analizamos detenidamente esta formula, podremos darnos cuenta, que viene a decir que para que exista voltaje entre dos puntos, debe haber una intensidad y una resistencia, ya que si la intensidad es cero, el voltaje sería cero y de igual modo si la resistencia fuese cero la diferencia de tensión entre los dos puntos sería cero. Es muy importante, tener claro que no tiene sentido hablar de tensión en un punto concreto de un circuito, la tensión o voltaje es una forma de energía potencial, y la energía potencial se define como energía almacenada que puede ser usada para realizar un trabajo, por ejemplo el trabajo que se realiza al ir de un sitio a otro o en el caso de un circuito electrónico el trabajo necesario que es preciso realizar para atravesar una resistencia. 

Podríamos imaginar que sujetamos una pelota en el aire, como es lógico, si la soltamos caerá a suelo. Esto ocurre porque al sujetar la pelota en el aire, ésta almacena energía que contrarresta la fuerza que la tierra ejerce sobre ella atrayéndola. Esta energía, mide la capacidad del sistema para realizar un trabajo, en este caso el trabajo consiste en caer al suelo y el sistema mano-pelota-suelo la contiene, nuestra mano es lo único que impide que este trabajo se realice.

En este símil, la energía potencial de la pelota se corresponde con la energía que almacena el sistema al estar la pelota en este punto, respecto a la que almacenaría el sistema si la pelota se encontrase en el suelo. Por tanto la energía potencial es la energía que el sistema tiene almacenada y que liberará en forma de energía cinética si soltamos la pelota mientras esta realiza el trabajo de ir desde nuestra mano al suelo. Según lo comentado, hay que fijarse que no tiene sentido hablar de energía potencial sin tener un punto de referencia, en este caso la energía potencial de la pelota en nuestra mano es mayor a la energía potencial que tendría en el suelo, esto es lo que se traduce en que si nada se opone a este recorrido lo recorrerá irremediablemente ,o lo que es lo mismo, si la soltamos caerá.

Cuando la pelota se encuentra en el suelo, no cae, pero esto no significa que su energía potencial sea cero ya que su energía potencial habría que medirla respecto a otro punto de referencia. Si la medimos con respecto al propio suelo, su energía potencial es cero, pero si la medimos con respecto a un punto 100 metros por debajo del suelo, la energía potencial será mayor en la superficie del suelo que en dicho punto, esto explica porqué si hacemos rodar la pelota por el suelo hasta un barranco, la pelota se precipitará por éste, liberando la energía potencial almacenada en forma de energía cinética. Esto también explica porqué la energía potencial siempre debe medirse como relación entre dos puntos, y por eso siempre se debe hablar de diferencia de potencial. Partiendo de esta explicación y teniendo en cuenta que el potencial o voltaje es un tipo de energía potencial, se puede explicar el fenómeno del que partimos al comienzo del post. Si no existe diferencia de potencial, no habrá circulación de electrones, es decir intensidad, que viene a ser como la caída de la pelota al suelto. Pero en este caso, además existe otra variable a tener en cuenta que es la resistencia, si no existe una resistencia entre el punto de mayor potencial y el de menor potencial, los electrones serán atraídos por completo y por tanto no habrá diferencia de potencial, ambos puntos tendrán el mismo potencial, pero si interponemos una resistencia, esta retendrá parte de los electrones al igual que nuestra mano retenía la pelota. Esto hará que se acumule energía entre ambos lados de la resistencia en forma de energía potencial, y con este razonamiento se llega a la conclusión de que la energía potencial en un punto $V1$ respecto a la energía potencial en otro punto $V2$ es igual a $V1-V2=IR$.
Para finalizar, se puede aprovechar esta explicación para describir un nuevo fenómeno que ocurre cuando la energía potencial entre dos puntos es mayor a cero y la resistencia es cercana a cero, es decir, si $(V1-V2)>0$, y la resistencia entre esos dos puntos es cero, llegaríamos a una incongruencia matemática ya que tendríamos $(V1-V2)=I0$ y al mismo tiempo que $(V1-V2)>0$. Esto vendría a significar que $I={(V1-V2)\over 0}$, lo que solo se podría resolver si la intensidad fuese infinita. Esto es lo que comúnmente se conoce como cortocircuito, y es lo que ocurre cuando conectamos dos puntos que contienen diferente energía potencial sin poner una resistencia de por medio.

En este caso el de mayor potencial tiene capacidad de liberar energía para emitir corriente hasta el de menor potencial, de forma que al estar conectados directamente sin una resistencia, se liberaría esta energía en forma de intensidad sin freno alguno, lo que podría provocar que se caliente el circuito en ese punto llegando a quemarse o estropeando algún componente. Por este motivo siempre debemos evitar que esto ocurra en nuestros diseños, y para evitarlo nunca debemos conectar dos puntos con diferente energía potencial sin poner una resistencia por medio.

sábado, 16 de marzo de 2013

Rasberry Pi para nostalgicos... Emuladores y más emuladores

Acabo de descubrir por casualidad una distribución para Raspberry Pi, muy interesante. Esta distribución se llama Camaleón e incorpora una enorme cantidad de emuladores de ordenadores clásicos, arcade y viejas videoconsolas como Nes, SNes, Mega Drive, Atari,... y... para los fanáticos de juegazos como Maniac Mansion, Monkey Island y otras maravillas de Lucas Arts.... SCUMMVM... en fin una verdadera maravilla, aquí os dejo las notas de la versión 0.3 donde podéis encontrar la guía de controles y aquí os dejo una lista de los emuladores incluidos.

Para instalarlo sólo hemos de descargar el torrent de la versión 0.3 de aquí.

Eso es todo. De momento el proyecto tiene algunos detalles a pulir, por ejemplo en mi caso no funciona el HDMI, por defecto aparece la imagen a través del conector RCA. Y en el caso del mame, hay que modificar el enlace simbólico aquí os dejo un enlace a la conversación con los detalles, ya que todavía no está claro el tema. En teoría hay que eliminar el enlace simbólico que hay y crear otro, pero en mi caso me encontré con que no era un enlace simbólico sino un directorio y tuve que eliminarlo por lo que, si se aclara este tema finalmente ya lo comentaré en detalle.

Os dejo un vídeo de su creador Carles Oriol a quien aprovecho para mandar un cordial saludo y mis felicitaciones por el trabajo. En breve subiré el vídeo que hice en casa con mis pruebas.


Os adelanto que los juegos de Mame, con Advance Mame suele funcionar un poco lentos en algunas ocasiones, pero otros muchos funcionan a la perfección. Por otro lado, SCUMM y los computadores antiguos que he probado funcionan a la perfección. Si tenéis un rato, os recomiendo que lo probéis porque es una verdadera gozada.

lunes, 11 de marzo de 2013

Xbian: XBMC en tu Raspberry Pi, porque rectificar es de sabios

Tras unas semanas probando la distribución RaspBMC, finalmente vuelvo a xbian porque, como dijo Alexander Pope rectificar es de sabios. El sistema RaspBMC tiene unos tiempos de carga mejores que xbian y la interfaz es algo más suave y rápida, sin embargo tiene una gran desventaja... el plugin de peliculas a la carta no funciona. Películas a la carta es un plugin que permite ver películas y series online de los servidores más famosos cómo series.ly, series yonkis y películas yonkis, cine tube, y un larguísimo etc. Pues bien, cuando usamos RaspBMC, nos encontramos con el problema de que los capítulos y las películas se cortan a los 5 minutos. ¿Alguien conoce la causa de este problema , bueno el caso es que yo no, pero si conozco una solución... y es volver con mi viejo amigo xbian. Finalmente tengo que reconocer que es la distribución que mejor resultado me ha dado en conjunto ya que todos los plugins funcionan correctamente y la última versión que hay disponible (1.0 alpha 5) a día de hoy es una verdadera maravilla, la interfaz se nota mucho más rápida que las anteriores.

Para instalarlo, podéis descargar el instalador de xbian desde este link. Una vez descargado y descomprimido veréis que su interfaz presenta un aspecto como el siguiente:



El instalador es genial, permite instalar la versión que queráis y la descarga antes de grabarla en la tarjeta SD. Además, en el modo avanzado permite restaurar una imagen de cualquier otro sistema operativo ó imagen que hayamos descargado, pero no sólo eso... también nos permite que una vez tengamos nuestro xbian instalado, con nuestros plugins y configurado a nuestro gusto, podemos hacer una copia de seguridad el mismo con la opción backup. Para ello simplemente hay que seguir los siguientes pasos:

  1. Seleccionamos la opción Advanced mode
  2. seleccionamos la tarjeta en el primer combo box (elemento desplegable) pestaña que aparece, sólo veremos el tamaño de la tarjeta SD que hay introducida en el PC si, sólo tenéis una sólo veréis eso.
  3. Pulsamos el botón  One click backup
  4. Por último le decimos donde queremos guardar la imagen y con que nombre y ya está, ya tenemos una copia de restauración de nuestro sistema. Y ojo, esto no sólo vale para xbian, podemos hacer una copia de restauración de cualquier sistema que hayamos preconfigurado.



Y ahora os paso a detalla como instalar xbian, aunque ya os aviso que es muy sencillo. En primero lugar tenéis que seleccionar la versión de xbian que queréis instalar, yo os recomiendo la 1.0 Alpha 5 que es la última en este momento (esto en el futuro puede variar, lo mejor seguramente será instalar siempre la última). 

Luego seleccionáis la tarjeta SD en la que vais a instalar el sistema, cuidado de elegir la tarjeta correcta si tenéis mas de una y que perderéis todo lo que haya guardado en ella. Cuando hayáis verificado bien esto último, pulsáis el botón Install y comenzará el proceso.


Como seguramente no tendréis descargada todavía la imagen de xbian, os avisará de que va a descargarla, por lo que simplemente le decís que sí en el siguiente cuadro de dialogo.


A continuación, procederá a instalar el sistema, sin antes avisar de que se va a borrar todo lo que hay en la tarjeta de memoria, como siempre estos señores se preocupan bastante por nuestras fotos y todo eso que solemos tener en la tarjeta de memoria. Así que recuerda, una copia de respaldo de tus fotos a tiempo es un disgusto menos :) 


Por último sólo queda esperar a que la instalación termine, podemos ir a tomar un café mientras tanto.




martes, 5 de marzo de 2013

¿Todavía no conoces MakerBeam? ¿y a que esperas?

¿Alguna vez has intentado construir un robot? bueno.. quizá dicho así parece algo disparatado... ¿que tal un robot cartesiano? es decir un sistema que sea capaz de moverse en tres ejes... como por ejemplo... una impresora 3D o un control numérico CNC... o simplemente un dispositivo para hacer corte por láser preciso, o bien para pintar con precisión... Pues bien, si alguna vez te has enfrentado a alguno de estos casos, seguro que te has encontrado con miles de problemas  pero uno de ellos, y además muy importante, seguro que ha sido la construcción de la estructura. Esta estructura debe ser robusta, ligera y precisa, ya que si no es precisa no servirá para estos fines. Desde MakerBeam nos dan una solución perfecta a este problema.

MakerBeam ha desarrollado unas barras con unión del tipo Mini T-slot, es decir perfiles de aluminio anodizado con raíles en sus diferentes caras en las cuales se puede introducir la cabeza de un tornillo, de forma que la otra parte queda en el exterior pudiendo usarla como punto de anclaje para unir diferentes piezas como se puede ver en el siguiente vídeo. 


Para poder unir las piezas, makerbeam ha previsto de diferentes tipos de piezas de unión y ángulos que nos permiten montar y desmontar las veces que haga falta hasta dar con la solución óptima para nuestro problema, sin necesidad de cortar, soldar, limar, evitando esas virutas metálicas que son tan peligrosas para nuestros proyectos de electrónica.


¿Y que puedo construir con MakerBeam? pues el límite lo pone tu imaginación. Pero si no sabes que hacer o piensas que no es para ti, la red está llena de ejemplos de proyectos que otras personas han sido capaces de plasmar utilizando estos elementos y que quizá puedan darte alguna idea. Puedes encontrar desde impresoras 3D hasta estructuras para nuestros robots. Aquí os dejo con uno de estos ejemplos... evidentemente los motores y las correas no las aportan desde makerbeam... pero... ¿quien no tiene una impresora rota por casa?... pues ahí tenemos eje, motor, correa y poleas... lo que falta es anclarlo todo a algún sitio ;)




sábado, 2 de marzo de 2013

Como instalar en Windows 8 los drivers para Arduino UNO, Arduino Mega 2560 y Arduino DUE

Mucha gente me ha comentado que tiene problemas al instalar los drivers de Arduino en Windows 8. Estos sobre todo puede ocurrir con las nuevas versiones de arduino como UNO, Mega 2560 o DUE ya que las versiones anteriores utilizaban el conocido chip FTDI ó FT232RL para la conversión de los niveles lógicos del USB a los niveles TTL de la UART de comunicaciones serie del microcontrolador de nuestra placa Arduino. Las nuevas placas de Arduino utilizan el chip Atmega16U2 como programador, tal y como se puede ver en los esquemas de Arduino UNO, Arduino Mega y Arduino DUE.



En estos esquemas se puede ver dicho integrado como en la imagen que se muestra a continuación:


Si comparamos con el esquema original de Arduino Duemilianove, podemos ver que abajo a la izquierda  se encuentra el chip FT232RL. Este es el integrado con el que se enviaban los programas al puerto de la UART, RX y TX del microcontrolador Atmega. Por tanto, comprobando el esquema ya podéis saber si estáis en el primer, en el que necesitaréis seguir los pasos descritos a continuación para instalar el driver, o en el segundo en el que no tendréis problema.


Para poder instalar los drivers de Atmel en Windows 8 tenéis que seguir los siguientes pasos. Antes de continuar, tened en cuenta que el segundo paso reiniciará el ordenador, por lo que antes de continuar debéis guardar toda el trabajo que hayáis realizado.

  1. Presionar la tecla Windows y 'R' de forma simultanea.
  2. Copiar en en el cuadro de texto de la ventana de ejecutar el comando entre comillas "shutdown.exe /r /o /f /t 00" y a continuación pulsa"Aceptar".
  3. Selecciona la opción "Solucionar Problemas"
  4. Selecciona "Opciones Avanzadas"
  5. Selecciona "Configuración de Inicio" y pulsa "Reiniciar".
  6. Una vez reinicie el sistema aparecerá un menú donde se pueden elegir diferentes opciones como:  Habilitar Depuración, Habilitar el registro de arranque, Habilitar modo seguro, etc. Hay que elegir la opción 4 "Deshabilitar el uso obligatorio de controladores firmados".
  7. Cuando reinicie el sistema ya podremos instalar normalmente los drivers necesarios para programar nuestros nuevos arduinos.
Gracias a Javier Perez por reportar el link al post original con la solución.