Capítulo 27: FPGA: La placa Alhambra II - Obijuan/videoblog GitHub Wiki

Vídeo

  • Fecha: 2019/Mayo/02

Haz click en la imagen para ver el vídeo en Youtube

Click to see the youtube video

Descripción

Puesta en marcha de la placa con FPGA Alhambra-II, y carga de los primeros ejemplos para hacer parpadear un LED. También se muestra cómo conectar un LED y un pulsador externos

Contenido

Ficha técnica

Ficha
Nombre Alhambra II
Autor Eladio Delgado
Fabricante Mareldem Technologies, Pinos del valle, Granada, España
Donde conseguirla Alhambrabits
Precio 50€ + IVA
FPGA ICE40Hx4K
Frecuencia 12Mhz
Periféricos 8 LEDs, 2 pulsadores, 4 canales A/D
Observaciones Hardware libre. Compatible Arduino
Repositorio https://github.com/FPGAwars/Alhambra-II-FPGA

Es la evolución de la Icezum Alhambra. Los cambios más importantes de la Alhambra II con respecto a la anterior son (Más información en este hilo de FPGAwars):

  • FPGA ice40HX4K, que es equivalente a una 8K. Podemos meter circuitos 8 veces mayores. En ella se pueden sintetizar fácilmente microprocesadores como el Latuino o el picorisv32
  • GPIOs a 3.3V tolerante a 5V (como entrada acepta niveles entre 3.3 y 5V, como salida genera 3.3V)
  • Alimentación por USB (dos conectores), hasta 4.8A, para alimentarla con power bank y tener más corriente para los servos
  • Los pines de selección de bitstream para cold boot están accesibles en el GPIO
  • Reguladores conmutados de 1A para las alimentaciones de 1.2 y 3.3V, lo que permitirá activar los PLLs y trabajar a velocidades mucho mayores.
  • Pines analógicos integrados en los pines D0 a D3 (sólo 4 de los 6 pines del header son analógicos) para mayor compatibilidad con Arduino
  • Pulsadores de usuario más cómodos de accionar (3 veces menos fuerza por unidad de superficie que los anteriores)

Primera prueba: Conectando la placa

La placa se alimenta mediante un conector micro-USB B, como el que tienen lo móviles. Tiene dos, uno principal para la conexión al PC y la descarga de circuitos. El segundo es para dar potencia adicional a los periféricos que conectemos

La placa viene de fábrica con un circuito de pruebas ya grabado, de forma que simplemente con conectarla al PC empezarán a lucir sus 8 LEDs. Este es el escenario:

En esta animación se muestra el funcionamiento. En cuanto se conecta el USB para alimentar la placa, los 8 LEDs se encienden y empiezan varíar su intensidad de luz de forma pulsante

Esto mismo se puede ver con más calidad en este vídeo de Youtube

Click to see the youtube video

Si apretamos el pulsador SW1, cambia la secuencia de los LEDs a la del Coche fantástico. Si volvemos a pulsar SW1 se cambia al modo de transmisión serie, en el que se envía una cadena por el puerto serie al PC, al apretar SW2. Al apretar otra vez SW1 pasamos al modo de recepción serie: todo lo recibido desde el PC se mostrará en los LEDs. Por último, si apretamos SW1 nuevamente volvemos al modo pulsante inicial

Click to see the youtube video

Si en el PC hemos abierto un terminal serie, a la velocidad de 115200 baudios, veremos la cadena de prueba transmitida y podremos enviar caracteres para probar la recepción. Para más información sobre el puerto serie puedes consultar el tutorial 30

Este circuito de pruebas está disponible en el repositorio de la alhambra II. Si quieres probarlo, asegúrate de tener instalada la última versión 0.4-dev nigthly (o superior) de Icestudio

(A2-user-test.ice)

Cargando el circuito "hola mundo"

Sintetizaremos y cargaremos un circuito que hace parpadear el LED 7 de la Alhambra II. Instalar la última versión de icestudio, que en el momento de haces este vído blog es la 0.4-dev nightly que puedes descargar de este enlace para Linux, Mac y Windows.

Las instrucciones de instalación están en el Tutorial 2. Realizar hasta el paso 3: Configuración del idioma. Icestudio usa por defecto la placa Icezum Alhambra, así que seleccionamos la Alhambra-II desde el menú Seleccionar/placa/Alhambra II

En la parte inferior derecha nos aparecerá el nombre de la placa seleccioada: Alhambra II

Continuamos con la instalación de Icestudio, siguiendo los pasos 4 y 5. El paso 6 lo hacemos con un circuito hola mundo preparado para la Alhambra II: Descarga este fichero Alhambra-II-hola-mundo-01.ice y ábrelo desde el menú Archivo/Abrir...

Nos aparecerá el siguiente circuito. Está formado por un corazón que bombea los bits 0 y 1 consecutivamente a un ritmo de una vez por segundo, hacia el pin de salida de la FPGA donde está conectado el LED7

Con la Alhambra II conectada al USB del PC, cargamos el circuito desde la opción Herramientas/cargar (o pulsamos las teclas Ctrl+u). El circuito se empieza a sintetizar y luego a cargar. Mientras se descarga se encederá el led naranja CFG. Al cabo de unos 5 segundos el LED7 comenzará a parpadear

En Icestudio nos aparecerá una notificación de color verde, en la parte inferior derecha indicando que la carga se ha realizado correctamente

En este vídeo se puede ver con más calidad el funcionamiento del hola mundo

Click to see the youtube video

Conversion de ejemplos desde la Icezum Alhambra

