HI, ich nochmal. Mittlerewile bin ich weitergekommen ud hab jetzt mal was gemacht:
Poti 1 erfasst einen Messwert, der sobald ein vorher festgelegter wert überschritten wird, eine LED auslöst.
Poti 2 stellt diesen Schwellenwert zur verfügung.
Jetzt hab ich aber das Problem, das die LED konstant bei einem Messwert am POti 1 von 1,25 V ausgelöst wird, egal in welcher Stellung sich poti 2 befindet.
Den Code poste ich mal hier.
danke für die hilfe,Code:// Prototypenfunktionen: void io_init(void); void adc_init(void); int adc_data(int channel); // ADC im SC Modus betreiben, um die kanäle wechseln zu können. // Prototypen LCD: int LCD_init(void); // mit Rückgabe 1 / 0 für Schleifenanwendung void LCD_data(char data); void LCD_command(char cmd); void LCD_enable(void); int main(void) { io_init(); // I/O init adc_init(); // ADC init for(;;) { if( adc_data(1) > adc_data(2) ) // falls ADC Wert größer als Einstell- / Schwellwert ... { if( PORTB != (1<<1) ) // Und LED aus ... PORTB = (1<<1); // dann LED einschalten else{} // Und LED an ... dann nichts tun ! } else // falls ADC Wert kleiner als Einstell- / Schwellwert ... { if( PORTB == (1<<1) ) // und LED an... PORTB ^= (1<<1); // dann LED ausschalten else{} // wenn LED bereits aus, dann nichts tun ! } } return 0; } void io_init(void) { DDRB = 0xFF; // Ausgang DDRC = 0x00; // Eingang DDRD = 0xFF; // LCD - Ausgang } void adc_init(void) { // init im SC Modus ADCSRA = (1<<ADEN) | (1<<ADIF) | (1<<ADIE) | (1<<ADPS2) | (1<<ADPS0); ADMUX = (1<<ADLAR); } int adc_data(int channel) // es wird kein kanal ausgewählt ! { int i; int result = 0; switch(channel) { case 1: // Messwert ADMUX = 0x00; // Dummy readout: ADCSRA |= (1<<ADSC); while( ADCSRA & (1<<ADSC) ); // Dummy readout ende for( i = 0; i < 2; i++)/* eigentliche Messung ( arithmet. Mittelwert aus i Messungen ) */ { ADCSRA |= (1<<ADSC);// ADC starten: while( ADCSRA & (1<<ADSC) ) result += ADCH; } result /= i; case 2: // Einstell- / Schwellwert ADMUX |= (1<<MUX0); //ADC Kanal wechseln // Dummy readout: ADCSRA |= (1<<ADSC); while( ADCSRA & (1<<ADSC) ); // Dummy readout ende for( i = 0; i < 2; i++)/* eigentliche Messung ( arithmet. Mittelwert aus i Messungen ) */ { ADCSRA |= (1<<ADSC);// ADC starten: while( ADCSRA & (1<<ADSC) ) result += ADCH; } result /= i; ADMUX = 0x00; // ADMUX zurücksetzen default: break; } return result; } int LCD_init(void) { return 1; } void LCD_enab
mfg
LC







Zitieren

Lesezeichen