Forum: Compiler & IDEs Datenlogger, 2000 sps


von anton (Gast)


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

von Benedikt (Gast)


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.

von Peter Dannegger (Gast)


Lesenswert?

Den AT24C512 kannst Du seitenweise beschreiben:

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



Peter

von anton (Gast)


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

von Peter Dannegger (Gast)


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

von Alex (Gast)


Lesenswert?

M25P10-A

von anton (Gast)


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

von Alex (Gast)


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.

von mathias giacomuzzi (Gast)


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

von Jens (Gast)


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?

von anton (Gast)


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

von Benedikt (Gast)


Lesenswert?

Man sollte schon das Datenblatt lesen, bevor man das IC verwendet...

von anton (Gast)


Lesenswert?

hab ich auch,

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

von Peter Dannegger (Gast)


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

von anton (Gast)


Lesenswert?

aber doch nicht wenn ich byte-weise beschreibe?

von Peter Dannegger (Gast)


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

von anton (Gast)


Lesenswert?

danke für die Tipps, Peter,

wie realisiere ich eigentlich einen FIFO in SRAM?

von anton (Gast)


Lesenswert?

hat jemand eine Idee?

von jmoney (Gast)


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

von Dirk (Gast)


Lesenswert?

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

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
Noch kein Account? Hier anmelden.