Mostrando entradas con la etiqueta hardware. Mostrar todas las entradas
Mostrando entradas con la etiqueta hardware. Mostrar todas las entradas

martes, 2 de noviembre de 2010

¿Qué es un microcontrolador? Pues algo muy molón...

No es la primera vez (ni la última, seguro) que nombro a los microcontroladores en mis entradas... Y posiblemente os suceda lo mismo que ocurrió en el caso de los FPGA. Así que vamos a explicar brevemente lo que es un microcontrolador y para qué sirve (o para qué puede servirnos a nosotros).

Un microcontrolador, a grandes rasgos, es como un ordenador "completo" dentro de un único circuito integrado (ala, qué bestia, tú lo flipas). Si nos fijamos, por ejemplo, en un Spectrum molón (por ser el más sencillito), podemos dividirlo en varias partes, a saber:
  • Microprocesador (nuestro conocido Z80 de Zilog a 3,5Mhz)
  • Memoria RAM (memoria de lectura y escritura y volátil, los famosos 48K del gomas para almacenar programas y datos)
  • Memoria ROM (memoria de sólo lectura, donde reside el BASIC, por ejemplo, entre otras cosas. No se borra al apagar el equipo, al contrario de lo que ocurre con la RAM)
  • Dispositivos I/O (periféricos que usamos para introducir datos al ordenador, como el teclado o la unidad de cinta externa o para extraerlos y/o visualizarlos, como puede ser la pantalla o la misma unidad de cinta cuando grabamos un programa en ella)
  • Bus de expansión (donde podemos incluir el conector del casete o el propio "Bus de Expansión", que se encuentra situado en la parte trasera del Spectrum y que permite añadirle externamente ampliaciones de hardware, como ampliaciones de RAM, controladoras de disco, etc).

Básicamente, así tenemos definido un ordenador personal sencillo. Al encender nuestro equipo, el microprocesador lee primero de la ROM el programa de "inicialización", que prepara y configura el estado inicial de nuestra máquina, configura los dispositivos, limpia la RAM y arranca el interfaz de usuario que nos permitirá comunicarnos con el ordenador (en este caso, el BASIC). Todo eso reside en la ROM.

Mi proyecto USB usa este microcontrolador
A partir de ese punto, cualquier línea de código que tecleemos (usando el teclado) o que carguemos (usando la unidad de cintas) se almacenará en la memoria RAM, y ahí seguirá hasta que reiniciemos el ordenador o lo apaguemos.

Una vez que tenemos estos conceptos más o menos claros (perdón por el discurso), ya podemos abarcar lo que es un microcontrolador con más detalle.

Hay miles de tipos distintos de microcontroladores, de todos los tamaños, de todos los precios, de distintos fabricantes... Algunos son específicos para ciertas tareas, otros son genéricos... Yo me voy a centrar en un microcontrolador genérico, que "vale para todo".

Un microcontrolador es simplemente un chip, un circuito integrado, de igual o menor tamaño que un procesasdor Z80 (depende del modelo). Dentro de este circuito integrado, podemos encontrar:
  • Un Microprocesador (depende del tipo de microcontrolador; los hay de 8 bits, los más baratos y comunes y los hay de 32 bits, mucho más potentes; desde los que funcionan a 10 Mhz hasta los 80 Mhz o más)
  • Memoria RAM (tambien depende del modelo...; los hay con 8Kbytes de RAM, con 64Kbytes de RAM...)
  • Memoria ROM (lo mismo que antes, es un valor variable: 8Kbytes, 16Kbytes...)
  • Bus I/O (digamos que es el "Bus de Expansión"; son varias señales de entrada y salida completamente programables para comunicarnos con el exterior; el número de señales disponibles también depende del modelo de microcontrolador que tengamos)
Si os habéis fijado, en un único chip prácticamente tenemos todos los componentes presentes en un ordenador completo como puede ser el Spectrum y su funcionamiento es muy parecido.

