Skip to content

Vídeo 6: Bombeando bits

mrcatacroquer edited this page Nov 5, 2018 · 105 revisions

Vídeo

Click to see the youtube video

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

Descripción

En hardware las cosas van en paralelo. Los circuitos independientes funcionan en paralelo, lo que nos permite crearlos de manera aislada y luego juntarlo para que funcionen a la vez (Superposición). Aprenderemos cómo podemos hacer parpadear bits a diferentes velocidades mediante el bombeo de bits

Colección

Academia-Jedi-HW-06.zip: Colección para este tutorial. Descargar e instalar

Contenido

Configurando las colecciones

Lo primero que haremos será instalar la colección usada en este tutorial: Academia-Jedi-HW-06.zip, y seleccionarla. Si hemos hecho el tutorial 5 y sus ejercicios, tendremos estas colecciones instaladas:

Observamos que hay una opción nueva en el menú: Bombeo

Eliminado colecciones no usadas

Opcionalmente podemos eliminar las colecciones que no vamos a usar. Yo lo hago aquí para enseñaros cómo eliminarlas, pero no es necesario hacerlo para continuar con el tutorial. Nos vamos al menú Herramientas/Colecciones/Eliminar

y nos aparecerán todas las que tenemos instaladas. Seleccionamos la que queremos eliminar, por ejemplo la de Makespace-17

Nos aparece un mensaje de confirmación. Pinchamos en OK

Y sale la notificación de que la colección ha sido eliminada. Repetimos el proceso con el resto de colecciones salvo la que usaremos la que acabamos de instalar. El menú de las colecciones nos queda así

Si tenemos colecciones intaladas no hay problema. Esto es sólo un ejemplo de borrado :-)

Superposición de circuitos

El pensamiento hardware tiene dos características que le diferencian del pensamiento algorítmico:

  • Se piensa en espacio: los circuitos ocupan un espacio físico
  • Las cosas suceden en paralelo

Una consecuencia muy útil de esto es el poder combinar fácilmente circuitos independientes. Imaginemos que tenemos un circuito que toca una melodía, y otro que hace que un robot siga la línea negra. Los dos funcionan por separado. Si los metemos en la misma FPGA, tendremos un robot que sigue la línea mientras toca música

Esto lo podemos ver gráficamente usando el circuito de encender un led que ya conocemos. El circuito 1 enciende el LED 7. Lo cargamos en la placa y vemos que funciona correctamente

Ahora hacemos el circuito 2, que enciene el LED0. Lo cargamos en la placa y vemos que este LED se enciende

Ahora hacemos un circuito 3 que es la combinación de los dos anteriores: El circuito 1 al lado del circuito 2. Encenderá simultánemente los leds 7 y 0

A esta propiedad la llamaremos superposición de circuitos. Sólo es aplicable a circuitos que son independientes. Aplicando esta superposición, conseguimos que un circuito tenga la suma de comportamientos de sus integrantes

Ejemplo 1: Circuitos en paralelo

Vamos a comprobar la superposición de circuitos. Primero abrimos el circuito 1 desde los ejemplos, accediendo a Archivo/Ejemplos/1-Ejemplos/1-Circuitos-Paralelo/Ejemplo-01-LED7-on

Nos aparece el circuito 1, que simplemente encenderá el LED7

Lo cargamos en la placa para ver su funcionamiento

Abrimos una ventana nueva de Icestudio, con la opción Archivo/Nuevo

Nos aparece una ventana nueva de Icestudio, en blanco

Abrimos el circuito 2 desde los ejemplos, accediendo a Archivo/Ejemplos/1-Ejemplos/1-Circuitos-Paralelo/Ejemplo-02-LED0-on

y nos aparece el circuito 2

Ahora lo cargamos en la placa, y comprobamos que se enciende el LED 0

Pinchando con el botón izquierdo y arrastrando el ratón seleccionamos el circuito completo

Al soltar el bóton, todos sus componentes quedan seleccionados

Nos vamos a la opción Editar/Copiar para copiar el circuito

Nos vamos a la otra ventana, donde está el circuito 1

Y le damos a la opción Editar/Pegar

Nos aparece el circuito que habíamos copiado, superpuesto con el actual

Lo recolocamos para que se vean bien los dos circuitos

y lo cargamos en la placa

Ahora los dos leds están encendidos. Este circuito lo hemos creado poniendo dos circuitos independientes en paralelo, para mostrar un ejemplo "hola mundo" del principio de superposición. En tutoriales venideros aplicaremos este principio a circuitos más complejos

Ejemplo 2: Led parpadeante

Hasta ahora hemos hecho circuitos donde los bits eran constantes. En este ejemplo haremos que un LED se encienda y se apague continuamente, con periodo de un segundo

Partiremos el ejemplo anterior, al que eliminamos los comentarios de texto y el bit 1 superior. Los bloques se eliminan seleccionándos y pulsando la tecla Supr o Delete

Queremos que el LED7 parpadee y que el LED0 se quede encendido

Para hacer que parpadee el LED tenemos que bombear bits. Hay que enviar la secuencia de bits 1 - 0 - 1 - 0 ... Eso lo conseguimos con el bloque corazón

