Hallo,

ich hab den Fehler entdeckt... Es funktioniert tatsächlich.... peinlich peinlich...

Ich habe nun mein Schalt-blitz soweit fertig das er FAST funktioniert wie er soll... Allerdings hängt sich das Programm öfters auf...
Findet jemand den Fehler?

Danke und viele Grüße






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

// Status LED on

#define LED1_on |= (1<<PB0);
#define LED2_on |= (1<<PB1);
#define LED3_on |= (1<<PB2);
#define LED4_on |= (1<<PB3);
#define LED5_on |= (1<<PB4);

// Status LED off

#define LED1_off &= ~(1<<PB0);
#define LED2_off &= ~(1<<PB1);
#define LED3_off &= ~(1<<PB2);
#define LED4_off &= ~(1<<PB3);
#define LED5_off &= ~(1<<PB4);


int main(void)
{

uint16_t x, ergebnis; // Variablen für nachfolgendes Programm festlegen
DDRB = 0xFF; // Alle Bits als Ausgang
PORTC = 0x00; // Beim Einfang keine Pullups


// Init Timer

TCCR1B |= (1<<CS10); // 16bit Timer und Prescaler 1

// Init ADC


ADMUX = (1<<REFS0) | (1<<MUX0); // AVCC 5V als Vergleichsspannung und festlegen des Messkanales ADC1
ADCSRA = (1<<ADEN) | (1<<ADPS0) | (1<<ADPS1); // ADC Aktivieren und Vorteiler für die ADC Wandlung festlegen auf 8 festlegen (125 khz)
ADMUX |= (1<<ADLAR); // Ausgabe linksbündig


// Dummy Readout
ADCSRA |= (1<<ADSC); // Start ADC-Wandlung
while (ADCSRA &(1<<ADSC)); // Auf Abschluss der Konvertierung warten
x = ADC; // Das Ergebnis der 1. Wandlung in x speichern


while (1)
{





ADCSRA |= (1<<ADSC); // Start ADC-Wandlung
while (ADCSRA &(1<<ADSC)) // Führe ADC-Wandlung solange aus bis abgeschlossen
ergebnis = ADC; // Ergebnis in ADC Port speichern
ergebnis = ergebnis >> 6; // Ergebnis 6x nach rechts veschieben




if(ergebnis > 200)

{
PORTB LED1_on
}

else
{
PORTB LED1_off
}





if(ergebnis > 400)

{
PORTB LED2_on
}

else
{
PORTB LED2_off
}





if(ergebnis > 600)

{
PORTB LED3_on
}

else
{
PORTB LED3_off
}




if(ergebnis > 800)

{
PORTB LED4_on
}


else
{
PORTB LED4_off

}






if(ergebnis > 999)

{

if (TCNT1 < 3276

{
PORTB LED5_on
}


else

{
PORTB LED5_off

}

}

else

{
PORTB LED5_off


}


}

}