Hallo
Ich hab die letzten Tage ein neues Projekt zugelegt.
Es ist eigentlich ganz einfach. Es ist ein Wecker mit Textdisplay der per Drucksensor erkennt ob man im Bett liegt oder nicht. Der Witz dabei ist dass der Wecker mit dem "großen aus Knopf" nur in den Schlummermodus geschaltet wird. und dieser nach 5 Min. wider anfängt zu nerven. Der Wecker wird erst dann schweigen wenn der Drucksensor entlastet ist. (wenn man min. 30 Sek. aus dem Bett steigt)
Das funktioniert soweit ganz gut. (der Wecker ist eigentlich fertig).
Ich hab mir jetzt eingebildet die Helligkeit des Displays über die Raumhelligkeit zu regeln. (wenn es Tag ist wird das Display hell, wenn es Nacht ist wird das Display dunkel. (ist angenehmer zum einschlafen und schont die Augen).
Nun das Problem:
Ich muss 2 ADCs auslesen und krig das einfach nicht gebacken. Wenn ich den ADC umschalte auf ADC1 (Lichtsensor) kann man den Wecker ausschalten wenn der Lichtsensor dunkel wird. (was eigentlich nicht der Fall sein sollte).
Hier mal der Teil des Codes wie ich das gemacht habe.
Weis jemand wiso es nicht klapt?
Gruß
Ich hab die letzten Tage ein neues Projekt zugelegt.
Es ist eigentlich ganz einfach. Es ist ein Wecker mit Textdisplay der per Drucksensor erkennt ob man im Bett liegt oder nicht. Der Witz dabei ist dass der Wecker mit dem "großen aus Knopf" nur in den Schlummermodus geschaltet wird. und dieser nach 5 Min. wider anfängt zu nerven. Der Wecker wird erst dann schweigen wenn der Drucksensor entlastet ist. (wenn man min. 30 Sek. aus dem Bett steigt)
Das funktioniert soweit ganz gut. (der Wecker ist eigentlich fertig).
Ich hab mir jetzt eingebildet die Helligkeit des Displays über die Raumhelligkeit zu regeln. (wenn es Tag ist wird das Display hell, wenn es Nacht ist wird das Display dunkel. (ist angenehmer zum einschlafen und schont die Augen).
Nun das Problem:
Ich muss 2 ADCs auslesen und krig das einfach nicht gebacken. Wenn ich den ADC umschalte auf ADC1 (Lichtsensor) kann man den Wecker ausschalten wenn der Lichtsensor dunkel wird. (was eigentlich nicht der Fall sein sollte).
Hier mal der Teil des Codes wie ich das gemacht habe.
Weis jemand wiso es nicht klapt?
Gruß
Code:
#define F_CPU 9830400
#include <avr/io.h>
#include <util/delay.h>
#include <lcd-routines.h>
#include <avr/interrupt.h>
uint8_t ADC0=0;
uint8_t ADC1=0;
//PWM
uint8_t aufloesung=50;
uint8_t pwm_cnt=0;
uint8_t CH_1=1;
int main(void)
{
DDRD=0b00000000;
DDRB=0b11111111;
PORTB |= (1<<PB1);
//ADC Init
//---------------------------
ADMUX = (1<<REFS0) | (1<<ADLAR);
ADCSRA = (1<<ADPS1) | (1<<ADPS0);
ADCSRA = (1<<ADEN);
ADMUX &= ~(1<<MUX0); // Auf ADC0 umschalten
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while (ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten
}
ADC0 = ADCH; /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten Wandlung nicht übernommen. */
ADMUX |= (1<<MUX0); // Auf ADC1 umschalten
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while (ADCSRA & (1<<ADSC) ) { // auf Abschluss der Konvertierung warten
}
ADC1 = ADCH; /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der nächsten Wandlung nicht übernommen. */
while(1)
{
//ADCs abfragen
ADMUX &= ~(1<<MUX0); // Auf ADC0 umschalten
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while (ADCSRA & (1<<ADSC))
{ // auf Abschluss der Konvertierung warten
}
ADC0=ADCL;
ADC0=ADCH;
ADMUX |= (1<<MUX0); // Auf ADC1 umschalten
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while (ADCSRA & (1<<ADSC) )
{ // auf Abschluss der Konvertierung warten
}
ADC1=ADCL;
ADC1=ADCH;
//ADC Wert für Drucksensor auswerten
if (ADC0<=100)
{
beep=0;
PORTB &= ~(1<<PB0);
sleep_status=0;
sleep_cnt=0;
}
//ADC Wert für Lichtsensor auswerten
if (ADC1>120)
{
CH_1=50;
}
else if ((ADC1<120) & (ADC1>80))
{
CH_1=20;
}
else if (ADC1<80)
{
CH_1=1;
}
} //Ende While schlife
} //Ende Main Schleife