7 de Junio, 2015

»Nostalgia y retro · He estado suscrito por un año a la revista Retro Gamer, más o menos desde que me volví a encontrar con el ZX Spectrum; y la verdad es que al menos para mi celebrar la nostalgia no funciona. A mi me gusta que hablen de los juegos, pero parece que la moda retro no va de eso, es más entrevistar a la gente tras ellos y saber qué ha sido de sus vidas, lo cual me parece más bien poco interesante. Aparte está la linea editorial de esta revista, en la que es buena idea poner dos páginas a todo color con un pantallazo de Atari o Comodore 16 (o algo con resolución similar), con pixeles enormes, y una triste columna de texto acompañando que, nuevamente, tampoco me dice nada; o hacer reportajes de juegos y plataformas que para mi no son nada retro (o es que soy ya bastante viejo). La verdad, mejor estoy releyendo la MicroHobby, que eso sí era una revista ;).

Hay 0 comentarios

29 de Mayo, 2015

El descenso a los abismos de SourceForge

Hace tiempo que SourceForge dejó de ser relevante; primero porque Google Code apareció como alternativa porque no es bueno tener todos los proyectos en el mismo sitio (volveremos a esto más adelante), y más tarde cuando otros sitios más modernos y con mejores herramientas aparecieron, como GitHub, BitBucket o Gitorious.

Resumiendo mucho, digamos que el modelo de negocio de SF siempre ha sido complicado, y finalmente tomaron la decisión de ofrecer a los proyectos la posibilidad de empaquetar open source con añadidos (que suelen ser basura que ni loco deberías instalar en tu máquina).

Bueno, es algo opcional, y salvo algunos proyectos (notablemente FileZilla, aunque seguro que hay otros), en realidad es tan irrelevante como el propio SF.

El problema viene cuando SF decide hacerse cargo de un proyecto abandonado (algo discutible, proyectos finales tienen poco mantenimiento y pueden pasar años sin nuevas versiones), concretamente GIMP-Win (que empaqueta y distribuye GIMP para Windows), y añaden un instalador que incluye esos añadidos^W^W basura; sin permiso del desarrollador.

Está explicado en esta entrada en la bitácora de SF, donde se excusan diciendo que ellos solo retomaron algo que estaba abandonado, como ya habían hecho antes con otros proyectos.

No es ilegal que distribuyan software libre con un instalador que añade programas de dudosa ética a nuestro sistema, siempre que cumplan con la licencia del software (en este caso GPL v3+); como otros portales de descagas vienen haciendo desde hace años. Me resulta difícil entender porqué alguien iría a Softonic o Downloads a bajar una copia reempaquetada y adulterada de un programa cuando el mismo proyecto ofrece una copia limpia para instalar (salvo excepciones como la mencionada de FileZilla; obviamente no puedo recomendar ese software).

Además la GPL impide que el autor y propietario de los derechos pueda invalidar la licencia, ni siquiera para un caso concreto como este, e impedir así que se sigua distribuyendo el programa de una forma que perjudica al proyecto original (en este caso GIMP).

Esto no es malo, al contrario, es esencial para que el software libre funcione: si el fabricante puede cancelar la licencia en cualquier momento y, por ejemplo, pedir una cantidad económica para continuar usando el software; ¡nadie usaría software libre!

Por ese motivo muchos proyectos registran una marca (el caso más conocido es quizás Firefox, propiedad de la Mozilla Foundation); que impide que estas cosas pasen, y si pasan... no será asociado al nombre del proyecto original.

Hubo un tiempo en el que SF era lo mejor para mantener open source gratis, y es dificíl de entender cómo han llegado a estos extremos y todo eso; pero es interesante tenerlo en cuenta especialmente ahora que todo va a parar a GitHub. Veremos qué nos depara el futuro.

Hay 0 comentarios, anotación clasificada en: software libre.

28 de Mayo, 2015

