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
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.
Den AT24C512 kannst Du seitenweise beschreiben: 1 Seite a 128 Byte mit typisch 5ms Schreibzyklus = 25kByte/s Peter
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
"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
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
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.
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
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?
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
hab ich auch, der I2C-Bus funktioniert ja,... nur halt nicht so wie es sein muss...
"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
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
danke für die Tipps, Peter, wie realisiere ich eigentlich einen FIFO in SRAM?
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,...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.