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
Eigene Eeprom-Logger-Library - wo ist der Fehler
16.05.2015, 20:41
Beitrag #1
Eigene Eeprom-Logger-Library - wo ist der Fehler
Hallo zusammen

für ein Projekt bastel ich grade an einer kleinen Library um Daten auf ein externes Eeprom zu loggen.

Die Library habe ich angehangen.

Das Problem: Der Counter, der die aktuelle Anzahl der Datensätze speichert und damit den nächsten Speicherplatz für den nächsten Datensatz bestimmt, zählt nur bis 255 und geht dann auf null. Schreibe ich den Counter über die Funktion direkt, hat er den Wert ... wo ist nur der Fehler?

Achtung!
Das ist ein Schnellschuß - Variablengrößen muss ich nochmal genau prüfen. Auch weiß ich, dass das Eeprom nicht lange hält, wenn ich immer auf den gleichen Speicherplatz meinen Counter schreibe und so viel Text in einer Lib ist auch nicht schön ... aber das ist jetzt erst einmal ein grober Versuch und erster Test :-)

Vielen Dank
itsy


.h  LogToEeprom.h (Größe: 798 Bytes / Downloads: 49)


.cpp  LogToEeprom.cpp (Größe: 4,63 KB / Downloads: 70)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.05.2015, 06:32
Beitrag #2
RE: Eigene Eeprom-Logger-Library - wo ist der Fehler
Ich kann Deine Frage nicht beantworten. Aber falls Du ein Problem mit der Lebensdauer hast, schau Dir doch mal FRAM Eeproms an. Dieser hier beispielsweise kann mit I²C angesteuert werden und hält zehn hoch vierzehn Schreib- Lesezugriffe aus. (Es gibt sie auch noch in anderen Variationen)

http://www.reichelt.de/FM-24C04B-G/3/ind...EARCH=fram
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.05.2015, 10:05 (Dieser Beitrag wurde zuletzt bearbeitet: 17.05.2015 10:11 von rkuehle.)
Beitrag #3
RE: Eigene Eeprom-Logger-Library - wo ist der Fehler
Hallo itsy,
was mir auffällt, du hast die in der Lib benutzten Variablen nicht in der .h Datei deklariert. Ansonsten bitte noch ein Beispielcode wie es geht, und wie es nicht geht.Ein paar Kommentare wären auch hilfreich Smile
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.05.2015, 11:13
Beitrag #4
RE: Eigene Eeprom-Logger-Library - wo ist der Fehler
Hallo zusammen,

vielen Dank für Eure Hilfe!

Hier ist ein Beispielsketch mit Kommentaren:

Code:
#include "LogToEeprom.h"
#include <Wire.h>

LogToEeprom Log;

// Testvariablen
//-----------------------------------
String stringtest ="stringtest";
//-----------------------------------

void setup() {
  Wire.begin();
  Serial.begin(9600);
  
  //Testeingaben
  //-----------------------------------
Log.Setting(256000, 100);  // Setzt Speicherplatz (Standard 256000) und Datensatz (Standard 100);
  
  Log.ResetCounter();  // Resettet den Zähler zum schreiben des nächsten Datensatzes - EEPROM wird von vorne neu beschrieben

  
  Log.AddTextToString(stringtest, ',');  // Schreibt Text in den Datenstring

  
  Log.WriteString();  // Schreibt Daten vom Datenstring ins EEPROM, setzt danach den Datenstring zurück und zählt den Zähler 1 hoch
  Log.ReadString(); // Gibt alle Daten aus dem EEPROM von Speicherplatz 0 bis Zähler aus  
  
  Serial.println();
  Log.Status();  // Gibt eine Übersicht des Speicherstatus aus
  //-----------------------------------
}

void loop() {  
}

Nach 255 Datensätzen geht der Zähler auf 0 - wie bei einem Byte.

z.B. mit einer Schleife:
for (int i = 0; i < 500; i++) {
Log.AddTextToString(stringtest, ',');
Log.WriteString();
Serial.println(Log.ReadCounter());
}

Viele Grüße
itsy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.05.2015, 12:35
Beitrag #5
RE: Eigene Eeprom-Logger-Library - wo ist der Fehler
Hallo itsy,
ich steige noch nicht wirklich durch deinen Code durch Huh , glaube aber, dass readcounter() irgenwie einen Fehler macht.
Hast du dir im übrigen das mal angeguckt?: http://playground.arduino.cc/Code/EepromUtil . Sollte deinem Ansinnen schon recht nahe kommen und nur ein paar Anpassungen bedürfen.
Sicher dass
Code:
Log.Setting(256000, 100);
richtig ist? Der Mega hat 4 KB Eeprom, die kleineren nur 512 B Huh
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.05.2015, 13:07
Beitrag #6
RE: Eigene Eeprom-Logger-Library - wo ist der Fehler
Hallo Ricardo,

alles klar, dann versuche ich nochmal ein wenig zu erklären :-)

Erstmal handelt es sich um ein externes Eeprom - daher auch die Wire-Library.

Ich definiere für mein Eeprom die Anzahl an Bytes pro Datensatz - im Beispiel sind es 100 Bytes pro Datensatz.