»Adiós a Fedora · Hace tiempo que evaluaba Debian 6.0 como alternativa a Fedora, porque los cambios que la distribución iba introduciendo no me convencían (aunque lo intenté bastante, ojo). Al final me he dado cuenta que no uso mucho de lo que se instala por defecto, ni me llama tanto contribuir (ese aspecto en la distro ha cambiado, pero eso es tema para otro momento), y ahora que Debian stable tiene software maduro (incluso más reciente que lo que vengo usando en Fedora 20, que se acerca su end of life), ha llegado la hora de cambiar; o más bien de volver a Debian.

Hay 0 comentarios, anotación clasificada en: fedora, software libre.

7 de Mayo, 2015

»pysdl2 fácil · No hace falta que introduzca SDL por aquí, pero sí recordar que SDL2 es bastante diferente, sobretodo porque soprta 2D con aceleración por hardware. Hay algunos módulos que permiten trabajar con SDL2 en Python, pero tienen interfaces poco pitónicos. En un par de días he llegado a algo funcional en pysdl2-harness, que son un par de clases para usar pysdl2 ocultando la parte fea de SDL, un poco como si fuera pyglet (pero mucho más sencillo).

Hay 0 comentarios, anotación clasificada en: sdl, python.

25 de Abril, 2015

Cuidado con los "fuses"

Los fuses (¿fusibles?) son 3 bytes de memoria permanente que determinan ciertas partes del comportamiento del microcontrolador.

Esta semana he estado trabajando con los ATtiny84, que es un microcontrolador de la subfamilia tiny de AVR. Es un MCU más pequeńo que el que viene con el Arduino Uno, y tiene algunas diferencias en cuanto a funcionalidad (ya hablaré de eso en otro momento).

Estos microcontroladores vienen de casa configurados para usar un oscilador RC interno a 8 MHz, pero tienen activado el flag CKDIV8 que divide por 8 la velocidad del oscilador, con lo que el MCU funciona a solo 1 MHz.

Como para mi proyecto quiero usar los 8 MHz (que además es una frecuencia soportada para 3v que puedes conseguir con dos pilas AAA), tengo que cambiar los fuses para desactivar ese flag.

Estoy usando un programador muy barato llamado USBasp que utiliza el interfaz SPI del microcontrolador sin la necesidad de un bootloader (como usa el Arduino), y nos deja disponible así toda la memoria para nuestro programa.

USBasp está soportado por avrdude, así que es bastante fácil reprogramar el MCU.

En primer lugar hay que usar la opción -B de avrdude a un valor de al menos 10 porque sino no será capaz de compunicarse con el MCU a 1 MHz.

Podemos confirmar que los fuses están como esperamos con:

avrdude -c usbasp -p attiny84 -P usb -v -B 10

Y cambiamos el low fuse para desactivar CKDIV8:

avrdude -c usbasp -p attiny84 -P usb -v -B 10 -U lfuse:w:0xe2:m

Muy fácil. A partir de ahora ya no es necesario usar la opción -B porque el MCU funcionará a 8 MHz.

La documentación del microcontrolador explica los fuses en detalle, pero hay que ir con mucho ojo porque podemos inutilizar el MCU (sin la ayuda del microcontrolador, USBasp es incapaz de programarlo).

Por ejemplo yo me equivoqué probando un cristal externo, confundiendo reloj externo con cristal externo; y no es lo mismo. De hecho no tengo un reloj externo y básicamente inutilicé el MCU porque no arrancaba sin el reloj :(.

Bueno, realmente no ;). Teniendo un Arduino a mano se puede generar una señal de reloj, lo que me permitió recuperar el microcontrolador y configurar los fuses correctamente.

Este es mi código de rescate:

// Generate a clock pulse with Aduino (digital port 5)
#define F_CPU	16000000

#include <avr/io.h>
#include <avr/interrupt.h>

int
main()
{
    cli();

    DDRD |= _BV(DDD5);

    TCCR0A = _BV(WGM00) | _BV(WGM01) | _BV(COM0B1);
    TCCR0B = _BV(CS00);
    TCNT0 = 0;
    TIFR0 = 0;
    OCR0B = 127;

    sei();

    while(1);
}

