Die Idee, 30 Sekunden nach einer Änderung zu speichern ist schon gut - so speichert man nicht jede kleine Änderung, sondern nur wenn der Wert auch eine Zeit genutzt wurde. Vor dem Speichern sollte noch getestet werden, ob sich der Wert überhaupt geändert hat.

Um die 30 Sekunden festzulegen sehe ich 2 Möglichkeiten: man zählt die Durchläufe der Hauptschleife. Wie viele Durchläufe man da braucht müsste man nachmessen bzw. aus der Simulation bestimmen. In der Simulation gibt es einen Zyklenzähler, so das es nicht schwer ist die Zahl der Zyklen für einen Druchlauf zu messen. So super genau muss die Zeit ja auch nicht sein.

Für eine genauere Zeit könnte man einen Interrupt von einem der Timer nutzen - zumindest wenn die PWM Frequenz nicht extra hoch gewählt wird. In der ISR wird dann ein Variable hoch oder runter gezählt, und bei erreichen der Grenze ein Flag gesetzt. Über das Falg merkt das Hauptprogramm dann, das die Daten gespeichert werden sollen. Speichern direkt in der ISR ist nicht gut (ginge aber auch noch), weil das Schreiben ins EEPROM relativ lange braucht - in der Zeit wird dann nicht auf Tasten reagiert.