Al poner en marcha el microcontrolador (darle alimentación) el procesador lee el programa que hayamos programado en su ROM. Este programa puede ser cualquier cosa que se nos ocurra (siempre dentro de los límites de proceso y espacio del microcontrolador) y sus funciones depende directamente de ese programa. Básicamente se configuran las entradas y las salidas y se interpretan para dar un resultado que puede almacenarse en la RAM y que va en función de cálculos internos que hayamos realizado y del estado de las entradas que estemos comprobando.

Patillaje: PAx, PBx, PCx y PDx son puertos
de 8 bits configurables por el usuario
Podemos, por ejemplo programar un simple contador de segundos que nos muestre el resultado encendiendo unos leds que estén conectados en algunas de sus salidas (programadas en modo salida). En este caso, el programa no necesita ningún tipo de entrada y se limita simplemente a "contar" y darnos el resultado. También podemos mejorar ese programa y que el contador se inicie o se pare al accionar un pulsador. Este pulsador irá conectado a una patilla del microcontrolador que habremos configurado en modo "entrada" y nuestro programa en este caso deberá inspeccionar el estado de esa entrada regularmente para actuar en consecuencia parando o iniciando la rutina del contador.

Todo esto, puede complicarse mucho más, hasta el punto de que podemos crear un sistema complejo, como puede ser una consola de videojuegos, usando únicamente un microcontrolador y un par de componentes de apoyo (como la Uzebox que comenté en una entrada anterior):


Mini ordenador montado con un microcontrolador AVR
(en el centro). Incluye puerto serie, de vídeo y de teclado.
¡Y hasta un intérprete de BASIC!
Cómo veis, las posibilidades son infinitas y nos abre un mundo inmenso de posibilidades, desde la creación de periféricos hardware para nuestros equipos retro (como he hecho yo con el aparato USB para Amstrad CPC) hasta montar equipos completos (Uzebox).

Otra de las ventajas importantes es el precio de estos integrados. El microcontrolador que yo uso para mi proyecto, funciona a 16 Mhz y tiene una CPU de 8 bits (que nos da unos 16 millones de instrucciones por segundo aproximadamente, mucha más potencia que el Z80). Su aspecto es idéntico al de un Z80 (40 patillas), y todo esto por unos 6€. El mayor desembolso reside en el programador (necesitamos un aparato para programar los chips), que en mi caso me costó unos 50€ por eBay, y me permite programar miles de microcontroladores y eproms distintas.

Un juego de ejemplo programado en BASIC para el
"ordenador" de la foto anterior. ¿Mola o no mola?
El lenguaje de programación que se suele usar, es el C, aunque hay muchas posibilidades más (dependiendo del fabricante). Mucha gente los programa directamente en ensamblador, y si eres como yo (más simple que el mecanismo de un botijo) puedes hacerlo en BASIC (sí, mi interfaz USB para Amstrad está programado en BASIC). Es tan sencillo como crear el programa en el PC, compilarlo y generar el archivo que luego meteremos dentro del microcontrolador con el programador.

Un ejemplo de programa, creado en BASIC (FASTAVR) para microcontroladores ATMEL puede ser este:

----------------------------------------------------------------------------------------------

'/////////////////////////////////////////////////////////
'///   FastAVR Basic Compiler for AVR by MICRODESIGN   ///
'///   3 flashing Leds STK-500       www.FastAVR.com   ///
'/////////////////////////////////////////////////////////
$Device= 8515 ' modelo de microcontrolador
$Stack = 32 ' stack depth
$Clock = 8 ' velocidad del cristal en Mhz
$Lcd    = PORTC.0, Rs=PORTC.5, En=PORTC.4, 20, 4
$Timer1=Timer, Prescale=256
$Source=On
$LeadChar=" "
$Def LED0=PORTA.0   ' Asignamos nombres a los 3 primeros bits
$Def LED1=PORTA.1   ' del puerto A
$Def LED2=PORTA.2

Declare Interrupt Ovf1()

Dim time As Word
Dim tLed0 As Word, tLed1 As Word, tLed2 As Word
Dim d0 As Word, d1 As Word, d2 As Word
Dim d00 As Byte, d11 As Byte, d22 As Byte

PORTA=&hf8    ' Aquí configuramos los 3 primeros bits del puerto A
              ' en modo salida. 11111000 en binario

