Forum: Mikrocontroller und Digitale Elektronik ADXL 345, ALLE Datensätze auslesen!?


von Robert R. (serpentarii)


Lesenswert?

Hallo

Ich habe schon viel hilfreiches hier im forum über den ADXL345 erfahren 
und umgesetzt.
Nun bräcuhte ich aber bitte eure hilfe!
Ich würde gerne bei einer Messrate von zb. 400Hz JEDEN Datesatz mit dem 
uC auslesen
 und in dann an den PC senden.

deshalb dachte ich mir, dass der DATA_READY INT dafür am besten geeignet 
sei.
dazu hab ich folgendes Programm  geschrieben(gekürzt):

ISR(INT1_vect){                //Interrupt an dem der Data_Ready Int des 
ADXL hängt
  regi=178;
  for(char i=0;i<3;i++)
  {
  MultipleReadByteSPI(regi, &dataFirst, &dataSecond);     //Beide 
Datensätze einer achse werden ausgelesen und gespeichert
    if(dataSecond & 128)          // wenn der wert negativ sein sollte
    {
      daten=(dataSecond<<5) | (dataFirst>>3) | 128;   // 
zusammenschieben der 2Byte auf 1 byte + 128 für vorzeichen
    }
    else
    {
      daten=(dataSecond<<5) | (dataFirst>>3);    // zusammenschieben der 
2Byte auf 1 byte
    }
    if(regi==178) Xwerte[counter]=daten;
    if(regi==180) Ywerte[counter]=daten;
    if(regi==182) Zwerte[counter]=daten;
    regi = regi+2;
  }
counter++;
}

Bitte zerrauft euch jetzt nicht die HAARE an meinem Bits verscheiben! 
mir geht es darum, dass der Data_Ready Int (mit dem Oszi beobachtet)
WEIT langsamer kommt als mit 400 Hz!!! Selbst wenn ich die Messrate 
runter schraube ist der Interrupt langsamer als die Messrate
WARUM ist das so?
gibt es für mein vorhaben vl. einfachere wege?

ATMEGA 644P, 16MHz, SPI-Cklock: 1 MHz

Sorry falls das schon einmal wo behandelt wurde!

LG Robert

von arash j. (arashjavan)


Lesenswert?

Robert R. schrieb:
> Hallo
>
> Ich habe schon viel hilfreiches hier im forum über den ADXL345 erfahren
> und umgesetzt.
> Nun bräcuhte ich aber bitte eure hilfe!
> Ich würde gerne bei einer Messrate von zb. 400Hz JEDEN Datesatz mit dem
> uC auslesen
>  und in dann an den PC senden.


Hallo Robert,

falls du immer noch an adxl hängst...
ich würde dir empfhlen anstatt DATA_READY, den Water-mark interrupt, mit 
FIFO_CTRL Rigister zu benutzen.

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.