Display múltiple de 7 segmentos

PROLOGO.

Quien no dispone en su cajón desastre, de un conjunto de display a LED con dos, tres o cuatro dígitos. Este es el momento de reutilizar dicho display (multiplexado) en un contador cuya aplicación puede mejorar una presentación que tenía pendiente. En este artículo, veremos como aplicar código a un display multiplexado y como debe funcionar.

INICIANDO.

Actualmente es fácil encontrar en Internet códigos sobre pantallas LCD y cómo adaptarlas a distintas aplicaciones. En cambio, son muy pocos los sitios donde se describe cómo utilizar un display de siete segmentos y no digamos, cuando se trata de conjuntos de displays de 2, 3 o 4 dígitos multiplexados. Sin embargo, este dispositivo es bastante común en un gran número de electrodomésticos que podemos desguazar y reutilizar su display. Aquí, con este artículo, voy a intentar rellenar esta laguna.

Este artículo, no se puede considerar como una extensión a uno anterior que puede verse aquí. En aquella ocasión se contemplaba el caso de aplicar el contador de dos dígitos, como contador en una aplicación del propio Arduino que, como ejercicio es esclarecedor y consigue ayudar el interesado en realizar un contador de esas características. En esta ocasión, si bien, puede utilizarse con unos pequeños ajustes, del mismo modo, la diferencia radica en que se visualizará la cuenta obtenida reflejada en un pantalla o display de dos, tres o cuatro dígitos de siete segmentos a LED, mediante la multiplexación de los dígitos utilizados. Esta es la estructura del display múltiple.

4digitos7segmentosEstructura

 Sin más, vamos a entrar en harina, como diría un panadero. La teoría, se puede ver en el mencionado artículo, así que sólo nos preocuparemos de los tipos de pantalla a utilizar, para este caso usaremos un display múltiple (multiplexado). El display que vamos a utilizar aquí, tiene la particularidad en su encapsulado, es decir, que en una pieza ( o encapsulado) nos presenta varios dígitos. Tenemos que tener en cuenta que en algunos casos, las patillas que vienen en el encapsulado, parece que no están bien, ya que hay menos de las que se supone debería tener, esto es debido a que se han dispuesto de forma especial, lo que se llama multiplexado.

EL PROGRAMA.

La cuestión importante radica en el propio programa. El programa consta de 3 partes bien diferenciadas:

  1. Los displays, definición propia de los segmentos, de como se constituyen los dígitos (estructura interna).
  2. La asignación y correspondencia de los pines del display, del Arduino y pulsadores, para su aplicación sin posteriores consultas por ese motivo.
  3. Rutinas, además de la configuración (Set up), dentro del lazo (loop) se encuentran las subrutinas pertenecientes a los pulsadores.

LOS DISPLAYS.

No voy a describir con detalle cómo se construye un display, más arriba se puede ver su estructura. El display que voy a utilizar en este artículo, es el de un display multiplexado, es decir, que sus segmentos están conectados internamente de tal manera que al exterior sólo aparecen (normalmente) los correspondientes a los siete segmentos, más el común de cada uno de los dígitos que lo componen, en el caso de cuatro dígitos, muestra los siete pines de los siete segmentos, más cuatro correspondientes a cada uno de los cuatro dígitos. Estos son, unos ejemplos de encapsulados.

display_365 tyc-365wbg  7segmentosx3 s127139
 pines_display  pines_display

Hay que tener en cuenta que podemos encontrar estos displays en cátodo común y en ánodo común. Si usted, no dispone de un encapsulado de este tipo y está interesado en poner en práctica un contador de los descritos aquí y en cambio, si dispone de los display individuales, tranquilo, usted puede auto construir uno fácilmente, con los dígitos que necesite, vea cómo está construido el de 2 dígitos, de abajo y póngase a su construcción.

autoconstruido

Se pueden apreciar con todo detalle, los dos cablecillos blancos que son los comunes de cada dígito, por otra parte los siete hilos rojos, corresponden a los 7 segmentos, los cuales unen entre sí, los pares de segmentos (porque son dos) de cada dígito en paralelo. Recuerde utilizar todos en ánodo o cátodo común.

Circuito de 1 dígito.

El circuito de montaje de encendido de un dígito, es muy simple, se muestra a continuación y debajo el código.

contador1digito

El código es igual de sencillo, se ha incluido el Dp (pin digital point), por ese motivo se ha añadido la octava resistencia. La secuencia enciende y apaga cada segmento y luego una secuencia de los 7 al tiempo. Por cierto, el display es un ánodo común FND507 que tenía a mano.

Encendido de 7 segmentos.

Por supuesto que este código se puede reducir, sin embargo, he querido mostrarlo de esta forma para que los que se inician puedan seguirlo con mayor facilidad.

Circuito de 2 dígitos.

El circuito se muestra a continuación. Es muy sencillo y no creo necesario entrar a describir cada componente. Dos apuntes importantes:

  • Este mismo circuito, con sólo añadir unas resistencias, nos sirve, para el resto de ejemplos que se describen.
  • Los pines analógicos del Arduino (A0…A6), pueden tomarse como digitales, siguiendo el orden, A0 = A14; A1 = A15; … A6 = A19.
circuito2x7segmt

1er. Ejemplo.

Esta es una primera versión y su correspondiente código realizado con Arduino v.013 y v.023. El display utilizado para este caso es de cátodo común (CC). Como de costumbre, puede seleccionar el código y pegarlo en su editor dándole un nombre para guardarlo y su posterior ejecución.

Contador con dos display de 7 segmentos.

2º ejemplo.

En este segundo ejemplo, voy a utilizar otra forma de resolver el programa y además aprovechando que dispongo de un display múltiple de 4 dígitos, haré un contador de dos dígitos.

El circuito electrónico es similar al del ejemplo anterior, con unos pocos cambios, por lo que no lo mostraré aquí. El código se muestra a continuación.

Contador 2 x 7 segmentos y 2 botones.

Este ejemplo, muestra un código mejorado al representado en el primer ejemplo. Como puede apreciarse, he utilizado los mismos pines del Arduino, en cada ejemplo. Con esto, trato de minorar los errores de asignación en los distintos listados de código.

Problemas a causa del multiplexado.

El problema que se puede encontrar el programador, frente a una representación por multiplexado, radica en los tiempos de muestreo de cada dígito, por este motivo, recomiendo que se tenga en cuenta, diría, muy en cuenta, no utilizar o minimizar los delay(), ya que éstos, tienden a producir el efecto de «parpadeo» que se aprecia en los dígitos.

En un multiplexado, siempre se producirá un parpadeo, aunque éste sea poco apreciable, cuantos más dígitos se muestren, más evidente se hará. Por ese motivo hay que reducir en lo posible los tiempos de muestreo.

3er. ejemplo.

Voy a presentar el código de un contador de 3 dígitos en un display de 7 segmentos LED. El lector, puede apreciar las pocas diferencias que se presentan en este código. Un punto a tener en en cuenta, se encuentra precisamente en la rutina de asignación de encendido de cada dígito, representados por digit1, digit2 y digit3, con sus fórmulas.

contador4x7_3

Contador 3 displays de 7 segmentos.

Veamos la importancia que tiene la reducción de lo que yo llamo tiempos muertos, probemos a modificar estas líneas, simplemente, comentemos las que aquí se muestran, compilemos y carguemos el programa en el Arduino:

Habrá comprobado que ahora el parpadeo no parece afectar a la normal visión del contador. A esto es, a lo que me refería, con llevar cuidado al programar, evitando rutinas que tomen excesivo tiempo en tareas que retengan el normal desarrollo del microprocesador.

Ahora, puede eliminar de su código, las líneas que ha comentado, guarde el archivo, compile y cargue el programa en el Arduino y finalmente compruebe que la solución es la esperada.

4º ejemplo.

En este ejemplo, vamos a utilizar los cuatro dígitos del encapsulado del display (es uno que tenía de una impresora). En este programa la tarea de multiplexar se dedica a cuatro displays, lo que puede llevar algún problema si no se vigilan los tiempos. Si no utilizamos bien las rutinas, aparecerán dos consecuencias, el parpadeo y una notable bajada de luminosidad de los dígitos.

Veamos el listado del código, estos listados están probados y sin duda funcionan como se espera de ellos.

Contador con 4 displays de 7 segmentos.

A demás de lo comentado, el punto delicado de este sistema de multiplexado está en la elección correcta de la rutina de control de presentación de dígitos, cuanto menor tiempo se utilice en comparaciones, retardos, etc. más rápido se logrará la activación del dígito a visualizar:

Esto es un pequeño vídeo de baja calidad que muestra el contador de 4 dígitos y 7 segmentos a LED, ciertamente no se ve con la calidad que hubiera deseado. También puede descargar una versión, desde aquí.

contador4x7seg

Con estos ejemplos, he querido llenar un vacío que, había entre tantos ejemplos que se pueden encontrar en diferentes foros de Arduino. Realmente, en los foros se puede encontrar mucha colaboración y en la web, muchos artículos que hablan de contadores, realizados con LCD. Sin embargo, no son muchos los que se inclinan por los displays de siete segmentos a LED. En la mayoría de los que se encuentran teorizan y hablan de como funcionan, pero que lo describan en español, hay pocos. Por ese motivo, me he tomado la tarea de introducir al interesado en este tema de la multiplexación, en este caso, de unos dígitos. Tal vez le pueda ayudar a alguien en su trabajo.

Como siempre, comentarios, criticas y sugerencias para mejorar este artículo, son bienvenidos y apreciados.