Ese código genera una señal de reloj en el pin 5 como la que espera el ATtiny84 configurado para usar un reloj externo, así que por esta vez... he podido salvar la situación fácilmente ;).

Hay 0 comentarios, anotación clasificada en: avr.

19 de Abril, 2015

»Reproduciendo audio · Todavía no me he decidido a soldar una de las placas, básicamente porque las de Elecrow están rotas, y las de OSH Park tienen un fallo (este sí es culpa mía). En teoría puedo meter una ñapa y todavía usar las de OSH Park, pero mientras me decido he estado revisando mi código para reproducir módulos de sonido con PWM (en el ejemplo ya con soporte para módulos de Impulse Tracker, porque uso Schism Tracker en Linux). Todavía es pronto, pero estoy pensando en el siguiente proyecto, que espero tenga menos componentes (no es que DAN64 tenga tantos, pero la placa no es tan sencilla).

Hay 2 comentarios, anotación clasificada en: avr, arduino.

6 de Abril, 2015

»DAN64 publicado · Ahora el proyecto tienene página web pública: DAN64, y el código está disponible en dan64 en GitHub. Todavía no he soldado una de las placas, pero como todo lo demás estaba listo, he decidido publicar versión (bueno, lo decidí ayer que era mi cumpleaños; pero entre una cosa y otra no he podido acabar hasta hoy :P).

Actualización: notas en the DAN64: a Minimal Hardware AVR Microcomputer (Hackaday) y Building a minimal 8-bit microcomputer with AVR (Atmel); entre otros. Parece que el proyecto ha gustado :).

Hay 1 comentario, anotación clasificada en: avr, arduino.

3 de Abril, 2015

»Grabando programas · Resulta que grabar los programas es más complicado de lo que pensaba. Bueno, no tanto grabarlos como cargarlos de nuevo. Básicamente los ficheros de audio que genero en mi portátil son perfectos (no pasan por nungún cable o capturador de audio) y con calidad CD; pero el audio generado usando uno de los pins PWM del ATmega328p hay que capturarlo con un dispositivo externo (por ejemplo la tarjeta de sonido de mi portátil), y además tiene una resolución de 8-bits, con lo que la calidad no es muy alta para cargarlos de nuevo en el microcomputador :(. En general es bastante estable para grabar unos cuantos KB, así que estoy contento con el resultado. Aquí hay un vídeo del prototipo.

Hay 0 comentarios, anotación clasificada en: avr, arduino.

30 de Marzo, 2015

Listos para soldar

Hace casi un mes que encargué mis placas PCB, antes de descubir que había intercambiado 2 pines en el conector PS/2 (error de novato, pero me dicen que pasa mucho :P).

Aunque se puede arreglar con un jumper y tal, mientras las placas llegaban o no, investigué un poco a ver qué otros fabricantes para prototipos hay que cumplan los requisitos que todos buscamos: lo más rápido posible, económico, y con buen nivel de calidad. Las placas del primero pedido (desde USA) llegaron hace unos días, y hoy ha llegado la segunda remesa (desde China).

Comparando PCBs
A mi ojo inexperto parecen de la misma calidad

No me veo capacitado para evaluar qué placa es mejor, aunque a simple vista parecen de una calidad similar (no he soldado ninguna; solo he verificado que la continuidad es correcta y poco más). Si acaso me parece que la capa silk screen de la placa de arriba tiene un acabado algo mejor, pero si no tuviera las dos placas delante, la de abajo me parece perfecta.

Voy a comentar mi experiencia como cliente de ambos proveedores, sin mencionar precios porque para eso ya está la página web de cada fabricante ;).

