Verzögerungsproblem MEMS Accelerometer

Gast #2846215
Lesenswert?
• ▲
▼
Hi,

ich lese per SPI ein MEMS Accelerometer aus und sende im Anschluss die 
Daten per UART.

Das hat bis jetzt alles bestens geklappt.

Jetzt wollte ich gern zum Stromsparen den Sensor nach 10000Werten die 
Möglichkeit geben sich schlafen zu legen geben, falls er nicht mehr 
angeregt wird.

Leider verlangsamt sich dadurch mein Programm total.
Die Sensorwerte werden überschrieben.
Das weiß ich daher, da er in die if() mit den 2000ms delay reinspringt.

Verliere ich durch die if(zaehler == 1) am Anfang denn soviel Zeit?
Wie könnte man das Programm sonst noch schreiben?
Angehängte Dateien:
#2847162
Lesenswert?
• ▲
▼
Wenn du noch kein Oszi hast wird es höchste Zeit. Sonst wirst du ständig 
an solchen Problemen hängen bleiben.

Naja, also zum Thema. Man sieht leider die Definition und Deklaration 
deiner Variablen im code nicht. Außerdem musst du mal den Typ deines 
Sensors rüberwachsen lassen.

Außerdem wird das Warten auf neue Daten nur ein mal klappen. Danch hat 
status_reg bereits vor dem erneuten einlesen innerhalb der Schleifen den 
passenden Wert. Das wird auch der Grund sein, waum der 2s delay jedes 
mal ausgeführt wird.

Thor
Gast #2847268
Lesenswert?
• ▲
▼
Alex S. schrieb:

> Naja, also zum Thema. Man sieht leider die Definition und Deklaration
> deiner Variablen im code nicht. Außerdem musst du mal den Typ deines
> Sensors rüberwachsen lassen.
>
> Außerdem wird das Warten auf neue Daten nur ein mal klappen. Danch hat
> status_reg bereits vor dem erneuten einlesen innerhalb der Schleifen den
> passenden Wert. Das wird auch der Grund sein, waum der 2s delay jedes
> mal ausgeführt wird.
>
> Thor


Es handelt sich um folgenden Sensor:
http://www.st.com/internet/com/TECHNICAL_RESOURCES/TECHNICAL_LITERATURE/APPLICATION_NOTE/CD00229883.pdf

Hab jetzt die vollständige main() und die wakeup_init beigefügt.

Die anderen Funktionen nicht, da ich weiss das sie einwandfrei 
funktionieren.(Kumpel der Ahnung hat, hatte schon kontrolliert).
Ausserdem hab ich schon getestet und es läuft Fehlerfrei.

Wie schon gesagt. Es läuft alles ohne die wakeup Sensor Geschichte.
Angehängte Dateien:
#2847412
Lesenswert?
• ▲
▼
Ich meinte das ernst. Das Warten auf ZYXDA wird nur beim ersten mal 
klappen. Danach ändert sich status_reg nicht mehr und die Warteschleife 
wird beim nächsten mal sofort abgebrochen. Mir ist nicht so ganz klar 
warum du bei einem overrun von Z 2s wartes aber ich würde fast vermuten, 
dass das deine Verzögerung verursacht.

Thor
Gast #2847416
Lesenswert?
• ▲
▼
Du hast recht.

Der overrun verursacht die Verzögerung.
Ohne das wakeup feature habe ich keinen overrun und somit auch keine 
Verzögerung.

Warum kommt es zu einem overrun?

Ich habe die 2s eingebaut um zu sehn, dass ich einen overrun habe.
Ich schaue mir die Uart daten mit einem Terminalprogramm an.
Gast #2847448
Lesenswert?
• ▲
▼
Alex S. schrieb:
> Ich meinte das ernst. Das Warten auf ZYXDA wird nur beim ersten mal
> klappen. Danach ändert sich status_reg nicht mehr und die Warteschleife
> wird beim nächsten mal sofort abgebrochen.

Ich frage nur ZDA ab, welcher jedesmal nach dem lesen von OutZ 
zurückgesetzt wird.
Gast #2847480
Lesenswert?
• ▲
▼
Vielleicht wäre es sinnvoll diesen Teil:
1
while( !(status_reg & 0x08) ){
2
   status_reg = SPI_MasterRead(STATUS_REG);
3
}

besser so zu schreiben:
1
do {
2
   status_reg = SPI_MasterRead(STATUS_REG);
3
} while( !(status_reg & 0x08) );

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.