DDRA=&h07     ' Aquí inicializamos los bits. Al arrancar el
              ' programa los leds se encenderán. 
              ' En binario: 00000111
              ' 0 = apagado, 1 = encendido

Timer1=&hf3cb ' 100 ms time
Enable Ovf1
Enable Interrupts
Start Timer1

Do
d0=time-tLed0: d00=d0 ' d00... back to 8 bit
d1=time-tLed1: d11=d1 ' because IF is shorter
d2=time-tLed2: d22=d2
If LED0 Then
If d00>8 Then
Reset LED0 ' LED0 ON
tLed0=time
End If
Else
If d00>10 Then
Set LED0 ' LED0 OFF
tLed0=time
End If
End If
If LED1 Then
If d11>10 Then
Reset LED1 ' LED0 ON
tLed1=time
End If
Else
If d11>15 Then
Set LED1 ' LED1 OFF
tLed1=time
End If
End If
If LED2 Then
If d22>12 Then
Reset LED2 ' LED2 ON
tLed2=time
End If
Else
If d22>20 Then
Set LED2 ' LED2 OFF
tLed2=time
End If
End If
Loop

'/////////////////////////////////////////////////////////
Interrupt Ovf1(), Save 1
Timer1=&hf3cb ' 100 ms time @ 8MHz
Incr time ' just incr time tick
End Interrupt

----------------------------------------------------------------------------------------------
Podéis ver que el programa es bastante sencillo de entender. Se trata simplemente de encender y apagar 3 diodos LED que están conectados al puerto A del microcontrolador. Cada puerto, por regla general, consta de 8 bits (8 patillas), con lo que podríamos controlar hasta 8 diodos LED.

En definitiva, que todo es ponerse y realmente no es complicado. Si os gusta trastear y diseñar hardware, los microcontroladores son un buen punto de partida, y no necesitáis ser expertos para hacer cosas chulas, os lo digo yo, jejejejeje.

Si queréis más información sobre microcontroladores y características específicas y modelos, os recomiendo que visitéis los sitios web de los dos principales fabricantes de microcontroladores:
Espero que alguno de vosotros os animéis a trastear con ellos. Os lo pasaréis pipa, garantizado.

Saludos.

domingo, 31 de octubre de 2010

XGameStation (TM) - Diseña tu propia consola... (HOW TO...)



Kit de desarrollo "HYDRA"
Si te gusta la electrónica, si te gusta el mundo Retro, si te gustan los videojuegos y además te encanta trastear y aprender cosas nuevas, esta entrada es para ti.

¿Imaginas un libro donde te expliquen desde la base, empezando por una simple resistencia, cómo diseñar desde cero tu propia consola u ordenador? Pues ese libro existe (en inglés, eso sí).

Hace un par de años, me dio por empezar a trastear con hardware retro. Si bien tengo una mínima base de electrónica analógica y digital,  siempre he tenido montones de preguntas sin respuesta. No encontraba a nadie capaz de enseñarme o con la paciencia suficiente para hacerlo. Tenía tantas dudas y tantas ganas de entender el funcionamiento de un sistema informático "sencillo"... Pero cierto día, buscando información, me tropecé con este lugar:


Un lugar maravilloso, sin duda... Esta gente tiene varios kits de desarrollo para montarte tu propio sistema (desde el más simple hasta el más avanzado y completo, como es el Hydra). Los kits de desarrollo tienen todos los componentes necesarios para montarte en casa, con un soldador, tu propio sistema retro en un tiempo record. Los kits de desarrollo incluyen también la placa PCB (la placa con agujeritos donde sueldas todos los componentes) y una placa protoboard (para prototipar).

Formato eBook de este fantástico libro
Pero lo más interesante de todo, es que junto al kit se incluye un eBook dentro de un CD, con el siguiente nombre: "Design Your Own Video Game Console". Un libro con más de 800 páginas explicándote paso a paso todas las etapas de desarrollo de una consola, explicándote desde lo más sencillo como son los valores de las resistencias y sus correspondencia en color, la ley de Ohm, etc., hasta llegar a la finalización de tu diseño.

