www.mikrocontroller.net

Forum: Compiler & IDEs Datenlogger, 2000 sps


Autor: anton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich bastle an einem Datenlogger auf Basis eines Mega16 und bin auf ein
Problem gestossen. Und zwar es müssen ca 2000 Werte pro Sekunde vom ADC
über i2c in den EEPROM geschrieben werden. Der ADC scheint es
hinzukriegen (125 KHz), ein EEPROM-Schreibzufriff dauert aber ca 2,5
ms, was die minimale Log-Periode wesentlich einschränkt. Ich hab
maximal 300 Werte pro Sekunde erreicht.

Hat jemand vielleicht einen Vorschlag, wie man mehr Werte pro Sekunde
trotz der langen EEPROM-Schreibzugriffen realisieren kann?


Danke
anton

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
SRAM oder richtigen Flash verwenden.

Flash Speicher (29Fxx) benötigen meist wenige 10us zum Schreiben eines
Bytes. Konstante 10000 Werte pro Sekunden sind damit kein Problem.
Oder du verwendest mehrer (z.b. 8) I2C EEPROMs und verwendest
Interleaving, beschreibst die ICs also alle der Reihe nach. So
erreichst du schonmal 2400 Werte pro Sekunde.

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Den AT24C512 kannst Du seitenweise beschreiben:

1 Seite a 128 Byte mit typisch 5ms Schreibzyklus = 25kByte/s



Peter

Autor: anton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mir einen 29Fxx-Baustein angeckukt, tolle Bitraten, nur der wird
mir über 20 Leitungen wegfressen. SRAM genau so, oder?

Zur Zeit verwende ich AT24512, seitenweise zu beschreiben bringt auch
nichts, da pro seite sind es nur 64 AD-Werte, außerdem ein
5ms-Schreibzyklus ermöglicht nur 200 samples pro sekunde.

Sind eigentlich die SPI-EEproms viel schneller?



anton

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Zur Zeit verwende ich AT24512, seitenweise zu beschreiben bringt auch
nichts, da pro seite sind es nur 64 AD-Werte, außerdem ein
5ms-Schreibzyklus ermöglicht nur 200 samples pro sekunde."


Hä ???

64 / 5ms = 12800 Sample/s

Du must bloß einen 128Byte FIFO im SRAM einrichten.


Peter

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
M25P10-A

Autor: anton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du hast recht mit deiner Berechnung :o)

Die Frage ist nur, dauert das Pagebeschreiben wirklich 5 ms?
Bei welchem Takt?

Läuft das Loggen weiter, währen geschrieben wird?



anton

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist Sache deines Programmes, ob du auf das Ready-Flag wartest oder
einfach nach dem Schreiben weiterloggst und erst vor dem nächsten
Versuch schaust, ob der Flash wieder bereit ist.

Autor: mathias giacomuzzi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich möchte mir auch einen datenlogger bastelln und dachte an eine
sd-karte als speichermedium.

wie schnell kann man dann dort hin schreiben, hat da jemand schon
erfahrung damit??

Oder ist eine sd-speicherkarte für einen logger nicht geeignet??

besten dank

mfg mathias

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wärs mit einem Atmel Data Flash?

Auf mein USB-Stick kann ich mit 9 Megabyte/s schreiben (Optimierung auf
Geschwindigkeit ist ausgeschaltet). Was setzen die denn da ein?

Autor: anton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube für meinen Fall (2000 Werte/Sekunde) reicht einen I2C-EEPROM
(AT24C512) aus, um den AD-Wert ohne FIFO zwischendurch abzuspeichern.

ich verstehe nur nicht, warum ein I2C-Schreibzugriff bei mir so lange
dauert (2,5ms). Ich schreibe ja ein einziges Datenbyte, also mit allen
Adressen sind das 4 Byte pro Schreibzugriff. Müssen das nicht einige
mikrosekunden sein (beim Clock 200KHz )?

Hat schon jemand die I2C-Schreibzugriffe mit einem Oszi nachgemessen?



anton

Autor: Benedikt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man sollte schon das Datenblatt lesen, bevor man das IC verwendet...

Autor: anton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hab ich auch,

der I2C-Bus funktioniert ja,...
 nur halt nicht so wie es sein muss...

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"ich verstehe nur nicht, warum ein I2C-Schreibzugriff bei mir so lange
dauert (2,5ms). Ich schreibe ja ein einziges Datenbyte"


Der Schreibzyklus dauert immer gleichlang, egal, ob Du 1 Byte oder 128
Byte schreibst.

128 Byte schreiben:

- start
- 1 Byte Deviceadressse
- 2 Byte EEPROM-Adresse
- 128 Byte Daten
- stop
- warten bis fertig (start + deviceadresse + ACK testen)


Peter

Autor: anton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
aber doch nicht wenn ich byte-weise beschreibe?

Autor: Peter Dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mehr als einem Byte muß man natürlich den Pagemodus benutzen, damit
die Schreibzeit gleichbleibt.

D.h. exakt gleich ist nur der reine Schreibzyklus (max 5ms), die
I2C-Übertragungszeit verlängert sich natürlich.

Die dauert bei 400kHz bei einem Byte: 9 * 4 / 400kHz = 9µs
und bei 128 Byte: 131 * 9 / 400kHz = 295µs

Die 128 Byte sind also in insgesamt 5,3ms geschrieben.

Und Du brauchst eine FIFO, der für diese 5,3ms die anfallenden Daten
zwischenspeichert.
Es geht natürlich auch ein zweiter AT24C512 und dann immer im Wechsel
je 128 Bytes reinschreiben.


Peter

Autor: anton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die Tipps, Peter,

wie realisiere ich eigentlich einen FIFO in SRAM?

Autor: anton (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hat jemand eine Idee?

Autor: jmoney (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein zeiger auf die als nächstes zu lesende stelle, ein zeiger auf die
als nächstes zu schreibende stelle. beim schreiben und lesen jeweils
hochzählen (oder runter wenn's beliebt) und natürlich überprüfen, dass
man nicht weiter liest, als der puffer beschrieben ist, evtl.
überlaufkontrolle,...

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Laut Datenblatt soll der ATMEGA 16 ADC ca 15Ksps können.
Was ist den jetzt richtig,da oben mit ca 200kSps gehandlet wird

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.