So wie du es beschreibst ist die LED dann richtig angeschlossen, man nennt die LED dann "high-active", da der Zustand des Portpins auf 1 (High) geändert werden muss, um die LED einzuschalten.
Die bits würde ich persönlich anders setzen, also nicht _BV(0) verwenden, aber das ist eigentlich egal, da beide Ausdrücke gleichwertig sind.
Dem Ausgangsregister den Wert 254 zu geben ist allerdings falsch! Du setzt damit alle Pins auf Output außer PC0, der wird als Input definiert. Binär ist 254 = 11111110, du hingegen suchst nach 1 = 00000001.
So würde ich persönlich das machen:
Code:
#define MCU atmega168
#ifndef F_CPU
#define F_CPU 1000000UL
#endif
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRC = (1<<PC0); // PC0 auf Ausgang ohne andere Pins zu beeinflussen
PORTC &= ~(1<<PC0); // sicherstellen, dass PC0 auf LOW liegt
while (1)
{
PORTC |= (1<<PC0); // PC0 liegt ja bereits auf LOW, deswegen jetzt auf HIGH
_delay_ms(250);
PORTC &= ~(1<<PC0);
_delay_ms(250);
}
}
MfG
Torrentula
Lesezeichen