Estoy aprendiendo sobre los sistemas integrados y cómo usar ATMEGA32 MCU. Ahora estoy tratando de mostrar un número fraccional al segmento 7, ¡pero simplemente no se muestra!
Perosimuevolapalancadelpotenciómetro,elvoltajeensupincentralqueestoytratandodemostrar,muestraunabarraextraña.
Sin embargo, si me olvido de hacer lo decimal y simplemente muestro el número entero y sustituyo el 7SEG doble por uno normal, funciona. Lo que significa que la MCU lee el valor correctamente.
Si agrego un retraso en el código.
Muestra los números momentáneamente antes de eliminarlos.
Por lo que supongo que, por cualquier motivo, aún se modifica el segundo 7SEG, incluso si el código le está ordenando que solo altere el primero y viceversa.
¿Qué me estoy perdiendo aquí?
Editar: Aquí está el código:
void SvnSEG_Disp(float num) {
num_int = (uint8_t)num; // Will take values from Zero to 5
after_point = (num - (uint8_t)num)*10; // Will take values from Zero to 9
PORTD &= ~(1 << PD5); // Set PD5 to Zero. Use first 7SEG
PORTD |= (1 << PD6); // Set PD6 to One. Don't use second 7SEG
PORTD |= (1 << PD4); // Set PD4 turning on the Decimal point.
PORTD &= ~(1 << PD0); // Set PD0 to 0
PORTD &= ~(1 << PD1); // Set PD1 to 0
PORTD &= ~(1 << PD2); // Set PD2 to 0
PORTD &= ~(1 << PD3); // Set PD3 to 0
PORTD |= num_int; // Set the lower 4 bits of Port D (PD0 - PD3) to the bits of the number.
PORTD |= (1 << PD5); // Set PD5 to One. Don't use first 7SEG
PORTD &= ~(1 << PD6); // Set PD6 to Zero. Use second 7SEG
PORTD |= (1 << PD4); // Set PD4 turning on the Decimal point.
PORTD &= ~(1 << PD0); // Set PD0 to 0
PORTD &= ~(1 << PD1); // Set PD1 to 0
PORTD &= ~(1 << PD2); // Set PD2 to 0
PORTD &= ~(1 << PD3); // Set PD3 to 0
PORTD |= after_point; // Set the lower 4 bits of Port D (PD0 - PD3) to the bits of the number.
}