El libro, es sencillamente, INCREIBLE. Estuve tan cerca del orgasmo que no lo dudé ni un momento y me pedí uno de los kits de desarrollo sin pensarlo, pero además, me pedí el libro en formato físico (tengo el eBook también) para poder leérmelo o consultarlo cuando no estuviese delante del ordenador... Además, qué narices, me gusta el tacto del papel para leer libros; los eBooks no es lo mío.

"Game Console Starter Kit" - ¡Yo tengo uno!
En cuanto al kit de desarrollo, el que yo me pedí hace un par de años es el "Game Console Starter Kit", que es el más sencillo y perfecto para iniciarse en el mundillo. También es cierto que hace un par de años, el kit "HYDRA" no estaba disponible aún, y hubiese sido sin duda mi elección, pues es mucho más completo y avanzado, además de permitir cosas más "burras" en cuanto a desarrollo se refiere. Sin embargo, lo más importante es el libro en sí, y es el mismo en cualquier kit.

Versión en papel (Hard Copy)
El libro en formato papel, tiene un nombre muy sugerente: "Black Art of Video Game Console Design". De verdad que este libro (tanto su versión electrónica como la versión física) han sido de un valor incalculable para mí, que soy un personaje enganchado a trastear con hardware, y con ganas de entender "todo" lo que me rodea.

No se si algún día llegaré a diseñar mi propio ordenador o consola "Retro", pero lo que sí os puedo asegurar que desde entonces entiendo el funcionamiento de muchísimas cosas que antes desconocía y que, ciertamente, ahora estoy mucho más cerca de embarcarme en un proyecto de esa envergadura. 
Kit "HYDRA" funcionando

De corazón, pegadle un vistazo a la web y a todo el material que tienen en venta, pues merece la pena. No es caro, y tener un libro de esas características entre mis manos, no tiene precio.

Os dejo unos vídeos (de los varios que circulan) del kit de desarrollo "Hydra" en pleno funcionamiento.

Saludos.






domingo, 10 de octubre de 2010

DATA-GEAR: Transferencias DMA en tu Spectrum

Data-Gear: A la izquierda el Z80, a la derecha el chip DMA
Uno de los problemas que tienen nuestros pequeños ordenadores es la velocidad del procesador cuando hay que mover "grandes" cantidades de datos por la RAM. Imaginad un juego con scroll parallax de varios planos en un Spectrum, cantidades ingentes de sprites en pantalla, niveles de profundidad con superposición de sprites, saltarnos la limitación de color de 8x8 y todo a 50 fps... Imposible, vamos, con el pobre Z80, que terminaría bien frito y sin conseguir el resultado deseado (ni de lejos).

Crear un scroll por software en máquinas como el Spectrum, que carecen de hardware específico para ello, requiere de un uso intensivo de CPU. Si la CPU está ocupada en esa tarea, pues otras cosas necesarias quedan pendientes de hacerse (mover sprites por pantalla, inteligencia artificial de personajes varios, reproducir música, leer las pulsaciones del teclado, etc) hasta que el scroll no se ha procesado.

Vista inferior: Conexión al zócalo del Z80
Todo se resume en que la copia de datos (en la pantalla en este caso, cerca de 7 Kbytes aproximadamente) tiene que hacerla el procesador (el Z80). Pero, ¿qué pasaría si hubiese un chip encargado de realizar todas esas operaciones mientra la CPU descansa plácidamente o se dedica a otras tareas más interesantes?.

Ampliación pinchada en un Spectrum
Las siglas D.M.A. en inglés significan (Direct Memory Access: Acceso Directo a Memoria). Esto significa, simplificando mucho, que en lugar de decirle al procesador que copie "x" datos de una zona de la memoria a otra, en su lugar se lo decimos a un chip específico para esa tarea (que además la realiza mucho más eficientemente que el procesador). Le indicamos al chip DMA que queremos copiar "x" bytes desde aquí hasta allí. El tiempo empleado para hacer esa copia es varias veces inferior al usado por la CPU, por lo que la ganancia en velocidad es notable (sin necesidad de usar un procesador más rápido).

