Contador de 0 a 9 con Arduino

Contador de 0 a 9 con Arduino. En este tutorial se mostrará como manipular un display de siete segmentos cátodo como un contador de 0 a 9 en decimal. El contador aumentará de uno en uno de manera secuencial. Un contador es uno de las practicas más comunes en las materias de sistemas digitales.

Material:

En cuanto a los controladores y software Arduino los puedes encontrar en: www.arduino.cc

Registros de puertos

Primeramente los registros nos permiten una manipulación más rápida de los pines de E/S de nuestro  Arduino UNO. Por lo cual el microcontrolador de esta placa tiene tres puertos:

  •  Pin digital de 8-13
  •  Pines de entrada analógica
  •  Pines digitales 0-7

Debido a esto cada uno de estos puertos está controlado por tres registros los cuales se definen por DDR, PORT y PIN.

Registro DDR

Determina si el pin es entrada o salida.

Ejemplo:

DDRD= B00001111;

Dónde:

D es el puerto a controlar

B indicamos que es el código binario

=entrada          1=salida

En este ejemplo estamos declarando que la mitad de nuestro puerto  sea entrada y la otra parte salida, como resultado evitamos escribir varias veces “pinMode(x,OUTPUT)” para declarar cada pin.

Con respecto al ejemplo anterior se toma el primer número de la derecha que es el menos significativo por lo tanto la relación de los pines será de la siguiente manera:

Numero insertado  00001111
Pin de Arduino  76543210

 

Por otra parte si queremos hacerlo en forma decimal solo bastaría con 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

Controlada si el pin esta en alto o bajo.

PORTD=10101010

En cuanto a este ejemplo le asignamos que 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.

Display 7 segmentos

Puesto que un display de 7 segmentos no son más que siete LEDs nos sirve para mostrar números o caracteres encendiendo o apagando cada uno ellos. Por consiguiente a cada uno de los LEDs se le denomina segmento,  los cuales para activarlos basta con  conectar el común a tierra y voltaje en el segmento que deseemos activar (en este caso que es cátodo común).

Diagrama_7seg
Diagrama display 7 segmentos

 

Así que es necesario hacer una tabla para representar los números con la relación de LEDs encendidos y apagados en cada número. Por ejemplo:

Por ejemplo para mostrar el número 4 apagamos los segmentos A, D,y E por consiguiente a estos los marcamos con un cero y todos los demás en uno.

Display del Contador de 0 a 9
Número cuatro en 7 segmentos

 

Una vez que tengamos nuestra tabla el código binario obtenido lo convertimos a base HEXADECIMAL, esto para colocar el valor en la programación tomando en cuenta el Pin 6/A como el más significativo.

Tabla
Tabla para el contador de 0 a 9

Conexión: display  7 segmentos

Para realizar la conexión se coloca una resistencia en cada una de las salidas del Arduino  en serie a los segmentos del Display.

Diagrama del Contador de 0 a 9 con Arduino
Diagrama de conexión para el contador de 0 a 9

 

 

Código del contador de 0 a 9 con Arduino

Finalmente se compila  el programa y lo cargamos a la placa Arduino. Esto dará como resultado el contador de 0 a 9 de manera secuencial.

Contador de 0 a 9
Contador de 0 a 9

 

