Contador binario con Arduino y registros DDR, PORT y PIN

En este tutorial se diseñará un contador binario con Arduino. La salida del contador se representará mediante LEDS. Entonces para crear el contador se utilizará el registro DDRX para la asignación de valores lógicos. Esto se realizará en el lenguaje Arduino. En este tutorial aprenderemos cómo controlar las salidas digitales para mostrará los números del 1 al 31 de manera secuencial por medio de registro de puertos. Para realizar el contador es necesario tener conocimientos sobre el código binario y quizás en como convertir binario a decimal.

Contador binario ascendente y descendente con Arduino

Un contador binario con Arduino, ascendete y desendente, permitirá cada determinado tiempo en incrementar o decrementar el contador. Para este contador se utilizarán 5 leds de 5mm para representar a 5 bits de un numero binario. La cuenta máxima de este contador será:

2^5 = 32-1 (-1 para considerar al 0).

Por lo tanto el numero máximo será el 31.

Material:

Los controladores y software Arduino lo puedes encontrar en: www.arduino.cc

 

Registros de puertos en Arduino

Para empezar los registros de puertos en Arduino nos permiten una manipulación más rápida de los pines de Entradas/Salidas de la tarjeta Arduino UNO. Esta forma de programación es una alternativa al uso de las clases pinMode y digitalWrite. El microcontrolador de esta placa tiene tres puertos:

  • pin digital de 8-13. Puerto B. Controlador por DDRB, PORTB y PINB.
  • pines de entrada analógica. Controlado por el puerto C, es decir, por DDRC, PORTC y PINC.
  • pines digitales 0-7. El puerto D controlado por los registros DDRD, PORTD y PIND.

Cada uno de estos puertos está controlado por tres registros los cuales se definen por DDRX, PORTX y PINX.

 

Puerto DDRX en Arduino

El puerto DDRX en Arduino, sirve para determinar o configurar si el pin correspondiente será entrada o salida.

Sintaxis:

DDRD= B00001111;

Donde:

D es el puerto a controlar

B indicamos que es el código binario

 0  =entrada          1=salida

Con respecto a este ejemplo estamos declarando que la mitad de nuestro puerto  sea entrada y la otra parte salida, entonces con esto evitamos escribir varias veces “pinMode(x,OUTPUT)” para declarar cada pin.

Tomando en cuenta que el primer número de la derecha es el menos significativo la relación de los pines será de la siguiente manera:

Numero insertado00001111
Pin de Arduino76543210

Por otro lado si desea  hacerlo en forma decimal solo bastaría con escribir «31» y esto sería igual a activar los primeros cuatro pines como salida DDRD=31 o DDRD=255 si queremos activar todo el puerto como salida.

Registro PORT en Arduino

El registro PORT Controlada si el pin esta en alto o bajo. Es decir, que puede «escribir» un valor lógico a la salida de cada pin.

PORTD=10101010

Por consiguiente los pines 1, 3, 5, 7 están en estado alto mientras que los pines 0, 2, 4, 6 están en estado bajo.

Registro PIN

Lee el estado de los pines de entrada establecidos.

PIND

Se lee todo el puerto que se ha configurado como entrada. Este registro nos da un 1 si a un pin del microcontrolador se le está alimentando externamente, y un cero si esta en nivel bajo de voltaje.

 

Programación de contador binario en Arduino

Por consiguiente hacemos la programación del contador binario en el Arduino, en el cual declaramos una variable de tipo entero para que cuente de manera ascendente  y otra variable para descender el contador. Como resultado veremos como encienden los LED’s en el puerto D.

Conexión de contador binario con Arduino

La conexión del contador binario con ARduino, comienza con el circuito que se cablea cada uno de los pines  de salida que declaramos de nuestro Arduino a los LEDs que estas coincidan con el ánodo, y por el lado del cátodo se coloca una resistencia de 220ohms en cada una de ellas. Para finalizar tomamos GND de Arduino y se une con todas las resistencias, para poder observar el contador binario.

Contador binario fritzing arduino

3 comentarios en «Contador binario con Arduino y registros DDR, PORT y PIN»

    1. Que tal ELBER, probablemente no te deja compilar el programa ya que al momento de subir el código cambiaron los signos «>» y «<" por algunos caracteres. Prueba cambiando las siguientes líneas: #11 por for(int x=0;x<=31;x++) #19 por for(int y=30;y>=0;y–)

      Saludos y espero haberte ayudado

  1. no funciona tu código, aquí algo que yo tengo considerando solo una parte del puerto D, es decir haciendo un contador de 4 bits, pin 3 es el bit 0 y el pin 6 es bit 4, espero que les sirva, corregir su codigo
    byte Digit[32]=
    {
    0x00, //0 {0,0,0,1,1,1,1,1}
    0x04, //1 {0,0,0,0,0,1,1,0}
    0x08, //2 {0,1,0,1,1,0,1,1}
    0x0C, //3 {0,1,0,0,1,1,1,1}

    0x10, //0 {0,0,1,1,1,1,1,1}
    0x14, //1 {0,0,0,0,0,1,1,0}
    0x18, //2 {0,1,0,1,1,0,1,1}
    0x1C, //3 {0,1,0,0,1,1,1,1}

    0x20, //0 {0,0,1,1,1,1,1,1}
    0x24, //1 {0,0,0,0,0,1,1,0}
    0x28, //2 {0,1,0,1,1,0,1,1}
    0x2C, //3 {0,1,0,0,1,1,1,1}

    0x30, //0 {0,0,1,1,1,1,1,1}
    0x34, //1 {0,0,0,0,0,1,1,0}
    0x38, //2 {0,1,0,1,1,0,1,1}
    0x3C, //3 {0,1,0,0,1,1,1,1}

    0x40, //0 {0,0,1,1,1,1,1,1}
    0x44, //1 {0,0,0,0,0,1,1,0}
    0x48, //2 {0,1,0,1,1,0,1,1}
    0x4C, //3 {0,1,0,0,1,1,1,1}

    0x50, //0 {0,0,1,1,1,1,1,1}
    0x54, //1 {0,0,0,0,0,1,1,0}
    0x58, //2 {0,1,0,1,1,0,1,1}
    0x5C, //3 {0,1,0,0,1,1,1,1}

    0x60, //0 {0,0,1,1,1,1,1,1}
    0x64, //1 {0,0,0,0,0,1,1,0}
    0x68, //2 {0,1,0,1,1,0,1,1}
    0x6C, //3 {0,1,0,0,1,1,1,1}

    0x70, //0 {0,0,1,1,1,1,1,1}
    0x74, //1 {0,0,0,0,0,1,1,0}
    0x78, //2 {0,1,0,1,1,0,1,1}
    0x7C, //3 {0,1,0,0,1,1,1,1}

    };

    void setup()
    {
    DDRD=255; //se declara todo el puerto como salida
    }

    void loop()
    {
    for (int i= 0; i<32 ; i++)
    { int valor = Digit[i] ;
    PORTD = valor; //el puerto D tomara el numero que contenga "1" y encenderá los LEDs con el
    //numero correspondiente
    delay(1000); // espera 1s entre cada numero
    }
    }

    los comentarios después de cada valor exadecimal en el array no son los correctos, una disculpa

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *