AVR Studio 6 - unerklärlicher fehler

Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdint.h>
#include <stdlib.h> // ka denke nicht nötig

enum uCState {
	STATE_MAIN = 0,
	STATE_WAIT = 1,
	STATE_BUZZ = 2
};

enum uCState currentState;

uint16_t _ovf_cnt = 0;

ISR(TIM0_OVF_vect)
{
	/* Overflow Zähler erhöhen */
	++_ovf_cnt;
}

void timer_reset(void)
{
	uint8_t oldSREG = SREG;
	/* Interrupts deaktivieren */
	cli();

	/* Timer zurück setzen */
	_ovf_cnt = 0;
	TCNT0 = 0;

	/* SREG wiederherstellen */
	SREG = oldSREG;
}

uint8_t timer_get(void)
{
	uint8_t oldSREG = SREG, scnds = 0;
	/* Interrupts deaktivieren */
	cli();

	/*
	1 Overflow	1024 uS
	_ovf_cnt	XXX S
	*/
	scnds = (_ovf_cnt / 1) * 1024E-6;

	/* SREG wiederherstellen */
	SREG = oldSREG;

	return scnds;
}






int main(void)
{
	
	uint32_t	ui32_PreScaler = 0;
	
	DDRB = ( 1<<PINB3 ) | ( 1<<PINB4 );
	PORTB = 0x00;
	while ( 1 )
	{
		if ( 200000LU <= ++ui32_PreScaler )
		{
			ui32_PreScaler = 0;
			
			PINB |= ( 1<<PINB3 ) | ( 1<<PINB4 );
		}
	}
	
	// PB3 als EINGANG definieren
	// PB4 als AUSGANG definieren
	DDRB = 0b00010000;
	/* Gesamter Port B auf 0 setzen */
	PORTB = 0b00001000;

	/* Timer Konfigurieren */
	TCNT0 = 0;
	// Timer Overflow Interrupt zulassen
	TIMSK0 = 0b00000010;

	// Normaler Modus
	TCCR0A = 0b00000000;
	// Prescaler von 1024 einstellen
	TCCR0B = 0b00000101;

	/* Globale Interrupts erlauben */
	sei();

	/* Zustand ist MAIN */
	currentState = STATE_MAIN;

	/* Endlos Schleife */
	while (1) {
		while (1) {
	
			if (0 == ( PINB & 0b00001000)) PORTB &= ~0b00010000;
			else PORTB |= 0b00010000;
	
		}	
		switch (currentState) {
			case STATE_MAIN: {
				/* Warten bis der Taster an PB3 gedrückt wurde */
				if (0 == ( PINB & 0b00001000)) {
					currentState = STATE_WAIT;
					/* Timer zurücksetzen */
					timer_reset();
				}
			} break;

			case STATE_WAIT: {
				/* Warten bis 2 Min. und 20 Sek. verstrichen sind */
				if (timer_get() >= 20) {
					/* State wechseln */
					currentState = STATE_BUZZ;
					/* Timer zurücksetzen */
					timer_reset();
				}
			} break;

			case STATE_BUZZ: {
				/* Buzzer anstellen */
				PORTB |= 0b00010000;
				/* Warten bis 3 bis 5 Sekunden verstrichen sind */
				if (timer_get() >= 3) {
					/* Buzzer ausstellen */
					PORTB &= 0b11101111;
					/* Ins MAIN zurückspringen */
					currentState = STATE_MAIN;
				}
			} break;
		}
	}
}

Ist das so richtig?
Wenn ja, es passiert leider immer noch nix
 
Jup, sieht vernünftig aus. Jetzt geh mal mit deinem Multimeter an Pin2/Pin3 des Controllers und schau mal ob da was zappelt.

Dreh mal die LED rum. Nicht dass du sie verdreht hast.
Ergänzung ()

Jetzt geht's wohl?
 
Also vielen Dank für deine Hilfe, aber leider hat das ganze auch nicht geklappt :/

Aber der Kumpel war wieder on und hatte mir dann geholfen, scheinbar musste man noch paar dinge im AVR Studio umstellen weil er u.A. keine .hex datei erstellt hatte (das war eines der Fehler) und dann gabs noch ein paar code fehler aber nun geht es endlich :D
Wenn der Random drinnen ist kann ich ja gerne mal den Code dazu posten :)
 
Na dann viel Spass und Erfolg beim Programmieren :)
 
Vielen dank :D Aber vielleicht jez wo ich grad da bin..
da ich mich nach dem kleinen Projekt auf zeitdruck mal in ruhe dafür beschäftigen will,
gibt es vielleicht eine schöne Seite die mir vieles nach und nach beibringen kann?
 
Zurück
Oben