www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Aktuelle Zeit in Flash speichern


Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was genau außer dem Formulieren einer verständlichen Frage ist jetzt 
Dein Problem?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
WriteTimeToFlash(now());

Den Rest muß du schon selber rausfinden.

Oliver

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: was-willst-du (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es ist unmöglich, die aktuelle Zeit ins Flash zu schreiben.
Sie wird immer veraltet sein.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Yep, dann ist das natürlich einfach. Und da du dann sowieso genug Platz 
hast, schreib gleich noch eine CRC mit dazu.

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso,kann ich wenn alles ok  ist, also die Versorgungsspannung anliegt, 
einfach nach belieben die Zeit(Stunden,Minuten usw.) aus den Register 
holen?

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: joerg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn du oft genug daten im flash/eeprom schreibst ,ist er auch schnell 
kaput.

gruß jörg

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
so oft wird er ja auch nicht beschreiben, nur wenn bestimmte Grenzwerte 
überschtitten werden

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weiß denn irgendjemand wo man zu diesem Problem ein code beispiel hätte?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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?

Autor: Steff (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.