Hallo Ich hoffe nicht, dass dieses Thema so schon existiert. Gefunden habe ich es nämlich nicht. Ich bin auf der Suche nach einer Möglichkeit, Analogsignale eines Beschleunigungssensors zu erfassen und via USB zum PC zu schieben. Dazu sollen 10000 Messwerte pro Sekunde (!) mit mindestens 10 bit Auflösung erfasst werden. Meiner Meinung würde sich der Mega8 mit dem internen 10bit ADC anbieten. Die Messwerte würde ich auf dem internen EEPROM abspeichern und nach Beendigung der Messung (etwa 5sec.) wieder auslesen. Die Weiterverarbeitung zur USB-Schnittstelle soll hier erstmal nicht das Problem darstellen. Meine Frage ist, ob es wohl möglich ist, diese hohe Abtastrate zu realisieren. Schließlich müssen hier doch eine Menge Signale abgefragt und auf dem Speicher abgelegt werden. Andere Möglichkeiten, wie mit dem JoyWarrior20 A10-8 von Code Mercenaries (www.codemercs.com), der die Daten in "Echtzeit" rüberschicken soll, werden vom Hersteller als "um Größenordnungen zu langsam" beschrieben. Find ich schon seltsam, schließlich sind laut Datenblatt Übertragungsraten von 1,5 MBit/s möglich. Ich hoffe, jemand kann mit helfen.
>10000 Messwerte pro Sekunde (!) mit mindestens 10 bit Auflösung >erfasst werden. >... >Die Messwerte würde ich auf dem internen EEPROM abspeichern und nach >Beendigung der Messung (etwa 5sec.) wieder auslesen. Um die Machbarkeit dieses Vorhabens zu klären, ist es notwendig, die benötigte Speicherkapazität und Geschwindigkeit des EEPROMS auszurechnen und mit der verfügbaren zu vergleichen. Zur Speicherkapazität: 10000 Meßwerte 5 Sekunden lang macht (Vorsicht: es folgt eine sehr komplizierte Rechnung!) 5 * 10000 = 50000 Meßwerte. Wenn jeder Meßwert 1 Byte benötigen würde, müßte das EEPROM mindestens 50000 Bytes Kapazität bieten. Wie ein Blick in das Datenblatt des ATmega8 verrät, hat dieser Controller aber leider nur 512 Bytes EEPROM. Zur Geschwindigkeit: 10000 Meßwerte pro Sekunde bedeutet, daß der Speichervorgang eines Meßwertes höchstens 1/10000 s = 0.1 ms benötigen dürfte. Das Beschreiben einer EEPROM-Zelle dauert aber typischerweise ca. 8 ms (Richtwert). Fazit: Dein Vorhaben ist "leicht" oversized.
>Fazit: Dein Vorhaben ist "leicht" oversized.
Wenn die Betonung auf "leicht" liegt, will ich dir recht geben :-)
Jetzt mal im ernst: Mein Fehler war, dass ich den internen EEPROM nicht
als 0,5kB sondern als 512kB interpretiert habe.... (bitte dazu keine
weiteren Kommentare!)
Es muss aber doch Möglichkeiten geben, Analogsignale in dieser
Geschwindigkeit erfassen zu können. Grundsätzlich bin ich frei in der
Entscheidung der technischen Realisierung. Es muss also kein µC sein.
Mir ist nicht ganz klar, warum die Daten im EEPROM gespeichert werden müssen. Das RAM wäre um Größenordnungen schneller und außerdem nicht so begrenzt, was die maximale Anzahl an Schreibvorgängen angeht. Die Größe bleibt natürlich problematisch. Es gibt m.W. weder AVR-Controller mit genügend EEPROM, noch solche mit genug RAM. Man könnte allerdings per SPI einen ausreichend großen externen Speicher anschließen. > Wenn jeder Meßwert 1 Byte benötigen würde, müßte das EEPROM > mindestens 50000 Bytes Kapazität bieten. Dummerweise sollen aber 10bit erfasst werden, also wird das nichts mit den 50000 Bytes. Entweder macht man es sich einfach und verschwendet 6 Bytes pro Messwert, indem man einfach jeweils 16bit abspeichert, dann braucht man 100000 Bytes Speicher, oder man spart, indem man per umständlichem Bithantieren die Daten packt. Es bleibt dann noch ein Speicherverbrauch von mindestens 62500 Bytes übrig, was immerhin noch unter 64kByte liegt. Der ADC dürfte für diesen Fall noch schnell genug sein. Er schafft meines Wissens so um die 15000 S/s.
> Es muss aber doch Möglichkeiten geben, Analogsignale in dieser > Geschwindigkeit erfassen zu können. Soll's geben. Jede Soundkarte macht sowas. > Grundsätzlich bin ich frei in der Entscheidung der technischen > Realisierung. Es muss also kein µC sein. Falls das Eingangssignal keine zu niedrige Frequenz hat, wäre eine Soundkarte vielleicht wirklich eine Alternative. Die kann sogar 16bit. PS: Warum willst du denn eigentlich 5 Sekunden warten, bevor du die Daten überträgst? Wenn du vorher anfängst, brauchst du keinen so großen Speicher.
Andere Frage: gibt´s da nicht auch G-Sensoren mit digitaler Schnittstelle? Dann braucht man nur noch ein schnelles großes (serielles oder paralleles) externes SRAM und der Controller muß dann (erstmal) nur Bytes schaufeln. Wenn analoger Sensor, dann halt A/D auf volle Pulle und ebenfalls externes SRAM füttern...
Wenn als Controller ein Mega128 verwendet wird, dann kann an den externes SRAM angeschlossen werden, was dann auch für 10k 16*-Bit-Samples/Sekunde ausreicht. Dazu ist nur ein 8-Bit-Latch für den gemultiplexten Adress/Datenbus erforderlich. Je nach Größe des SRAMs passen da ziemlich viele Messwerte 'rein. Würde der AVR über eine ausreichend schnelle Schnittstelle (USB) an einen PC angeschlossen, könnte man allerdings auf das Zwischenspeichern der Messwerte annähernd vollständig verzichten. Für 10k Samples/sec bei 16* Bit Samplegröße sind nur 20 kByte/sec zu übertragen, und das ist mit USB problemlos möglich, beispielsweise mit einem der beliebten FTDI-Chips. *) sofern man nicht "packen" will, die kleinste Speichermenge, die 10-Bit-Samples belegen
Hab gerade einen ähnlichen Logger mit einem Mega16 gebaut. Datenspeicherung erfolgt in einem 32KB(oder grösser) SRAM. Einen Mega mit ext. Speicherinterface (Mega128,Mega8515 etc) braucht man nicht unbedingt da die Daten ja nicht random gelesen/geschrieben werden und es ja nicht auf Geschwindigkeit ankommt. Einfach einen externen Counter (muss nicht mal ein sync. Counter sein) für die Speicheraddr. der durch ein Portbit getaktet wird. Ebenso /OE , /WE und CounterClr, man hat ja zwischen den Wandlungen noch bannig Zeit. Die Daten schieb ich dann über einen USB/FT232BM mit 1.152MB zum PC. Gleichzeitig Wandeln und Senden (ohne Puffer) wollte ich nicht da man sich bei den Geschwindigkeiten nie sicher sein kann dass der PC die Daten immer rechzeitig abnimmt.
Hi, hat eigentlich schon mal jemand versucht wie schnell die max. geschwindigkeit des atmel-adc ist ? Angenommen ich brauche nur 2 oder 3 bits, kann ich da mit der vollen/halben quarzfequenz samplen oder kommt da nur müll raus ? (tastatur ist in ordnung, ich bin nur faul) (und: ja ich weiß, der thread ist von 2005)
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.