Texto autodescriptivo, prueba 1 (y 0)

Saturday, February 18th, 2012

Este párrafo habla sobre este párrafo. ¿Qué puede decir un texto sobre sí mismo? Puede describirse. Por ejemplo, aquí en total hay 455 caracteres, de los cuales 79 son espacios. Están escritas 333 letras: 149 vocales y 184 consonantes. El caracter más repetido es “e” porque aparece 55 veces, y hay 27 dígitos que sumados dan 100. Este texto fue escrito por Sejo el 18 de febrero de 2012 con ayuda de una computadora. Sí, toda la información es verdadera.

Digamos que la prueba 0 fue:

Este tuit tiene doce vocales.

Todo empezó hace rato en el coche cuando generaba de esas frases que me gustan, “Nunca encontrará la respuesta a la pregunta de por qué nunca le encontrará respuesta”, “Solo tiene un tema de interés: El hecho de que solo tenga un tema de interés”.

Pensé que estaría rifado tener una tesis doctoral cuyo tema fuera ella misma, un texto autoreferente que además explicara cómo se logró esa autoreferencia, algo así.

Pero bueno, decidí empezar por lo simple. La prueba 0 la hice escribiendo a mano, para la prueba 1 decidí ayudarme de un programa.

La principal complicación surgió cuando quise agregar el dato de cuánto sumaban los dígitos presentes. Fue bonito (?) observar oscilaciones, i.e. la suma daba cierto número que hacía que la suma diera otro número que hacía que diera otro número que en algún momento era el número que ya había dado al principio. Hubo que echarle un poco de reflexión. (Como dato curioso, el 100 que quedó en la versión final puede cambiarse por cualquier entero entre 100 y 109 y sigue siendo verdadero)

Las siguientes pruebas deben incluir la complicación de expresar las cantidades de letras usando palabras, para que suceda lo mismo que sucede en la prueba 1 con el número de caracteres, el número de dígitos, la suma de esos dígitos, y el caracter más repetido (su presencia hace que ellos mismos cambien).

No pongo el código que usé porque no quiero spoilearlos. Pero más o menos hace lo mismo que yo hice en la Prueba 0: escribir la frase, medir la(s) variable(s) requeridas para actualizar la frase, y repetir hasta que se estabilice (ya sea solo o con ayuda externa). Extra hint: usé C y la función sprintf de stdio.h (claro que eso solo concierne a la implementación del algoritmo y es para nada fundamental…)

Por último, el comic de XKCD al respecto del tema: http://xkcd.com/688/

🙂

Programador de ATmega16 en Arduino

Saturday, January 7th, 2012

Después de buscar sin resultados durante la semana un ATmega16, ayer viernes lo compré para poder probar este proyecto…

El código se descarga de la siguiente dirección y ahí trae documentación sobre cómo usarlo y cómo funciona.

ATmega16_programmer

En resumen es un programador en Arduino para el microcontrolador ATmega16 usando SPI.

😀

Una foto de mi setup de pruebas donde trata de apreciarse lo sencillo del sistema:

Desde que llevé Microcontroladores (TE2023) me surgió con Dante la inquietud de hacer un programador, en ese entonces para un 8051. De proyecto final terminé haciendo más bien un ensamblador del lenguaje ensamblador de ese micro (veo que no lo he subido por acá), pero bueno, siguió la idea.

El semestre pasado la materia cambió a usar el ATmega16, y bueno, en estos días pensé que estaría bien hacer un programador en Arduino porque es una herramienta que se ha hecho popular y ubicua. Así los nuevos alumnos de la materia, en vez de usar el TopMax del laboratorio o de comprar un programador propio, pueden usar la tarjeta Arduino que probablemente ya tengan.

El lunes programé las funciones de SPI, dejé pausado el proyecto hasta tener un micro donde probarlo, y ya que el viernes lo conseguí, escribí el parseo de los archivos HEX. Ahorita estuve asegurándome de que funcionara bien (escribiéndole al micro archivos HEX que tengo por aquí y revisando la memoria de programa), escribiendo la documentación que está en el código, y agregándole la licencia de Software Libre (¡los invito a mejorarlo!).

No sé (todavía) escribir código para ese microcontrolador, así que agradeceré que me avisen cuando le pongan un programa funcional usando esta herramienta.

¡Feliz inicio de semestre!

🙂

 

Árbol de Navidad con displays de 7 segmentos

Wednesday, December 21st, 2011

http://www.youtube.com/watch?v=7SR2s0dW_-M

Hace como dos semanas tuve la idea pero apenas estos días pude llevarla a cabo.

El lunes compré los materiales y hoy acabé, la verdad es que el sistema es muy simple pero armarlo fue más talachudo de lo que pensé.

El circuito consiste en 15 displays de 7 (8) segmentos de cátodo común. Los cátodos de cada lámpara van a un decodificador de 4 a 16, y todos los ánodos están en mismos nodos. Así, se requieren 12 líneas para controlar: 4 para seleccionar la lámpara a encender, y 8 para encender o apagar cada segmento o punto.

El algoritmo de control no es novedad: cada cierto tiempo se selecciona una lámpara y se colocan los valores de encendido / apagado que se desean para esa lámpara, así una por una. Esto se hace a una velocidad tal que para el ojo humano parece que todas están encendidas al mismo tiempo.