Nos vamos al menú Bombeo y seleccionamos el Corazón de 1Hz.

Es un corazón que bombea bits a un ritmo de un bit 1 por segundo

Al cargarlo en la placa obtendremos esto:

Pensamiento hardware vs pensamiento algorítmico

El ejemplo de hacer parpadear un LED es un clásico. Vamos a analizar cómo se aborda usando el pensamiento algorítmico y el pensamiento hardware

Led parpadeante con pensamiento algorítmico

Cuando queremos hacer que parpadee el LED de Arduino, usamos este programa

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);
  delay(500);                      
  digitalWrite(LED_BUILTIN, LOW); 
  delay(500);
}

Hay un procesador (cpu), que ejecuta las instrucciones de una en una. Primero configura el pin para que sea de salida (LED_BUILTIN) y luego se entra en el bucle principal, que se repite todo el tiempo.

Las instrucciones que se ejecutan en el bucle principal son:

  • Escribir un 1 en el pin de salida para encender el led
  • Esperar durante medio segundo
  • Escribir un 0 en el pin para apagar el led
  • Esperar durante medio segundo

Pregunta reto

El pensamiento algorítmico es muy potente, pero hay cosas sencillas que son difíciles de implementar con este pensamiento. Aquí lanzo esta pregunta para pensar sobre ello:

¿Cómo podemos hacer para que dos leds parpadeen a diferentes velocidades con pensamiento algorítmico? ¿Y tres leds con velocidades diferentes? ¿Y 10?

Por supuesto esto es algo que se puede hacer, pero no es trivial ni inmediato para alguien que está empezando. Se requieren conocimientos avanzados para entender cómo hacerlo

Led parpadeante con pensamiento hardware

Para hacer parpadear un led con pensamiento Hardware el enfoque es distinto. No pensamos en las instrucciones que hay que darle a un procesador, sino que nos centramos directamente en los bits y es un pensamiento espacial.

Hay que enviar físicamente una tira de bits, a 1 y a 0. Es decir, hay que bombear bits, que se desplazan por el cable hasta que salgan fuera del chip y lleguen al led. Se muestra gráficamente en este animación

Con el pensamiento hardware es muy fácil responder a la pregunta de cómo hacer que parpadeen dos o más leds a diferentes velocidades. Sólo hay que poner en paralelo circuitos con corazones que bombeen bits a diferentes velocidades

Ejemplo 3: LEDs parpadeando a diferentes velocidades

Hacer que varios leds parpadeen a diferentes velocidades con pensamiento hardware es muy sencillo. Sólo hay que poner en paralelo otro corazón, que bombee bits a una velocidad diferente

Haremos que el LED 0 parpadee a una velocidad de 4 veces por segundo, mientras que el LED 7 lo hará una vez por segundo

Partimos del circuito del ejemplo anterior, y añadimos un corazón de 4Hz desde el menú Bombeo/Corazón 4Hz

Eliminamos el bit 1 constante de la parte inferior y lo sustituimos por el nuevo corazón. Tiramos el cable para conectarlo al pin de salida LED 0

Y lo cargamos:

Vemos cómo los dos leds están pardeando a diferentes velocidades :-)

Ejercicios propuestos (11 BitPoints)

  • Ejercicio 1 (Total 3 Bitpoints): Hacer un circuito digital que haga parpadear los LEDs 0 y 7 a la vez, a la velocidad de un parpadeo por segundo. Entregar por redes sociales, con mención a @obijuan_cube

    • 1 pantallazo del circuito (1 bitpoint)
    • 1 Vídeo del circuito funcionando (1 bitpoint)
    • Entrega adicional por Github (1 bitpoint)
  • Ejercicio 2 (Total 3 Bitpoints): Hacer un circuito digital en el que los LEDs pares de la icezum Alhambra parpadeen a una velocidad de 4Hz y los impares a 1Hz. Entregar por redes sociales, con mención a @obijuan_cube

    • 1 pantallazo del circuito (1 bitpoint)
    • 1 Vídeo del circuito funcionando (1 bitpoint)
    • Entrega adicional por Github (1 bitpoint)
  • Ejercicio 3 (Total 3 Bitpoints): Hacer un circuito digital en el que los 4 LEDs pares de la icezum alhambra parpadeen cada uno a una velocidad, según esta tabla:

    • LED 6: 10Hz
    • LED 4: 7Hz
    • LED 2: 4Hz
    • LED 0: 1hZ

    Entregar por redes sociales, con mención a @obijuan_cube

    • 1 pantallazo del circuito (1 bitpoint)
    • 1 Vídeo del circuito funcionando (1 bitpoint)
    • Entrega adicional por Github (1 bitpoint)
  • Ejercicio 4 (2 Bitpoints). Ejercicio Libre. Premiar la creatividad. Entregar por redes sociales o github: Pantallazos, enlaces, vídeos, etc...

Ejercicios entregados

Alberto Valero

Jesús Sesma

Koyikabuto

Autor

Licencia

Créditos y agradecimientos

Enlaces

FAQs

  • ¿Dónde puedo conseguir la placa Icezum Alhambra?

Pueden conseguir una desde Alhambrabits

  • ¿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

Clone this wiki locally