Contador binario de 4 bits con Micropython

Contenido:

Contador binario de 4 bits con MicroPython

Este contador binario de 4 bits con MicroPython permite realizar un conteo desde 0 hasta 15, aunque en este post también te explicaré la manera de modificar el numero de bits, con ello se puede obtener un contador de 6 bits, 8 bits, etc., lo que permite incrementar o disminuir el valor máximo de conteo.

Este proyecto puede ser útil para visualizar los valores binarios mediante leds, o para enviar estos valores a un conversor digital – analógico (DAC). El proyecto fue realizado con una Placa Raspberry Pi Pico, la cual contiene el firmware de micropython instalado previamente, para la visualización del contador se emplea 4 diodos emisores de luz (led).

Materiales

  • 1x Placa Raspberry Pi Pico, Esp32 o cualquier placa con micropython.
  • 4x Diodo emisor de luz.
  • 4x Resistor de 330 Ohm.
  • 1x Protoboard.
  • Cables de conexión.

Circuito

Este circuito se diseñó para una placa Raspberry Pi Pico, si utilizas otra placa debes verificar la disponibilidad o modificar los pines utilizados para este diseño.

contador binario micropython
Figura 1: Circuito con la Placa Raspberry Pi Pico.

Los componentes se deben conectar de la siguiente manera:

  • El ánodo del Led 1 (Pin Largo) va conectado a un extremo del resistor de 330 Ohm, el otro extremo del resistor va conectado al Pin GP10 de la placa.
  • El cátodo del Led 1 (Pin Corto) va conectado al Pin GND de la Placa.
  • El ánodo del Led 2 (Pin Largo) va conectado a un extremo del resistor de 330 Ohm, el otro extremo del resistor va conectado al Pin GP11 de la placa.
  • El cátodo del Led 2 (Pin Corto) va conectado al Pin GND de la Placa.
  • El ánodo del Led 3 (Pin Largo) va conectado a un extremo del resistor de 330 Ohm, el otro extremo del resistor va conectado al Pin GP12 de la placa.
  • El cátodo del Led 3 (Pin Corto) va conectado al Pin GND de la Placa.
  • El ánodo del Led 4 (Pin Largo) va conectado a un extremo del resistor de 330 Ohm, el otro extremo del resistor va conectado al Pin GP13 de la placa.
  • El cátodo del Led 4 (Pin Corto) va conectado al Pin GND de la Placa.

Sketch en MicroPython

Para el código de este sketch se utilizó una placa Raspberry Pi Pico, si utilizas otra placa debes verificar la disponibilidad o modificar los pines utilizados.

from machine import Pin
from time import sleep
#Setup Pines de Salida
pin_a = Pin(10, Pin.OUT)
pin_b = Pin(11, Pin.OUT)
pin_c = Pin(12, Pin.OUT)
pin_d = Pin(13, Pin.OUT)
#Funcion driver para activar cada salida
def driver(a):
    b = "{0:04b}".format(a)
    pin_a.value(int(b[0]))
    pin_b.value(int(b[1]))
    pin_c.value(int(b[2]))
    pin_d.value(int(b[3]))
#Bucle de repeticion infinita
while True:
    #Bucle que cuenta de 0 a 15
    #16 es el valor maximo no incluido (4 bits)
    for i in range(16):
        #Envia a la funcion el valor de conteo
        driver(i)
        #Retardo 1s
        sleep(1)

¿Cómo funciona el Sketch?

El Sketch funciona de la siguiente manera:

  • Al energizar la placa, comenzará un conteo desde 0 hasta 15, con un tiempo de espera de 1 segundo. Los leds mostraran el valor binario correspondiente a cada numero.
  • Cuando el contador alcance su valor máximo (15), comenzará nuevamente desde su valor mínimo (0), el ciclo se repetirá indefinidamente.

Si quieres aumentar los bits del contador debes modificar la cadena de formato que se encuentra en la funcion driver, como se muestra a continuación:

#4 bits
def driver(a):
    b = "{0:04b}".format(a)
    pin_a.value(int(b[0]))
    pin_b.value(int(b[1]))
    pin_c.value(int(b[2]))
    pin_d.value(int(b[3]))

#6 bits
def driver(a):
    b = "{0:06b}".format(a)
    pin_a.value(int(b[0]))
    pin_b.value(int(b[1]))
    pin_c.value(int(b[2]))
    pin_d.value(int(b[3]))
    pin_e.value(int(b[4]))
    pin_f.value(int(b[5]))

#8 bits
def driver(a):
    b = "{0:08b}".format(a)
    pin_a.value(int(b[0]))
    pin_b.value(int(b[1]))
    pin_c.value(int(b[2]))
    pin_d.value(int(b[3]))
    pin_e.value(int(b[4]))
    pin_f.value(int(b[5]))
    pin_g.value(int(b[6]))
    pin_h.value(int(b[7]))

Deja un comentario