Anexo.

2017-09-14  Se modifica un error en listado ‘Contador 4 dígitos 7 segmentos’, decía:

  • void lightDigit3(byte number) {
      digitalWrite(CA1, HIGH);  
      digitalWrite(CC2, HIGH);
      digitalWrite(CC3, LOW);
      digitalWrite(CC4, HIGH);
      lightSegments(number);
    }
    Por:
  • void lightDigit3(byte number) {
      digitalWrite(CC1, HIGH);
      digitalWrite(CC2, HIGH);
      digitalWrite(CC3, LOW);
      digitalWrite(CC4, HIGH);
      lightSegments(number);
    }

Probados los programas con Arduino v.1.6.12 Pruebe a descargar las librerías desde aquí.

147 comentarios sobre «Display múltiple de 7 segmentos»

  1. Muy buen dia:

    Su articulo me ha sido de mucho interes por lo que me he tomado el atrevimiento de escribirles para solicitarles si es posible me provean el digrama de un contador de 4 digitos con pulsador

    de antemano muchas gracias.

    Saludos

    Cesar Perez
    Guatemala.

  2. Muchísimas gracias, por la respuesta tan inmediata, me ha quedo interesante, se que para muchas personas estos temas son de mucho interes
    y gracias nuevamente por actualizar el tema, solo quisiera hacerte una consulta mas si podrias proporcionarme la lista de materiales que se usan en este proyecto pues cuento con el arduino uno y con los 4 display

    disculpa las molestias.

    Saludos.

    1. Hola Cesar, me alegra que te sirva el artículo que comentas.

      He revisado dicho artículo y lo he actualizado, en él puedes ver el esquemático o mejor dicho el montaje que corresponde a un contador de 4 dígitos de 7 segmentos.

      Supongo que te refieres a esto.
      Si tienes alguna consulta no dudes en preguntar.

      Saludos de Vicente.

      1. Hola he revisado el articulo y me ha gustado mucho. Pero tengo una pregunta he estado queriendo ampliar el contador a 5 dígitos y tengo un error en el conteo se pierde la cuenta al llegar a los 32767 y se distrociona todo me podría dar una ayuda gracias.

        1. Hola Ricardo Torres.

          Es extraño lo que me indicas, en primer lugar, que te funcione bien el programa con 5 dígitos (sin parpadeo, no lo mencionas) y el que se ‘pierda la cuenta’, me deja perplejo, te diría que revises las soldaduras y sobre todo procura no dejar al aire los pines que no utilices en los IC, debes darles un nivel H o L según corresponda, para evitar oscilaciones indeseables.

          Aunque tarde, esta es la respuesta que se me ocurre.

          Saludos.

        2. Eso es debido a que la máxima cuenta que puede almacenar la memoria de un microcontrolador de 8 bits de un numero entero de 8 bits es de -32768 hasta 32.767 en positivo. Si sobre pasa ese numero se crea un desbordamiento y eso es lo que mencionas como «se distorsiona»

        1. Hola ascec.

          Disculpa pero lo que yo entiendo es que has armado un display con diodos LED, por utilizar varios LED en cada segmento, necesitas más corriente y se entiende que necesites amplificar la señal.

          Si es a esto a lo que te refieres, tienes un buen trabajo. Primero, necesitarás una fuente de tensión externa al Arduino (una las masas), para alimentar a los displays que has montado y debes utilizar un transistor a cuya base mediante un resistor de 1K aplicarás la salida (que corresponda) de Arduino a ese segmento, el colector a polo positivo mediante un resistor de 10K, el emisor a masa y la salida del colector a la base de un segundo transistor (conectado) exactamente igual al descrito y su colector ahora al segmento que corresponda.

          En definitiva, dos transistores por segmento con sus resistores correspondientes, es decir, un buen trabajo. Inténtalo con un segmento y si te funciona como quieres, ya sabes…

          Saludos.

      2. Hola¡ De gran ayuda su proyecto señor vicente, soy estudiante de mecatronica y quisiera saber si me prodria ayudar con un problema. El proyecto que quiero realizar se asemeja al contador, pero digamos que quiero que se puedan programar tres tiempos diferentes y entre cada tiempo haya una espera de 30 segundos para que inicie el sigueinte tiempo, basicamente quiero realizar una de estas tipo aplicaciones de ejercicio en los telefonos inteligentes donde tu programas tus tiempos de ejercicio y de descanso. No sé si me explique claramente y si me pueda dar una pista de como hacerlo. De ante mano gracias

        1. Hola Brandon Castillo.
          Lo que pides es bastante más complejo que un contador de eventos, pues, necesitas un reloj con el que distribuir los tiempos a petición del usuario y entonces se lee lo que el usuario necesita y partiendo de esos datos se programa los tiempos que se piden.
          Es lo mejor que se me ocurre a bote-pronto .

          1. Hola una el artículo es muy interesante ,y quería saber si me ayudan con una duda, como se podría hacer uno en código binario y con 4 botones ?

            De antemano muchas gracias

    2. Hola Vicente disculpa la molestia pero estoy viendo que para el Contador 3 Display 7 segmentos el código está mal ya que para compilarlo me salen demaciados errores no sé si te pasa eso a ti y me podrías pasar el código ya compilado por favor .

      1. Hola Antonio.
        El código o mejor dicho los códigos que aparecen en el artículo están bien, lo que te puedo decir es que revises todo lo descrito y por último tendrías que mirar las librerías que puede que se hayan actualizado y como consecuencia se produzcan ciertos errores que por otro lado, no son atribuibles al código.
        En cuanto al código compilado, lo siento pero no dispongo de dicho archivo.

        Saludos y cuídate.

  3. Buena tarde:

    acá nuevamente con nuevas dudas, disculpa las molestias, bueno quisiera saber :

    1 : los display se tienen que multiplexar?
    2 : no se como conectar los claves que me quedan como positivos, al multiplexarlos solo entiendo que queda un negativo por cada display.

    muchas gracias de nuevo.

    saludos.

    1. Hola Marile Talonia.
      Entiendo que te refieres a un contador que cuente en binario, pero no comprendo lo de los 4 botones?
      Para un contador binario necesitas modificar el código de modo que se muestren los diferentes estados en el display.
      Lo de lo 4 botones no me que claro.

      Saludos.

      Hola Cesar Perez.
      En efecto los display se tiene que multiplexar y los pines libres son el negativo común de cada digito.

      Saludos.

  4. La lista de componentes que me preguntas, verás, es muy simple,
    en el propio esquemático se aprecian:
    4-Transistores NPN (BC547 o BC549)
    7-Resistores de 220Ω para los segmentos.
    4-Resistores de 4k7Ω
    2-Switch NO (pulsadores Normalmente abiertos)

    Naturalmente que se multiplexan.
    En cuanto a las «claves que me quedan como positivos», no entiendo a que te refieres, puedes aclararme esto.

    Saludos.

  5. muy agradecido por su respuesta me esta haciendo de gran ayuda.

    bien a lo que me refiero es que al multiplexar los displays me quedaran

    7 cables rojos (estoy tomando la ilustración que esta en la pagina de los dos display multiplexados)

    Saludos.

    Cesar Perez

  6. Efectivamente. Veamos, cada dígito tiene siete segmentos útiles + el punto decimal.
    Los pines en cada dígito son idénticos, formado por: A B C D E F y G,
    Unirás las A de cada dígito quedando una de entrada A desde el Arduino.
    Unirás las B de cada dígito quedando una de entrada B desde el Arduino.
    Unirás las C de cada dígito quedando una de entrada C desde el Arduino.
    Y así hasta la G, por lo tanto dispondrás de 7 entradas desde Arduino.
    Los comunes con un resistor a la base de cada transistor NPN o PNP, según se el display de ánodo común o cátodo común.

    Espero haber aclarado el tema de tus dudas.

    Saludos.

    1. Hola, me gusta mucho el cicuito del 4to ejemplo, seria posible que me enviara el diagrama? y si me puede aclarar que para anodo comun usaria los PNP?

      Muchas gracias

      1. Amigo José, considero bastante explicito, el circuito que se muestra en el mismo ejemplo, puede verse el trazado de cada conexión. Las patillas de los transistores NPN, de izquierda a derecha son: emisor – colector – Base.
        ¿Tienes alguna duda al respecto?
        En cuanto al tipo de transistor PNP, se puede utilizar cualquiera de tipo universal, claro que tendrías que respetar las polaridades en cada caso.

        Espero haber dado luz a tus preguntas.

        Saludos.

  7. Les escribo para agradecerles el tutorial que han colocado sobre los contadores con display de 7 segmentos, he logrado hacer funcionar el contador de dos dígitos y quiero comentarles que me ha servido mucho, como comentario adicional me dio un pequeño error en el código precisamente en esta línea: #define F 7 la cual cambie por esto: const int F = 7; y me ha quedado perfecto.

    Quiero aprovechar para consultarles: he pensando hacer los Display con LEDS de manera que me queden mucho mas grandes, como 10cm. x 5cm o incluso hacerlos con cinta de leds los que funcionan con 12v. al parecer arduino trabaja únicamente con 3 a 5V ustedes me podrán orientar la manera para aumentar el voltaje para hacerlo funcionar.

    de antemano muchas gracias por su atención, quedo muy agradecido y disculpen las molestias.

    Saludos

    Cesar Pérez
    Guatemala

    1. Hola Cesar, me parece bien tu idea para hacer los segmentos de mayor tamaño, las tiras de LEDs te pueden servir, aunque deberías disponer un plástico traslúcido delante para que se vea uniforme el brillo.
      En cuanto a la tensión, te sugiero que utilices unos opto-acopladores como el 4N26 o 4N46 por ejemplo. Esto te protegerá de las diferencias de tensión.
      Cada salida de Arduino la conectas a un 4N26.
      El pin x de Arduino al pin1 del 4N26, el pin 2 de éste a masa.
      El positivo de la fuente de 12V lo conectas al pin 5 del 4N26 y el pin 4 a la tira de LEDs, al otro lado un resistor (que deberás calcular) y de ésta a masa, eso siempre que la corriente sea baja, si es mayor de 25mA, debes intercalar un transistor de la potencia adecuada.
      El pin x2 de Arduino al pin1 de otro 4N26, el pin 2 de éste a masa.
      Y repites lo mismo para el resto.

      Espero haberte dado una posible solución.

      Por cierto, lo que me dices respecto al código #define F 7 la cual cambie por esto: const int F = 7; Tienes toda la razón si usas una versión mayor que la v.0023 del IDE de Arduino (por lo visto han hecho algunos cambios).

      Saludos.

    2. Con transistores lo puedes hacer..los 5v del arduino lo mandas a la hase de un transistor npn actuvando su colector ese mandandolo a la base de un transistor pnp, en el cual tu en el emisor pones 12v sacados de una fuente externa para que en el colector salgan los 12.. O la otra hacer un amplifucador de voltage con transistores.. Para que pongas 5 del arduino y a la salida te de los 12v

  8. Buenas días Señor Vicente

    Le escribo en virtud de que desconozco la electrónica y tengo la necesidad en que me asesore en cual de los sistemas ARDUINO debo utilizar y piezas electrónicas para construir una maquina para llenado de liquido variable de 5 a 3000 mililitros. considerando que debo tener una bomba eléctrica, válvulas eléctricas, sensor de proximidad para colocar el envase y el keypad para determinar los mililitros a llenar.

    Me permito agradecer su apoyo y revestirlo obviamente

    1. Hola Carlos

      Tu consulta se presta a la realización de todo un proyecto que se puede resolver de distintas formas, atendiendo a los margenes de presupuesto que tengas previsto.
      Del presupuesto depende en gran manera los componentes que vayas a utilizar (están bien los descritos, pero faltan) ya que por ejemplo, un display de 7 segmentos de 4 dígitos es económico, sin embargo una pantalla LCD (20×4) no es cara y se presta a una mejor visión de lo que pienses mostrar, mas sencillez y claridad, es solo un ejemplo.
      Los dispositivos como sensores, finales de carrera, mensores de volumen, etc. son algo a tener en cuenta, así como los motores, electrovalvulas, pulsadores, etc. son elementos que hay que tener en cuenta, por supuesto, pero debes ver el todo.

      Yo usaría un Arduino UNO, un teclado de 4×3 o 4×4 si tienes y una pantalla LCD (Cristal Liquido) de 2 o 4 líneas, según lo que quieras mostrar. Los componentes que mencionas y alguno más esto sería lo básico.

      Espero haberte aclarado el tema.

  9. Hola Vicente.

    Simplemente agradecerte que dediques parte de tu tiempo para que los demás aprendamos un poco más. Y que lo hagas con esa sencillez y claridad de exposición lo hace mucho más fácil todo.

    Gracias.

  10. hola vicente, estos proyectos me han llevado a intentar algo mas completo que me complico un poco ,mi intencion es guardar valores numericos de dos y tres digitos en la eeprom y mostrarlos en los correspondientes displays de 7 segmentos al presionar el pulsador . para lo cual tengo que almacenar los siguientes valores 200; 404; 278; 281;47 y que al ir presionando el pulsador estos numeros vayan apareciendo en los display.
    espero que se entienda cual es mi intencion y puedan ayudarme con el codigo fuente. gracias.

  11. Estimado señor Garcia, su articulo ha sido para mi muy interesante, por lo cual me dirijo a Usted para solicitarles si es posible me indique el digrama de un contador de 4 digitos con pulsador tipo magnetico reed switch, pero con display LCD de 16×2 lineas.
    Es para mi mi primer experimento en estas materias y si me resulta lo podre aplicar en mi taller.
    Agradeciendo de antemano su tiempo y buena disposicion le saluda y agardece
    Jorge Barrios

  12. Hola, muchas gracias por el tutorial me servido de ayuda, soy estudiante de 2do semestre de electronica y desde el 1ro uso Arduino, he mejorado la forma de captar los digitos y una funcion antirebote para los pulsadores, muchas gracias!!! ojala esto sea de ayuda de alguien 🙂

    obtener digitos para cada display=
    digit1=cuenta / 1000;
    digit2=(cuenta / 100) % 10 ;
    digit3=(cuenta / 10 ) % 10 ;
    digit4=cuenta % 10;

    Funcion antirebote para pulsadores =
    boolean antirebote(int pin){//esta función nos va a devolver un valor booleano.
    int contador=0;
    boolean estado; //guarda el estado del botón
    boolean estadoAnterior;//guarda el último estado del botón

    do {
    estado=digitalRead(pin);
    if (estado==1){ // invierte los valores debido a la resistencias PulluP

    estado=0;
    }
    else{
    estado=1;
    }
    if (estado != estadoAnterior){
    contador=0;
    estadoAnterior = estado;
    }
    else{
    contador = contador + 1;
    }
    delayMicroseconds(1000);
    }

    while(contador < timeAntirebote);
    return estado;
    }

    1. Hola IrvingD.
      Lamento no haber dado respuesta a tu consulta hasta este momento.
      Para utilizar displays de ánodo común, debes utilizar los drivers por los que corresponden a estos displays, creo que son difíciles de encontrar.

      Repito, disculpa mi retraso en la respuesta.

      Saludos.

  13. Hola Vicente.
    Interesante tu artículo.
    Necesito hacerte una consulta, es muy difícil dar con gente experimentada o foros donde alguien redonda.
    Yo tengo 6 displays de cátodo común.
    Los gestiono con dos 74hc595, uno maneja los bits positivos para los segmentos y el otro conmuta los cátodos.
    Esta muy bien porque lo puedo manejar todo con 3 pins.
    El problema esta en ese rastreo/frecuencia.
    A partir de 3ms ya se nota un poco la intermitencia, así que uso 1 o 2ms.
    Lo que no me mola nada es que comparándolo con un segmento encendido estáticamente pierde bastante brillo.
    No digo que se vea mal, puerto pierde.
    Cuando está en esa forma de intermitencia, y puenteo la resistencia se ve fantástico.
    Su le quitara las resistencias, el miedo que me da, es que si el arduino se para, o en un apagado o encendido se queda un segmento estático, podría quemarse ese led.
    Que opinas al respecto?
    Me aguanto con la pérdida en el rsstreo? Jejeje
    Felicidades por el artículo, es muy chulo y se entiende bien.

    1. Gracias por tus palabras.

      Respecto de tu comentario, naturalmente que se quemaría el segmento. Por otro lado yo no quitaría la resistencia, la cual debes ajustar al mínimo, es decir, calcula el valor de modo que el segmento esté encendido y el consumo se ajuste al valor que corresponda.
      Tal vez tendrías que utilizar un amplificador de modo que puedas cargar con más corriente las salidas, me refiero a utilizar un ULN2003 o un ULN2803 lo que te dará un margen mayor.

      Espero que te sirva esta solución.

  14. Hola Vicente:
    Muy interesante y explícito el contenido de tu blog. Felicitaciones.
    Mira, soy una persona de bastante edad (62) y estoy tratando de ingresar a este fascinante mundo de la programación de arduino y pics. Te comento, Necesito realizar un contador digital de 1 1/2 o 2 dígitos de 0 a 12 solamente, controlado por un pulsador. Es decir, al encender el marcador, encienda el cero y al presionar el pulsador una vez, muestre el 1 . al pulsar otra vez, muestre el 2… y así hasta el 12.
    Luego al pulsar otra vez, vuelva a mostrar el cero para empezar nuevamente.
    Te cuento que tengo un programador para pics y también tengo una tarjeta arduíno pro micro. que puedo utilizar para dicho contador.
    La consulta es la siguiente: Crees que modificando alguno de tus programas, me serviría para este fin? Me ayudarías con esto? Saludos

    1. Hola Alberto.
      Una vez más pido disculpas por el retraso en dar respuesta a alguna de las consultas que me llegan, es lamentable pero no creo tener bastantes argumentos para hacer otra cosa que disculparme.

      Respecto a tu ya vieja consulta, El código estaría muy parecido al del primer ejemplo el de dos dígitos. al cual le aplicarías un comparador para que al llegar la cuenta al nivel que deseas, ponga a 0 los dos dígitos y vuelta a empezar.

      Saludos.

  15. Buenas noches.
    Muy buen aporte para mi ya que así podre empezar a conocer acerca de estas materias, pero me gustaría pedir una ayuda sobre un programa que sense temperatura con el lm35 y 2 de 7 segmentos. Muchas gracias

  16. Amigo Fabian, gracias por tus palabras, la verdad es que hago esto por ese motivo, para que la gente que le interese el tema, tenga una ayuda y pueda mejorar sus conocimientos y desarrolle su ingenio.

    Por lo que me dices del termómetro con el LM35, he publicado hoy mismo un artículo que habla precisamente de esto, sólo que utiliza una pantalla de un viejo Nokia que puedes cambiar por una pantalla de las normales como la que se muestra, ya que son económicas y dan una vista muy buena al producto.

    Espero te sirva.

  17. Muy buen articulo. Estoy detras de hacer un termostato de temperatura para una incubadora de huevos de gallina usando 3 o 4 displays de 7 segmentos y tus ejemplos me seran de mucha ayuda.

  18. Hola Arberto, respondo a tu consulta.

    He leído tu propuesta y mi respuesta está condicionada (no creo necesario utilizar un PIC o un Arduino, para realizar el contador que pretendes). Otra cosa sería que a ese contador le dieras otras aplicaciones, en cuyo caso, ya estaría justificado el uso de un micro, pero no veo su necesidad en este caso concreto.

    >Te cuento que tengo un programador para pics y también tengo una tarjeta arduíno pro micro. que puedo utilizar para dicho contador.
    > La consulta es la siguiente: Crees que modificando alguno de tus programas, me serviría para este fin? Me ayudarías con esto?

    Por lo tanto, te propongo que utilices unos circuitos integrado de la familia CMOS, conocidos por CD4000. En ese caso estaría encantado en ayudarte, si así lo consideras.

    La respuesta es tuya, ya me comentas.

    Saludos Vicente.

  19. Buenos días Vicente,
    Muchas gracias por tu tiempo, mi electrónica es muy básica y de programación ni te digo, pero quisiera compilar este código para pasarlo a un arduino y hacer un contador marcha atrás para la actividad de airsoft pero al pasarlo al arduino me da este error, por favor me puedes ayudar
    Gracias

    ‘F’ was not detected in this scope
    sketch_may04a.ino: In function ‘void setup()’:
    sketch_may04a:78: error: ‘F’ was not declared in this scope
    sketch_may04a.ino: In function ‘void lightDigit3(byte)’:
    sketch_may04a:150: error: ‘CA1’ was not declared in this scope

    1. Saludos Miguel
      Por lo que me indicas, tienes más de un problema, por supuesto que el código completo ayudaría, sin embargo, por lo que veo no has declarado la variable ‘F’ en la función setup(), así como la ‘CA1’ en su correspondiente función.
      Por ese motivo, el listado del código sería necesario.

      Espero tu respuesta.

      Saludos.

  20. Tengo una duda que harias para habilitar los display si usaras unicamente una salida, para multiplexiar los display, usando transistores. para habilitar cada display

    1. Hola Alan
      No estoy seguro de lo que quieres decir.

      Trata de describir más tu consulta.

      Saludos.

    1. Hola Emilio.
      No se que pluguin se encarga de esto, pero yo lo implementé en el archivo del propio blog.
      Me explico. En el blog vas a Temas/Personalizar/Editar y te abrirá un archivo que suele ser «style.css», busca la línea de ‘pre’ y cuando termine esa función (pre{…}), le añades el código de abajo, lo guardas y supongo que dispondrás de lo que me pides.
      pre {background-color: #f6f6f6; background-position: initial initial; background-repeat: initial initial; border: 1px dashed #cccccc; font-family: arial; font-size: 12px; height: 200px; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 96%;}

      Ya me dices si te funciona.

      Saludos.

  21. Buenos días, excelente blog. !!!FELICITACIONES!!!
    Aprovechando las características y el manejo de los displays de 7 segmentos con arduino, me surgió la idea de hacer un reloj digital 12 horas. Si en tus archivos tienes el código y la pertinente información, te agradecería me lo enviaras.
    !!!EXITOS!!!

  22. Buenos días, excelente blog. !!!FELICITACIONES!!!
    Aprovechando las características y el manejo de los displays de 7 segmentos con arduino, me surgió la idea de hacer un reloj digital 12 horas. Si en tus archivos tienes el código y la pertinente información, te agradecería me lo enviaras.
    !!!EXITOS!!!

  23. Hola a todos. No es exactamente el tema de este enlace, pero está muy vinculado. Llevo varios días buscando por internet, y no encuentro lo que necesito.
    Quiero montar de forma económica un display digital para que el público vea las marcas de atletismo (saltos, lanzamientos, etc.). Somos una Federación de Atletismo que no tiene dinero para comprar uno.
    He pensado en un panel de cuatro dígitos, hecho con tiras de leds, y supongo que con registros de desplazamiento, ó decodificadores de siete segmentos, que pueda conectarse simplemente a las mismas patillas de un display de una calculadora.
    El que esté operando el panel, simplemente coloca la cifra con el teclado de la calculadora, y ya está.
    ¿Creéis que es viable? ¿Alguien ha visto algo parecido por algún sitio?
    Agradecería mucho vuestra ayuda. Un saludo.

    1. Hola Adolfo.
      Tengo colgado desde haced muchos años, un artículo que puede ayudarte o acaso orientarte en la creación del panel deportivo, aunque está dirigido a dispositivos TTL y no mediante micros, en él se habla de un panel para baloncesto, igual te puede servir, el siguiente es el enlace que te llevará al artículo:
      http://hispavila.com/3ds/tutores/marcador_digital_deportivo.htm

      Espero te sirva.

      Saludos V. García.

  24. Hola Vicente necesito realizar un Cartel indicador de cambio de jugadores de fútbol, básicamente serian dos contadores con dos display a 7 segmentos mi consulta es que me orientes como hacer funcionar a ambos con una placa arduino uno
    Esperando una respuesta te saludo atentamente

    1. Hola Julio.
      En principio debes plantearte si quieres que ambos Carteles estén sean independientes.
      En ese caso, simplemente usarías un Arduino Mini en cada uno. Entonces, tendrías que programar cada uno con un simple programa como el descrito en este mismo artículo, Contador con dos display de 7 segmentos, mejorando algunos aspectos. Como la función de parpadeo cuando muestra los dígitos, un par de pulsadores, uno en cada lado para manejar cada dígito con un contador y un tercer pulsador para el parpadeo.

      Creo que estaría dentro de lo posible.

      Es mi opinión.

        1. Hola Julio.
          Si es por bajar costos, te diría que utilices un interruptor por cada número en cada lado del panel, de modo que los del lado izquierdo indiquen las centenas y del lado de la derecha las unidades. Más sencillo no es posible. Pero claro es muy rudimentario.
          Saludos.

  25. Hola, me gustaría saber si me puedes dar indicaciones donde puedo añadir un delay al botón de decremento de numero, darle un delay de 3 segundos por ejemplo … Gracias

  26. Hola Vicente
    Gracias por tu respuesta y disculpa por no haber respondido antes(no creí que me contestarías). Con respecto a mi consulta, te cuento. Yo pertenezco a un «Club de Rayuela» con el cual realizamos campeonatos a nivel local con otros clubes.Y mi idea es hacer un marcador digital de tantos o puntos, para 2 equipos (Local-Visita) y mi idea es hacerlo inalámbrico para lo cual cuento con un enlace por radio frecuencia a 15Mhz. (emisor/receptor) de 4 botones. Entonces sigo con la idea de hacerlo con estas tarjetas arduino pro micro, y los dígitos, de tiras led con uln2003. Te cuento que entiendo de electrónica lo suficiente como para realizar esta tarea. Lo que me complica, es la parte de programación para hacer que estos marcadores cuenten solo hasta 12 y al pulsar otra vez, vuelvan a 0.Ya que los partidos se juegan a 12 «canchas» y a 12 puntos por cancha. Por eso, se me ocurre que al modificar algunas líneas de tu programa, «CONTADOR 2 X 7 SEGMENTOS Y 2 BOTONES.»pueda lograr lo que deseo. Espero no haberte aburrido y que me ayudes, si tu tiempo lo permite. Gracias de antemano y felicitaciones por toda la ayuda que prestas a los que seguimos tus aportes. Saludos.

    1. Hola amigo Alberto, disculpa la tardanza.
      El tema de que el contador alcance hasta una determinada cuenta, es una cuestión de poner un comparador, es decir, un if, de modo que si alcanza la cuenta XX ponga a 0 el contador.
      Por ejemplo:
      if (digit2 >= 1 && digit1 >= 2) {
      digit2 = 0;
      digit1 = 0;
      ...
      Espero te sirva la idea.

  27. Hola Vicente:
    Gracias por contestar y por la respuesta; es lo que imaginaba pero no sabía como hacerlo. Ahora me voy a quemar la cabeza Para hacer que al encender el contador solo encienda el dígito1 en 0 y al llegar a 10, encienda el dígito2 y al pasar de 12, se apague el dígito2 y empiece el ciclo nuevamente. Ya que pienso ocupar solamente los segmentos B y C del dígito2. Saludos amigo Vicente y muchas gracias.

  28. Hola Vicente:
    Muy interesante el contenido de tu blog. Felicitaciones.
    Te comento, Necesito realizar un candado digital con un display de 4 digitos 7 segmentos de 0 a 9 solamente, controlado por cuatro pulsadores, uno por cada digito. Es decir, al encender el marcador, encienda el cero y al presionar cada pulsador una vez, muestre el 1 . al pulsar otra vez, muestre el 2… y así hasta el 9 por separado. No se si puedas ayudarme con el codigo.

  29. Hola Vicente:
    Al compilar el programa del contador de 4 display de 7 segmentos me genera este error ‘lt’ was not declared in this scope for (int i = 0; i < 7; i++) muchas gracias por la ayuda.

    1. Hola Alvaro.
      Te sugiero que revises tus librerías y sobre todo el archivo «Preferences» que dependiendo de la instalación de tu IDE de Arduino, lo debes tener en «C:\Documents and Settings\Admin\Datos de programa\Arduino». Revisa este punto, para saber donde lo tienes pulsa ‘Cntrl+Coma’ o en File/Preferences.

      Espero haber aclarado tu problema.

      Saludos Vicente.

  30. HHOLA BUENAS TARDES MUY BUENA INFORMACION TENGO UN EJERCICIO QUE NO PUEDO RESOLVER ME PODRIAS AYUDAR DE ANTEMANO GRACIAS.

    SI EL BIT 0 DEL PUERTO A ES 0, POR UN DISPLAY SE VISUALIZA UN CONTADOR DESCENDENTE DURANTE 2 SEGUNDOS,SI ES 1,POR EL DISPLAY SE VISUALIZARA UN CONTADOR ASCENDENTE DURANTE DOS SEGUNDOS

  31. Hola buenas tardes es muy interesante tu proyecto
    pero al cargar el programa me aparece error
    es decir no me compila el programa
    creo que es por que utilizaste una libreria especial
    por favor ayudame
    me interesa desarrollar este proyecto
    gracias!!

    1. Hola David.

      Deberías concretar algo más tu petición, no me estás indicando a que programa te refieres, puede ser el de un display, dos, tres o cuatro dígitos.

      Para el código, utilice la ver. 0013 de Arduino, sin ninguna librería especial, quiero suponer las versiones posteriores no han cambiado las librería digamos estándar y por lo tanto cabe esperar que tengas algún gazapo en tu código.

      De todas formas, tampoco me indicas que error te muestra, puedo ayudarte, si tu te dejas ayudar, así que, describe lo que te ocurre, explica lo que haces. ¡¡Será por tiempo!!

      Saludos Vicente.

  32. Buenas tardes soy nuevo en esto y me gustaria aclarar una pequeña duda que tengo, como se que transistor (NPN o PNP) tengo que utilizar para un 7 segmentos ya sea de catodo o anodo comun. Muchas gracias

  33. Hola Vicente muchísimo gusto, el tutorial excelente te felicito por el y de antemano muchos éxitos, estoy trabajando en un reloj digital pegado a un RTC y ocupo usar 6 display para desplegar hora, minutos y segundos, el programa ya lo tengo casi terminado y hasta ahorita horas y minutos funcionan perfecto pero me esta costando un poco con el delay de los otros 2 display, se que el problema lo tengo con este código:

    // display number
    digit1=count / 1000;
    digit2=(count – (digit1 * 1000)) / 100;
    digit3=(count – (digit1*1000) – (digit2*100)) / 10;
    digit4=count % 10;
    digit5=??
    digit6=??

    sera posible que me ayudaras con esto, te agradezco de antemano.

    1. Hola Hector Guzman.
      Gracias por tus palabras.

      Respecto de tu consulta, creo que no tengo una respuesta que pueda servirte, ya que los tiempos del código están previstos para sólo cuatro dígitos y los delay() realmente son un estorbo.

      Considera utilizar otro tipo de código, y ayudándote en algún circuito integrado de apoyo. Prueba con una librería, creo recordar que era dcf77.h o con esta otra SevSeg.h que parece más apropiada.

      Lamento no disponer de tiempo para una ayuda mayor.

      Espero te pueda servir.

  34. Hola Vicente ayudar soy nuevo en arduino, y estoy haciendo el contador de 0 hasta el 999, pero en la programacion de arduino me sale error, copie el que esta en la pagina y me dice esto
    Arduino:1.6.1 (Windows 7), Placa:»Arduino Uno»

    Opciones de compilación cambiadas, reconstruyendo todo

    sketch_apr13c.ino: In function ‘void setup()’:

    sketch_apr13c.ino:75:6: error: redefinition of ‘void setup()’

    sketch_apr13c.ino:1:6: error: ‘void setup()’ previously defined here

    sketch_apr13c.ino: In function ‘void loop()’:

    sketch_apr13c.ino:92:6: error: redefinition of ‘void loop()’

    sketch_apr13c.ino:6:6: error: ‘void loop()’ previously defined here

    Error de compilación

    This report would have more information with
    «Show verbose output during compilation»
    activala desde Archivo > Preferencias

    Me podrian ayudar se los agradeceria

  35. Que tal Vicente, muchas gracias por ayudarnos con los ejemplos que pones en tu blog,
    Mi consulta es porque necesito hacer un timer descendente desde 4 minutos hasta 0, de 3 digitos con display de 7 segmentos,mi duda es como descontar de a 1 segundo,
    Desde ya muchas gracias

    1. Hola Gustavo.
      Disculpa el retraso en la respuesta.
      Para lo que tu pretendes, tienes que retocar el código y donde dice

      Tienes que poner

      En todo caso tienes que utilizar la función millis en lugar de delay(), en una rutina que te cuente los 60 segundos aproximadamente y de esa forma intentar obtener lo que pretendes.

      Un saludo.

  36. Hola buenas tardes, tengo una pregunta el codigo para el contador de 4 digitos se puede adecuar para hacerlo de 5 digitos? espero que me responda ya hice varias pruebas y no obtengo buenos resultados.

    saludos

    1. Hola Luis David.

      Creo que ya hemos comentado esto por facebook, de todas formas te diré que añadir uno o más dígitos no es sencillo ya que los tiempos de presentación son el cuello de botella de este sistema.
      De todas formas, mira de probar este código, por ver si te funciona.

      Pruebalo y me dices que tal te va.

  37. Hola buenas tardes soy una persona nueva en el manejo de arduino pero tengo una necesidad relacionada con los display de 7 segmentos y varios dígitos y la verdad me gustaria que me orientaran, haber si se puede resolver, es lo siguiente tengo un dato ya escrito en un display de 7 segmentos en un equipo pero necesito saber si con arduino se puede hacer la lectura de lo que está escrito en ese display cada vez que cambie poderlo leer y guardar ese dato para después sumarlo e imprimirlo en pantalla y en papel, les agradezco si me pueden ayudar con el tema. muchas gracias por su valiosa ayuda.

    1. Hola Edgar Delgado.

      Tu pregunta me tiene un poco confundido. Porque me dices que tienes un dato (valor) en un dígito de 7 segmentos, supongo que te refieres a un dispositivo con un display de varios dígitos y quieres leer ese valor para operar con él y mostrar el resultado en una «pantalla».

      Si es así, tendrías que poder extraer las señales que controlan el driver del display y de algún modo guardar dicho valor en un buffer al que le sumarías el segundo valor y el resultado enviarlo al controlador de la «pantalla». Para eso tendrás que usar variables para cada valor leído y sumarlo.

      Siento el retraso en la respuesta.

  38. ya resolvi el problema amigo, gracias!! ahora lo que requiero hacer es un contador de 0000 a 2399, que cuando llegue a 2400 cambie a 0000 y que cada 60 segundos cambie el 3er digito, por ejemplo:
    cuando llegue a 1259 cambie a 1300, ya intente modificar el programa pero no entiendo, a ver si me ayudas un poco, gracias!

      1. Hola Marco Trevino. Aunque con retraso.
        Me alegra que ya te funcione. En cuanto a lo que te propones es una cuestión de utilizar un comparador como puede ser un if, de modo que cuando la cuenta llegue al punto deseado la respuesta sea:
        digit1=0, digit2=0, digit3=0 y digit4=0.

        Espero que te sirva la respuesta.

  39. hola antes de nada excelente publicación estuve buscando por mas de 4 horas y este es por mucho la mejor que encontre y espero me puedas ayudar con este problema e copiado el codigo y lo e subido a mi arduino siguiendo el diagrama de 4 digitos pero no me funciona como en el video sino que solo cambian del 0 despues el nueve y des pues el 8 y eso es en todos los digitos despues solo se queda cambiando del 8 al 9

    1. Hola JAVIER AMEZCUA.
      Por lo que me cuentas, estoy seguro que tienes un error en el cableado.
      Digo que es el cableado porque el programa está comprobado y funciona bien, por lo tanto si lo has subido a tu Arduino sin problemas, no queda otra posibilidad, repasa bien todos los cables y asegúrate que los transistores están bien y bien montados.

      Espero que te funcione al corregir los fallos, en todo caso ya me cuentas como te va.

      Saludos.

      1. hola antes de nada gracias por contestar.
        la verdad no creo que sea el cableado ya lo revise bien, el arduino que tengo es el Arduino Mega 2560 y como seme hacia extraño lo probe en mi arduino uno y ahi funciona muy bien lo unico malo es la cantidad de conecciones que se le pueden hacer al arduino uno, un compañero me dice que puede cer que el comando millis no funcione en arduino mega pero no se si sea cierto.
        si fuera cierto habria alguna manera de hacer funcionar el codigo en el arduino mega? es que yo siento que si lo nesesario para compilarlo bien

        1. Hola JAVIER AMEZCUA.
          No tengo información sobre el Arduino Mega 2560 y su comportamiento con el tema de los millis(), tendrías que consultar en el foro de Arduino.
          Tal vez sea una cuestión de las librerías, en algunas ocasiones he observado un comportamiento extraño, al usar un viejo programa que siempre funcionó y en la actualidad, al cambiar la versión del IDE y las librerías, se produce un quebranto en los comportamientos del programa en concreto, si ya se que suena raro, pero no alcanzo a comprender porque este extraño comportamiento, también puede ser debido al cambio de S.O., ante usaba el XP y actualmente el Windows 10 (otro que tal).
          De todas formas trato de encontrar una solución a estos comportamientos no adecuados.
          Siento no poder ayudarte de otra forma, por el momento.
          Saludos.

    2. Buenas. Me pasa exactamente lo mismo. ¿Conseguiste arreglarlo? ¿Da igual el transistor que se monte mientras sea NPN? Yo soy ingeniero técnico pero mecánico, de construcciones maquinarias. Y sé lo mínimo de todo esto, prácticamente nada. Este verano me pondré las pilas, espero. Por favor, me urge para exponerlo en una feria, un contador digital hecho por los alumnos.

      Mil gracias

      1. Hola Carmen.

        Sigo buscando un motivo por el que no os funciona y no alcanzo a comprender que es lo que ocurre.

        Voy a probar una vez más el programa tal cual aparece en el artículo, por eliminar posibilidades de error por eliminación.

        Ya os tendré informados, espero encontrar el motivo.

        Saludos.

  40. cordial saludo:
    por favor me orienta con el siguiente ejercicio:
    representar un número binario de 8 bits leído en el puerto b, como un número positivo o negativo, de acuerdo a la tecnica de representacion numerica, signo y magnitud. muchas gracias

  41. Porque se empeñan en hacer todo con arduino ??????

    La verdad si esperan ser ingenieros electronicos/electricos o sin solo aficionados de la electronica
    se deberia hacer uno de diferentes herramientas (aestables , monoestables , 555) , no simplemente
    agarrar un arduino y meter un codigo que puede deducir hasta un niño de 6 años.

    Perdon pero estoy cansado de ver tanto arduino en donde se supone que la gente tiene un manejo mediano de la electronica

    1. Hola Francisco.
      Me parece muy bien su punto de vista, sin duda, habrá observado que hay otras formas de hacer que funcione un display asumiendo que es un contador/descontador, mediante circuitos estándar (TTL, CMOS), y funcionan adecuadamente.

      Sin embargo, usted quizás si siquiera sospecha el motivo de porque los técnicos se empeñan en utilizar microcontroladores o incluso microprocesadores para realizar aquí contadores, allá displays con funciones en 2D y 3D, por poner dos ejemplos.

      Le diré que esto es debido a la flexibilidad en el manejo. De pronto, con un Arduino (por poner su ejemplo), y un mini código, se muestra un contador, y con unas pocas líneas, se ha convertido en un detector de intrusos y le envía por e-mail un aviso de que su casa esta siendo asaltada, o puede que con el cambio de unas líneas pueda manejar un sistema de luces y controlar todos los utensilios de su casa.

      Dígame usted, cuantos cableados necesitaría modificar para pasar de un contador a un control de proximidad, seguro que deberá realizar un circuito impreso diferente para cada propuesta y también sabe el costo que esto significa, ya no le digo que cómo haría para enviar un e-mail con el aviso.

      Es sólo a modo de ejemplo, recuerde, siempre hay un buen motivo para mejorar las cosas y eso se llama progreso.

      Espero haber aclarado sin ánimo de ofender, un tanto su punto de vista.

      Saludos.

  42. amigo vicente necesito una ayuda tener una progrmacion de arduino de 0 al 9 pero quiero que cuando desconecte el arduino se quede en el numero que lo desconecte me entiende¡ osea que no se reinicie a 0 cuando se vuelva concentar sin boton

    1. Hola Nikko.

      Lo que pides es algo más complejo de lo que piensas. Sin embargo, tienes dos modo de lograrlo, 1) alimenta sólo el Atmega con un batería y de esta forma puede que te permita una mediana solución.
      Y 2), en este caso es más complejo como digo, necesitas una memoria adicional y su programación, de manera que esté guardando de continuo el valor actual de la cuenta, por lo tanto, tu mismo.

      Saludos.

  43. Estimado Vicente, muchas gracias por tu blog, este me a ayudado mucho aprendiendo sobre arduinos y a como programarlos,

    te explico un poco lo que quiero hacer y me gustaria mucho que me ayudes un poco o mucho…
    estoy haciendo un flipper o pinball (flipper le llamamos en chile) y estoy buscando informacion de cómo hacer el tablero de puntuación con arduino R uno (o cualquier otro) y quiero hacer lo siguiente:

    – Puntuacion
    la puntuacion sera en 3 partes basicas de un pinball con 3 candidades de puntos diferentes
    Basicos tablero – 100 puntos
    Bumper – 1000
    Dianas – 500
    – Bolas en juego
    Arduino debe saber cuantas bolas quedan en la partida y si se añade bola extra

    3 marcadores fijos. que iluminare para que ponga el nombre del pinball
    1 Marcador para puntos
    1 Bola en juego
    1 Creditos

    no sé si puedas ayudarme con esto, tengo conocimientos en electrónica, por lo que necesitaria saber que componentes necesito para esto… si tiene tiempo y quiere ayudarme, expondria mi trabajo en su blog con fotos detalles y los creditos a usted….

    Saludos
    David

    1. Hola David.

      Es un proyecto atractivo, aunque tiene su complejidad, si te atreves.

      Tiene sus problemas el hacer este tipo de programas conlleva mucho cuidado con los espúreos
      se te cuelan por todas partes, más por el tipo de contactos de los flippers y demás.

      – Bolas en juego
      Arduino debe saber cuantas bolas quedan en la partida y si se añade bola extra

      Este punto es el más sencillo; un contador regresivo y un comparador con el marcador de puntos,
      cuando coincida lo previsto, se suma uno, en caso contrario al llegar a 0, se acaba la partida.
      Repito los problemas quizás te surtan con los contactos de Bumpers y Dianas. Desparasita con filtros
      estos puntos.

      Espero te sirva de orientación.

      1. Hola Vicente, como estas? hace un tiempo te escribí ya que quería hacer un proyecto de flipper, o pinball como le llaman en otros lugares, bueno, ya tengo la programación necesaria y funciona bien!!! pero tengo un problema..

        Quiero agregarle un display 8 digitos de 7 segmentos, (max7219) puedes buscarlo como ( 7 segment display max7219)
        y no e encontrado la forma de hacerlo funcionar con la programacion..

        te dejo mi correo electronico, envíame un mail y te adjunto la programacion y el tipo de display que quiero agregarle, como te mencioné anteriormente, si me ayudas con esto puedo enviarte fotos y detalles para que puedas mostrarlo en tu blog y así ayudar a otras personas que posiblemente esten intentando hacer lo mismo…

        David.alex1980@gmail.com

        espero su correo.

        David

        1. Hola David.
          Es cierto hace un tiempo que como dices, me hiciste una consulta al respecto. No se si te respondí.

          Me alegro que ya tengas la programación, es un buen medio de lograr lo que pretendes. En cuanto a agregarle un display como indicas (max7219), el cual como habrás visto en la hojas de datos dispone de las entradas y salidas requeridas para tu caso. Ten en cuenta que la patilla 12 (CS, carga ) ha de estar a nivel 0V, para que se produzca la carga.

          Por otra parte, si consideras a bien, puedes enviarme tu documentación y sin dudar lo expondré en este lugar indicando tu autoría.

          Te adjunto una dirección en la que puedes indagar como conectar los displays y el max7219. No he tenido la ocasión de utilizar este chip y por lo tanto no tengo experiencia al respecto.

          https://www.pjrc.com/teensy/td_libs_LedControl.html

          Saludos.

  44. me sale un error en el codigo de del contador de dos digitos con botones

    D:\Usuario\Music\sketch_sep13a\sketch_sep13a.ino:46:0: warning: «F» redefined

    #define F 7

    ^

    In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:231:0,

    from sketch\sketch_sep13a.ino.cpp:1:

    C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:38:0: note: this is the location of the previous definition

    #define F(string_literal) (reinterpret_cast(PSTR(string_literal)))

    ^

    necesito ayuda urgente que hago

    1. D:\Usuario\Music\sketch_sep13a\sketch_sep13a.ino:39:0: warning: «F» redefined

      #define F 7

      ^

      In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:231:0,

      from sketch\sketch_sep13a.ino.cpp:1:

      C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/WString.h:38:0: note: this is the location of the previous definition

      #define F(string_literal) (reinterpret_cast(PSTR(string_literal)))

      ^

      1. Hola juan diego mesa sanchez.

        Por lo que me indicas, tienes una re-definición del segmento F. Te recomiendo que revises el boceto porque los indicios van por ese camino, es decir, en algún lugar del programa se produce una definición por segunda vez de este segmento.

        Actualiza las librerías de Arduino por asegurarte que todo es correcto.

        Espero que obtengas la solución.

        Saludos.

  45. Hola.
    Aunque soy muy manitas tengo que reconocer que la electrónica y la programación me superan.
    Soy jugador de airsoft y para nuestras partidas necesitamos un cronómetro de cuenta atrás y no tengo ni idea de como hacerlo. Describo lo que necesito:
    Debe tener dos displays donde se muestre la cuenta atrás para cada equipo. Que se puedan programar ambos cronómetros con hasta 99 minutos.
    Debe tener dos pulsadores grandes, uno para cada equipo, con led indicador para cada botón (jugamos con guantes de protección y no pueden ser pequeños).
    Debe tener otro botón grande para iniciar ambos cronómetros a la vez.
    Este deberá ser el funcionamiento:
    Al llegar el primer jugador pulsa el botón de inicio poniendo en marcha ambos cronómetros y luego pulsa el botón de su equipo. En ese momento su cronómetro para y el led se enciende para indicar el equipo que tiene detenida la cuenta atrás. El cronómetro del equipo contrario continúa funcionando.
    Al llegar un jugador contrario pulsa el botón de su equipo y detiene su cronómetro encendiendo su led y pone el cronómetro contrario en funcionamiento apagando el led del otro equipo.
    Así sucesivamente hasta que uno de los cronómetros llega a cero, momento en el que debe sonar una alarma (debe tener potencia para que se oiga en todo el campo de juego).
    Alguien me indicó que lo que pido es un reloj de ajedrez. He mirado algunos y es lo que necesito salvo por algunas cosas:
    1- Creo (perdón por mi ignorancia) que los botones que pulsan los jugadores son un conmutador que bascula a un lado u otro dependiendo del jugador que lo presiona. Necesitamos que sean pulsadores separados.
    2- No llevan leds indicando quien tiene pausado el tiempo.
    3- Cuando acaba el tiempo, necesitamos una alarma más potente.
    Por favor, no tengo ni idea de como hacer algo así y agradecería que me dijera como monatarlo.
    Gracias.

  46. Hola Jaime Alvarez.
    Entiendo lo que necesitas y realmente es muy parecido a un reloj de ajedrez al que tienes que realizar algunos cambios, unos mecánicos y otros electrónicos. La parte de programación es algo más compleja para ti, según tu reconoces y en ese caso es preferible que cuentes con los servicios de un técnico-programador que realice lo que quieres.

    Saludos y Feliz 2018.

    1. Hola Alexi.
      La resistencia de base suele ser de 1kΩ a 10kΩ dependiendo de la tensión de alimentación y si se trata de TTL o CMOS, en este caso recuerdo haber puesto una de 4K5Ω y sí, la del display es de 220Ω normalmente.

      Saludos.

  47. muy buenas ,, una consulta quiero hacer un proyecto de marcador electronico en la que que quiero usar lo siguiente:
    – 2 display de 7 segmentos para marcador local
    – 2 display de 7 segmentos para marcador visitante
    – 4 display de 7 segmentos para cronometrar el tiempo de juego en minutos y segundos.
    mi pregunta es si sera posible usar 8 display de 7 segmentos con un mismo arduino, ademas quisiera poner 2 letras con las de iniciales de cada equipo al marcador en lugar de local y visita.. ayudeme con esta inquietud si fuera tan amable , como se podria hacer este proyecto.. gracias..

    1. Hola Angel.
      Lo que pides es bastante complejo, pues no se trata sólo de las salidas necesarias para los displays que necesitas, básicamente tienes que distribuir los tiempos de muestreo para cada grupo de displays, lo que significa un evidente parpadeo en los dígitos.
      En resumen, mediante el uso del I2C-bus podrías usar los ocho displays pero lleva su trabajo. En cuanto a las letras de las iniciales de los equipos, las puedes hacer un sistema de conmutadores, ya que permanecen sin cambios durante todo el encuentro.
      Tienes un gran reto por delante.

  48. Hola vicente, tengo la misma falla de las personas que tambien comentaron cuando hago el de tres digitos y 4 digitos solo me pone el valor 9 y 8 y los demás dígitos no se forman bien ya lo probe en muchos simuladores y en fisico y no me sale

    1. Hola Christian Rivera.
      He buscado los comentarios que indicas y como hay tantos, no los encuentro. De todos modos, si realizas los ejemplos que comentas con los 3 dígitos, tienen que funcionar bien. Asegúrate de conectar los segmentos que correspondan y cada dígito con su transistor correctamente, cualquier cambio o un transistor en mal estado te puede llevar un tiempo descubrirlo y un trastorno, te aseguro que el código funciona bien en cada caso.
      Bien es cierto que más de 4 dígitos no lo he probado porque se supone que hay circuitos integrados adecuados para ese fin.
      Siento no tener otra respuesta, pero repito lo dicho, los códigos funcionan bien, la prueba está en el propio vídeo que se muestra.
      Saludos.

      1. Hola, espero no sea muy tarde para comentar esto, pero a mi me pasaba igual con mi display de 4 segmentos cc. Soy novato en esto de la programación y arduino, pero por la polaridad de los transistores que use (NPN) deduje que el posible error estaba en esta parte:
        void lightDigit1(byte number) {
        digitalWrite(CC1, LOW);
        digitalWrite(CC2, HIGH);
        digitalWrite(CC3, HIGH);
        digitalWrite(CC4, HIGH);
        lightSegments(number);
        }

        void lightDigit2(byte number) {
        digitalWrite(CC1, HIGH);
        digitalWrite(CC2, LOW);
        digitalWrite(CC3, HIGH);
        digitalWrite(CC4, HIGH);
        lightSegments(number);
        }

        void lightDigit3(byte number) {
        digitalWrite(CC1, HIGH);
        digitalWrite(CC2, HIGH);
        digitalWrite(CC3, LOW);
        digitalWrite(CC4, HIGH);
        lightSegments(number);
        }

        void lightDigit4(byte number) {
        digitalWrite(CC1, HIGH);
        digitalWrite(CC2, HIGH);
        digitalWrite(CC3, HIGH);
        digitalWrite(CC4, LOW);
        lightSegments(number);
        }
        Las salidas a las bases de los transistores eran LOW (por lo poco que entiendo, LOW es igual a un pulso 0, sin embargo, el transistor, por ser NPN, necesita un pulso HIGH (un 1 lógico en código binario). Todo lo que hice fue invertir los valores LOW a HIGH y visceversa, y, de esta manera, me quedo trabajando a la perfección mi display. Dejo abajo el arreglo que hice y espero que pueda ser la posible solución a los que tienen el mismo problema.

        void lightDigit1(byte number) {
        digitalWrite(CC1, HIGH);
        digitalWrite(CC2, LOW);
        digitalWrite(CC3, LOW);
        digitalWrite(CC4, LOW);
        lightSegments(number);
        }

        void lightDigit2(byte number) {
        digitalWrite(CC1, LOW);
        digitalWrite(CC2, HIGH);
        digitalWrite(CC3, LOW);
        digitalWrite(CC4, LOW);
        lightSegments(number);
        }

        void lightDigit3(byte number) {
        digitalWrite(CC1, LOW);
        digitalWrite(CC2, LOW);
        digitalWrite(CC3, HIGH);
        digitalWrite(CC4, LOW);
        lightSegments(number);
        }

        void lightDigit4(byte number) {
        digitalWrite(CC1, LOW);
        digitalWrite(CC2, LOW);
        digitalWrite(CC3, LOW);
        digitalWrite(CC4, HIGH);
        lightSegments(number);
        }

        1. Hola Víctor Barragán.
          En efecto, lo que expones es cierto (no lo he comprobado). Pero en el programa de 3 dígitos de 7 segmentos que describo, se dice que se trata de un display de CA (ándo común) y tu hablas de un CC (cátodo común), de manera que si lo has probado y funciona, no necesito revisar tu código, aunque con un vistazo me parece correcto.

          De todas formas gracias por el aporte.

          Un saludo.

    1. Hola Ricardo.
      Los transistores que debes utilizar para un multiplexado dependerá del display que vayas a utilizar, es decir, transistor NPN para display CC y PNP para display AC.
      Repasa el artículo y comprobarás lo que digo.

      Saludos.

    1. Buenas tardes Vicente.

      Tengo un problema cuando le doy para pasar el programa al Arduino y me sale error.

      El error me sale aquí:

      lightDigit1(numbers[digit1]);
      delay(2);
      lightDigit2(numbers[digit2]);
      delay(2);
      lightDigit3(numbers[digit3]);
      delay(2);
      lightDigit4(numbers[digit4]);
      delay(2);

      void lightSegments(byte number) {
      for (int i = 0; i < 7; i++) {
      int bit = bitRead(number, i);
      digitalWrite(segs[i], bit);

      En las palabras "NUMBERS" y "SEGS", podrías decirme porque?

      Muchas Gracias y un saludo.
      Emilio José

      1. Hola Emilio José.
        Me hablas de un errror, pero no me describes dicho error.
        Me dices en que parte del código te da el error. Pero que ocurre, no muestra los digitos o no cuenta, cuenta mal???
        Las palabras que indicas son simplemente una forma de identificar una función o una definición de un pin, son simples nombres que identifican por ejemplo cada pin.
        Por ejemplo:
        lightSegments = segmento encnedido.
        numbers[digit4 = número del dígito4
        lightDigit4 = Digito encendido.

        Dime que tipo de error te da para poder saber que te ocurre.

        Saludos.

  49. Hola, Sr. García. Empecé a seguir su blog desde hace poco tiempo, ya que también no hace mucho que estoy con el tema de Arduino. Actualmente estoy con el proyecto de un contador descendente de dos dígitos, utilizando dos displays de siete segmentos. Pude hacer funcionar el contador, pero, al ser novato en esto, lo que realmente me está volviendo loco es el tema de colocarle un pulsador, para que el conteo sólo ocurra mientras el pulsador está apretado. El proyecto es para colocarlo en un réplica de un Rifle de pulsos visto en la película «Aliens». El mismo poseé un visor en el cual se marca la cantidad de municiones restantes, disminuyendo mientras el gatillo de acciona. En fin, la idea del proyecto es que, como dije anteriormente, el display comience en 99 (esto ya está arreglado) y, al presionar el pulsador, comience a descender, sin dejar de apretarlo. El otro punto sería que, al dejar de accionar el pulsador, el conteo se detenga en un número, para luego retomar el conteo al volver a accionarlo. Y así sucesivamente. Si me puede dar una mano, le estaría muy agradecido.
    Le dejo a continuación el código que estoy usando para el contador, sin ninguna de las modificaciones (fallidas) para colocarle el pulsador.
    Muchas gracias!

    //
    int z = 9;

    int a = 2;
    int b = 3;
    int c = 4;
    int d = 5;
    int e = 6;
    int f = 7;
    int g = 8;
    int h = 22;
    int i = 23;
    int j = 24;
    int k = 25;
    int l = 26;
    int m = 27;
    int n = 28;
    int x = 100;
    int y = 100;

    void setup() {

    pinMode(a, OUTPUT);
    pinMode(b, OUTPUT);
    pinMode(c, OUTPUT);
    pinMode(d, OUTPUT);
    pinMode(e, OUTPUT);
    pinMode(f, OUTPUT);
    pinMode(g, OUTPUT);
    pinMode(h, OUTPUT);
    pinMode(i, OUTPUT);
    pinMode(j, OUTPUT);
    pinMode(k, OUTPUT);
    pinMode(l, OUTPUT);
    pinMode(m, OUTPUT);
    pinMode(n, OUTPUT);
    }

    void loop()
    {

    if (z==9)
    {
    //Nueve decenas
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);
    }

    //Nueve unidades
    digitalWrite(h, HIGH);
    digitalWrite(i, HIGH);
    digitalWrite(j, HIGH);
    digitalWrite(k, HIGH);
    digitalWrite(l, LOW);
    digitalWrite(m, HIGH);
    digitalWrite(n, HIGH);
    delay(x);

    //Ocho unoidades
    digitalWrite(h, HIGH);
    digitalWrite(i, HIGH);
    digitalWrite(j, HIGH);
    digitalWrite(k, HIGH);
    digitalWrite(l, HIGH);
    digitalWrite(m, HIGH);
    digitalWrite(n, HIGH);
    delay(x);

    //Siete unidades
    digitalWrite(h, HIGH);
    digitalWrite(i, HIGH);
    digitalWrite(j, HIGH);
    digitalWrite(k, LOW);
    digitalWrite(l, LOW);
    digitalWrite(m, LOW);
    digitalWrite(n, LOW);
    delay(x);

    //Seis unidades
    digitalWrite(h, HIGH);
    digitalWrite(i, LOW);
    digitalWrite(j, HIGH);
    digitalWrite(k, HIGH);
    digitalWrite(l, HIGH);
    digitalWrite(m, HIGH);
    digitalWrite(n, HIGH);
    delay(x);

    //Cinco unidades
    digitalWrite(h, HIGH);
    digitalWrite(i, LOW);
    digitalWrite(j, HIGH);
    digitalWrite(k, HIGH);
    digitalWrite(l, LOW);
    digitalWrite(m, HIGH);
    digitalWrite(n, HIGH);
    delay(x);

    //Cuatro unidades
    digitalWrite(h, LOW);
    digitalWrite(i, HIGH);
    digitalWrite(j, HIGH);
    digitalWrite(k, LOW);
    digitalWrite(l, LOW);
    digitalWrite(m, HIGH);
    digitalWrite(n, HIGH);
    delay(x);

    //Tres unidades
    digitalWrite(h, HIGH);
    digitalWrite(i, HIGH);
    digitalWrite(j, HIGH);
    digitalWrite(k, HIGH);
    digitalWrite(l, LOW);
    digitalWrite(m, LOW);
    digitalWrite(n, HIGH);
    delay(x);

    //Dos unidades
    digitalWrite(h, HIGH);
    digitalWrite(i, HIGH);
    digitalWrite(j, LOW);
    digitalWrite(k, HIGH);
    digitalWrite(l, HIGH);
    digitalWrite(m, LOW);
    digitalWrite(n, HIGH);
    delay(x);

    //Uno unidades
    digitalWrite(h, LOW);
    digitalWrite(i, HIGH);
    digitalWrite(j, HIGH);
    digitalWrite(k, LOW);
    digitalWrite(l, LOW);
    digitalWrite(m, LOW);
    digitalWrite(n, LOW);
    delay(x);

    //Cero unidades
    digitalWrite(h, HIGH);
    digitalWrite(i, HIGH);
    digitalWrite(j, HIGH);
    digitalWrite(k, HIGH);
    digitalWrite(l, HIGH);
    digitalWrite(m, HIGH);
    digitalWrite(n, LOW);
    delay(x);

    z=z-1;
    if (z==8)
    {

    //Ocho decenas
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);

    }

    if (z==7)
    {
    //Siete decenas
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);

    }

    if (z==6)
    {
    //Seis decenas
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);

    }

    if (z==5)
    {
    //Cinco decenas
    digitalWrite(a, HIGH);
    digitalWrite(b, LOW);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);

    }

    if (z==4)
    {
    //Cuatro decenas
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, HIGH);
    digitalWrite(g, HIGH);

    }

    if (z==3)
    {
    //Tres decenas
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);

    }

    if (z==2)
    {
    //Dos decenas
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, LOW);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, LOW);
    digitalWrite(g, HIGH);

    }

    if (z==1)
    {
    //Uno decenas
    digitalWrite(a, LOW);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, LOW);
    digitalWrite(e, LOW);
    digitalWrite(f, LOW);
    digitalWrite(g, LOW);

    }

    if (z==0)
    {
    //Cero decenas
    digitalWrite(a, HIGH);
    digitalWrite(b, HIGH);
    digitalWrite(c, HIGH);
    digitalWrite(d, HIGH);
    digitalWrite(e, HIGH);
    digitalWrite(f, HIGH);
    digitalWrite(g, LOW);
    z=9;

    }
    }

    1. Hola Diego Alberto Nuñez.

      El contador que pretendes hacer es muy sencillo, te puede servir el que viene descrito en el artículo como ejemplo 1er. aunque como se indica cuenta adelante y atrás. Tendrías que utilizár el pulsador de descontar (atrás). Pero esto tiene un inconveniente, y es que sólo descuenta con cada pulsación y si mantienes pulsado el pulsador no descuenta nada más que el primero.

      Se necesita un sistema que produzca un pulso a una frecuencia que tu puedas regular, de manera que si lo deseas reduciento la frecuencia los disparos por minuto sean bajos y si lo prefieres puedes acelerar la frecuencia, dando más disparos por minuto. Este pulso se aplica a una función que detecta si el pulsador de disparo está pulsado, entonces, produce una rafaga de disparos que se descontarán de otro contador (el de disparos), cuando llegue a 0 (cero) con un pulsador re restablece a 99.

      Supongo que esto es un caso similar a lo que tu necesitas. Ya me dirás como te va el tema.

      Saludos.

  50. Hola, buenos días, estoy llevando un proyecto parecido al contador que has descrito en el artículo, pero no sé cómo hacerlo. El esquema si se me viene en mente, pero no la programación.

    Estoy usando un Arduino Mega para desarrollar un contador de 0 a 99999 que parta desde la cifra de 8000, pero que mediante unos pulsadores se pueda añadir o restar a ese valor las siguientes cifras: +/- 1000; +/- 100; +/- 10

    1. Hola Christian.
      En primer lugar, me consultas por un contador de 5 cifras, ¿has probago a constuirlo?, lo digo porque el problema que encontrarás es los tiempos de visualización por dígito, este es el principal problema.
      Respecto a los pulsadores de +/- unas cantidades definidas, no veo gran problema en la rutina a realizar.
      Supongo que tienes una rutina capaz de motrar los 5 dígitos. Espero tu respuesta.

      Saludos.

  51. Buenos dias. Me podria ayudar. Me pidieron un arduino con 4 display de 7 segmentos pero que cuente de manera descendente y ascendente desde -999 a 999. Solo me sale la cuenta de 0 a 99

    1. Hola Mirella Soledad.
      Necesito más información sobre lo que te ocurre, intenta describir que ocurre y qué crees que te falla.
      Por lo que dices, parece que el código esta bien, observa y revisa las conexiones de los componentes, seguro que encuentras algo que no está bien.

      Saludos.

  52. Hola Vicente, buenas tardes, espero todos se encuentren bien…
    Tengo el proyecto de ponerle display de contador para un marcador de puntuación, evidentemente con dispay de 7 segmentos, el detalle que tengo es que no se si pueda realizarse de manera individual. Es decir, que el 1er display me funcione con un botón, y el 2do con diferente botón a su correspondiente display…
    Quedo atento a cualquier comentario.
    Gracias y saludos para todos.
    Maravilloso el blog.

  53. Hoola muy buenas tardes, necesito ayuda con este ejercicio ¿Qué me recomienda?

    contador hexadecimal de un dígito con un microprocesador. El mismo se pudiera visualizar en un display de7 segmentos en puerto P1.
    Se requiere una tabla de conversión BIN a 7 SEGTS. El contador avanza con la tecla PB conectada al
    puerto Px. Use el registro interno B como un contador binario.

    1. Hola MayHernandez
      He elido tu consulta y me temo que no entiendo bien lo que pretendes, hacer un contador hexadecimal de un solo digito ???, no le veo mucho sentido, con 2 dígitos puedo entender que vas a entrar datos o convertir datos hex a deci o a bin, pero no entiendo tu consulta.
      La tabla de conversión de bin a 7 segmentos, me descoloca (claro a mi que me importa) pero es para tener una idea de lo que pretendes.
      Lo siento, no te comprendo.
      Saludos y cuídate.

  54. hola que tal soy estudiante de uni recien estoy en mi 4 mes de carrera y en el curso de electronica me piden crear un proyecto de reloj acumlativo de tiempo de jugada ¿como podria comenzar ? me lo piden con pic 16F84A

Responder a Luis David Cancelar la respuesta

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.