I am making a simple project using ATmega8 microchip. I uploaded this code to the 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;
}
It basically turns on and off two different LED's which are connected to pin (AIN0) PD6
and (AIN1) PD7
.
When the system is working, the AVR can deliver power to just one of the LED's properly. Other LED has a significantly low brightness. When I measure the voltage delivered to the bright LED which is connected to PD6
, it takes approximately 2.3 volts, and the dimmer one which is connected to PD7
takes approximately 1.2 volts.
Why I am having this issue? Is it about the code that I wrote or is it about the chip itself? On the other hand when I light just one of the LED's on either PD6
or PD7
with a simple code it works just fine. So there is no problem with pins, connections or LED's I use. (I also could not copy and paste the package names here correctly! So it is correct too.)
Best Answer
You are overwriting your initialisation. First you set D7 as an output and all other pins on port D as a input. In your next statement you set D6 as an output and all other pins including D7 as an input.
To fix this use this instead of both initialisations:
DDRD = 0b11000000;
you can also use this:
DDRD = 0b10000000; DDRD |= 0b01000000;
if you want to setup more outputs use |= instead of =.