Plötzlich komisches verhalten Uno/Mega fehlerhafte Impulse

Hallo,

danke ich benutze ich ein andere Netzteil.

Auf den ersten Blick funktioniert jetzt alles. Leider aber nur auf den ersten.
Wenn der Arduino länger läuft, gehen die Zählerstände auseinander.
Zum Test habe ich schon einen einfachen Counter eingebaut, um mir die Takte ansehen zu können.

Das verhalten habe ich , wenn ich es mit Interrupt versuche und mit den alten Coding.

Hat noch jemand eine Idee? Bin mir langsam nicht mehr sicher, ob der Zähler auch wirklich 1000 imp/kWh ausgibt.

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);    // Pinbelegung für SainSmart LCD Keypad Shield


const int IMPULSE = 1000;     // hier die Impulse pro kWh vom Stromzähler eintragen

const int long RECHENIMP = 3600000 / IMPULSE * 1000;

int long ElapsedTime = 0;
int long StartTime = 0;
int long WATT = 0;
int long COUNT = 0;
int counter;
float KWH;

int impState = 0;
int lastimpState = 0;


void setup() {
  lcd.begin(16, 4);
  lcd.print("Boot...");
  delay(200);
  lcd.clear();
  lcd.setCursor(0, 0);   
  lcd.print("BASTELGARAGE.de");
  delay(100);
  lcd.setCursor(0, 1);   
  lcd.print("EnergieMonitor");
  delay(400);

  pinMode(2, INPUT);             // Pin 2 als Eingang
  digitalWrite(2, HIGH);         // Interner Pullup Widerstand AN

}



void loop() {

  impState = digitalRead(2);      // Pin 2 auslesen

  if (impState != lastimpState) {
    if (impState == LOW) {

      counter++;

      ElapsedTime = millis() - StartTime;
      StartTime = millis();
      WATT = RECHENIMP / ElapsedTime;

      COUNT++;

      KWH = (float)COUNT / IMPULSE;

      lcd.clear();
      lcd.setCursor(0, 0);
      lcd.print("Aktuell:");
      lcd.setCursor(9, 0);
      lcd.print(WATT);

      lcd.setCursor(0, 1);
      lcd.print("kW/h:");
      lcd.setCursor(9, 1);
      lcd.print(KWH);
      lcd.setCursor(1, 2);
      lcd.print(counter);
      delay(20);
    }
  }
  lastimpState = impState;  
}

Grüße,
nox