Pero esto no se limita a copia de datos por la RAM. También es aplicable a los dispositivos que tiene el ordenador (por regla general). Enviar datos a gran velocidad al chip de sonido AY-8912, por ejemplo, para conseguir música sampleada de gran calidad sin necesidad de consumir recursos del procesador.

Velesoft, conscientes de ello y de las ventajas que puede dar un chip DMA, han creado una ampliación para Spectrum llamada DATA-GEAR. ¿Ventajas? Pues por ejemplo, con el chip DMA instalado en el Spectrum podemos transferir hasta 865 Kbytes en un segundo, osea, que podemos llenar la memoria de un modelo de 128 Kbytes casi 7 veces en el transcurso de un segundo. Y todo funcionando a la velocidad original de 3.5Mhz.

Imagen generada usando el chip DMA
La ampliación va pinchada en el zócalo del procesador del Spectrum y el procesador a su vez, en la propia ampliación, por lo que no es necesario modificar nada del equipo original, más que extraer la CPU, pincharla en la plaquita de la ampliación y todo el conjunto pinchado en el zócalo original del procesador.

Con tal carta de presentación, sólo queda que accedáis a la web y veáis muchísimos ejemplos y vídeos, para que comprobéis el funcionamiento de esta curiosa ampliación.


Un saludo.

¿Te gustan los chiptunes? Pues hazte un player...

Sí, es el colmo de los retrocolmos. Sólo si eres un verdadero friki como yo te hará gracia este aparato (aún estás a tiempo de no seguir leyendo, pero si no tienes nada mejor que hacer... sigue).

Muchos de nosotros escuchamos con especial asiduidad música chiptunera (en el blog sin ir más lejos tenéis un ejemplo en streaming constante). Solemos usar algún reproductor específico para nuestro sistema operativo y para el sistema que queremos reproducir, bien sean archivos AY/YM, archivos SID, archivos MOD...

Prototipo del reproductor. Abajo a la derecha, el AY
Otros, simplemente no quieren andar arrancando su "pecera" cada vez que quieren oír chiptunes y se montan un reproductor hardware que conectan directamente a sus equipos de música. Con un par...

Tolaemon, ha hecho lo propio. Su reproductor en concreto usa un chip de sonido AY-8912 (presente en los Amstrad CPC, MSX, Spectrum, Atari ST, Oric...) por lo que todas las canciones (que son muchas) preservadas de estos sistemas pueden ser reproducidas desde su reproductor.

No me negaréis que es chulo el reproductor
Tiene todo tipo de funciones, típicas de un reproductor actual, como Play, Pausa, Fast Forward, Rewind, Pitch y además volúmenes separados para cada uno de los 3 canales y un volumen Master. Un zócalo para memorias SD/MMC sirve de soporte de almacenamiento de las melodías y una pantalla de cristal líquido nos muestra toda la información específica de la reproducción actual.

Como añadido interesante, destacar un puerto MIDI, para reproducir las melodías en un instrumento con soporte MIDI.

La verdad es que es muy curioso, y mirando la caja que se ha montado este hombre, muchísimo más. Os dejo un vídeo mostrando el funcionamiento del reproductor "portátil" y la web de Tolaemon, donde encontraréis muchísima información sobre éste y otros proyectos:

Saludos.

MSX y Spectrum, más cerca que nunca.

Hace ya algún tiempo que vi asombrando un proyecto realizado por "mcleod_ideafix". Muchos de vosotros lo conocéis, otros no. Algunos conocen sus proyectos, otros no...

Para los que no, aquí os dejo una pequeña explicación del proyecto que nos acontece en esta ocasión. Pero primero, hagamos las presentaciones correctamente.

Mcleod_ideafix es un usuario español de Spectrum (sí, sí, español). Este hombre es un prodigio, un tío inteligente como él solo y siempre dispuesto a ayudar (lo digo por experiencia propia, con mi aparato USB). Además, dedica el poco tiempo que tiene a nuestros equipos Retro (concretamente con su Spectrum). Sólo por eso, merece nuestra admiración más absoluta y si por mí fuese, reconocimiento público en la plaza del ayuntamiento.

