Hallo
Ich muss zugeben dass ich zu Anfang auch t++; da stehen hatte. Hab aber gedacht versuchst es mal auf die alte Variante als mein Programm nicht funktioniert hat...
Wollte eben alles ausschließen... 
Nun hab ich mal noch den kompletten Code:
Code:
#include <avr/io.h>
#include <inttypes.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <lcd.h>
#include <util/delay.h>
#define F_CPU = 12000000L
void long_delay(uint16_t ms); //Prototyp der Warteschleifen long_delay
void ADC_init(void); //Prototyp von ADC_init
uint16_t ADC_einlesen(void); //Prototyp der Einlesefunktion
uint16_t result = 0; //Variable result deklarieren
char buffer[8]; //buffer_Array für Umrechnung deklarieren
volatile int t=0; //Variable t für Timer anlegen
int a=0;
int main(void)
{
ADC_init(); //AD Wandler initialisieren
ADC_einlesen();
DDRD &= ~(1<<DDD2); //Pin D2 (INT0) als Eingang deklarieren
PORTD |= (1<<PD2); //Pull Up für D2 einschalten
DDRB = (1<<DDB0)|(1<<DDB1); //Port B0 als Ausgang definieren (LED)
PORTB |= (1<<PB0); //LED aussschalten
PORTB |= (1<<PB1); //LED aussschalten
TCCR0 |= (1<<CS00)|(1<<CS02); //Timer initialisieren und einschalten
TIMSK |= (1<<TOIE0); //TimerOverflow Interrupt freigeben
sei(); //Interrupts freigeben
while(t<2760)
{
ADC_einlesen();
PORTB &= ~(1<<PB0); //Einschalten der LED an B0
if(result<350)
{
PORTB &= ~(1<<PB1); //Einschalten der LED an B1
}
else
{
PORTB |= (1<<PB1); //wenn result größer, LED ausschalten
}
}
t=0;
while(1);
}
void ADC_init(void)
{
ADCSRA = (1<<ADEN) | (1<<ADPS0) | (1<<ADPS2); //ADC amtivieren und Teilungsfaktor auf 32 stellen
ADMUX = (!(1<<MUX0)) | (!(1<<MUX1)) | (!(1<<MUX2)); //Kanal des Multiplexers wählen (ADC 0)
ADMUX |= (1<<REFS1) | (1<<REFS0); //interne Referenzspannung verwenden (2,56V)
ADCSRA |= (1<<ADSC); //Dummyreadout starten
while(ADCSRA & (1<<ADSC));
}
uint16_t ADC_einlesen(void)
{
uint8_t i; //Variable i deklarieren
for (i=0; i<3; i++) //for-Schleife für dreimalige Wandlung
{
ADCSRA |= (1<<ADSC); //Wandlung starten
while(ADCSRA & (1<<ADSC)); //auf Ergebnis warten
result += ADC; //Ergebnis in Variable result schreiben
}
ADCSRA &= ~(1<<ADEN); //ADC deaktivieren
result /=3; //result durch 3 teilen
return result;
}
ISR(TIMER0_OVF_vect)
{
t=t+1;
}
Was ich eigentlich wie gesagt will, ist dass die while Schleife 1min läuft, und in dieser Zeit immer wieder der Analogwert eingelesen wird und in Abhängigkeit von diesem (größer oder kleiner eines Referenzwertes) ein Port geschalten wird. Das will aber noch nicht so richtig. Die andere LED benutze ich auch um mir anzuzeigen bis "wohin" das Programm bereits funktioniert. Also nicht irritieren lassen... 
Grüße!!
Bean
Lesezeichen