¿Cómo hago para mostrar el valor de la temperatura en dos pantallas BCD 7-seg? ¿Cuál es el circuito combinatorio que necesito construir? No sé cómo pasar de binario a BCD y también uso solo 5 bits para ir de 0 a 32.
Tuve un revolver alrededor de varias búsquedas de imágenes y dibujé un espacio en blanco. Todos los controladores de pantalla de BCD a siete segmentos son dispositivos de entrada de 4 bits. Podría usar lógica combinacional (NAND o NOR), pero sería ridículo.
Ya que tiene el primer bit de trabajo y está contento con él y tal vez quiera usarlo como un ejercicio de aprendizaje, una solución simple sería usar un micro con 16 o 18 pines GPIO. Podría usar ocho para leer el AD0804, siete más para controlar los segmentos de las pantallas de siete segmentos y dos más para conducir los cátodos o ánodos comunes.
Para una mayor diversión, puede reducir el conteo de E / S a nueve o diez, dependiendo de si también desea la visualización del punto decimal. (No lo hace en su caso). Esto tiene un costo de siete u ocho resistencias.
(Su requisito es para la visualización de 5 bits a doble de siete segmentos sin punto decimal, así que modifíquelo).
simular este circuito : esquema creado usando CircuitLab
Figura 1. El micro está configurado para leer las salidas AD804 entre las luces estroboscópicas entre las pantallas de siete segmentos.
Con la adición de R1 a R8, puede ahorrar en los pines GPIO en el micro - para mantener el tamaño bajo y aprender más.
Pseudo código:
disable(GPIO8); // Tristate the seven segment common driver pin.
disable(GPIO9); // As above.
input(portA); // Configure port A as inputs.
delay(1); // Stabilise.
t = readTemperature(); // Read the 8-bit value on port A.
msd = t \ 10; // Most significant digit. (Integer division.)
lsd = t % 10; // Least significant digit. (Modulo arithmatic.)
output(portA, sevenseg(msd)); // Configure port A as outputs and setup
the seven-segment display pattern.
output(GPIO8, 1); // Strobe the first digit.
delay(x); // Give it some time to excite the retina.
output(GPIO8, 0); // Turn off 10s display.
output(portA, sevenseg(lsd)); // Repeat for units display.
output(GPIO9, 1);
delay(x);
output(GPIO9, 0);
loop;
Hace lo que quieres con un solo chip y algún código.