Adjunto un archivo que sirve como plantilla para controlar el árbol con un Arduino Uno. Si alguien quisiera probar alguna animación / patrón, puede modificarla y enviármela para que lo pruebe

😛

SevenSeg_XmasTree_Layout

Amazing sounds of nature

Thursday, June 2nd, 2011

Mi último programa, Amazing Sounds of nature (solo para GNU/Linux, hasta donde sé).

Lo pueden descargar de aquí: amazing.c

Para compilar:

$ gcc -o amazing amazing.c

Para ejecutar lo más probable es que tengan que hacer lo siguiente:

$ padsp ./amazing

(Para generar sonido, el programa escribe a /dev/dsp, dispositivo que probablmente no tengan. Usando padsp se “wrappea” el programa y se redirige la escritura a /dev/dsp al dispositivo de audio adecuado según PulseAudio)

Espero les agrade 🙂

[El detrás de cámaras]

Amazing sounds of nature: detrás de cámaras

Thursday, June 2nd, 2011

Lo que hice para lograr a Amazing sound of nature fue lo siguiente:

  1. Encontrar un wav de Never Gonna Give You Up – Rick Astley. Realmente usé el OGG de Wikipedia y lo convertí a wav
  2. Leer el wav para obtener datos relevantes (canales, número de muestras, tamaño de la muestra, frecuencua de muestreo) y los datos de sonido.
  3. Escribir el fragmento relevante de datos de sonido como números en un arreglo. (Todo esto se deja como ejercicio para el estudiante, usando la especificación del formato WAV, yo use esta)
  4. Escribir el programa que reprodujera el arreglo. Para eso me basé en este tutorial

🙂

SejoProyectos: Verano 2011

Thursday, May 19th, 2011

Ahora que empezaron las vacaciones, no hay que desaprovechar la gran oportunidad que se nos está dando para realizar proyectos sin presiones y distracciones de la escuela.

En este post describo varios proyectos que tengo ganas de realizar este verano, los publico porque pienso que estaría muy bien que colaboráramos entre varias personas para desarrollarlos.

Cada proyecto tiene su título, una pequeña descripción, y una lista de actividades generales que el proyecto implica. Cuando dice diseño de hardware digital se refiere a usar VHDL e implementarlo en FPGA. Las actividades que contienen la palabra software están pensadas para ser realizadas principalmente en C o en Python, aunque también se aceptaría Java. Diseño y elaboración de PCBs implica hacer esquemáticos y plantillas de PCBs (Printed Circuit Boards), además de armarlos físicamente.

Si están interesados en trabajar en alguno de ellos o si tienen otras propuestas, no duden en contactarme a través de los comentarios de este post, de Twitter (@SrSejo) o de Facebook.

Redes neuronales en hardware: reconocimiento de imágenes

Aprovechando la flexibilidad y paralelismo de las FPGAs, en este proyecto se implementarán redes neuronales en ellas. La idea es tener una respuesta inmediata al recibir un estímulo nuevo, lo que le permitiría un funcionamiento óptimo en aplicaciones donde se requiere velocidad. Tengo interés en usarlas para reconocimiento de imágenes, especialmente en reconocimiento de caracteres escritos.

Actividades / Temas:

  • Diseño de hardware digital.
  • Software de interfaz PC – hardware.

Analizador lógico de múltiples canales

Un analizador lógico es un dispositivo que presenta los estados de una señal digital en función del tiempo. En el laboratorio usamos osciloscopios con este fin, con la gran desventaja de que solo cuentan con dos canales debido a la naturaleza analógica de sus posibles entradas. Este proyecto consiste en diseñar un módulo de hardware digital que al conectarlo a una computadora cumpla la función de analizador lógico de múltiples canales.

Actividades / Temas:

  • Diseño de hardware digital.
  • Software de despliegue (graficación) de señales / datos.
  • Software de interfaz PC – hardware.
  • Diseño y elaboración de PCBs.

Brainfuck microcomputer

Brainfuck es un lenguaje de programación ‘esotérico’ consistente en solo ocho instrucciones de un caracter de longitud cada una. La idea de este proyecto es diseñar un procesador junto con hardware periférico mínimo (e.g. interfaz serial) para obtener una computadora que funcione a base de Brainfuck compilado.

Actividades / Temas:

  • Diseño de hardware digital.
  • Software ensamblador / compilador de Brainfuck.
  • Software de interfaz PC – hardware.

Ropa con LEDs

Inspirado en tendencias actuales, este proyecto interdisciplinario (ingeniería + diseño) tiene como fin desarrollar prendas de vestir con LEDs que se encienden por acción de un microcontrolador.

Actividades / Temas:

  • Programación de microcontroladores.
  • Diseño de modas / gráfico / industrial.
  • Diseño y elaboración de PCBs, arreglos de LEDs e interconexiones.
  • Software de interfaz PC – hardware.

Experimentación con distintos microcontroladores y microprocesadores

Más que un proyecto, quisiera hacer pruebas con las siguientes plataformas: ATmega16 (el microcontrolador que sustituirá al 8051 en la materia de Microcontroladores), MicroBlaze (soft-processor de Xilinx que se puede implementar en una FPGA), x86 y x86_64 en Linux

Actividades / Temas:

  • Programación en lenguaje ensamblador.

Engineering: making your dreams come true 😛