ATmega8 LED proyecto parpadeante no funciona correctamente

0

Estoy haciendo un proyecto simple usando el microchip ATmega8. Subí este código al AVR:

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

int main(void) {
    DDRD = 0b10000000;
    DDRD = 0b01000000;

    while(1) {
        PORTD = 0b10000000;
        _delay_ms(100);
        PORTD = 0b00000000;
        PORTD = 0b01000000;
        _delay_ms(100);
        PORTD = 0b00000000;
    }
    return 1;
}

Básicamente, enciende y apaga dos LED diferentes que están conectados al pin (AIN0) PD6 y (AIN1) PD7 .

Cuando el sistema está funcionando, el AVR puede suministrar energía a solo uno de los LED correctamente. Otro LED tiene un brillo significativamente bajo. Cuando mido la tensión entregada al LED brillante que está conectado a PD6 , toma aproximadamente 2.3 voltios, y el regulador que está conectado a PD7 toma aproximadamente 1.2 voltios.

¿Por qué tengo este problema? ¿Se trata del código que escribí o se trata del chip en sí? Por otro lado, cuando enciendo solo uno de los LED en PD6 o PD7 con un código simple, funciona bien. Así que no hay problema con los pines, conexiones o LED que utilizo. (¡Tampoco pude copiar y pegar aquí correctamente los nombres de los paquetes! Por lo tanto, también es correcto).

    
pregunta Orkun

1 respuesta

2

Estás sobrescribiendo tu inicialización. Primero establece D7 como salida y todos los otros pines en el puerto D como entrada. En su próxima declaración, establece D6 como salida y todos los otros pines, incluyendo D7 como entrada.

Para solucionar esto, usa esto en lugar de ambas inicializaciones:

DDRD = 0b11000000;

También puedes usar esto:

DDRD = 0b10000000; DDRD | = 0b01000000;

si quieres configurar más salidas usa | = en lugar de =.

    
respondido por el T J

Lea otras preguntas en las etiquetas