--- main-old.c	2010-03-28 20:47:03.000000000 +0200
+++ main.c	2010-03-28 23:06:25.000000000 +0200
@@ -102,6 +102,19 @@
 	unsigned int L_CAPACITY_FACTOR EEMEM = 283;
 #endif
 
+/* Internal Voltage Reference (mV), nur definieren, wenn genauer Wert bekannt. */
+//#define VINT	2674	/* gemessen am ATmega8 */
+#define VINT	1108    /* gemessen am ATmega48 */
+
+/* Spannungsteiler für Batteriespannungsmessung */
+#define R11		27000
+#define R12		 3300
+
+/* Schwellwert für schwache Batterie (mV) */
+#define UBAT_WEAK	7600
+/* Schwellwert für leere Batterie (mV) */
+#define UBAT_EMPTY	7150
+
 
 /*########################################################################################
 Ende der Konfigurations-Einstellungen
@@ -231,6 +244,22 @@
  Für den normalen Einsatz des Testers sollte der Watchdog aber unbedingt aktiviert werden!
 */
 
+#ifndef VINT
+	#ifdef __AVR_ATmega8__
+		#define VINT 2560
+	#else
+		#define VINT 1100
+	#endif
+#endif
+#ifndef R11
+	#define R11	10000
+	#define R12  3300
+#endif
+
+#define UMESS_WEAK	((uint32_t)UBAT_WEAK*R12/(R11+R12))
+#define UMESS_EMPTY	((uint32_t)UBAT_EMPTY*R12/(R11+R12))
+#define ADC_VAL(i)	((uint16_t)((uint32_t)i*1024/VINT))
+
 
 struct Diode {
 	uint8_t Anode;
@@ -384,10 +413,10 @@
 	lcd_clear();
 	//Versorgungsspannung messen
 	ReadADC(5 | (1<<REFS1));	//Dummy-Readout
-	hfe[0] = ReadADC(5 | (1<<REFS1)); 	//mit interner Referenz
-	if (hfe[0] < 650) {			//Vcc < 7,6V; Warnung anzeigen
+	unsigned int ubat = ReadADC(5 | (1<<REFS1)); 	//mit interner Referenz
+	if (ubat < ADC_VAL(UMESS_WEAK)) {		//Vcc < 7,6V; Warnung anzeigen
 		lcd_eep_string(Bat);		//Anzeige: "Batterie"
-		if(hfe[0] < 600) {					//Vcc <7,15V; zuverlässiger Betrieb nicht mehr möglich
+		if(ubat < ADC_VAL(UMESS_EMPTY)) {	//Vcc <7,15V; zuverlässiger Betrieb nicht mehr möglich
 			lcd_eep_string(BatEmpty);		//Batterie leer!
 			_delay_ms(1000);
 			PORTD = 0;	//abschalten
