Con un 555 + 4017, ¿cómo enciendo 7 LED, luego 6, luego 5... luego 1 luego 0?

Estoy en el proceso de convertir un proyecto de Raspberry Pi en una placa de circuito más simple con chips 555 y 4017.

Quiero poder comenzar mostrando 7 LED, luego ir a 6, luego a 5 y así sucesivamente hasta que todos estén atenuados.

Tomaré un ejemplo simple con 3 LED: el LED 1 se enciende si la placa está en el estado [0]. El LED 2 se enciende si la placa está en estado [0 O 1]. El LED 3 se enciende si la placa está en estado [0, 1 o 2]. No hay nada conectado a la placa para el estado [3]. Así, en el estado 0 de la placa, se encienden los LED 1, 2 y 3. En el estado 1, los LED 2 y 3 se encienden. En el estado 2, solo se enciende el LED 3. En el estado 3, nada se enciende.

Intenté usar las salidas paso a paso del chip 4017 y los diodos para formar un circuito OR, pero creo que tengo todos los LED en serie (consumiendo demasiado voltaje), por lo que el brillo resultante con más de un par de LED es terrible. .

Pregunta 1: ¿Cómo puedo hacer que los LED realicen una cuenta regresiva (Y con buen voltaje en los LED cuando están encendidos), como se indicó anteriormente?

Pregunta 2: Los LED son solo la mitad de la placa de circuito. ¿Cómo puedo asegurarme de que una vez que el chip 4017 ingrese a su octavo estado, los LED PERMANEZCAN apagados (hasta que la placa de circuito se apague y vuelva a encender)? Los ejemplos que encuentro en la web parecen dar vueltas continuamente. Gracias.

Con solo esos dos circuitos integrados, tendrá dificultades con esta tarea, necesitará algo de lógica adicional. Sería más barato. más pequeño, más ordenado y más fácil de lograr esto con un pequeño microcontrolador.
Gracias @Colin__s. ¿Hay microcontroladores en particular que me sugiera que mire?
No los he usado, pero para algo único como Arduino probablemente sería bueno. Hay un camino de entrada bastante fácil y una gran comunidad de apoyo. Si es algo que está planeando hacer en volumen y monetizar, entonces el micro más pequeño y barato que pueda encontrar con suficiente IO, o un micro más pequeño y más barato y un registro de desplazamiento si eso es más barato.
ATTiny. Usé un ATTiny85 que funciona con un oscilador interno, apagué 2 baterías AA exactamente para esto: usar 5 LED en mi caso. Los únicos componentes eran los LED, un botón de reinicio (para reiniciar el temporizador), una resistencia (para el menú desplegable Reiniciar) y el ATTiny. Y obviamente un programador de ISP. Lo bueno de ejecutarlo con 2 AA es que no necesita resistencias limitadoras de corriente. Usé un LED rojo, uno amarillo y tres rojos para un temporizador de cuenta atrás para la ducha.

Respuestas (2)

Hay muchas formas de hacer esto, algunas incluyen una bolsa de diodos... o un micro, lo que sería excesivo en mi opinión.

El más simple es simplemente poner en cascada algunas puertas OR.

esquemático

simular este circuito : esquema creado con CircuitLab

Sin embargo: si eso es todo para lo que se utilizan estas salidas, está utilizando la parte incorrecta aquí. Debería considerar usar un registro de desplazamiento en su lugar. Quizás un CD4015 .

esquemático

simular este circuito

NOTA: Las resistencias que se muestran son para 5V Vdd.

Hice esto para 5 LED usando un ATTiny85, un botón de reinicio con 10k pulldown y 2 pilas AA para alimentación. No se requieren resistencias limitadoras de corriente (debido al voltaje de los dos AA). En teoría, podría usar el pin de reinicio para un sexto LED, pero luego tendría que usar el interruptor de encendido para reiniciar el controlador. Bosquejo de Arduino:

// Shower timer with LEDs
// everything happens on the setup part.
// timer starts when reset
// once loop() is reached, go in deep sleep

#define LED1 0 // 1st green led
#define LED2 1 // 2nd green led
#define LED3 2 // 3rd green led
#define LED4 4 // yellow led
#define LED5 3 // red led

#include <avr/power.h>
#include <avr/sleep.h>

// the setup routine runs once when you press reset:
void setup() {
  // go low power
  power_adc_disable();
  power_usi_disable();
  power_timer0_disable();

  // initialize the digital pin as an output.
  pinMode(LED1, OUTPUT);
  pinMode(LED2, OUTPUT);
  pinMode(LED3, OUTPUT);
  pinMode(LED4, OUTPUT);
  pinMode(LED5, OUTPUT);
  PORTB = B00011111; // all LEDs on
  delay(60000); // one minute
  digitalWrite(LED1, LOW);
  delay(60000); // one minute
  digitalWrite(LED2, LOW);
  delay(60000); // one minute
  digitalWrite(LED3, LOW);
  delay(60000); // one minute
  digitalWrite(LED4, LOW);
  delay(60000); // one minute

  // blink for a minute
  for (int i=0; i<30; i++) {
    PORTB = 0;
    delay(1000);
    PORTB = B00011111;
    delay(1000);
  }
  PORTB = 0; // all off
}

// the loop routine runs over and over again forever:
void loop() {
  cli(); // disable all interrups
  set_sleep_mode(SLEEP_MODE_PWR_DOWN); // lower power sleep mode
  cli(); // disable all interrups
  sleep_enable(); // enable sleep
  sleep_cpu();  
}

Para programar el ATTiny 85, consulte http://www.hobbytronics.co.uk/arduino-attiny , por ejemplo.