[CODE] main.... Initialisierung ... ... // start: auskommentiert, Einsprungpunkt jetzt start_again: PartFound = PART_NONE; //Einsprungspunkt, wenn Start-Taste im Betrieb erneut gedrückt wird start_again: tmpPartFound = PART_NONE; //ADC-Init / VERSCHOBEN VON GANZ OBEN! ADCSRA = (1<CHANGE"); _delay_ms(4000); } while (!(ON_PIN_REG & (1< 0) { Line1(); lcd_string("C: valid range ="); Line2(); lcd_string("0,2nF - 1000 uF"); _delay_ms(550); //Kondensator entladen; sonst ist evtl. keine Messung möglich R_PORT = 0; R_DDR = (1<<(TP1 * 2)) | (1<<(TP2 * 2)) | (1<<(TP3 * 2)); ..... ( weiter wie bekannt ...) ------------ Hilfsroutinen zu Beginn von main: //Bauteile ( geändert - Durchrotieren Bitmaske ) #define PART_NONE 0 #define PART_RESISTOR 1 #define PART_CAPACITOR 2 #define PART_DIODE 4 #define PART_TRANSISTOR 8 #define PART_THYRISTOR 16 #define PART_TRIAC 32 #define PART_FET 64 (... Main Code ... gekuerzt...) void part(uint8_t PartFound) { lcd_data(' '); if (PartFound & PART_RESISTOR) lcd_string("R"); if (PartFound & PART_CAPACITOR) lcd_string("C"); if (PartFound & PART_DIODE) lcd_string("D"); if (PartFound & PART_TRANSISTOR) lcd_string("TR"); // Line2(); if (PartFound & PART_THYRISTOR) lcd_string("Thyr."); if (PartFound & PART_TRIAC) lcd_eep_string(Triac); if (PartFound & PART_FET) lcd_string("Fet"); return; } // Unterprogramm - zeigt '[!!!] =' oder '[???] =' void disp_line(char c, uint8_t PF) { lcd_clear(); Line1(); lcd_data('['); lcd_data(c); lcd_data(c); lcd_data(c); lcd_string("] ="); part(PF); _delay_ms(750); return; } [/CODE] ----------------------------- Kommentare zu den Schnipseln: Routine 'disp_line' zeigt entweder [???] = (erkanntes Bauteil, keine Kondensatoren) ... oder [!!!] = (Aufforderung, durch Halten des Tasters an D7 die gewünschte Erkennung vorzugeben. Es wird folglich die autom. Erkennung ( 6 x CheckPins ) gestartet, der erkannte Typ mit ??? gezeigt. Anschließend geht es automatisch weiter, es sei denn der User ändert noch mittels Druck auf Taster D7.