Vídeo 21: Mi primer bloque - 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
Los circuitos que hemos creado utilizan bloques. Aprenderemos a crear nuestros propios bloques, utilizando los que ya conocemos. Esto nos permitirá ocultar la complejidad y así crear circuitos más potentes, usando diseño jerárquico
Colección
Academia-Jedi-HW-21.zip: Colección para este tutorial. Descargar e instalar
Contenido
- Introducción
- Bloques sin puertos
- Bloques con puertos
- Bloques con entradas de reloj
- Bloques con parámetros
- Creando iconos con Inkscape
- Ejercicios propuestos (20 Bitpoints)
- Ejercicios entregados
- Autor
- Licencia
- Enlaces
- Preguntas frecuentes
Introducción
En el tutorial 18 vimos que existen dos técnicas para hacer circuitos complejos: la parametrización y la composición. Nos vamos a centrar en esta última. Aprenderemos a construir nuestros propios bloques a partir de otros bloques que ya conocemos.
Puertos
Las entradas y las salidas de los bloques las denominamos puertos. Los puertos de entrada son los puntos donde entra la información al bloque. Los puertos de salida son los puntos donde la información sale del bloque. En Icestudio, los puertos de entrada se colocan siempre en la izquierda del bloque, y los de salida en la derecha. El bloque que representa una puerta AND tiene 2 puertos de entrada y uno de salida
Los puertos tienen un nombre y un tamaño en bits. El nombre es opcional cuando se trata de puertos de un bit, como en el ejemplo de la puerta AND, pero se pone siempre cuando son de más de un bit (buses). Además de los puertos, los bloques de icestudio tienen parámetros, en su parte superior. También tienen un nombre, que es opcional
Este bloque comecocos es un ejemplo que tiene dos parámetros de entrada, uno con nombre, p1, y otro sin nombre. Tiene 3 puertos de entrada, uno de 1 bit, sin nombre, otro de 1 bit (a),y uno de 8 bits (i). Tiene también 3 puertos de salida, de un bit, sin nombre y con nombre (b), y de 4 bits (o)
Pines
Los pines son los puntos físicos por donde entra la información a nuestro circuito en la FPGA, y por donde se envían las respuestas de salida. Son puertos que están asociados a una pata de la FPGA
Los pines son de 1 bit y se conectan a los puertos de 1 bit de otros bloques mediante cables. Pueden tener un nombre opcionalmente. En icestudio, los pines de entrada se ponen en la izquierda (su puerto está en la derecha) y los pines de salida se colocan a la derecha (su puerto está en la izquierda). Como ya vimos en el tutorial 20, varios pines se pueden agrupar formando un bloque, que se conecta a otros bloques mediante un bus
En este ejemplo se ha colocado el bloque comecocos anterior, y se han conectado sus puertos a pines, usando cables y buses
Este circuito se sintetiza en la FPGA. Si pudiésemos ver la FPGA por dentro, veríamos algo similar a esto, donde los puertos del comecocos están conectados a pines físicos de la FPGA
Diseño jerárquico
Combinando los bloques existentes, y asignando valores a sus parámetros, construimos nuevos bloques, creando una jerarquía. Vamos a echar un vistazo al bloque constante 255, que representa al número 255. Tiene un único puerto de salida, de 8 bits
Si hacemos doble click en este bloque para ver cómo está hecho, veremos que está formado por un bloque constante genérico, al que se le pasa como parámetro el valor 255
Cuando hablamos de bloque a secas, nos referiremos a la apariencia del bloque, visto desde fuera: su icono, puertos y parámetros. Y por otra parte tenemos la implementación del bloque, que es su interior. Cómo está construido
En la implementación del bloque de la constante 255, vemos que el puerto de salida de 8 bits queda definido mediante un bloque verde, que tiene el nombre del puerto en su interior. Es la forma de definir los puertos en los bloques, y lo veremos en las siguientes secciones
Este es otro ejemplo, en el que se ha creado una puerta AND de 3 entradas a partir de dos puertas AND de dos entradas
La puerta tiene en total 4 puertos, 3 de entrada y uno de salida, que no tienen nombres. Por eso, en su implementación, se han colocado 4 bloques verdes, que definen sus puertos
Bloques sin puertos
Como ya vimos en el tutorial 5, existen bloques sin puertos. Su misión es la documentación, o la estética. Cuando estos bloques tienen una imagen asociada los llamamos pegatinas (stickers)
Pegatinas
Los bloques pegatinas (stickers) nos permiten añadir información visual a nuestros circuitos, así como incluir documentación en su interior. En la colección de la Academia-Jedi-HW-21 se han incluido algunas pegatinas, que están accesibles desde el menú Varios/Pegatinas
Además de algunos emojis, se han incluido todos los rangos de la Academia Jedi disponibles hasta ahora. Están accesibles todos desde el menú Archivo/Ejemplos/1-Ejemplos/02-Pegatinas-Academia-Jedi
No tienen ninguna utilidad, pero mola añadirlos a nuestros circuitos para mostrar nuestro rango :-) También se han añadido, a modo de ejemplos, pegatinas del mundial de Rusia 2018
Bloque1.ice: Creando un bloque de sólo Texto
Vamos a crear nuestro primer bloque. Sólo contendrá el texto: Bloque 1. Los pasos a seguir son los siguientes:
- Arrancamos Icestudio. El circuito lo dejaremos en blanco (no tiene nada), simplemente queremos crear un bloque sin puertos, que sólo tenga su nombre
- Pinchamos en la opción del menú Editar/Información del proyecto.
- Nos aparece una ventana nueva, con información para el bloque. De momento sólo escribiremos la cadena Bloque1 en la casilla Nombre (pero podemos poner el nombre que queramos, es sólo un ejemplo). Y pinchamos en OK
- Aparecerá una notificación verde, en la parte inferior derecha indicando que la información del proyecto se ha actualizado
- Grabamos el bloque en el fichero bloque1.ice (por ejemplo). Pinchamos en Archivo/Guardar como
- Se nos abre una ventana donde debemos introducir el nombre del fichero y el directorio en el que queremos grabarlo. Por ejemplo, lo llamamo bloque1.ice y lo guardamos en el Escritorio. La apariencia de esta ventana depende del sistema operativo empleado. Este pantallazo se corresponde con Ubuntu 16.04
- Pulsamos el botón de guardar. Nos aparecerá otra notificación indicando que se ha guardado el proyecto
El nuevo bloque ya está creado y almacenado en el fichero bloque1.ice, que hemos guardado en el escritorio. El proceso completo se resumen en esta animación
Ahora vamos a colocar el bloque nuevo en un circuito nuevo. En la ventana actual de Icestudio tenemos la implementación del bloque 1.
- Abrimos una nueva para crear el nuevo Circuito. Pinchamos en Archivo/Nuevo y nos aparece una ventana en blanco
- Para colocar el bloque creado, pinchamos en Archivo/Añadir como bloque
- Seleccionamos el fichero bloque1.ice y le damos al OK
- Colocamos el bloque1
Si hacemos doble click en el bloque, veremos su interior. En este ejemplo no tiene nada dentro. En la esquina superior izquierda vemos su nombre: Bloque1. Y en la inferior izquierda la jerarquía: proyecto actual/Bloque1
El proceso completo de colocación del nuevo bloque creado se resume en esta animación:
Bloque2.ice: Añadiendo más información
Ahora vamos a crear el bloque2 a partir del bloque1 añadiendo más información. En vez de ser un bloque en blanco añadiremos comentarios usando bloques de información
Nos vamos a la ventana donde estamos editando el bloque1.ice y ponemos comentarios y algunas pegatinas
Editamos la información del bloque en Editar/Información del proyecto. Cambiamos el nombre por Bloque2 y añadimos un texto en el campo descripción
Todos los campos son opcionales. Podemos añadir información sobre el autor, la versión, el icono del bloque, etc. En este ejemplo sólo hemos rellenado el nombre, para que aparezca en el bloque, y la descripción, que aparecerá cuando pongamos el puntero encima del bloque, durante unos segundos
Pulsamos OK y guardamos el bloque como bloque2.ice. Nos vamos a la otra ventana, donde habíamos colocado el bloque1, y colocamos el nuevo bloque, con la opción que ya conocemos de Archivo/Añadir como bloque
Si dejamos el cursor del ratón unos segundos sobre el Bloque2, veremos que aparece el texto que hemos introducido en la descripción
Y si nos metemos en su interior (haciendo doble click) vemos los comentarios y pegatinas que hemos colocado, aunque NO podemos editarlos desde ahí
En esta animación se resume el proceso:
Bloque3.ice: Añadiendo iconos
Crearemos un nuevo bloque, bloque3.ice, a partir del anterior, añadiendo un icono. Las imágenes que se usan para los bloques tienen que estar en formato SVG. Es un formato vectorial, abierto y estandarizado. Los ficheros SVG se pueden visualizar desde el navegador, y se pueden editar con bastantes herramientas, como por ejemplo el programa Inkscape, que es software libre
Para este ejemplo utilizaremos el fichero SVG de una estrella de 5 puntas: star-5p.svg
Seguimos los siguientes pasos:
-
Descargamos el icono SVG de la estrella: star-5p.svg
-
Editamos el bloque2 y cambiamos sus comentarios. Ahora es el bloque3. Ponemos otras pegatinas
- Abrimos la ventana con la información del proyecto, cambiamos el nombre y la descripción. Aprovechamos para completar el resto de campos: Versión y Autor (son opcionales)
- En la parte inferior pinchamos en el botón que dice Abrir SVG. Se nos abre un navegador de archivos y seleccionamos el fichero SVG que hemos bajado antes: star-5p.svg. Pinchamos en Abrir
- En la información del proyecto nos aparece el icono que hemos seleccionado, en la parte inferior. ¡Ya lo tenemos listo!. Pinchamos en OK
-
Guardamos el bloque como bloque3.ice, con la opción Archivo/Guardar como
-
Cambiamos a la ventana donde estamos colocando los bloques de ejemplo y añadimos el nuevo, con Archivo/Añadir como bloque
Vemos que ahora se ha sustituido el nombre del bloque por su icono. No aparece el nombre, como en el caso de los bloques anteriores, pero sí la imagen que hemos añadido. Si nos situamos encima del bloque aparecerá la nueva descripción
Si nos metemos dentro del bloque3, veremos su nuevo contenido. Ahora, en la esquina superior izquierda, además del nombre aparece su versión
En esta animación se resume el proceso:
Bloques con puertos
Aprenderemos a crear bloques con puertos, para poder introducir información en ellos y sacar sus respuestas. Comezaremos por los puertos de 1 bit
Puertos de 1 bit
Los puertos de 1 bits son los que más hemos usado hasta ahora. El nombre asociado a cada puerto de 1 bit es opcional. Aprenderemos mediante ejemplos: Primero haremos una puerta AND de 3 entradas y luego un detector del número 2 (Comparador de un número de 2 bits con el número 2)
Ejemplo: Puerta AND de 3 entradas
Empezamos definiendo cómo será nuestro bloque. Tendrá en total 4 puertos: 3 de entrada y uno de salida. No asignaremos nombres a los puertos. El icono que usaremos será el siguiente:
Que se puede descargar desde aquí: and3.svg
Empezamos con su implementación. Creamos un circuito nuevo. Primero colocaremos los puertos de entrada. Nos vamos a Básico/Entradas, igual que cuando colocamos un pin de entrada. En la venta que aparece desmarcamos la opción FPGA pin y pinchamos en OK
Nos aparece un bloque verde, que representa un puerto. Lo colocamos
Añadimos dos puertos de entrada más, bien repitiendo el proceso anterior o bien copiando y pengando el puerto colocado
El puerto de salida se coloca de forma similar, pinchando en Básico/Salidas y desmarcando la opción Pin FPGA
Lo colocamos en la parte de la derecha
La colocación de los puertos se puede ver en esta animación:
La puerta AND de tres entradas se puede implementar de muchas maneras. Es un circuito combinacional de 3 entradas y una salida, definido por una tabla de verdad en la que la salida se pone a 1 solo en el caso en que las tres entradas estén a uno. En el resto de casos la salida es 0.
Una implementación sería utilizando tablas de verdad. Otra posible implementación es usando las puertas AND de dos entradas que ya conocemos. Usaremos esta última para el ejemplo. El circuito que creamos es el siguiente:
Ahora editamos la información del bloque en Editar/Información del proyecto. Le ponemos de nombre AND-3, la versión (por ejemplo 0.1), una descripción, nombre del autor (nuestro nombre, por ejemplo) y seleccionamos como icono el fichero and3.svg que hemos descargado antes
Pulsamos OK y guardamos el fichero como and3.ice. Ya tenemos nuestro nuevo bloque listo para probar
Probando la puerta AND
Creamos un documento nuevo. Colocamos la puerta AND de 3 entradas recién creada con la opción de Archivo/Añadir como bloque
Para probarla colocaremos 3 pines de entrada, en los que conectaremos 3 interruptores externos, y un pin de salida conectado a un LED externo
El montaje para probarlo es este:
Cargamos y probamos:
Al activar los tres pulsadores se enciende el LED, en el resto de casos está apagado (en la animación no se muestran todos los casos)
Ejemplo: Detector del número 2
Como segundo ejemplo haremos un circuito combinacional que tiene 2 puertos de entrada, y uno de salida. Los dos puertos de entrada tienen asignados los nombres i0 e i1. Se trata de un circuito que detecta si el número entrante es el 2 (en binario 10). La entrada i1 se corresponde con la de mayor peso y la i0 con la de menor. Para distinguirlas es necesario asignarles nombres
Vamos a hacer el bloque de otra manera. Empezamos por crear un circuito de pruebas, con el detector implementado mediante una puerta AND y una NOT. Usamos pines normales (bloques amarillos). A los pines de entrada le damos los nombres i1 e i0. Al de salida no le ponemos ninguna etiqueta
Hacemos el montaje, cargamos y lo probamos
El interruptor de la izquierda es el más significativo. Sólo cuando está activado y el de la derecha no lo está, es cuando se está introduciendo el número 2 (10) y por tanto se enciende el LED. En el resto de casos el LED está apagado
Una vez comprobado que el circuito funciona, vamos a convertirlo en un bloque. Hacemos doble click en el marco de los pines para editarlos. Y deshabilitamos la opción FPGA pin para convertirlos en puertos. Empezamos por el i1, por ejemplo
Pinchamos el OK y se actualiza la entrada de pin a puerto
Hacemos lo mismo con el resto de pines
En esta animación vemos el proceso:
Como icono para el bloque usaremos este:
que podemos descargar desde aquí: is_2.svg
Ahora introducimos la información del bloque desde Editar/Información del proyecto
y pinchamos en OK. Guardamos el bloque como detector-2.ice. Creamos un circuito nuevo y colocamos el bloque detector recién creado, pinchando en la opción Archivo/Añadir como bloque
Ahora lo podemos usar en nuestros circuitos. Para probarlo, simplemente conectaremos sus entradas y salidas a pines, igual que cuando lo creamos
Si nos metemos dentro del bloque, veremos la implementación que hemos hecho previamente
Puertos de varios bits
Para aprender a usar puertos de varios bits, y no sólo de 1, modificaremos el bloque anterior para que su entrada sea un puerto de 2 bits en vez de 2 entradas de 1 bit separadas. La manera de trabajar es exactamente igual. Sólo hay que tener en cuenta que los puertos de más de 1 bits siempre tienen que tener un nombre (NO es opcional, es obligatorio). En el caso de los puertos de 1 bit, el nombre es opcional
Creamos primero el circuito usando pines, para poder sintetizarlo y comprobarlo en el montaje que tenemos:
Es el mismo detector del ejemplo anterior pero al que se le ha añadido un separador de bus. Ponemos la misma información en el proyecto, y el mismo icono (Editar/Información del proyecto). Cambiamos los pines por puertos, y lo guardamos como detector2-bus.ice
Ahora creamos otro circuito para probar el nuevo bloque, conectando sus dos puertos a pines
En esta animación vemos el bloque en su interior
Bloques con entradas de reloj
Los bloques tienen una entrada especial, llamada entrada de reloj. Más adelante veremos para qué sirve, y crearemos circuitos secuenciales, que tienen la capacidad de almacenar información en su interior. Pero de momento aprenderemos a hacer bloques con una entrada de reloj, aunque no sepamos para qué sirve
Como ejemplo usaremos el circuito que hace parpadear un LED a la frecuencia de 1Hz, que ya conocemos muy bien. En la izquierda tiene una entrada de reloj, que está marcada con el símbolo >. Está conectada a un pin de entrada especial: el reloj del sistema, que en icestudio se denota por un cuadrado amarillo pequeño
Ejemplo: Corazón de 1Hz con entrada de enable
Vamos a crearnos nuestro propio bloque corazón, de frecuencia 1Hz, que disponga de una entrada de enable. Cuando esta entrada esté activada, el corazón bombeará bits normalmente. Cuando esté a 0, su salida estará a 0, y no se bombearán bits
Empezamos haciendo su implementación, usando pines para poder probar el circuito. Lo implementamos a partir de un corazón de 1Hz y una puerta AND para realizar la habilitación. Este bloque tiene en total dos puertos de entrada, uno para su entrada de reloj y otra para la de enable, y un puerto de salida
En el esquema de montaje colocamos un pulsador y un LED externos
Lo cargamos y lo probamos:
Cada vez que apretamos el pulsador, el LED se pone a parpadear
Para convertirlo en bloque, empezamos colocando una entrada sin nombre, desactivamos la opción de FPGA pin y activamos la opción de mostrar reloj
Pinchamos el botón de OK y colocamos el bloque. Observamos que tiene el símbolo >, que indica que es un puerto especial de entrada de reloj. Tiramos un cable a la entrada de reloj del bloque del corazón
Y convertimos el resto de pines a puertos
En esta animación se muestra con más detalle el proceo para crear el puerto de entrada del reloj
El icono lo descargamos de este enlace: Heart_1Hz.svg. Editamos la información del bloque:
Lo guardamos como corazon-1hz-enable.ice. Creamos un circuito en blanco e importamos el corazón:
Vemos cómo la entrada de reloj nos aparece conectada automáticamente al pin de reloj del sistema. Conectamos el resto de pines para realizar pruebas
Bloques con parámetros
Además de los puertos, los bloques tienen parámetros de entrada. Para crearlos, simplemente basta con usar otros bloques paramétricos y colocar los contenedores (contante o Memory) para establecer su valor
Haremos dos ejemplos: Un corazón con entrada de enable, igual que el del apartado anterior, pero con la frecuencia en HZ paramétrizada. El otro será un detector paramétrico de números de dos bits. En apartados anteriores hicimo uno que detectaba el número 2 exclusivamente. Ahora haremos uno que detecte el número de 2 bits que se introduzca como parámetro
Ejemplo: Corazón paramétrico con enable
Partimos del mismo ejemplo que hemos hecho antes, para hacer nuestro propio corazón con entrada de enable, pero cambiamos el corazón de frecuencia fija por uno paramétrico, y le asignamos un valor por defecto de la frecuencia, de 1Hz, por ejemplo. Usamos pines para probar el circuito y comprobar que funciona correctamente
Ahora lo convertimos a bloque como ya sabemos: convertimos los pines en puertos y añadimos el puerto del reloj
El parámetro se deja tal cual. Aparecerá como parámetro en el bloque. Como no le hemos asignado ningún nombre, simplemente nos aparecerá una línea en la parte superior del bloque, sin ningún nombre. Guardamos el bloque como corazon-enable.ice. Descargamos este icono: Heart_Hz.svg. Editamos la información del bloque
En un circuito nuevo importamos el bloque (Archivo/Añadir como bloque). Nos aparece el corazón, con su entrada de enable, el reloj del sistema conectado al puerto del reloj y la entrada del parámetro en la parte superior
Le asignamos un valor al parámetro, por ejemplo 2, y conectamos la entrada y la salida a dos pines para probar el bloque
¡Ya hemos hecho nuestro primer bloque paramétrico!
Ejemplo: Detector paramétrico de números de 2 bits
En uno de los ejemplos anteriores hicimos un detector del número 2. Ahora lo generalizaremos para que sea un detector paramétrico, y que el número k a detectar sea un parámetro. Para su implementación utilizaremos el comparador de números de dos bits que hicimos en el tutorial 19.
El circuito completo, usando pines, es el siguiente
Para los dos bits superiores del comparador introducimos la constante que queremos detectar, que por defecto está puesto el 3. Por los 2 bits inferiores introducimos el número a detectar, que proviene de los interruptores externos. Lo Cargamos para probarlo
Ahora vamos a convertirlo en bloque. Vemos que tenemos 2 parámetros: el valor de la contante k, que es el número a detectar, y la tabla de verdad del comparador. Esta última no queremos sacarla hacia fuera. No queremos que se tenga acceso a ella desde el exterior. Es decir, queremos convertirla en un parámetro interno, sólo visible en la implementación del bloque, pero no accesible desde el exterior
Hacemos doble click en la tabla, para editarla, y marcamos la casilla que pone parámetro local
Aparece un candado cerrado en su esquina superior derecha, indicando que es un parámetro local
Ahora cambiamos los pines por puertos
Usaremos este icono: is_k.svg. Editamos la información del bloque
Creamos un circuito en blanco y añadimos el bloque nuevo
Vemos cómo solo tiene un parámetro de entrada en la parte superior. Le damos un valor y conectamos la entrada y la salida a pines para probar el bloque
Cambiando el valor del parámetro realizamos comparaciones con diferentes números
Creando iconos con Inkscape
Hasta ahora hemos usado iconos SVG ya c reados, para nuestros bloques. Vamos a aprender a crear los nuestros propios. Para ello usaremos el programa libre y multiplataforma Inkscape
Una vez instalado, lo arancamos, y nos aparecerá una ventana como esta
La apariencia exacta depende del sistema operativo, el tamaño de la ventana y el idioma. Los iconos pueden estar en otras posiciones, así como los menúes
Vamos a crear nuestro primero icono. Simplemente haremos un círculo rojo. Pinchamos en el icono el círculo en la parte de la derecha. Nos situamos en cualquier parte del lienzo de dibujo. Pulsamos el botón izquierdo y arrastramos el ratón hasta que tengamos el círculo. El tamaño no es importante, porque al tratarse de un dibujo vectorial, se verá perfectamente en cualquier tamaño. Con el círculo seleccionado, pinchamos en la barra inferior de colores, para establecer el relleno
El paso clave es ajustar el tamaño de la página para que se ajuste a nuestro icono. Si no lo hacemos, se usará el tamaño de la página por defecto, que es un din A4, y nuestro icono se verá muy pequeño
Nos vamos a Archivo/Propiedades del documento. Desplegamos la opción de Ajustar página a contenido y pinchamos en el botón de Ajustar página a dibujo o selección
Veremos cómo la paǵina se ajusta a nuestro círculo rojo
En esta animación se muestra el proceso completo
Ahora grabamos el icono como mi-icono.svg, desde Archivo/Guardar
Creamos un bloque pegatina para probarlo, que ya lo sabemos hacer. Lo importamos en un documento nuevo de Icestudio:
Ahora ya sólo es cuestión de aprender a manejar el inkscape, para aprender a dibujar con él, y bien crear nuestros iconos desde cero o bien modificar los creados por otros. En este ejemplo sólo hemos puesto un círculo rojo, pero podemos hacer lo mismo con otras figuras geométricas: rectángulos, estrellas, polígonos..., *añadir trazos, importar imágenes png, jpg..., colocar texto, etc.
Repositorio de iconos para Icestudio
Todos los iconos SVG utilizados en los bloques de muchas colecciones, incluidos los de estos tutoriales, están publicados en este repositorio de github: Icestudio block icons
En la wiki hay un índice donde se muestran algunos de los iconos, pero en el repositorio hay muchísimos más, agrupados por categorías
Todos los iconos están hecho con el Inkscape, y tienen una licencia libre para que cualquiera los pueda usar y modificar. Las contribuciones son muy bienvenidas. Anímate y añade tus contribuciones (pull requests) al repositorio
Además, puedes encontrar otros iconos SVG libres en estos repositorios:
¡Comparte tus iconos! :-)
Si has creado iconos nuevos para tus bloques o diseños derivados, compártelos con el resto de la comunidad, publícándolos con una licencia libre (Por ejemplo CC-BY-SA) en el repositorio que quieras.
Cualquier contribución al repositorio de iconos de Icestudio será muy bienvenida. Estas contribuciones te servirán como ejercicio libre, y también para obtener bitpoints adicionales (5 bitpoints por logo) hasta completar los bitpoints que podrías tener como máximo hasta el último tutorial que hayas hecho. Simplemente envía el pull-request.
La tabla de bitpoints que podrías tener según los tutoriales completados es:
Tutorial | Tope de Bitpoints acumulados |
---|---|
Tutorial 1 | 4 |
Tutorial 2 | 10 |
Tutorial 3 | 21 |
Tutorial 4 | 31 |
Tutorial 5 | 40 |
Tutorial 6 | 51 |
Tutorial 7 | 62 |
Tutorial 8 | 80 |
Tutorial 9 | 94 |
Tutorial 10 | 110 |
Tutorial 11 | 124 |
Tutorial 12 | 140 |
Tutorial 13 | 158 |
Tutorial 14 | 172 |
Tutorial 15 | 195 |
Tutorial 16 | 220 |
Tutorial 17 | 240 |
Tutorial 18 | 260 |
Tutorial 19 | 280 |
Tutorial 20 | 300 |
Tutorial 21 | 320 |
Así, por ejemplo, puedes estar por el tutorial 20, pero tener menos de 300 bitpoints, porque hay ejercicios de tutoriales anteriores que no has entregado, o porque no has hecho todos los ejercicios libres. Bien. Si compartes tus logos SVG puedes recuperar esos bitpoints
Ejercicios propuestos (20 BitPoints)
Ver los detalles de los ejercicios y las entregas en el menú Archivos/Ejemplos/2-Ejercicios de la colección de este tutorial
Resumen:
- Ejercicio 21.1 (Total 5 Bitpoints): Bloque pegatina con tu avatar
Crea un bloque pegatina (sin puertos) con tu avatar, logo, foto, etc. Puedes usar imágenes de cualquier tamaño, sin embargo es mejor que las reduzcas para que el bloque ocupe menos espacio
- Ejercicio 21.2 (Total 5 Bitpoints): Puerta AND del circuit Scramble
Crear un bloque que implemente una puerta AND usando el icono del Circuit Scramble.
El icono está disponible en este enlace: AND-cs.svg
Hacer un circuito de prueba, con este nuevo bloque, usando dos interruptores externos para introducir bit por sus entradas y un LED externo conectado a la salida
- Ejercicio 21.3 (Total 5 Bitpoints): Bloque Franky Diseñar un bloque para controlar a Franky. Tendrá 2 puertos de entrada de un bit (además del de reloj). Uno hará que Franky dispare por sus ojos, cuando se ponga a 1, y no dispare mientras esté a 0. El disparo es un parpadeo de los ojos a una frecuencia definida por el usuario mediante un parámetro. Por** defecto** será de 10Hz. La otra entrada hará que Franky mire hacia un lado (1) o hacia el otro (0). Tendrá como salidas un puerto de 2 bits para los LEDs de los ojos, y uno de un bit para el control del servo del cuello. Tendrá un parámetro para especificar la frecuencia del parpadeo de los ojos en el disparo
El icono está disponible en este enlace: Robot-face-1.svg
Hacer un circuito de prueba del bloque, conectando la entrada de disparo a un pulsador y la del cuello a un interruptor
- Ejercicio 21.4 (5 Bitpoints). Ejercicio Libre. Premiar la creatividad. Entregar por redes sociales o github: Pantallazos, enlaces, vídeos, etc...
Ejercicios entregados
Andrés (Avarez)
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Jose López
Ejercicio 1
Ejercicio 2
Ejercicio 3
Federico Coca (fgcoca)
Ejercicio 1
Ejercicio 2
- Vídeo en Youtube:
Ejercicio 3
- Vídeo en Youtube:
Ejercicio 4
Autor
- Juan González-Gómez (Obijuan)
Licencia
Créditos y agradecimientos
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