Mit Log.AddTextToString(stringtest, ','); Füge ich einem String meine Daten hinzu z.B. Temperatur 1, Temperatur 2 usw ...
Das wiederhole ich, bis ich alle Daten für meinen Datensatz habe.
Mit Log.WriteString(); Schreibe ich den Inhalt vom String (den ich zuvor befüllt habe) ins Eeprom, leere meinen Übergabestring (damit ich neu reinschreiben kann) und zähle einen Zähler hoch, der ebenfalls im Eeprom hinterlegt ist. Damit weiß ich, wieviel Datensätze a 100 Bytes geschrieben wurden und wo ich den nächsten Datensatz a 100 Bytes schreiben muss.

Beim Auslesen schaue ich nach, wieviele Datensätze geschrieben wurden und gebe diese a 100 Bytes aus.

Im Prinzip verwende ich die ganz normalen Befehle für das Beschreiben eines externen Eeproms - irgendwas an irgendeine Adresse des Eeproms schreiben. Was ich gebraucht habe und warum ich das geschrieben habe ist, dass ich irgendwie die Datensätze verwalten muss. Dafür habe ich nichts Fertiges gefunden ... an welche Stelle habe ich zuletzt geschrieben - wo muss ich den nächsten Datensatz hinschreiben ...

Viele Grüße
itsy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
17.05.2015, 16:17
Beitrag #7
RE: Eigene Eeprom-Logger-Library - wo ist der Fehler
Hallo itsy,

ich habe jetzt mal in die WriteString() ein Serial.print für Adresse+1 eingefügt und in ReadCounter() ein Serial.print des Counters.
Dann folgenden Code getestet:
Code:
#include "LogToEeprom.h"
#include <Wire.h>
LogToEeprom Log;
String stringtest = "stringtest";
void setup() {
  Wire.begin();
  Serial.begin(9600);
Log.Setting(256000, 100);
Log.ResetCounter();
}
void loop() {
  for (int i = 0; i < 254; i++) {
    Log.AddTextToString(stringtest, ',');
    Log.WriteString();
  }
  while (1);
}
Wie oben schon mal vermutet kamen beim ReadCounter() ganz schön wirre Zahlen raus.
Besser gesagt, nachstellbar die ersten 10 Durchläufe macht ReadCounter was es soll, danach nicht mehr. Eigenartig ist allerdings auch, dass er als Stringlänge wohl immer 256 Byte nimmt und nicht die geforderten 100. Ich weiß nicht ob es jetzt Sinn macht die Liste der Ausgaben zu posten, kannst du sicher auch selbst nachstellen.
Woran es konkret liegt kann ich nicht sagen, da ich mich mit der ganzen Shifterei nicht wirklich auskenne, ich denke eher dezimal Smile
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.05.2015, 18:42
Beitrag #8
RE: Eigene Eeprom-Logger-Library - wo ist der Fehler
Hallo Ricardo,

ja, das ist auch meine Feststellung und ich finde leider den Fehler nicht Undecided

Hast Du vielleicht eine Idee, wie die Aufgabe anders zu lösen ist? Kennst Du vielleicht eine fertige Lib? Ich habe leider nichts gefunden - sonst hätte ich mir die Arbeit ja gespart ...

Aufgabe:

Verschiedene Daten wie Temperatur, GPS-Koordinaten etc. sollen als Datensatz auf ein Eeprom abgelegt und wieder ausgelesen werden. Dabei soll es sicher sein vor einem Neustart d.h. wenn der Ardu mal neu gestartet wird, soll nicht von vorne begonnen werden zu überschreiben.

Mit SD-Karte ist das ja alles überhaupt kein Problem Undecided

Viele Grüße
itsy
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fehler in meinem Programm Franz54 7 163 01.12.2016 23:58
Letzter Beitrag: hotsystems
  Data Logger Daten auf SD Card schreiben Crichton 12 312 22.11.2016 18:32
Letzter Beitrag: Crichton
  Library unter Linux Mint installieren atmel900 1 94 22.11.2016 14:12
Letzter Beitrag: rkuehle
  Dallas Temp Library und LiquidCrystal_i2c relay 20 468 27.10.2016 12:20
Letzter Beitrag: hotsystems
  Fehler im Programmablauf binderj1 14 359 10.10.2016 10:29
Letzter Beitrag: StephanBuerger
  Problem mit SD Card Library BennIY 4 194 06.10.2016 18:38
Letzter Beitrag: Bitklopfer
  Fehler beim Kompilieren binderj1 5 296 03.10.2016 21:27
Letzter Beitrag: hotsystems
Smile Simpler Fehler bei MAP? malsehen 8 230 02.10.2016 19:46
Letzter Beitrag: malsehen
  Fehler beim Speichern von Projekten Manni66 16 691 23.08.2016 10:05
Letzter Beitrag: hotsystems
  Ausgabe druckt immer 2 Werte anstatt nur einen. Finde den Fehler nicht TimeMen 24 744 02.07.2016 14:18
Letzter Beitrag: hotsystems

Gehe zu:


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