La placa de arriba es de OSH Park. El servicio excelente, con buen precio y buenos tiempos. Además su web es una pasada y realiza muchas pruebas automatizadas que permiten detectar fallos en el diseño (la experiencia para un novato como yo ha sido muy buena). Por buscar alguna pega: hay menos opciones que en el otro fabricante (no puedes elegir color en las placas, no soportan agujeros que no sean redondos). Son 3 placas y han tardado más en fabricarse, pero han estado menos tiempo en el correo.

La placa de abajo es de Elecrow. El servicio también muy bueno; aunque su web es menos intuitiva que la de OSH Park, tampoco tuve problemas para hacer el pedido (aunque soportan muchas más opciones; al final hice un pedido equivalente al de OSH Park, por una tercera parte del coste). Son 5 placas y han estado menos tiempo en fabricación, aunque con lo que ha tardado el paquete en llegar, los tiempos quedan empatados con los del otro fabricante.

La gente de Elecrow te envía una foto de las placas finalizadas antes de echarlas al correo, lo cual me ha parecido un detalle muy majo. Además me han llegado 7 placas, aunque pedí solo 5 (el mínimo, y así lo atestigua la factura). Puede que sea debido a dimensiones de la placa (tuve que pedir 10x10 cm, aunque mi diseño es de 7.366x7.620 cm, por eso puede que me hayan entrado más placas; pero no tengo ni idea, la verdad).

El fin de semana pasado tenía pensado empezar a soldar, pero estoy con gripe, así que tendrá que esperar :S.

Actualización: malas noticias, todas las placas de Elecrow están rotas. Básicamente los tres pines del interruptor S1 están conectados (tierra, 5v y pin al interruptor; lo cual crea un cortocircuito). No me di cuenta cuando testee las placas ¡y he llegado a soldar una! Hasta ahora la atención al cliente de Elecrow se limita a decir que los ficheros Gerber están bien; y en dichos ficheros los pins no están conectados. Así que muy mal con Elecrow :(.

Hay 2 comentarios, anotación clasificada en: avr, arduino, pcb.

21 de Marzo, 2015

Independiente por fin

He acabado el ensamblador, y revisado el desensamblador porque descubrí varios errores al probar ambas partes a la vez.

La idea es encadenar los dos módulos hasta que el resultado sea el mismo. Por ejemplo, supongamos un binario programa.bin:

$ ./dasm -ds programa.bin > fuente.s
$ ./dasm fuente.s > programa2.bin
$ ./dasm -ds programa2.bin > fuente2.s
$ diff -u fuente.s fuente2.s

En realidad hay que ajustar un poco la salida del desensamblador porque genera ??? cuando no encuentra una instrucción válida del 6502, pero se pueden reemplazar esos casos por un BRK (por ejemplo), que sí es válido para el ensamblador.

Por supuesto todo el desarrollo se hace en una máquina normal, y luego se integra con el sistema operativo del microcomputador para la prueba final.

Esto significa que ya puedo programar mi microcomputador sin la ayuda de un compilador cruzado ejecutándose en otra máquina :). Aquí hay un vídeo de ejemplo (en el que cometo un error; ya he corregido el ensamblador para que detecte esos despistes y muestre un mensaje de error).

Al final el entorno permite el comando list para leer memoria y mostrar el desendamblado (opcionalmente admite una posición de memoria), y as para ensamblar (que nuevamente permite indicar una posición de memoria).

La funcionalidad del ensamblador es bastante básica, pero proporciona lo que podemos esperar de un ensamblador para el 6502 (# para valores inmediatos, $ como prefijo para números hexadecimales, etc).

Además soporta la entrada de cadenas de texto y bytes arbitrarios usando el operador punto, con el ejemplo del vídeo:

as 1b00
 1b00: ."Hello world!", $0a, 0
Ok

Lo que almacena la cadena de texto y los dos bytes que le siguen en la posición de memoria 0x1b00.

Desde luego es bastante rudimentario, porque solo se puede introducir linea a linea y no soporta etiquetas o comentarios, pero creo que es suficiente para poder escribir programas sin ayuda externa ;).

Hay 0 comentarios, anotación clasificada en: avr, arduino.

Entradas antiguasEntradas nuevas