Hallo ik heb een vraagje
Ik wil met een nano meten hoeveel keer een knop wordt ingedrukt.
Maar nu komt het de nano moet het aantal gedrukte keren onthouden als de nano wordt uit gezet?
Hoe doe ik dit?

Je kunt de waarde wegschrijven in de eeprom, daar blijft het bewaard ook als de Nano wordt uitgezet.
https://docs.arduino.cc/learn/built-in-libraries/eeprom

Let wel, de eeprom heeft een beperkte schrijf cyclus. Je kunt dus niet in elke main loop de waarde wegschrijven, de eeprom is dan heel snel stuk.
Dus eeprom uitlezen, als de waarde anders is als je wilt schrijven dan pas wegschrijven.

... of enkel schrijven in het kader van de uitschakelprocedure. Zo doen autoradio's het, vermoed ik.

Dat is ook de methode die ik gebruik in mijn klok puls gever, de wijzerposities worden opgeslagen als de netspanning wegvalt.

Het vereist wel dat het programma tijdig door heeft dat de voeding weg (gaat) vallen. De voeding van de µC meten met een ADC die deze ook als referentie gebruikt heeft geen zin..
Bij mij was het gemakkelijk, ik meet via een spanningsdeler de spanning uit de 24V netadapter. Voordat die "leeg" is en de 5V achter een 7805 ook inzakt is er ruim voldoende tijd om de laatste puls af te maken en alles weg te schijven.

Overigens valt het aantal malen schrijven van de EEPROM nogal mee, er komt voor de bekende Atmels een getal van 100k in mij op. Of dat veel of weinig is zal helemaal van de toepassing afhangen.

En de functie "eeprom_update_xxx()" doet al automatisch alleen schrijven als er iets veranderd is.

er komt voor de bekende Atmels een getal van 100k in mij op. Of dat veel of weinig is zal helemaal van de toepassing afhangen.

Als je elke uur 1x naar de eeprom schrijft en dat 24/7 dan is de eeprom pas na 100 000/ 24 = ca 11,4 jaar een keer defect.
Ga je na elke keer dat de knop word ingedrukt dat meteen in de eeprom wegschrijven dan gaat het een stuk sneller. Als je dan 11,4x per uur op de knop gedrukt word dan is de eeprom na ca 1 jaar defect.

the EEPROM has also a limit of 100,000 write cycles per single location,

Officieel is dan niet de hele eeprom defect maar enkel die ene cel waar je 100.000 keer naar toe geschreven hebt. Er zitten 512 bytes in de eeprom en je kan iets bedenken dat je steeds op een ander adres schrijft.

https://docs.arduino.cc/learn/programming/eeprom-guide

De vraag is dus hoe vaak er op die knop gedrukt wordt, en of het absoluut noodzakelijk is dat dit altijd wordt opgeslagen, of het ook acceptabel is als je er af en toe één mist. Je kunt dan periodiek kijken of er een verandering is om op te slaan, en dat altijd één plek verder te doen dan de laatste keer. Je moet dan bij het opstarten even door de EEPROM lopen op zoek naar de hoogste waarde.

Simpele variant:
Zet een diode* in je voeding met een elco aan je Vcc. Gebruik een I/O pin om te controleren (interupt) of de spanning voor de diode hoog (voedingsspanning aanwezig) of laag is (Arduino nano zal afhankelijk van de waarde van de elco na enkele ms uit gaan).

*Plaats deze strategisch zodat je wel 3v3 op je nano krijgt. Neem evt een Schottkydiode als dat uit maakt of een hogere voedingsspanning met dcdc converter voor de 3v3 en gebruik een weerstandsdeler zoals Aart al noemde.

Een goede manier is een methode waarin je telkens op een ander adres schrijft gecombineerd met alleen opslaan als de schakeling wordt uitgezet. Genoeg buffercondensator voor een schrijfactie en een detectie van uitschakelen zijn dan wel nodig.

Ik sla meestal op 15 sec na de laatste toetsdruk als er iets veranderd is...

Leuk rekensommetje/algopuzzeltje!

Als veilige marge schrijven we maximaal 65k keer per locatie. Met wat reserve moet dat 500 (512bytes) keer kunnen, dan kan je tot 32 miljoen.

Op de eerste locatie staat de pointer in het begin naar locatie 2, daar schrijven we met het update commando 4 bytes. Als de teller op een veelvoud van 65k staat dan verhogen we de pointer met 1 en dan gaan we 1 byte verderop werken. De hoogste 3 bytes veranderen maximaal maar 65k/255=255 maal dus eigenlijk gaan we tot 65536+255+1 keer schrijven en dan kan een locatie met pensioen.

Een knop zal niet zomaar 10.000 keer per dag worden ingedrukt. Dan kan de Uno zo'n 10 jaar mee. Als we de pointer weer op 1 zetten dan kan het misschien nog een keer 10 jaar goed gaan.

Als TS eerder denkt aan 100 acties per dag dan heb ik mijn tijd verknoeid :Z Als elke derde tel wegschrijven nauwkeurig genoeg is dan lukt 30 jaar ook.

Of je pakt een FRAM chipje.

Hoef je ook geen moeilijke toeren in software uit te halen