INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
digitale Werte trotz Stromunterbrechung nicht verlieren
25.12.2015, 15:41 (Dieser Beitrag wurde zuletzt bearbeitet: 29.12.2015 08:41 von Bitklopfer.)
Beitrag #1
digitale Werte trotz Stromunterbrechung nicht verlieren
hallo
ich arbeite an einem projekt, bei dem ich die durch einen schalter erzeugen digitalen werte trotz stromunterbruch nicht verlieren darf. ich hab versucht, aus dem eeprom schlau zu werden, kriege das aber nicht mit meinem script zusammen. ich verstehe nicht, was genau beim eeprom geschieht. probiere schon seit studen, was zu finden, das mir weiterhilft. leider vergeblich Sad
hier ist mein script, das die letzte zahl vor dem stromunterbruch wieder aufrufen muss, wenn es neu an den stom gehängt wird.
danke für eure hilfe
goldfisch

Code:
// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 6, 5, 4, 3);

// set pin numbers:
const int switchPin =2; // choose the input pin (for a pushbutton)
const int ledPin = 13; // choose the pin for the LED


int val = LOW; // variable for reading the pin status
int tasterGedrueckt = 0;          // abfragen ob Taster gedrückt war
float counter = 0;
int ledStatus = LOW;

int entprellZeit = 200;           // Zeit für Entprellung, anpassen!

unsigned long tasterZeit = 0;     // Zeit beim drücken des Tasters
unsigned long ledMillis = 0;      // Zeit für den Blinkrythmus der LED


void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("meters done");
  
    // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(switchPin, INPUT);
  Serial.begin(9600);
  
}

