so, hier Version 2.0
Die Schaltung ist diese: http://olimex.com/dev/images/avr-p28-sch.gif
Und dieses hier der Code. Ich hatte aber noch keine Gelegenheit zu prüfen, ob er auf dem Board funktioniert. Für das Ein-/Ausschalten habe ich mich dieses Mal über #define entschieden, weil es weniger Code benötigt und die Übergabe einer Variable spart.
Code:
#include <avr/io.h>
#include <util/delay.h>
#include <stdint.h>
#define LEDon PORTC &= ~(1<<5); //LED ein mit PORTC5 als 0 da LED auf VCC
#define LEDoff PORTC |= (1<<5); //LED aus mit PORTC5 als 1 da LED auf VCC
void initialize();
int main(void)
{
initialize();
while(1)
{
static uint16_t i=0;
if(PIND & (1<<2)) //Wenn der Button gedrückt ist
{
LEDon; //LED ein und Zähler i auf 0
i=0;
}
else //Ist der Button nicht gedrückt
{ //i++ und 1ms Pause
i++;
_delay_ms(1);
}
if(i >= 1999)) //Ist i größer 2sec
{
Ledoff; //LED aus und Zähler i auf 0
i=0;
}
}
return 0;
}
void initialize()
{
DDRB = 0x00; //B als Eingang
DDRC = (1<<5); //C5 als Ausgang für LED
DDRD = 0x00; //D als Eingang
PORTD = (1<<2); //PORTD2 mit PullUp-Widerstand (Doppelt zur Schaltung)
LEDon; //zwei Mal blinken als Bestätigung
_delay_ms(200);
LEDoff;
_delay_ms(500);
LEDon;
_delay_ms(200);
LEDoff;
}
Lesezeichen