36 comentarios en «Contador de 0 a 9 con Arduino»

  1. Buen día.

    Muy interesante la manera en que configuras el puerto y sus salidas, así como asignar un número hexa para las salidas, eso me va a ahorrar muchas líneas del programa.

    Estoy tratando de hacer primero los proyectos sin ver los tutoriales para potenciar mi habilidad para desarrollar, y luego corrijo o comparo con estos, es el primero que veo utiliza números hexagesimales y me abre las puertas a hacer códigos más cortos y con menos probabilidades de errores.

    Le agradecería muchísimo si pudiera hacer un tutorial para configurar varios displays de estos, utilizando una especie de chipselect (que me imagino lo daría el bit más significativo) sin necesidad de comprar otros integrados.

    Saludos desde Colombia.

  2. He estado leyendo que el pin0 jamas se debe poner como salida.

    Puede porfavor explicar cuando usarlo y bajo que circunstancias?.

    Gracias

      1. Very true. History has many incidents of blowback with the U.S. and other countries. For si;i#pcity&l8217ms sake, I focused this discussion on post-WWII incidents, which is when the U.S. has clearly ignored the Constitution and wholeheartedly endorsed an interventionist foreign policy.VN:F [1.9.18_1163](from 0 votes)

  3. Esta es la forma más «lógicamente» inteligente que he visto. Cuánta información útil y práctica en tan poco texto. Deberían haber más tutoriales redactados así. En otros sketchs se inflan a escribir código innecesariamente o utilizan registros de desplazamiento que para contar de 0 a 9 no son necesarios. Ha sido muy instructivo para mí porque no sabía que la placa asociaba tres puertos con sus registros PORT, PIN y DDR. Tengo dos dudas que agradecería que alguien me las aclarase: ¿el nombre del puerto (D) viene designado así por la placa?, si es así ¿cómo están designados los otro dos puertos del microcontrolador?
    Muchas gracias.

    1. Hola muchas gracias por tus comentarios, el micro que utiliza Arduino si tiene designado el puerto como «D» si quieres conocer mas sobre el microcontrolador 328 que es el que utiliza puedes ver el datasheet http://www.atmel.com/Images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Summary.pdf en el codigo que utilizamos aquí aprovechamos las propiedades del micro y es por eso que surge la asignación del puerto D solo como salida y evitar tanto código, pero puedes usarlos a tu conveniencia haciendo ajustes al código, saludos

  4. Hola amigos me llamo la atención este. Aporte .. Tengo un controlador de velocidad de un motor DC. Por potenciometro. Me gustaría ver la posibilidad de agregar un Dishley de 7 segmentos para poder ver el estado de velocidad del 1 al 9 dependiendo del los bits que entrega la salida analógica del Arduino que va desde el 0 hasta los 255bits. Caracterizado en 0 a 5 volt

  5. este es lenguaje AVR, propio del chip que trae la tarjeta. es mas facil declarar asi los puertos. no pense que esto se podia en lenguaje arduino.

  6. Héctor necesito un circuito con arduinó uno que presionando un botón cuente ascendentemente y presionando el otro descendentemente,con un display de 7 segmentos porfa!!! Me ayudas?

  7. malparido hpta donde saco su hpta titulo zorro de mrd se lo regalo un bagabundo o le toco hacerle garagamen al decano piro catrehijueputa cual es la joda , loca donde lo vea lo mato se la exploto como cucharita
    att will smit

  8. Hola buenas antes de nada gracias y disculpen mi desconocimiento en el tema..estoy intentando hacer un contador de marchas para un coche con un display de 7 segmentos y me interesa ke cada digito se encienda atraves de pulsadores o finales de carrera ..desde mi mas absoluta ignorancia lo ke estoy haciendo en unir los pines segun la marcha o nimero ke deseo activar y para ello le pongo un final de carrera ejemplo para la 5 marcha necesito unir los pines 2+4+6+9+10 y el pin 3 ke creo ke es el postivo con esto consigo encender el numero 5 cuando apreto el final de carrera mi problema viene cuando por ejemplo intento anadir otras marcha la primera por ejemplo 1… uno el pin 2+6 y el 3 el problema surje ke el ke era el cinco se convierte en nimero 6 ….estaria muy agradecido si me puede ayudar a simplificar el tema gracias por todo

    1. Que tal Mikel, este tutorial funciona de manera secuencial y supongo que ya hizo algunas modificaciones para su aplicación, para poder ayudarlo me permito darle una idea de como hacer el código (a mi criterio, porque existen muchas maneras de como hacerlo) debe de declarar 5 pines de entrada adicionales donde se conecta cada uno de los finales de carrera de las velocidades.
      En la programación puede hacer que lea cada uno de los pines de los finales de carrera y el que este seleccionado, dentro de un «if» primero apagar todos los LED’s puede ser con «PORTD=0x00»; y después encender los correspondientes a cada velocidad.

Deja una respuesta

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