Aktuelle Zeit in Flash speichern

Gast #1198533
Lesenswert?

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
Gast #1198613
Lesenswert?

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?
Gast #1198618
Lesenswert?

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?
Gast #1198629
Lesenswert?

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.
Gast #1198652
Lesenswert?

>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
Gast #1198670
Lesenswert?

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.
Gast #1198688
Lesenswert?

>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
Gast #1198700
Lesenswert?

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
Gast #1198716
Lesenswert?

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?
Gast #1198851
Lesenswert?

>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
Gast #1198859
Lesenswert?

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?
Gast #1199000
Lesenswert?

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?
#1199009
Lesenswert?

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.
Gast #1199014
Lesenswert?

>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
Gast #1199049
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren