Hallo zusammen, bisher konnte mir das Forum hier schon sehr viel helfen und die ersten Funktionen bei meinem Projekt funktionieren. Vielen Dank soweit. Als nächstes möchte ich einen Vibrations-/Beschleunigungssensor mit meinem Mikrocontroller ansprechen/auslesen. Es handelt sich dabei um den ADXL345 von Analog. Dazu bin ich auf der Suche nach Treibern oder Code. Hat jemand damit schonmal was gemacht und würde mir seinen Code zukommen lassen? Das Datenblatt des ADXL345 ist Kommando- und Codemäßig leider sehr dürftig und auf der Analog-Homepage habe ich nichts finden können (bilde mir aber ein, dass es da mal einen monströsen Linux-treiber gab???). Wenn da jemand was hat, wär ich sehr dankbar. Grüße, Michael
ein paar beispiele : - ADuC7026EVB firmware mit ansteuerung von ADXL345EVB - IIC ansteuerung beispiel - LPC2294 firmware mit ansteuerung von ADXL345EVB
Hallo Thomas, vielen Dank, das hat mir schonmal weitergeholfen. Jetzt habe ich noch einige Fragen zum ADXL345: 1) ich möchte Vibrationen in einem fahrenden Kfz messen. Welchen g-range stelle ich dazu am besten ein? 16g? 2) Woher weiß ich dass der FIFO-Buffer vollständig ausgelesen ist? Kann ich das irgendwie abfragen? Grüße, Michael
zu 1) Vielleicht schaust du dir DATA_FORMAT ( 0x31 ) - FULL_RES ( D3 ) an. zu 2) es gibt da wohl mehrere Möglichkeiten: a) Wenn du wissen willst, wie viele Daten noch im FIFO sind: FIFO_STATUS ( 0x39 ) Bit0-5 => Gibt die Anzahl der FIFO-Einträge zurück b) Wenn du nur wissen willst, ob neue Daten da sind: INT_SOURCE ( 0x30 ) Bit7 => DATA_READY Am Elegantesten ist es wohl mit Hilfe von INT_ENABLE ( 0x2E ) und INT_MAP ( 0x2F ) einen der externen Interrupts damit zu verbinden.
Hallo Jochen, super, vielen Dank! Das waren genau die Antworten die ich gesucht habe. Das mit FULL_RES ist ja ziemlich pfiffig, da bin ich beim Lesen des Datenblattes gar nicht drauf aufmerksam geworden... Grüße, Michael
jetzt ist doch noch eine Frage aufgetaucht. Ich möchte den FIFO auslesen, wenn er 20 Einträge hat. Meine CLOCK-Frequenz der SPI ist 2,5MHz. Jetzt steht beim ADXL allerdings drin, dass der FIFO mit einer maximalen Frequenz von 3,2kHz beschrieben wird. Heißt das jetzt, dass ich nur den ersten Eintrag im FIFO-Ausgang mit der SPI-Frequenz von 2,5MHz auslesen kann, dann warten muss, bis der nächste Eintrag wieder im FIFO-Ausgang ist (also 312,5usec warten)? Was bringt mir dann eine Maximale CLOCK-Frequenz von 5MHz???? Oder kann ich direkt nach einmal Auslesen ohne Pause den nächsten Wert auslesen? Grüße, Michael
ich glaube ich habs kapiert: beschrieben wird der FIFO mit 3200Hz wenn eine Eingangsfrequenz von 1600Hz gewählt wird. Das heißt, der erfasste Wert wird so schnell in den FIFO geschrieben. Da hat wohl der Herr Nyquist und der Herr Shannon seine Finger im Spiel ;) Beim Auslesen des FIFOs muss CS 5µs zwischen dem Auslesen des ersten sample-sets und dem Auslesen des folgenden sample-sets auf HIGH sein. Dann ist das Popping(Werte der zweiten FIFO-Position rutschen in die erste FIFO-Position/FIFO-Ausgang) gewährleistet. Es muss also 5µs gewartet werden und nicht 312,5µs. Das wäre ja noch schöner gewesen... Ich hoffe ich liege da richtig, falls nicht, korrigiert mich bitte. Grüße, Michael
Ich bin auch gerade dabei mit dem ADXL345 zu experimentieren. Aber ich schaff's einfach nicht eine stabile Ansteuerung über SPI hin zu bekommen. Hat da vielleicht jemand einen Bsp. Code? Im samples.zip is ja leider nur I2C. danke, Stephan
Hallo Stefan, was für einen µC hast du denn? Für den R8C/22 von Renesas hab ich die SPI (heißt dort SSU) realisiert und auch alle zu übertragenden Kommandos für den ADXL345. Bei mir klappt das auslesen der Vibrationsdaten problemlos (nach langer Zeit). Ist allerdings wirklich nur für die SSU-Schnittstelle anzuwenden, da sie vom R8C/22 bereitgestellt wird. Wenn es um ein eher generelles Problem geht, wie anzusteuern ist, dann hier ein paar Tipps zu den Kommandos: zur config des ADXL: Je nachdem, wie er arbeiten soll, musst du die entsprechenden kommandos senden(zB config für FIFO-Buffer, oder die Data rate). Dabei ist folgendermaßen vorzugehen: 1) Chip Select bzw enable // ADXL345 über chip select anwählen (CS LOW) 2) Register auswählen: adresse des registers senden (zB 0x71 für das DATA_FORMAT register) 3) Kommando schicken zB:0x09 //self test disable, 4wire mode, INT active HIGH, FULL-RES, 4g 4) CHip deselect //ADXL345 abwählen (CS HIGH) Nach dem chip select also immer 2 bytes senden und dann wieder die chip select leitung auf high ziehen. Dieser Vorgang muss für jedes register gemacht werden, in dem du die Werkseinstellungen ändern willst. Zwischen der Config der einzelnen register habe ich bei mir ein paar nop's hinzugefügt. Um die Daten auszulesen musst du folgendermaßen vorgehen: 1) Chip Select (CS LOW) 2) Kommando Read-data senden: zB 0xF2 //Read command, multiple byte read, start address 0x32 3) 6 Bytes auslesen (also 48 clock-cycles) 4) Chip deselect (CS HIGH) Ich hoffe ich konnte dir weiterhelfen. Gruß, Michael
Hi Michael, Danke für deine ausführliche Antwort. Sorry, ich bin schon ganz betriebsblind. Als µC verwende ich einen ATMega88. Das mit der Reg. Programmierung mach ich im Prinzip eh so - hoff ich wenigstens. Ich werd's mir noch mal genau anschauen, vielleicht find ich da ja noch einen Bug. Delays nach dem schreiben wird ich auf alle Fälle dazu geben, die können nicht schaden. by(e) Stephan
Hallo an Alle, den ADXL345 versuche ich mit einem dsPIC33 über SPI/I2C anzustueren. Meinen Code habe ich in c geschrieben. Kann jemand vielleicht seinen Code posten um zur vergelich zwecken. Währe sehr hilfreich. Bin noch ein absoluter Anfänger in sachen Programmierung Danke
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.