void loop() {
  
   // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
  
val = digitalRead(switchPin); // read input value

if (val == HIGH) { // check if the input is HIGH (button released)

    tasterZeit = millis();      // aktualisiere tasterZeit
    tasterGedrueckt = 1;        // speichert, dass Taster gedrückt wurde


  }
  
    // Wenn die gewählte entprellZeit vergangen ist und der Taster gedrückt war...
  if ((millis() - tasterZeit > entprellZeit) && tasterGedrueckt == 1)
    {
      counter = counter + 1.111;             //  wird um +1 erhöht
      tasterGedrueckt = 0;      // setzt gedrückten Taster zurück
        lcd.print(counter,3);lcd.print(" m");
        Serial.print(counter,3);Serial.println(" m");
    }
  
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2015, 16:42
Beitrag #2
RE: digitale werte trotz stromunterbruch nicht verlieren
ich möchte eigentlich die zahl, die der counter zählt und auf das display schreibt abspeichern können, damit er beim wieder einschalten dort weiterzählt, wo er war. ich wusste nicht, dass das was mit spannungsverlust zu tun hat. wenn er die zahl aufs display schreiben kann, sollte er sie doch auch in einen speicher schreiben können oder?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2015, 16:59
Beitrag #3
RE: digitale werte trotz stromunterbruch nicht verlieren
Wenn ich es richtig versteh, möchtest du den Wert aus "Counter" in das Eeprom speichern.
Dann erkläre doch bitte mal, was dies bedeutet.
Code:
counter = counter + 1.111;             //  wird um +1 erhöht

Das mit dem Eeprom ist hier eigentlich sehr gut beschrieben.
Wenn du nicht klar kommst, beschreibe doch dein Problem genau.

https://www.arduino.cc/en/Reference/EEPROM

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2015, 18:18
Beitrag #4
RE: digitale werte trotz stromunterbruch nicht verlieren
ja genau auch counter ins eeprom - und dann, wenn der strom wieder kommt, soll er da weiterzählen, wo er beim unterbruch stehen geblieben ist.
counter = 1.111 - das sind meter - beim nächsten klick sind es dann 2.111 meter etc.
mein problem war, wie kriege ich den counter ins eeprompt und dann wieder raus...

danke für den link zu eeprom get - das hab ich so eben nicht gefunden (bin nicht gut im suchen), denke aber, dass das genau mein problem lösen könnte...
werde es mir zu gemüte führen und komme gerne wieder zurück, wenn's nicht klappt.
frohe weihnachten Wink
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2015, 18:27 (Dieser Beitrag wurde zuletzt bearbeitet: 25.12.2015 18:34 von hotsystems.)
Beitrag #5
RE: digitale werte trotz stromunterbruch nicht verlieren
Ist der Wert 1.111 statisch?
Das Problem wird der gesamte Wert sein.
Du kannst in eine Eeprom-Speicherzelle nur 1 Byte speicher. Heißt, du musst den Wert aufteilen.
Aber auch das geht.
http://shelvin.de/eine-integer-zahl-in-das-arduiono-eeprom-schreiben/
Oder
http://forum.arduino.cc/index.php?topic=29974.0

Wenn du aber nur den Wert des Counters selber speichern willst, geht es evtl. auch so.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
25.12.2015, 19:52
Beitrag #6
RE: digitale werte trotz stromunterbruch nicht verlieren
(25.12.2015 18:18)goldfisch schrieb:  ja genau auch counter ins eeprom - und dann, wenn der strom wieder kommt, soll er da weiterzählen, wo er beim unterbruch stehen geblieben ist.
counter = 1.111 - das sind meter - beim nächsten klick sind es dann 2.111 meter etc.
mein problem war, wie kriege ich den counter ins eeprompt und dann wieder raus...

danke für den link zu eeprom get - das hab ich so eben nicht gefunden (bin nicht gut im suchen), denke aber, dass das genau mein problem lösen könnte...
werde es mir zu gemüte führen und komme gerne wieder zurück, wenn's nicht klappt.
frohe weihnachten Wink

Hi,
stellt sich auch die Frage wie oft der Zählerstand sich ändert ?
Weil wie die Kollegen schon schrieben ist nach so 100.000 Schreibzyklen im EEPROM Schluß...die Lösung wäre ein FRAM Baustein.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.12.2015, 11:12
Beitrag #7
RE: digitale werte trotz stromunterbruch nicht verlieren
Es kommt halt drauf an, wie oft sich der Wert ändert.
bei 100.000 Schreibzyklen ist dann schluss - PRO Byte.

Einen Betriebsstundenzähler beispielsweise könnte man ganz einfach realisieren, indem man zuerst die Daten ins erste Byte schreibt, bis es auf 255 ist und dann im Zweiten weitermacht. usw.
So kommt man auf max. 256 Speicherzyklen pro Byte um eine Zahl zwischen 0 und (256 x 1024) =262144.
Alle 6 Minuten einen Speichervorgang, und man kann bis zu 26214 Stunden zählen und ist trotzdem noch recht genau.
Vorgehensweise:
#1 einen Sketch aufspielen, der den EEprom komplett auf 0 setzt, weil im Auslieferungszustand alle Zellen mit "255" beschrieben sind.
#2 Der eigentliche Sketch:
#A
Im Setup (boot) dann einfach alle Speicherzellen der Reihe nach durchlaufen und die Werte addieren.
Schon hat man den letzten Wert vor dem Stromausfall im Arbeitsspeicher.

#B (loop)
Ab jetzt den jeweiligen zu speichernden Wert durch 255 teilen
So kommt man an den Divisionsrest und die aktuelle Zpeicherzelle
Den Divisionsrest umrechnen und in die letzte Speicherzelle legen.
Das macht man dann natürlich nur dann, wenn der zu speichernde Wert sich verändert hat
In meinem Beispiel (Betriebsstundenzähler) also alle 6 Minuten (1/10 Stunde).

Auf diese Weise stellt man sicher, das man jede Speicherzelle nur max 256 mal beschreibt.
(255 Schreibvorgänge plus 1 mal Null setzen)

Will man allerdings viel öfter solche Werte speichern, kommt man um den FRAM nicht herum.

Man könnte noch auf die Idee kommen, die Versorgungsspannung im Programm zu überwachen und bei Unterschreiten einer Mindestspannung das Speichern der Daten im Eprom auszulösen.
Lasst es!
Wenn während des Speicherns die Versorgung zusammenbricht, könnte unter Umständen sogar der Sketch beschädigt sein, und vielleicht sogar der Bootloader.

Binatone
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
26.12.2015, 13:03
Beitrag #8
RE: digitale werte trotz stromunterbruch nicht verlieren
hallo ihr alle
was ist denn ein FRAM Baustein? wie sieht das aus?
ich hab eben auch gelesen, dass man das eeprom kaputtschreiben kann. da wäre es wohl schon besser, man hätte eine alternative, die nicht kaputt geht.

hab ich das richtig verstanden, dass ich erst einen scriptteil brauche, der die zahl vom counter ins eeprom schreibt - also eeprom.write oder eeprom put - was ist denn der unterschied?

und dann muss ich es nach einem stromunterbruch mit eeprom get wieder "aktivieren", bevor das arduino durch einen neuen klick auf den schalter einen weiteren meter dazuzählt?

ich hab mal von der arduionoseite https://www.arduino.cc/en/Reference/EEPROMGet das script EEPROMGet ins arduinoprogramm kopiert und habe auf den überprüfen-knopf gedrückt. da kam folgende fehlermeldung

'class EEPROMClass' has no memeber named 'get'

was ist da falsch?

und dann verstehe ich das objekt nicht, was das genau macht -
struct MyObject {
float field1;
byte field2;
char name[10];
};

und das ist mir auch nicht ganz klar, was das genau macht
MyObject customVar;
EEPROM.get(eeAddress, customVar);

ich würde das jetzt für mich so schreiben, weil ich ja eine zahl aus einem counter habe
MyObject counter;
EEPROM.get(eeAddress, counter);

wäre das so richtig?
danke für eure hilfe
goldfisch
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Arduino lässt sich nicht installieren bergfrei 4 134 20.11.2016 18:34
Letzter Beitrag: bergfrei
  Arduino Mega 2560 läuft nicht Wolfgang50 6 169 13.11.2016 10:50
Letzter Beitrag: Wolfgang50
  Ardublock übertragt nicht an IDE oder UNO R3 tobi83 5 318 16.10.2016 14:07
Letzter Beitrag: Pit
  Upload funktioniert nicht Levi 5 236 22.09.2016 20:19
Letzter Beitrag: hotsystems
  ESP8266 tuts nicht sowerum 7 384 19.09.2016 21:01
Letzter Beitrag: sowerum
  If-Bedingung funktioniert nicht bei Serial1.write Datatom 6 221 16.09.2016 20:36
Letzter Beitrag: Datatom
  SD Karte wird nicht erkannt... Maxi290997 2 201 16.08.2016 14:36
Letzter Beitrag: Maxi290997
  Arduino lässt sich nicht mehr beschreiben Maxi290997 15 959 07.08.2016 11:40
Letzter Beitrag: Maxi290997
  Arduino Uno+Motor Shield+Velleman Mustercode funktionieren nicht Dubidu 8 478 20.07.2016 19:05
Letzter Beitrag: Scheams
  Sketch konnte nicht angelegt werden Sarius 2 237 16.07.2016 15:59
Letzter Beitrag: Sarius

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste