Forum: Mikrocontroller und Digitale Elektronik Auswertung eines MEMS-Sensors mit Arduino


von Polsterreiniger (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
ich versuche mich gerade an der Programmierung eines Arduino Uno´s der 
einfach nicht machen will was ich ihm (falsch) sage :)


Was ich machen möchte:

An den Controller wird ein 3-Achsen-Beschleunigungssensor angeschlossen. 
Ich möchte damit die Geschwindigkeit einer Pressen Kolbenstange 
bestimmen.

http://www.mikroe.com/add-on-boards/measurement/three-axis-accelerometer/

Die Schleife wird aktuell nur einmal durchlaufen. Später möchte ich 
diese mit zwei Endlagenschaltern im kompletten Hubzeitraum auswerten.

Die Werte werden dann in den EEPROM abgespeichert und bei Gelegenheit 
mit dem Laptop ausgelesen


Nun zu meinem Problem:

Die Werte die aus dem EEPROM an die serielle geschickt werden 
unterscheiden sich stark zu den eingelesenen. Wieso ist das so?

Außerdem habe ich das Problem das ich manchmal den Befehl "start" zum 
einlesen der Sensorwerte drei oder vier mal senden muss bis der 
Controller mit antwortet, obwohl dieser aber bei der LED Rx jedes mal 
aufblinkt....
Das gleiche auch beim Befehl zur Datenausgabe....

Da ich leider keine Ahnung habe wie ich hier einen Quellcode anfügen 
kann, habe ich den Sketch und ein Bild der Ausgabe des Controllers in 
den Anhang eingefügt. Ich hoffe ihr könnt mir helfen.

von Student (Gast)


Lesenswert?

Quellcode einfügen über (c)code(/c), allerdings mit eckigen Klammern.

Dein Problem mit dem vier mal Senden/Schreiben liegt sicher am FIFO 
Buffer. Informiere dich mal darüber, <bel. Suchmaschine> zeigt dir 
sicher wie du den ausschalten kannst. Der Königsweg wäre natürlich, 
einen Buffer zu Implementieren, der einen Timeout besitzt, nach dem er 
sich leert, vielleicht lässt sich das auch konfigurieren?

Ansonsten musst du Spezifizieren:
Was bedeutet "weicht stark ab" (Der Schlüssel bei solchen Problemen ist 
es, den Zusammenhang der Daten zu finden).

Ob das mit dem EEPROM Sinn ergibt, solltest du auch im Rahmen deines 
Projektes klären. Die Frage hierbei ist: Warum keine SD Karte bzw. warum 
kein Live-Serial-Laptop-Logging?

Was ich meine ist: Eigentlich will man bei solchen Messungen hohe 
Auflösungen. So gibt zB das SenseHat(?) für den Raspberry Pi 2 über 
200Hz an Daten aus. 100 Hz wären alle 10ms, das könnte man sich je 
nachdem schon antun.

Damit hast du aber 100 * 3 = 300 Byte/s, die den EEPROM füllen, bei 
32bit sogar 1.2 kByte/s

Zurück zu den Zahlen nochmal: Was für Datentypen verwendest du? 
Schreibst/Liest du zufällig nur uint's aber dein Sensor hat 
offensichtlich Ints?

Du nutzt > 255, ergo mindestens int16_t. Bedenkst du beim lesen, dass du 
beide Bytes lesen musst? Und achtest du auf die Reihenfolge (Endianess)?
Lässt sich leicht mit dem Taschenrechner nachprüfen

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Polsterreiniger schrieb:
> Die Werte die aus dem EEPROM an die serielle geschickt werden
> unterscheiden sich stark zu den eingelesenen. Wieso ist das so?
1
    EEPROM.write(address, SensorValueX - SensorXmax / 4);
2
    Serial.println(SensorValueX - SensorXmax);

 Wolltest du genau das ?
 SensorValueX - (SensorXmax / 4)

 Sende die SensorValues zu serial, nicht nur die berechneten Werte.

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.