La entrada AVR no lee el valor correcto

Siento que este es un verdadero problema para principiantes, pero no veo lo que estoy haciendo mal aquí:

Tengo un conmutador SIP conectado al puerto A de un Atmega32 y no puedo leer los valores correctos del puerto. Aquí está la parte relevante del diagrama de circuito:

ingrese la descripción de la imagen aquí

Ahora en el código, configuro el puerto A como entrada y activo los pullups internos, sin embargo, siempre leo la palabra de datos que escribo en el puerto cuando configuro los pullups. Al medir el voltaje en los pines con un multímetro, leí los altos y bajos correctos según la posición de los interruptores individuales.

El resto de mi circuito funciona, comunicación SPI y todo. Aún así reproduje el problema con un ejemplo minimalista, ¿qué podría salir mal aquí?

#include <avr/io.h>

int main(void)
{
    PORTA = 0xff;
    DDRA = 0xff;
    while(1)
    {
        char bla = PORTA;
    }
}

No puedo descartar que haya dañado el puerto, debido a una mala configuración y el cortocircuito resultante. Entonces, ¿mi próximo paso debería ser cambiar el controlador?

Respuestas (1)

La entrada disponible en el puerto <x> se lee desde PINx. PORTxcontiene los valores bloqueados establecidos por última vez allí.

char bla = PINA;
Hay un dicho aquí en Alemania que se traduce aproximadamente como el que sabe leer tiene claras ventajas en la vida :). Gracias por detectar mi error tan rápido.