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 insertado | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 |
Pin de Arduino | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
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.

NO FUNCIONA
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
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