Guten Morgen, kennt sich jemand damit aus wie man die aktuelle Zeit(Sek,min,Stunde,Tag usw.)in der bestimmt Daten in dem Flash gespeichert werden, mit in den Flash hineinschreibt? Auf was müsste man da achten? benutze den LPC2129 und den At45DB011 Flash. Würd mich freuen wen mir jemand weiterhelfen könnte
Was genau außer dem Formulieren einer verständlichen Frage ist jetzt Dein Problem?
1 | WriteTimeToFlash(now()); |
Den Rest muß du schon selber rausfinden. Oliver
Ja sorry. Weiß nicht genau wie man in einen Flash die aktuelle Zeit schreibt. Hab ca 15 Werte (in einer Struktur) die bei bestimmten Aktionen in einen Flash geschreiben werden sollen. Zu den Messwerten soll dann auch die zeit mit hineingeschreiben werden. Nur die Frage ist, wie ich dabei vorgehe. In dem Datenblatt von dem uC steht bisschen was darüber drinn, werd daraus aber nicht schlau. Du etwa? Das reinschreiben wird nicht so sehr das Problem sein, sondern das erfassen der aktuellen Zeit. Kannst du mit damit evtl. weiterhelfen?
Oliver Würdest du es also dann so machen, dass du zuerst die aktuelle zeit in den flash schreibst du direkt danach die Stuktur mit den Daten? Die aktuelle Zeit passend zu den Messwerten sind ja das nicht mehr,oder?
Dem Flash ist es egal ob die eingeschriebenen Daten Messwerte, Zeit, Datum, Text, Grafik oder Programm ist. Die Zuordnung der Daten zu einem betimmten Sinn mußt du bzw. dein Programm machen. Für die aktuelle Uhrzeit muss der Controller irgend eine Uhr lesen können. Das kann eine Hardware- oder Softwareuhr bzw. eine kombinierte (z.B. Funkuhr mit Softwaredekodierung) sein. Damit die Zeit exakt zu den Messwerten passt, (messen und Uhr lesen passieren ja nie gleichzeitig), kann man programmtechnische Lösungen finden.
Ja genau. Das hab ich gemeint. Weisst du ob irgendwo im Netz schon passende Beispiele dazu sind? Mit den ganzen Timer Geschichten hab ich bis jetzt noch nie was gemacht.
Es ist unmöglich, die aktuelle Zeit ins Flash zu schreiben. Sie wird immer veraltet sein.
>benutze den LPC2129 Ach du Sch... Der ist für absolute Anfänger ja genau der richtige Einsteigerchip :-) Wer hat den denn ausgesucht? >Weiß nicht genau wie man in einen Flash die aktuelle Zeit schreibt. Genauso, wie alles andere auch. Ein Byte nach dem anderen. >Würdest du es also dann so machen, dass du zuerst die aktuelle zeit in >den flash schreibst du direkt danach die Stuktur mit den Daten? Das ist eine Lösung, fragt sich nur, ob die zu der Aufgabenstellung passt. >Die aktuelle Zeit passend zu den Messwerten sind ja das nicht mehr,oder? Das ist dein Hauptproblem. Solange du nicht weißt, was du eigentlich genau machen sollst, wirst du keine Lösung finden. Schau in der Aufgabestellung nach, welche Zeit ins Flash soll: Der Zeitpunkt der Messwertaufnahme, oder der des Schreibens? >Das reinschreiben wird nicht so sehr das Problem sein, sondern das >erfassen der aktuellen Zeit. Ich hab mir mal das "Datenblatt" gezogen. Anscheinend kannst du das aktuelle Datum und die Uhrzeit in zwei 32-Bit-Werten aus der RTC auslesen. Das sind dann 8 Byte, die schreibst du einfach eins nach dem anderen ins Flash. Näheres kann ich dir dazu nicht sagen, den Prozessor kenne ich nicht. Oliver
Ja ich weiß das das nicht der richtige einsteigerchip ist. Aber das ändert nichts daran das ich das machen muss. Das soll ne Abschlussarbeit werden, bei der ich mich bei der Auswahl sehr überschätzt hab, da ich mich erst von ganz unten einarbeiten muss. Wie soll denn das Aktuele in dem RTC stehen. Steht das schon automatisch drinnen? Der zeitpunkt des Messens ist dabei entscheidend.
A.K. Mach das bei der Beschreibung des Flashs so, das ich pro Struktur einfach eine page nehm.Also schreib dann schon Byte für Byte ins Flash über die SPI Schnittstelle.
>Flash wird nicht Byte für Byte geschrieben, sondern in ziemlich grossen >Blöcken. Das hatten wir im Parallel-Thread schon. Sein externes Flash hat eine Page SRAM als Puffer, in den Byte für Byte geschrieben werden kann. >Wie soll denn das Aktuele in dem RTC stehen. Steht das schon automatisch >drinnen? Der zeitpunkt des Messens ist dabei entscheidend. RTC heisst "Real Time Clock". Das ist nichts anders als eine eingebaute Uhr im Prozessor, deren Stand du über Register auslesen kannst. Die liefert dir Jahr, Monat, Tag, Stunde, Minute und Sekunde. Solange der Prozessor Strom hat, läuft die. Das bedeutet aber auch, daß du nach jedem Einschalten der Versorgungsspannung erst einmal die aktuelle Uhrzeit und das Datum einstellen musst. Wie das geht, keine Ahnung. Lies dir das Kapitel zur RTC durch. Oliver
Yep, dann ist das natürlich einfach. Und da du dann sowieso genug Platz hast, schreib gleich noch eine CRC mit dazu.
Achso,kann ich wenn alles ok ist, also die Versorgungsspannung anliegt, einfach nach belieben die Zeit(Stunden,Minuten usw.) aus den Register holen?
Was ist denn bitte CRC? Das Reinschreiben ists ja nicht mehr so sehr das Problem, das hat mir der oliver schon sehr ausführlich erklärt, nur wie ich aus irgendeinem Signal die richtige uhrzeit und Datum mach macht mir Sorgen
>Achso,kann ich wenn alles ok ist, also die Versorgungsspannung anliegt, >einfach nach belieben die Zeit(Stunden,Minuten usw.) aus den Register >holen? So ist es. Oliver
Aber Werte die ich aus den Registern hole muss man die nicht erst noch umrechnen? oder stehen im RTC also wirklich schon die komplett aktuellen Werte drinnen? Würdest du die Zeiterfassung mit der Struktor mit übergeben oder eher extra?
wenn du oft genug daten im flash/eeprom schreibst ,ist er auch schnell kaput. gruß jörg
so oft wird er ja auch nicht beschreiben, nur wenn bestimmte Grenzwerte überschtitten werden
weiß denn irgendjemand wo man zu diesem Problem ein code beispiel hätte?
>Aber Werte die ich aus den Registern hole muss man die nicht erst noch >umrechnen? oder stehen im RTC also wirklich schon die komplett aktuellen >Werte drinnen? Du wirst nicht drumrum kommen, das Datenblatt zu lesen. Kapitel 18, RTC. Da steht das Datenformat beschrieben. Wenn du die entsprechende Reference clock divider Register passend zu deinem CPU-Takt gesetzt hast, zählt die Uhr tatsächlich direkt die Zeit. Auch das steht im Datenblatt. Lesen und verstehen musst du es schon selber. Oliver
Bei mir fehlt es halt daran die zusammenhänge zu verstehen, was ich brauch und nicht brauch und es dann umsetze. Also wenn ich Reference clock divider Register auf 1 setze, dann hab ich den gleichen Takt oder was meinst du?
Wäre nett wenn du dir das mal anschaun könntest: hab um aus den CTIME0 und CTIME1 Registern die Sekunden, Minuten usw herauszubekommen Bitmasken angelegt. Könntest du mir nur sagen ob man das so machen kann? #define CTIMO 0xE002 4014 #define SEK_MASK 0x0000 003F #define MIN_MASK 0x0000 3F00 unsigned int second = (CTIME0 & SEK_MASK); unsigned int minute = ((CTIME0 & MIN_MASK) >>8); Oder hättest du irgendeine leichtere Idee?
Steff wrote: > Wäre nett wenn du dir das mal anschaun könntest: > > hab um aus den CTIME0 und CTIME1 Registern die Sekunden, Minuten usw > herauszubekommen Bitmasken angelegt. Könntest du mir nur sagen ob man > das so machen kann? > > #define CTIMO 0xE002 4014 > > #define SEK_MASK 0x0000 003F > #define MIN_MASK 0x0000 3F00 > > unsigned int second = (CTIME0 & SEK_MASK); > unsigned int minute = ((CTIME0 & MIN_MASK) >>8); Probiers doch einfach aus, ob das so funktioniert oder nicht. (und nein. das wird nicht funktionieren. CTIME0 ist ein letztendlich auch nur ein konstanter Zahlenwert. Du willst aber nicht mit dem Zahlenwert arbeiten, sondern diese Zahl wird ja wahrscheinlich die Adresse im Speicher sein unter der der eigentlich interessierende Zahlenwert (nämlich die Uhrzeit) zu finden ist) Lass dir die Werte irgendwo ausgeben und sieh nach ob sie stimmen bzw. ob sie sich im Laufe der Zeit verändern. Programm in einer Endlosschleife halten, Zeit auslesen, Zeit auf irgendeinem Ausgabemedium das du zur Verfügung hast ausgeben, weiter in der Endlosschleife. Ist das so schwer, einfach mal alles auf eine Karte zu setzen und ein Testprogramm zuschreiben, mit dem man das einfach ausprobiert? > da ich > mich erst von ganz unten einarbeiten muss. Eben. Und das erste was du lernen musst: Du wirst noch eine Menge Testprogramme schreiben, mit denen du einzelne Details abklären kannst. Aber: Nichts ist so lehrreich, wie das Wissen, das man sich selbst anhand eines Testprogrammes angeeignet hat. Und sei es nur das Wissen, dass es genau so, wie man es im Testprogramm probiert hat, nicht funktioniert. Dann schnappt man sich das Datenblatt, wendet das Wissen an und erkennt hoffentlich, wo man das Datenblatt falsch verstanden hat und korrigiert das Testprogramm und probierts noch mal.
>Also wenn ich Reference clock divider Register auf 1 setze, dann hab ich >den gleichen Takt oder was meinst du? Nein. Das sind zwei Register, die in Abhängigkeit des CPU-Taktes gesetzt werden müssen. Wie, steht im Datenblatt, Seite 217 ff. Oliver
hab so en test board dazu schon bestellt wo ich das testen kann, aber bis das kommt dauert es noch lang. aber so grob dürfte es schon passen oder ist vom code schon was falsch?
Beim RTC gehe ich dann auch so vor wie beim SPI, also erst die Initialisierung und danach z.B. die sekunden ausmaskieren und dann evtl ins flash schreiben?
An Karl heinz Buchegger Das will ich ja machen. In CTIMEO stehen komplett die sekunden,minuten,stunden und der wochenentag. In CTIME1 der monatstag,monat und das jahr. Wenn ich aus dem CTIME0 nur die Sekunden will(Bits 0 bis 5), muss ich dann nicht einfach das CTIME0 Reg mit der SEK_MASK verunden? Wenn nicht, wie soll das dann funktionieren?
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.