¿Cómo leer un valor de entrada desde el pin atmega32?

1

Estoy intentando leer un valor de un pin avr pero no funciona.

Estoy intentando leer un valor que proviene de un botón pulsador y este botón está conectado a una celda de 5 VCC.

Cuando presiono el botón, el 5V debe ir al atmega32 y lo lee, luego la instrucción if se vuelve verdadera y el led se enciende.

Sin embargo, cuando el valor se convierta en verdadero, el led se encenderá pero no lo hará.

el bit 1 es el botón el bit 0 es el led

#define DDRA (*((volatile unsigned char *)0x3A))
#define PORTA (*((volatile unsigned char *)0x3B))
#define PINA (*((volatile unsigned char *)0x39))

int main(void) {
   DDRA |= 0b00000001;         // pin 0 output

    while (1) {
        if (PINA&0b00000010) {  // button pressed
            PORTA |= 0b00000001;   // turn led on
        }
    }
}

    
pregunta Ahmed Rifaat

1 respuesta

0

Como se indica en el comentario, la inversión de la batería hace que la instrucción while sea verdadera (porque el cierre del botón es "ruidoso"), pero no cumple con la siguiente prueba (máscara b00000010), por lo que el LED no se enciende. lit.
Después de corregir la batería, es posible que aún experimente el mismo problema porque el botón es "ruidoso" (cuando cierra el circuito, cambiará entre 5v y tierra varias veces , antes de "instalarse" en 5v, y cuando rompa el circuito, sucederá lo mismo antes de instalarse en 0v.
Si desea evitar esto, debe "rebotar" el interruptor.

    
respondido por el Guill

Lea otras preguntas en las etiquetas