Hallo,
Ich bin nicht so der Experte in, also ein Anfänger was programmierbare Technik betrifft, jedoch gelernter Elektroniker (vor..40 Jahren), mach es aber nur noch Hobbymässig…
Ich verarbeite einen Analogwert zu einem Messwert.
Dieser Messwert liegt immer zwischen 2,90 und 3,90 (mm).
Programmiertechnisch würde ich im gesamten Programm den Messwert als int verarbeiten, also nach der AD-Wandlung mit den Zahlen 290 – 390.
Den Wert muss ich immer wieder mal in einem ext. EEprom speichern. Jeder Messwert belegt dann also 2Byte im EEprom, in einem 64kBit EEProm sollten dann ca. 4000 int-Messwerte passen.
Also der erste Messwert in 0, der nächste in 2…
Die Messwerte werden auf einem LCD angezeigt.
Da würde ich dann den Messwert z.B. die intZahl 321 durch 100 teilen und dann am LCD ausgeben.
also
int Messwert =321
LCD.Print(„Messwert :“Messwert/100“ mm“)
Haut das so hin?
Danke, Gruß Stefan
Nicht ganz, das im LCD.Print muß aufgeteilt werden, kein Mischbetrieb.
LCD.Print(„Messwert :");
LCD.Print(Messwert/100);
LCD.Print(„mm");
Bin mir auch gerade nicht ganz sicher, ob er freiwillig das errechnete float so übernimmt oder ob du das vorher expliziet deklarieren mußt.
LCD.Print(float(Messwert/100));
OK, Danke für die schnelle Antwort!
Die LCD-Werte hätte ich sowieso vor der lcd.print berechnet, hab ich leider vergessen mit hinzuschreiben.
So benötige ich im Programm nur 2x float (4Byte) und hab den doppelten Speicherplatz in EEProm..
Wenn der Speicherplatz im EEPROM relevant ist, kannst du auch tricksen. Du sagst, dein Messwert ist immer zwischen 290 und 390. Dann mach doch
Speicher = Messwert - 256;
und zum Auslesen dann
Ausgabe = Speicher + 256;
So belegt Speicher nur 1 byte. Statt das -256/+256 kann man auch shiften aber da weiß ich nicht genau wie das geschrieben wird. Ist dann auch sehr Sparsam mit der Performance.
Ja der Messwert liegt immer in diesem Bereich, die 4000 Speicherplätze reichen leicht aus..
auf die Idee mit-256 hatte ich noch nicht gedacht! Danke!
@Sijjim. Man kann es einfach so machen:
int messwert = 321;
LCD.print("Messwert :");
LCD.print(messwert/100.0); // damits ein float wird
LCD.print("mm");
Ergibt die Anzeige Messwert :3.21mm
Ja der Messwert liegt immer in diesem Bereich, die 4000 Speicherplätze reichen leicht aus..
auf die Idee mit-256 hatte ich noch nicht gedacht! Danke!
Ein Byte lesen ist deutlich einfacher und weniger programmierfehleranfällig als zwei Bytes. ![]()
byte epromWert = 65;
LCD.print((epromWert+256)/100.0);
Den Wert muss ich immer wieder mal in einem ext. EEprom speichern.
Bedenke nur dass Schreibvorgänge auf eeprom Adressen nur in begrenzter Anzahl möglich sind. Ich weiß nicht was du unter "immer mal wieder" verstehst, aber wenn das sehr regelmäßig vorkommt, und genug Speicher zur Verfügung steht, könntest du zum Biespiel den Adressbereich regelmäßig mal wechseln.
Am Tag werden ca. 40 Messwerte abgelegt, später dann Seriell versendet und dann wieder überschrieben.
das sind dann im Jahr ca. 200 Schreibzugriffe auf die einzelnen Speicherbytes.
Der EEProm sollte locker für eine Betriebszeit von ca. 10 Jahren reichen.
Werde aber die jedes geschriebene Byte nach dem schreiben nochmals vergleichen, wenn ein Fehler auftritt eine Warnmeldung am Display anzeigen. Denk aber die kommt nicht solange das Gerät in Verwendung ist.
Externe EEproms garantiere 1 Million Schreibzugriffe/ Löschungen und das Halten der Daten für 100 Jahre.
Die Speicherzellen sind in Blöcke aufgeteilt (meist 16, 32 oder 64 Byte) und ws wird immere ein gesamter Block gelöscht. Darum ist bei einzelnen Scheibzugriffen eine Speicherzelle öfters gelöscht aber es reicht dennoch für sehr viele Jahre.
Werde aber die jedes geschriebene Byte nach dem schreiben nochmals vergleichen, wenn ein Fehler auftritt eine Warnmeldung am Display anzeigen. Denk aber die kommt nicht solange das Gerät in Verwendung ist.
Das hat wenig Sinn. Fehler treten selten sofort auf. Oft ist eine kaputte Zelle eine Zelle die die Daten nicht 100 Jahre hält sondern nur einige Wochen. Selten ist eine Zelle so kaputt Daß sie dauerhaft einen Logischen Wert einnimmt und nicht mehr programmierbar ist.
Grüße Uwe
FRAM ist eine sehr schöne Alternative:
http://www.reichelt.de/DRAM-FRAM-SRAM/FM-24C64B-G/3/index.html?&ACTION=3&LA=2&ARTICLE=146570&GROUPID=2954&artnr=FM+24C64B-G
Die Schreibgeschwindigkeit von SRAM und 10^14 (d.h. 100 Billionen!) Schreibzyklen
Die Daten-Organisation und die Kommunikation sind praktisch identisch mit EEPROMs.
Ja gut, bei 200 Zugriffen pro Jahr wird das nicht zum Problem. Mit immer mal wieder hätte ja auch alle Minuten oder Sekunden gemeint sein können. ![]()