Vídeo 31: Despedida de la temporada I - Obijuan/digital-electronics-with-open-FPGAs-tutorial GitHub Wiki
Vídeo
Haz click en la imagen para ver el vídeo en Youtube
Descripción
Último vídeo de la Temporada I. Haremos un repaso de lo que ha avanzado el ecosistema de las FPGAs libres durante este año. Han aparecido muchas placas, y las herramientas siguen evolucionando para soportar más modelos de FPGAs. Como ejemplo de la colección Jedi, veremos cómo usar el conversor analógico-digital
Contenido
- Evolución de las FPGAs libres
- Colección Jedi
- Rango de Caballero Jedi
- Los 3 primeros certificados emitidos
- Soluciones a los ejercicios del tutorial 30: Puerto serie
- Estadísticas del tutorial
- Autor
- Licencia
- Enlaces
- Preguntas frecuentes
Evolución de las FPGAs libres
La temporada I de los tutoriales empezó el 13 de Octubre de 2017. Ahora estamos a 20 de Diciembre de 2018. Han sucedido muchas cosas desde ese primer tutorial. La comunidad ha crecido, y ha avanzado tanto que muchas de las cosas comentadas al comienzo del curso han quedado obsoletas. Y eso es muy bueno, significa que avanzamos a un gran ritmo :-)
Placas incorporadas en Icestudio
En la comunidad han aparecido más placas, que no existían cuando se hizo el Tutorial 3: La icezum Alhambra y otras placas con FPGAs libres
Alhambra II
Ficha | |
---|---|
Nombre | Alhambra |
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 |
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)
TinyFPGA-Bx
Ficha | |
---|---|
Nombre | TinyFPGA |
Autor | Luke Valenty |
Donde conseguirla | Crowdsupply |
Precio | $38 |
FPGA | ICE40LP8K |
Frecuencia | 16 MHz |
Periféricos | 1 LED |
Observaciones | Hardware libre |
La TinyFPGA es del tamaño de un Arduino nano. Se puede insertar en una protoboard para hacer nuestros prototipos. Se conecta por el USB para la descarga de diseños, pero en vez de llevar un chip externo para ello (un FTDI), tiene un bootloader hardware. La FPGA por defecto está configurada como un controlador USB y al cargar nuestro diseño se re-configura. Al apretar el botón de reset se re-configura otra vez al estado inicial
IceBreaker
Ficha | |
---|---|
Nombre | Icebreaker |
Autor | Piotr Esden-Tempski |
Donde conseguirla | Crowdsupply |
Precio | $69 |
FPGA | iCE40 UltraPlus 5K |
Frecuencia | 48 MHz |
Periféricos | 2 LEDs, 1 pulsador |
Observaciones | Hardware libre |
Placa con la FPGA iCE40 UltraPlus 5K, que incluye DSP y dos cores hardware de SPI e I2C. Está pensada con fines educativos. Dispoine de 4 PMODs para conectar fácilmente diferentes periféricos: switches, pulsadores, 7-segmentos, VGA...
BlackIce II
Ficha | |
---|---|
Nombre | BlackIce-II |
Autor | Folknology |
Donde conseguirla | Tindie |
Precio | $55 |
FPGA | ICE40Hx4K |
Frecuencia | 100Mhz |
Periféricos | Dip Switches, Pulsadores, 4 LEDs, |
Observaciones | Hardware libre |
Upduino V2.0
Ficha | |
---|---|
Nombre | UPDuino V2.0 |
Autor | gtjennings1 |
Donde conseguirla | gnarlygrey.com |
Precio | $14 |
FPGA | iCE40 UltraPlus 5K |
Frecuencia | 12Mhz |
Periféricos | 1 LED RBG |
Observaciones | Hardware libre |
iCE40 UltraPlus Breakout Board
Ficha | |
---|---|
Nombre | iCE40 UltraPlus Breakout Board |
Autor | Lattice |
Donde conseguirla | Lattice |
Precio | $49 |
FPGA | iCE40UP5K |
Frecuencia | 12 MHz |
Periféricos | LED RGB, Dip Switches |
Observaciones | Placa de Lattice. No libre |
Otras placas
Las siguientes son placas con FPGA de gama media, en las que se pueden sintetizar sistemas más complejos, como un procesador capaz de correr Linux, usando sólo herramientas libres
TinyFPGA EX
Ficha | |
---|---|
Nombre | TinyFPGA-EX |
Autor | Luke Valenty |
Donde conseguirla | Crowdsupply |
Precio | No disponible todavía |
FPGA | ECP5 FPGA |
Frecuencia | 200Mhz |
Periféricos | Tarjeta MicroSD |
Observaciones | Hardware libre |
Placa en diseño
ULX3S
Ficha | |
---|---|
Nombre | ULX3S |
Autor | emard |
Donde conseguirla | radiona.org |
Precio | |
FPGA | Lattice ECP5 LFE5U-85F-6BG381C (85K LUT) |
Frecuencia | 25 MHz |
Periféricos | Tarjeta microSD, 8 leds, 4 pulsadores, jack para audio, 8 canales ADC, |
Observaciones | Hardware Libre |
En el proyecto Trellis se está haciendo ingeniería inversa de estas FPGAs para tener disponibles herramientas libres. En la placa ULX3S ya se ha conseguido sinteizar un OpenRisc que corre Linux
Nuevas herramientas
La comunidad ha estado muy activa durante este año, y el avance las herramientas es imparable. Cada vez se están documentando más FPGAs, mejorando las herramientas existentes y creando nuevas aplicaciones. El ecosistema de las FPGAs libres sigue creciendo
Proyecto Icestorm
El proyecto icestorm ya tiene documentadas 30 FPGAs de la familia Ice40 de Lattice, de gama baja. Las últimas han sido las UltraPlus (UP5K), que incluyen DSPs. Ya hay tres placas de esta familia soportadas en Icestudio
SymbiFlow
El ecosistema de las FPGAs libres nació con el proyecto icestorm creado por Clifford Wolf, para las FPGAs de la familia ICE40 de Lattice. Fue todo un logro. Durante el 2018 este ecosistema ha evolucionado al proyecto Symbiflow: Herramientas libres para completar el ciclo de diseño desde el Verilog hasta la generación del Bitstream para FPGAs de diferentes fabricantes
Se ha creado una arquitectura más general, para integrar FPGAs de diferentes fabricantes. ¡¡Y esto es algo importantísimo!!. Los fabricantes, actualmente, tiene cada uno sus propias herramientas, que sólo valen para sus FPGAs. Esto dificulta enormemente el hacer diseños hardware reutilizables en FPGAs de otros fabricantes. Esto mismo ya ocurrió en el pasado con los microprocesadores: cada fabricante tenía su propio compilador. Hasta que llegó el primer compilador libre: el GCC, que permitía reutilizar el código en diferentes procesadores. Pues bien, gracias a Symbiflow, ¡tenemos el primer sintetizador libre multi-FPGA!. Y esto va a cambiar el panorama de las FPGAs muchísimo, a largo plazo
Más información sobre Symbiflow, en las transparencias que se presentaron en el congreso ORCONF-2018
El proyecto tiene 2 partes fundamentales: las herramientas software y la documentación de las FPGAs
Herramientas software
- Yosys. Es el sintetizador. Pasa del verilog al netlist
- Nextpnr. Herramienta de rutado y emplazado
- VTR. otra herramienta de rutado y emplazado
Documentación de las FPGAs
La parte más importante del proyecto es la documentación de las diferentes FPGAs. Esta información NO la proporciona el fabricante, por lo que se está obteniendo mediante ingeniería inversa, y es un proceso largo y tedioso, pero está dando sus frutos
Nombre | Descripción |
---|---|
Proyecto Icestorm | Documentación de la Familia ICE40 de Lattice |
Proyecto Trellis | Documentación de la Familia ECP5 de Lattice |
Proyecto X-ray | Documentación de la Serie-7 de Xilinx |
Proyecto Chibi | Documentación de las FPGA MAX-V de Intel |
Proyecto 2064 | Documentación de la familia xc20xx de Xilinx (Las primeras FPGAs que hubo) |
Colección JEDI
La temporada I se termina, pero la acción continúa en la Colección Jedi. Iré añadiendo nuevos bloques y ejemplos
- Collection-jedi-1.0.zip: Descargar e instalar
- Colección Jedi: Repositorio
Esta colección se ha creado a partir de la colección de la Academia Jedi de tutorial anterior, y en ella se irán añadiendo nuevos bloques. Para este tutorial de despedida, he añadido una primera versión del conversor Analógico-Digital (A/D) que nos permite leer una entrada analógica. La explicación detallada la dejamos para la temporada II, pero aquí os muestro un par de ejemplos para que juguéis :-)
Bloque para lecturas analógicas
Las placas Icezum Alhambra y Alhambra II incorporan el conversor analógico-digital ADS7924 de texas instrument. Tiene 4 canales de 12 bits
La lectura se hace a través del bus I2C, por los pines ADC-SDA (datos) y ADC-SCL (reloj) de la FPGA
Un primer bloque para leer uno de los canales analógicos se encuentra en la colección Jedi, en el menú Varios/ADC/adc
Por los puertos adc-sda y adc-scl se conectan directamente los pines del mismo nombre en Icetudio. Si tenemos una tarjeta diferente, este bloque se puede usar también conectando en ese caso a los pines SDA y SCL del I2C donde está conectado el conversor
Por la entrada ch[1:0] indicamos el canal a leer (0-3) e introducimos un tic por start para que comience la conversión. La lectura digital es de 8 bits (Se toman los 8 bits más significativos del valor interno de 12 bits), y se devuelve por el bus de salida. Se emite un tic de dato listo por done, para indicar que la muestra ya está disponible
Ejemplo 1: Lectura de un potenciómetro
Vamos a conectar un potenciómetro lineal de 10K al canal 0 del conversor A/D y leeremos su valor digital, de 8 bits, que mostraremos en los LEDs de la Icezum Alhambra. El escenario es el siguiente:
En el circuito colocamos el bloque conversor A/D. Mediante una constante de 2 bits indicamos que queremos leer el canal 0, y colocamos un corazón de tics de 20Hz para realizar 20 lecturas por segundos. La salida la conectamos directamente a los LEDs. Este ejemplo se encuentra en la colección Jedi en el menú Archivo/Ejemplos/ADC/01-Potentiometer-LEDs
Lo cargamos y lo probamos. En los LEDs veremos el valor digital de la tensión proporcionada por el potenciómetro, en binario. En un extremo su valor será 0 (0v), y en el otro 255 (5v)
Ejemplo 2: Envío de muestras al PC por el puerto serie
Usando el mismo escenario que en el ejemplo 1, añadimos el bloque transmisor serie para enviar las lecturas del potenciómetro al PC, por el puerto serie. Para que se realice la transmisión sólo hay que conectar la señal done del conversor a la txmit del bloque serie. La frecuencia de muestreo la cambiamos a 100, para que se envíen más datos por segundo. El circuito es el siguiente:
Lo cargamos y lo probamos. En el PC ejecutamos el ScriptCommuniator y mostramos la pestaña con los datos en decimal. Veremos cómo en un extremo se recibe el 000 y en el otro el 255
Ejemplo 3: Movimiento de un servo con el potenciómetro
Como último ejemplo de la temporada I de tutoriales, vamos a mover un servo a cualquier posición, usando el potenciómetro. El escenario es el mismo de antes pero añadiendo un servo Futaba 3003
En el circuito colocamos el controlador de servos igual que el transmisor serie del ejemplo 2: por su entrada write conectamos la salida done, para que mueva el servo a la posición recibida del conversor
Lo cargamos y lo probamos. Ahora podemos llevar el servo a cualquier posición fácilmente moviendo el potenciómetro. ¡Es muy adictivo! :-)
Rango de Caballero Jedi
Si has participado en la Academia Jedi, el curso estará oficialmente terminado cuando alcances el rango de Caballero Jedi. Para ello necesitarás tener al menos... ¡600 Bitpoints!. Los bitpoints que te faltan los podrás conseguir haciendo tus propios proyectos que podrás entregar en la carpeta del tutorial 31 en el github de las entregas. Es obligatorio que la entrega sea por github
Una vez que consigas los 600 Bitpoints, se emitirá un Certificado Jedi que acredite tus logros
Los 3 primeros Certificados emitidos
Los tres primeros estudiantes de la Academia Jedi en alcanzar el rango máximo de Caballero Jedi son:
Ximo Catala
-
Usuario Github: ximocat
-
Bitpoints totales: 600 (+465)
-
Certificado:
Josep Montoliu
-
Usuario Github: klarojms
-
Bitpoints totales: 600 (+20)
-
Certificado:
Federico Coca
-
Usuario Github: fgcoca
-
Bitpoints totales: 600 (+5)
-
Certificado:
Soluciones a los ejercicios del tutorial 30: Puerto Serie
Las soluciones a los ejercicios planteados en el tutorial 30: Puerto serie se muestran a continuación:
Ejercicio 30.1: Transmisión de dos cadenas
Ejercicio 30.2: Contador de pasadas del spiner
Ejercicio 30.3: Control de Franky por puerto serie
Estadísticas del tutorial
- Primer vídeo: 13-Octubre-2017
- Último vídeo: 21-Dic-2018
- Tiempo desarrollo Total: 1 año y 2 meses
- Ejemplos de circuitos: 220. Todos sintetizados y comprobados en hardware real
- Ejercicios propuestos: 90. Con sus soluciones
- Imágenes: 1357. Entre figuras, pantallazos y animaciones. Con sus ficheros fuentes en SVG en el propio repositorio del tutorial
- Tutoriales:: 31, con vídeos e información en wiki
- Vídeos:
- 48 con explicaciones
- 159 de apoyo (sin voz): ejemplos, ejercicios propuestos, aclaraciones...
- Número de ediciones de la wiki: 7340
- Commits de desarrollo: 1563
- Número de entregas de ejercicios recibidas: 1160
- Numero total de apuntados: 193
- Curso Completado: 3
- Caballeros Jedi: 3
- Tercer curso: 8
- Jedis Nivel 3: 2
- Jedis Nivel 2: 0
- Jedis Nivel 1: 6
- Jedis: 0
- Segundo curso: 18
- Aspirantes a Jedi Nivel 3: 1
- Aspirantes a Jedi Nivel 2: 1
- Aspirantes a Jedi Nivel 1: 1
- Aspirantes a Jedi: 2
- Padawans Nivel 3: 3
- Padawans Nivel 2: 1
- Padawans Nivel 1: 2
- Padawans: 7
- Primer curso: 123
- Aspirantes a Padawans Nivel 3: 12
- Aspirantes a Padawans Nivel 2: 2
- Aspirantes a Padawans Nivel 1: 16
- Aspirantes a Padawans: 9
- Cadetes Nivel 3: 23
- Cadetes Nivel 2: 20
- Cadetes Nivel 1: 13
- Cadetes: 28
- Pre-academia: 41
- Aspirantes a Cadete: 39
- Observadores: 2
- Curso Completado: 3
Autor
- Juan González-Gómez (Obijuan)
Licencia
Créditos y agradecimientos
- Imagen del sable láser. De Tim Kloske (talk) - Trabajo propio, Dominio público,
- Señal analógica, By Fleshgrinder - Own work, Public Domain
Enlaces
- Repositorio con las colecciones de la Academia Jedi de Hardware
- BricoGeek. Tienda Friki donde comprar componentes electrónicos
- Repositorio de la Icezum Alhambra
- Documentación de la Icezum Alhambra: (PNG)(SVG)(PDF)
- Icestudio
- Monedas Bit imprimibles
- Printbot Beetle
- Ultimate Gripper
- Pinza paralela
- Robot Educativo Zowi
- Qué es PWM y para qué sirve. Entrada en el bloq de Rincón Ingenieril
- Repositorio de PCBPrints
- PCBPrint Alhambra-Button
- PCBPrint Alhambra Switch
- Soporte Icezum Alhambra
- Soporte para Servo Futaba 3003
- Puntero para servo Futaba 3003
- Clavijas de amarre para servos
- Tablero indicador binario para servo
- Fijador de esquinas
- Fijador de cables
- Fijador de placas
- Octopus passive buzzer, de Elecfreak
- Kit de sensores para Arduino. BricoGeek. Dentro del kit con 37 módulos, hay uno con zumbador
- Repositorio de iconos SVG para Icestudio
Preguntas frecuentes
- ¿Dónde puedo conseguir la placa Icezum Alhambra?
Pueden conseguir una desde Alhambrabits
-
¿Dónde puedo comprar material electrónico?. Hay muchos sitios. Uno muy bueno es Bricogeek
-
¿Cómo aprendo a manejar github?
Hay mucha información en internet. En su momento hice este Tutorial: Github y FreeCAD para enseñar a manejarlo. Los ejemplos están hechos con ficheros de FreeCAD, sin embargo, lo que se enseña es genérico. También vale para las entregas de los ejercicios del tutorial de Electrónica digital para makers
- Los pulsadores de la Icezum Alhambra no me funcionan
Eso es debido a que se han metido restos de flux y no hacen buen contacto. En el apartado ¡No me funcionan los pulsadores! del Tutorial 9 se indica cómo solucionarlo fácilmente
- ¿Dónde puedo encontrar más información sobre las señales PWM?
Echa un vistazo a este post de Rincón Ingenieril sobre el tema
- He conectado un pulsador externo pero no me funciona. He hecho un circuito para conectar el botón con un led, y al apretar se enciende el LED, pero luego no se apaga. NO funciona bien
Los pulsadores externos que se conecten a los pines de 5v de la Alhambra (D0 - D13) tiene que llevar una resistencia de pull-up o pull-down con valores entre 460 ohm y 2K. Típicamente usamos 1K. Esto hace que los conversores de nivel se configuren como entradas y que el pulsador funcione correctamente. Puedes encontrar más información En este enlace
-
¿Donde puedo conseguir el switch que habéis usado en la PCBprint Alhambra switch? Es el mismo switch que se ha usado en la propio Icezum Alhambra (aunque la versión sin acodar). Los fabricantes los puedes encontrar en la lista de componentes de la propia icezum Alhambra. La referencia del componente en concreto es esta: Slide Switch, SPDT, On-On, Through Hole, WS-SLTV Series, 500 mA. Yo te recomiendo que uses la PCBprint de Diego Lale, que usa interruptores que puedes conseguir en Bricogeek: Mini-interruptor de 3 pines
-
¿Dónde puedo conseguir el servo de rotación continua SM-4303R?
Es un servo muy usado y muy estándar. Si buscar por internet encontrarás muchos sitios donde los vendes, a diferentes precios. Aquí en España se puede conseguir muy fácilmente a través de BricoGeek: Servo SM-4303R Bricogeek y también en Iberobotics: Servo SM-4303R Iberobotics
- Parece ser que los servos Futaba 3003 se pueden trucar para convertirlos en rotación continua. ¿Conoces algún tutorial sobre como hacerlo?
El Futaba 3003 es uno de los servos que típicamente se han trucado para construir robots móviles con ellos. Robots como Tritt, El Skybot o el Miniskybot los utilizan. Existen muchísimos tutoriales para hacerlo. En esta página puedes encontrar todas las formas de trucarlos. El que recomendamos es el caso 2
-
Ya tengo varios PCBprints impresos (de los LEDs y los pulsadores. ¿Dónde podría conseguir los cables que usas para conectarlos directamente a la Icezum Alhambra?
Son cables hembra-hembra de tres hilos. Como son los mismos que se usan para la conexión de servos, los puedes encontrar en tiendas donde vendan cualquier tipo de servo. Por ejemplo:
- En Pololu: https://www.pololu.com/product/779
- En hobby king: https://hobbyking.com/en_us/10cm-female-to-female-servo-lead-jr-26awg-10pcs-set.html?___store=en_us
También se pueden usar cables hembra-hembra aislados. A partir de ellos es muy fácil trenzarlos y hacerte tu propio cable de 3 pines:
- Adafruit: https://www.adafruit.com/product/266
- En Bricogeek: http://tienda.bricogeek.com/cables/585-set-de-cables-h-h-10-unid.html
- En Iberobotics: Aquí también tienen los hembra-hembra: https://www.iberobotics.com/comprar/electronica-componentes/cables-y-conectores/ Es otra tienda española que está en Santander