Estoy trabajando en un programa que:
- muestrea el ADC cada medio segundo con la interrupción del temporizador
- envía una señal a través de UART al presionar el botón (interrupción del puerto 2)
- muestra el valor de ADC a una pantalla de 7 segmentos multiplexada de 4 dígitos actualizada a 100 Hz usando la interrupción del temporizador
El problema que tengo es que el segmento 7 parece estar confundiendo la señal UART. Aquí está la parte del código que envía el número entero al segmento 7 que se mostrará. Parece estar causando los problemas.
void shiftOut(short val)
{
//Set latch to low (should be already)
P2OUT &= ~LATCH;
int i;
// Iterate over each bit, set data pin, and pulse the clock to send it
// to the shift register
for (i = 0; i < 8; i++) {
if ((val & (1 << i))){
P2OUT |= DATA;
} else {
P2OUT &= ~DATA;
}
P2OUT |= CLOCK;
P2OUT ^= CLOCK;
}
// Pulse the latch pin to write the values into the storage register
P2OUT |= LATCH;
P2OUT &= ~LATCH;
}
Si disminuyo la velocidad de actualización de 7 segmentos, la señal de UART está bien, pero los 7 segmentos parpadean. No estoy muy seguro de por qué la señal UART se está estropeando, por lo que si alguien puede señalar los errores que he cometido, sería genial.
Gracias