La cuestión es, que considero justo y necesario dar a conocer su trabajo fuera de los límites spectrumiles (en el mundo del Spectrum ya es bastante conocido), pues su esfuerzo también puede ser aplicable a otros sistemas y... porque se lo merece, qué narices...

El interfaz en cuestión con el VDP
Vayamos entonces al grano. ¿Imagináis tener el chip de vídeo del MSX en un Spectrum? Pues este hombre lo ha hecho... ¿Imagináis tener el chip de vídeo del MSX2 o del MSX2+ en un Spectrum? Pues... tiempo al tiempo, todo se andará.

Así es. Mcleod_ideafix ha ideado una ampliación para Spectrum que incluye el chip de vídeo del MSX (TMS9929 es la versión PAL del VDP) y que añade los modos de pantalla del MSX al Spectrum.

De momento, tenemos un sistema "Dual Screen"; por un lado una pantalla dando una salida de vídeo desde el VDP y otra pantalla con la salida de vídeo nativa del Spectrum, aunque lo ideal (cuando el proyecto sea retomado) será tener de fondo la pantalla del Spectrum y en primer plano superpuesta la salida de vídeo del VDP, todo en la misma pantalla.

¡Pantalla del Game Over de MSX en un Spectrum!
Tener el VDP del MSX en un Spectrum, facilita el desarrollo de aplicaciones en paralelo en ambas plataformas, si bien, eso no significa que podamos ejecutar juegos y programas de MSX directamente en un Spectrum. Hay que parchearlos sustituyendo llamadas al hardware por las nuevas direcciones, así como llamadas a la ROM específica del MSX por sus equivalentes en Spectrum. Tras hacerlo, los programas de MSX funcionan perfectamente en el Spectrum.

En cualquier caso, mejor visitáis su Web y lo flipáis un poco con una explicación mucho más detallada del proyecto. No os quedéis en las imágenes de esta entrada y visitad su web, donde además tiene vídeos del invento funcionando. De verdad que merece muchísimo la pena leer por completo sus explicaciones y ver todos los videos, 100% recomendado.


Un saludo.

miércoles, 6 de octubre de 2010

Ayer fue el SID, hoy lo llaman SwinSID - Commodore 64/128

Qué bien suena el "joío" SID del Commodore 64. Lástima que se caliente tantísimo y sea propenso a morir en acto de servicio. Y si esto ocurre... ¿qué hacemos? ¿Pedimos un SID a los Reyes Magos de Oriente? ¿Dejamos al pobre C64 mudito? ¿Buscamos por eBay a ver si por casualidad de las casualidades...?

La verdad es que es un problema... O lo era al menos, porque actualmente tenemos el SwinSID

Módulo SwinSID en un C64 con dos AVRs y un SID original, juntitos
SwinSID es un sustituyo del SID original del C64 con la particularidad de que este modulito tiene 6 canales de sonido (y no 3 como el SID original) y te da salida estéreo y 16 bits. Además tiene soporte nativo para reproducción de samples de 8 bits.

Realmente se trata de dos microcontroladores AVR 8515 programados para realizar las funciones del SID. El invento está bastante testeado (la primera versión apareció en el año 2005) y sin ser el sonido 100%  idéntico al de un SID, el resultado es más que aceptable (pero muy aceptable).

En su web http://www.swinkels.tvtom.pl/swinsid/ tenéis documentación, ejemplos, fotos varias y de distintos modelos (evoluciones o revisiones) y todo lo necesario para montártelo tú mismo. De todos modos, el sitio ha estado caído unos días y veo que falta "material" (alguna demo, alguna foto... nada importante).

De todos modos os dejo dos ejemplos al final de esta entrada (cortesía del simpático señor del fondo, HTML5) para que podáis opinar. Demos las gracias al señor Swinkels por desarrollar cachivaches para ordenadores retro.

Por cierto... ¿Y si conectáramos este aparatito a un Amstrad, un Spectrum o un MSX? ¿Seis canales SID más 3 canales AY? Ummmm...

Saludos.
Eyes of the East


Mr. Marvelous