¿Necesita ayuda con el botón pulsador en atmega8

0

Esto es lo que tengo:

Atmega 8 cableado para programación, funcionamiento confirmado, el programador es mi fuente de alimentación. 2 leds conectados a través de 470Ohm detienen los reisistores a los puertos PORTB0, PORTB1 y GROUND, funcionando. Botón pulsador conectado directamente desde VCC a PORT7D. Mi problema es que presionar el botón no hace nada. He medido los niveles de voltaje en PORT7D y es 4.96V cuando presiono el botón, de lo contrario es cero. Por favor encuentre el programa a continuación y ayúdenme:

#define F_CPU 1000000UL

#include <avr/io.h>
#include <util/delay.h>

int
main (void)
{
    DDRB = 0xFF;
    DDRD = 0x00;


    while(1) 
    {

        if( (PORTD & (1<<PORTD7)) == 1){  
        PORTB =   (1 <<PORTB1);
        _delay_ms(200);
        PORTB = (1 << PORTB0) ;
        _delay_ms(200);
        }else{ PORTB=0xff;}
    }
} 
    
pregunta zarcel

2 respuestas

1
  

Botón pulsador conectado directamente desde VCC a PORT7D.

Hay un problema. Cuando se presiona el botón, la entrada es alta. Cuando se suelta el botón, la entrada es flotante . Esto es malo.

Configure el pullup interno en el pin, y luego ate el botón a tierra. La entrada será baja cuando se presione el botón y alta cuando se suelte.

if( (PORTD & (1<<PORTD7)) == 1)

Y hay dos más. El valor de entrada está en PINx , no en PORTx . Y ese control de igualdad es erróneo.

if (PIND & _BV(PD7))
    
respondido por el Ignacio Vazquez-Abrams
0

La forma en que desea conectar un interruptor al AVR es así:

simular este circuito : esquema creado usando CircuitLab

Digamos que este es el pin 3 en el puerto B, por lo que el código se vería así:

DDRB&=~(1<<PB3); // Set pin to input
PORTB|=(1<<PB3); // Pullup resistor high
    
respondido por el user34920

Lea otras preguntas en las etiquetas