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
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.
>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
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?
>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?