Actualmente hay muchos circuitos de ejemplo para la placa Icezum Alhambra. Por ejemplo todos los del tutorial de electrónica digital para makers con FPGAs libres. Si tenemos la Alhambra II es necesario realizar una conversión. Afortunadamente, desde la versión 0.4-dev Nightly, se hace automáticamente

Vamos a probarlo. Abrimos icestudio y seleccionamos la Alhambra II (si es que no la teníamos seleccionada ya) y cargamos el primer ejemplo que viene en la colección por defecto , desde la opción Archivo/ Ejemplos/1.Básicos/01.un LED. Es un ejemplo para la Icezm Alhambra, por lo que nos aparecerá un mensaje de aviso

Pinchamos en la opción de CONVERTIR y se nos cargará el circuito con los pines actualizados para la Alhambra-II

En esta animación se muestra el proceso completo. Nos aparece una notificación amarila informando de que si aparecen pines de Entrada/Salida vacíos, tendremos que asignarnos nosotros manualmente. No es el caso de este primer ejemplo, que se convierte sin problemas

Ahora lo cargamos en la placa como siempre (Herramientas/cargar o apretando las teclas ctrl+u). Este circuito hace que el LED0 permanezca encendido

Posibles errores

Si al abrir el ejemplo en vez de pulsar sobre la opción de Convertir pinchamos en CARGAR se nos abre también el ejemplo, pero la placa se cambia a la icezum Alhambra

Esto tiene el inconveniente de que si ahora cargamo el circuito, aparecerá un mensaje de error indicando que la placa no se ha detectado: Claro, lo que hay conectado es una Alhambra II, y NO una icezum Alhambra. Esto puede generar confusión

Conexión de un LED externo

La conexión de un LED externo en la Alhambra II es extremadamente fácil. La configuración más básica es pinchar el LED directamente, sin ninguna resistencia. En este ejemplo está conectado al pin D13 (y la otra pata a GND). Igual que con Arduino:

Este es el escenario real, con la Alhambra II conectada al PC y el LED verde pinchado entre D13 y GND

Hacemos parpadear el LED mediante este circuito, que conecta un corazón de 1Hz al pin D13, para bombear los bits 0 y 1 y cambiar el LED de estado periódicamente

(Alhambra-II-LED13.ice)

Lo cargamos en la Alhambra II y lo probamos. Nuestro LED verde está parpadeando

Click to see the youtube video

Los LEDs externos los podemos colocar en una placa de entrenamiento, por si quieremos añadir una resistencia en serie o más componentes. Este es el mismo escenario anterior, pero el LED verde está en la protoboard, conectado al pin D13 y a GND mediante dos cables macho-hembra

Conexión de un pulsador externo

Los pulsadores los conectamos igual que con Arduino. En este ejemplo usamos una resistencia de pull-down típica de 4K7 ohm, conectada entre GND y la entrada D0. El pulsador conecta D0 con la alimentación de 5v. Este es el esquema:

También es posible utilizar las resistencias de pull-up internas de las salidas de la FPGA, pero eso lo veremos en otro cuaderno técnico más adelante. El montaje real es el siguiente:

Para probarlo usamos el siguiente circuito, que simplemente usa un cable para conectar la entrada del pulsador al LED0. Cada vez que se apriete se enciende el LED0

(Alhambra-II-Pulsador-D0.ice)

Lo cargamos en la Alhambra II y lo probamos

Click to see the youtube video

Ejemplo: Conexión de un pulsador y un LED externos

Como último ejemplo vamos a conectar un LED y un pulsador externos, en los pines D13 y D0 respectivamente. El conexionado es el siguiente:

Este es el escenario real, para hacer las pruebas

El circuito de pruebas es el mismo de antes: un cable para unir el pulsador con el LED, de forma que al apretar el botón se enciende el LED externo

(Alhambra-II-Pulsador-D0-LED-D13.ice)

Lo cargamos y lo probamos. ¡Conectar LEDs y pulsadores externos a la Alhambra II es muy muy fácil! :-)

Click to see the youtube video

Descargas

Fichero Descripción
Alhambra-II-hola-mundo-01.ice Ejemplo "Hola mundo" para la Alhambra II
Alhambra-II-LED13.ice Ejemplo de manejo de un LED externo (D13)
Alhambra-II-Pulsador-D0.ice Ejemplo de pulsador externo (D0)
Alhambra-II-Pulsador-D0-LED-D13.ice Ejemplo de pulsador y LED externos (D0 y D13)

Autor

Licencia

Créditos y agradecimientos

  • La plaza Alhambra II no se podría haber realizado sin la ayuada de toda la comunidad de FPGAwars y de todos los que nos habéis ayudado a financiarla. ¡Muchísimas gracias! :-)
  • Jesús Arroyo es el autor original de Icestudio, la herramienta libre visual clave para el avance de las FPGAs libres, y su uso en la comunidad maker. ¡Muchas gracias! :-)
  • Carlos Venegas (charli) es el creador de las versiones Nigtly Build de Icestudio y las mejoras en Icestudio para hacer fácil la conversión desde la Icezum Alhambra a la Alhambra II. ¡Muchas gracias!
  • Eladio Delgado: Diseñador principal de la Alhambra II. ¡Muchísimas gracias!
  • María Delgado: Creadora del pinout de la Alhambra II, en Inkscape y de los primeros prototipos de la placa. La fabricación sólo es posible gracias a ella. ¡Muchísimas gracias!
  • Andrés Prieto-Moreno. Muchísimas gracias por toda tu ayuda con la financiación, la web y el sorpote técnico en USA

Enlaces