Forum: Mikrocontroller und Digitale Elektronik Datenloggen, zwischenspeichern und ausgeben


von Schorsch (Gast)


Lesenswert?

Hallo zusammen,

Ich bastele gerade an einer Art Datenlogger und brauche ein bisschen 
Hilfe.

Ich habe einen Wegpositionssensor, den ich über SSI auslesen kann. Ich 
möchte diesen Sensor für etwa 1 Sekunde im Takt von mind. 10ms, besser 
1ms auslesen, und die Positionsdaten über den UART ausgeben. Ich muß aus 
dem Sensor 25bit (also effektiv 32bit) auslesen, obwohl ich tatsächlich 
nur 16 verwende. SPI läuft momentan bei ca 1MHz.

Im Prinzip funktioniert alles:
1. SSI kann ich über SPI und einen MAX490 (für kurze Strecken gehts 
sogar ganz ohne) auslesen
2. Ausgabe über den UART: Da habe ich schon einige Erfahrungen mit FTDI
3. Takt: Der Timer ist dein Freund

Leider ist der UART zu langsam, um mit 1ms mitzuhalten. Daher speicher 
ich momentan alle Daten im internen ROM zwischen, um sie anschließend 
auszugeben.

In meinem extrem einfachen Aufbau habe ich im Moment einen Atmega8, 
dessen ROM natürlich extrem klein ist (ich glaube 2kB).

Was soll ich tun, um die Daten zwischenzuspeichern?
 - externen ROM? Da habe ich keine Erfahrung? Kennt Ihr Schaltungen? 
Chips? Am besten über SPI? Geht das?
 - ich hab irgendwo gelesen, dass es einfacher sein soll eine SD-Karte 
anzuschließen als SRAM?
 - Andere Ideen sind natürlich auch willkommen...

Danke im Voraus
Schorsch

von Noname (Gast)


Lesenswert?

Wenn ich auf die schnelle richtig gerechnet habe,
möchtest Du 1000 * 4 Bytes = 4 KByte speichern.
Das sollte für heutige uC wirklich kein Problem sein.
Hast Du mal geschaut, ob es nicht einfacher ist,
auf einen größeren uC umzusteigen, der z.B. mindestens 8 KByte
RAM beinhaltet, als selber zu versuchen, jetzt irgendwas zu erweitern
oder gar eine (schwierige) SD-Karte anzuschließen,
die dir dann im Extremfall vielleicht (manchmal) zu langsam ist...

Du speicherst die Daten übrigens nicht im ROM:
ROM = Read Only Memory (dort kannst du nur lesen)
RAM ist der richtige Speicherort für deine Daten

von Wolfgang (Gast)


Lesenswert?

Schorsch schrieb:
> Leider ist der UART zu langsam, um mit 1ms mitzuhalten.

Dann machst du irgendetwas falsch. Wenn dein Sensor jede Millisekunde 25 
Bit liefert, sind das incl. Overhead für 8-Bit Transfer und 
Start-/Stopbits so um die 40 kBit/s. Mit 57.6 kBd, besser noch 115.2 kBd 
solltest du also bei vernünftiger Programmierung im Rennen sein.

von Schorsch (Gast)


Lesenswert?

Hi,

danke erstmal für die schnellen Antworten.

Klar ich meine natürlich RAM und nicht ROM - shame on me...

Die Idee mit dem zu langsamen UART werde ich nochmal untersuchen...
ne Idee was man da falsch machen kann?

Gruß und Danke
Schorsch

von Schorsch (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

Wolfgang hat recht. Es funktioniert. Im Anhang sieht man, die Logic 
Signale von UART und SPI.

Ich habe hier in diesem Beispiel einfach die SPI-Empfangsroutine und die 
UART-Senderoutine unmittelbar viermal nacheinander aufgerufen. Ganz ohne 
Timer.

Sie Sequenz läuft mit einer Cycletime von 0.75ms. Ich habe hier einen 
Quarz mit 7.3MHz benutzt - War einfach der erste, den ich in der Kiste 
gefunden hatte, 20MHz würden hier noch ein bisschen Luft bringen.

Danke für die Hilfe

Gruß Schorsch

von amateur (Gast)


Lesenswert?

>Sensor 25bit (also effektiv 32bit) auslesen, obwohl ich tatsächlich
>nur 16 verwende.

Eine weitere Möglichkeit wäre die oberen 3 Bytes um eine Position nach 
rechts zu schieben und dann nur die Bytes 2 und 3 (16 Bit) zu versenden.

So kannst Du mit minimalem Rechenaufwand deinen Datenumsatz halbieren.

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.