hallo ich würde gerne wissen, wie viele reine messwerte sich maximal direkt in EEPROM des Mikrocontrollers ablegen lassen können. wie kann man so etwas berechnen? das datenblatt zu dem mikrocontroller lautet : http://www.atmel.com/dyn/resources/prod_documents/2545S.pdf (Kap. 23) ich würde mich über eine schnelle, sinnvolle antwort sehr freuen! lg
EEPROM-Speichergröße in Bytes geteilt durch den Speicherbedarf eines einzelnen Messergebnisses ergeben die maximale Anzahl der "Messspeicherplätze". :-)
Horst G. schrieb: > wo finde ich diese beiden werte? im datenblatt kann ich sie gerade nicht > finden Die Größe Deiner einzelnen Messwerte kannst Du nur selber wissen, da hilft das Datenblatt nichts. Der Speicherbereich, den Du zur Verfügung hast, ist vermutlich kein EEPROM, sondern eher Flash. Im Datenblatt steht so was, wenn Du es in einer Minute nicht findest, probiere es mal mit fünf.
Horst G. schrieb: > wo finde ich diese beiden werte? Steht doch schon in der 10. Zeile auf der 1. Seite des Datenblatts, welches Du hier angegeben hast: 256/512/512 Bytes EEPROM Der erste Wert ist für ATMega48, dann ATMega88, dann ATMega168.
AUUUAAAAAA..... erstere steht im datenblatt... RTFM!!! und bei zweitem ist deine aufgabe in der programmierung einen sinnvollen wert zu finden.
l0wside schrieb: > Die Größe Deiner einzelnen Messwerte kannst Du nur selber wissen, da > hilft das Datenblatt nichts. > > Der Speicherbereich, den Du zur Verfügung hast, ist vermutlich kein > EEPROM, sondern eher Flash. Im Datenblatt steht so was, wenn Du es in > einer Minute nicht findest, probiere es mal mit fünf. Erzähl mir mal, wie Du Messwerte im Flash speichern willst ;-) Er meint schon EEPROM, das ist genau dafür gedacht.
wie bekommt man den Speicherbedarf eines einzelnen Messergebnisses?
Horst G. schrieb: > wie bekommt man den Speicherbedarf eines > einzelnen Messergebnisses? Das kommt auf das Programm an, welches einen Messwert speichern will. Wenn das Programm zum Beispiel den Abstand Sonne <-> Erde in Millimetern speichern will, braucht es dafür erheblich mehr Speicher als ein Programm, welches lediglich eine Temperatur als Ganzzahl im Bereich 0 bis 100 Grad speichern möchte. Da musst Du schon mehr erzählen...
Das tut man wissen tun!!! ...oder man kann nicht programmieren. Für diesen Fall ist das dann davon abhängig wie und in welcher Programmiersprache das Ganze realisiert werden soll. ...und wie genau was, womit, wie schnell, gemessen werden soll...
er hat keinen plan was er wie programmieren will. ich denke es ist hoffnungslos...
ich will die sonneneinstrahlung messen, an einem tag, und dazu soll das gerät messwerte nehmen, ich müsste aber wissen wieviele reine Messwerte sich maximal direkt im EEPROM des Mikrocontrollers ablegen lassen. und die EEPROM-Speichergröße haben wir ja nun ;-P, aber mit dem Messwertsergebnis hätte ich noch ein Problem
okay du kannst entweder "sonne scheint" oder "sonne scheint nicht" erfassen. dann hast du eine auflösung von 1 bit und davon passen bei 1024 byte speichergröße 1024*8=8192 messwerte in das eeprom. wenn du messen willst "die sonne scheint mit wert x von maximal 256" dann hast du eine auflösung von 8 bit, davon passen 1024*1=1024 messwerte ins gleiche eeprom.
ich habe eine solarzelle an den datenlogger angeschlossen, der die sonnenenergie in elektrischen strom umwandelt. dieser kann gemessen werden, und um diese messwerte geht es
ein datenlogger wandelt also sonnenenergie in elektrischen strom um. aha. okay hab ich wieder was gelernt. wie wäre es eigentlich mit einem kommerziellen gerät? so zum kaufen und ablesen meine ich...
Wie groß ist der Datentyp der Messwertvariablen in der bevorzugten Programmiersprache? Wieviel davon passt in den vorhandenen Speicher... Der Controller selbst wird mit Pearl nicht zurecht kommen... oder werden die Messwerte woanders gemessen und nur an den Controller übermittelt? Wenn der Controller selber messen soll dann hat der ADC ja eine Auflösung die dem Datenblatt zu entnehmen ist. Wenn man dann von 10Bit/Messwert ausgeht braucht man aber doch erstmal 2 Byte pro wert. Falls das nicht ausreicht gibts auch externe eeproms.
Situation: 1. Auflösung und Wertebereich der Messwerte unbekannt. Schlussfolgerung: 1. Speichergrösse eines Messwertes nicht bestimmbar.
wäre vielleicht sinnvoll den Mathe-Eintrag „Division” zu wiederholen.
Hi Vorsicht! EEProm ist nicht für permanentes Besschreiben gedacht, eher für die Ablage von Parametern. Der Grund ist, das Schreibzugriffe begrenzt sind. Gut, wenn man nur einmal am Tag Daten ablegt, mag es noch gehen, bei ca.100000 Schreibzugriffen kommt man etwa auf eine Lebenszeit von ... hmm 273 Jahren... aber, wenn man ständig Werte ablegt, sind die Jahre schnell vergangen. Gruß oldmax
Natürlich kann man auf einem EEPROM kontinuierlich Werte abspeichern, es kommt auf das "wie" und das "wie oft" an. Ich glaube nicht, dass der OP in der Lage ist eine SD-Card zu beschreiben, wenn er schon am internen EEPROM scheitert, bzw an der Größe seiner noch unbekannten Variablen im RAM/FLASH/EEPROM. Sei's drum und noch mal zum Mitschreiben für den OP: 1) Du hast eine Kiste, die (wie auch immer) die eingestrahlte Energie einer Solarzelle in einen Messwert verwandelt. Du sagst, das sei ein Datenlogger. Frage: Warum nutzt Du dann nicht die Funktion für die ein Datenlogger erfunden wurde und logst diesen Messwert auf den üblicherweise in einem solchen Gerät vorhandenen Speicher? 2) Gehen wir mal davon aus, dass Du (noch) keinen Datenlogger hast, sondern Deine Frage dahin zielt einen solchen zu bauen: Frage: Hast Du schon erfolgreich die Energie, die die Solarzelle abgibt ein einen brauchbaren Messwert umgewandelt, also eine Spannung oder einen Strom, der sich mit der Helligkeit ändert? Hast Du diesen Messwert schon in irgend einer Art digitalisiert? 3) Wie programmierst Du den Controller? Assembler oder C oder irgend etwas anderes? Bei C gibt es leider eine Falle und die heißt int. Eine Variable des Typs int ist per Definition immer so groß, wie die Prozessor-Architektur ABER mindestens 16 Bit. D.h. obwohl Du auf einem 8Bit Prozessor programmierst, ist eine Variable int x (oder unsigned int x) zwei Byte groß. Das macht aber nichts, denn wenn wir davon ausgehen, dass Du die Messwerte selber digitalisieren willst, dann können wir auch davon ausgehen, dass Du das mit Hilfe der im Chip vorhandenen Analog-Digital-Wandler (ADC) machen willst und diese geben 10 Bit breite Werte aus. Es ist nun Deine Entscheidung, ob Du diese 10Bit Werte in ein int schreibst und damit immer hlab so viele Werte in das EEPROM schreiben kannst, wie dieses groß ist, oder eben die Genauigkeit reduzierst und z.B. die unteren beiden Bits kappst. Dann passen genau so viele Messwerte in das EEPROM wie es groß ist. 4) EEPROM dauernd beschreiben: Ist für eine solche Anwendung eigentlich irrelevant. Nehmen wir an, wir haben 1024 Bytes EEPROM und ein int (besser uint16_t) Messwert: 512 Werte passen ins EEPROM. Wir messen jede Minute einmal und das EEPROM garantiert 100k Schreibzyklen: 100000/60/24, dann würde das EEPROM 69 Tage durchhalten. Ist aber nicht richtig, denn wir schreiben nur bei jedem 512ten Mal ein und die selbe Zelle, also 69*512=35328 Tage. Der Logger sollte also die nächsten 90 Jahre durchhalten. Dabei muss man aber beachten, dass EEPROMs unterschiedliche aufgebaut sein können. Bei externen EEPROMs gibt es ein Paging und eine Page (oft 32 Bytes) wird immer auf einmal geschrieben, egal ob ich ein oder alle Bytes der Page ändere. Hier muss man dan ausrechnen, ob man es sich einfach macht und mit dem Faktor /32 leben kann, oder ob man immer erst mal 32 Messwerte im RAM sammelt und dann auf einmal in eine Page schreibt. 5) Was muss man bei einem Datenlogger noch so beachten: Na ins EEPROM sollte man nicht nur die reinen Daten schreiben, sondern auch eine Information, von wann sie stammen. Der Datensatz ist also doch größer als zunächst angenommen. Man kann hier jetzt beliebig großen Aufwand treiben und z.B. die Sekunden seid Zeitpunkt X zählen oder man sorgt dafür, dass das EEPROM nicht überschrieben wird, bevor nicht alle Werte ausgelesen wurden oder was auch immer. Man kann auch ein komprimiertes Zeitstempelchen austüfteln, also Tag/Monat/Jahr/HH/MM in 1,5 Byte quetschen. Letzteres würde die Anzahl der Messwert im EEPROM noch einmal reduzieren es aber auch ermöglichen mit nur einem weiteren Byte sogar noch einen 12Bit ADC Wert abzuspeichern. Aber ich warte jetzt mal auf dem OP, ob der hier noch folgt oder folgen kann, vielleicht müssen wir ja noch weiter vorne anfangen. Gruß, Ulrich
Hallo, da bin ich wieder^^ ich habe mir nun ein wenig Gedanken über meine weitere Vergehensweise gemacht. Ich habe folgendes gegeben: 8-Bit-Mikrocontroller mit einer 10-Bit-Auflösug. Dieser hat einen EEPROM von 512 Bytes (laut Datenblatt). Es werden Werte von 0 bis 1023 ausgegeben. --> 8 Bit sind 1 Byte. Also muss ich doch die 512 Bytes in Bit umrechen und das Ergebnis dann durch 10 teilen. Stimmt meine Schlussfolgerung oder habe ich da noch einen Fehler drin? Gruß Euer Horst G.
Um Mit Radio Eriwan zu sprechen: Im Prinzip ja. ABER: Das hat, zumindet für Leute mit geringer bis keiner Programmiererfahrung, so seine Tücken. Du muß die Bits passend "zusammenschieben" bis ein Byte "voll" ist. Blöderweise lassen sich die Bits im EEPROM nämlich nur von "1" (gelöschter Zustand) auf "0" programmieren. Ohne Not würde ich mir den Aufwand spren und da halt ein serielles EEPROM ranhängen und gut ist, die Dinger kosten doch nicht die Welt, und haben auch sonst noch Vorteile: Mehr Speicherplatz, und in der Regel die 10 Fache Anzahl an Schreibzyklen.
Danke für die Kaufempfehlung, aber der gegebene Speicherplatz sollte reichen, um eine Langzeitmessung von 12 Stunden durchzuführen. Wie kann ich das ohne einen seriellen EEPROM errechnen?
Speichergröße des EEPROMS in Bytes durch Platzbedarf eines Messwertes in Bytes durch Anzahl der Messungen sollte größer 1 sein.
Horst G. schrieb: > Danke für die Kaufempfehlung, aber der gegebene Speicherplatz sollte > reichen, um eine Langzeitmessung von 12 Stunden durchzuführen. > > > Wie kann ich das ohne einen seriellen EEPROM errechnen? Du reduzierst die 10bit auf 8bit bzw. speicherst nur die Differenz Da die Sonne nicht rast, reicht ein Messwert/Minute Das macht 1Byte*60min*12h=720Byte wo ist das Problem?
> um eine Langzeitmessung von 12 Stunden durchzuführen. > Wie kann ich das ohne einen seriellen EEPROM errechnen? indem du die Anzahl der Messungen innerhalb der 12 Stunden noch mal mit hinzu multiplizierst. Wenn du jede Stunde einen Messwert aufnimmst, dann hast du in 12 Stunden 1* 12 = 12 Messwerte. Wenn du jede Minute einen Messwert aufnimmst, dann hast du 60 * 12 = 720 Messwerte Wenn jeder Messwert 2 Bytes benötigt, dann brauchst du 12 * 2 = 24 Bytes bis 720 * 2 = 1440 bytes Wenn du auf 8 bit reduzierst, dann brauchst du halt nur die Hälfte davon Hey, wir sind hier bei Grundrechenarten, das ist dir schon klar? Was blockiert dich dermaßen, das du schon an solchen Fragestellungen scheiterst????
Bei allem Respekt vor Dir als Mensch, Horst, habe ich den starken Eindruck, dass sowohl die Fragestellungen als auch die Antworten weit über Deinen Horizont gehen. Das I-Tüpfelchen war die Tatsache, dass Du die Transferleistung von: "Ich habe 512 Körbe in die jeweils 8 Äpfel passen und bekomme jeden Tag 10 Äpfel. Wieviele Tage lang kann ich jeweils eine komplette Lieferung in die Körbe tun?" auf die Frage wieviele 10-Bit Messwerte einen 512Byte Speicher passen nicht alleine fertig bringst. Entschuldige, aber das ist Stoff der 4. oder 5. Klasse; elementare Arithmetik. Falls Du nicht gerade ein sehr begabter 5t-Klässler bist, der bei der Division gerade mal eine Aussetzer hatte, solltest Du dieses Thema nicht weiter verfolgen. Falls Du ein Erwachsener bist, der nur einfach nie Interesse für Mathematik hatte, dann richte Dich darauf ein ein paar Jahre lang die Grundkenntnisse nachzuholen.
ich erwarte noch die Frage: WIe bekomme ich nun die 720 1-byte Messwerte in die 512 Byte EEPROM rein? Kan man das irgendwie zippen?
Wegstaben Verbuchsler schrieb: > Wenn jeder Messwert 2 Bytes benötigt, dann brauchst du Mann braucht aber nur 10bit. Deswegen nimmt einen Puffer im Ram von 4 * 2Byte. Dann macht man aus 4*10bit = 40bit = 5byte. Das ganze dürfte nur aus schiebeoperationen bestehen.
Ulrich hat sich ne Menge Mühe gemacht, und viele Infos gegeben. Horst könnte mal darauf eingehen, so kommt man weiter.
Max D. schrieb: > Lass mich raten: > Intel Leibniz Challenge ... Jep. Und wir haben einen fertig programmierten μC bekommen. Ist also nichts mit Flash oder ext. EEPROM. Bitte keine weiteren Hilfestellungen mehr! Das wäre den anderen Teilnehmern gegenüber unfair!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.