Forum: Projekte & Code Beschleunigungssensor ADXL345 in C via TWI, Hard- oder Software-SPI konfigurieren/auslesen


von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

um den Einstieg in die Arbeit mit dem Beschleunigungssensor ADXL345 zu 
erleichtern, stelle ich hier einige Funktionen in C in die Codesammlung.

Der Sensor verfügt über eine TWI- und eine SPI-Schnittstellen.

Es sind die Funktionen vorbereitet, um wahlweise über eine der beiden
Schnittstellen auf den ADXL zuzugreifen.
Die SPI-Schnittstelle wiederum kann alternativ als Hardware- oder 
Software-SPI eingesetzt werden (für beide Varianten ist die 4-wire 
Lösung implementiert).

Die Daten des ADXL werden über die serielle Schnittstelle ausgegeben.
Im Debug-Modus werden beim Programmstart die aktuellen Werte der 
Register ebenfalls über die serielle Schnittstelle protokolliert.

Für erste Tests sind drei Testmodi implementiert, die in der global.h 
eingestellt werden.

Das ausführbare Programm hat eine Größe von ca 2.300 Byte, kann aber 
durch Entfernen von überflüssigen Debug-Ausgaben noch reduziert werden.

Ich war bemüht, den Programmcode zu dokumentieren.
Die Arbeitsweise des ADXL kann ich hier nicht beschreiben, ein 
ausgiebiges Studium des Datenblattes ist unvermeidlich.


Viel Spaß beim beschleunigen,

Michael S.

von Michael S. (Gast)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,

hier ist noch einmal eine kleine praktische Anwendung in C für den ADXL 
als Alarmgeber, der bei Bewegung einen akustischen Alarm auslöst (z.B. 
zur Diebstahlabschreckung bei einem geparkten Fahrrad).

Der Sensor reagiert auf Lageveränderungen und weckt den angeschlossenen 
Controller.
Der gibt bis zum Ende des Alarms ein Alarmsignal auf einem Summer aus - 
und kann selbstverständlich auch noch andere Schaltvorgänge initieren.
Nach Ablauf einer weiteren optionalen Verzögerung geht der Controller 
wieder in den power-down-Modus.

Der Programmcode ist kleiner als 2K, die Kommunikation zum ADXL erfolgt 
via Hardware-SPI.
Im Beispiel wird ein ATMega48 mit 3.686400Hz XTAL verwendet.
Wenn das Debuggen über die serielle Schnittstelle nicht (mehr) benötigt 
wird, kann jeder beliebige ATTiny mit mindestens 2K-SRAM als Controller 
eingesetzt werden.

Der ADXL und der Controller haben zusammen eine gemessene 
Ruhestromaufnahme von ca. 100uA (bei 3.3V) bzw. ca. 40uA (bei 2.5V).
Ein Batteriebetrieb ist damit möglich.


Michael S.

von samsung (Gast)


Lesenswert?

hallo zusammen,

was müsste ich machen damit ich den adxl345 mit einem dspic33 steuern 
kann


danke

von Michael S. (Gast)


Lesenswert?

Zuerst klären, über welche Schnittstellen (TWI/SPI) dein Controller 
verfügt.
SPI kann man im Zweifelsfall auch in Software implementieren.

Dann entscheiden, über welche Schnittstelle mit dem ADXL345 kommuniziert 
werden soll - und die erforderliche Software entwickeln oder aus den 
üblichen Quellen kopieren.

Dann kommt der ADXL-spezifische Teil der Übung, der ADXL will nämlich 
konfiguriert werden.
Dazu gibt es eine Reihe von Registern, über die sein Verhalten gesteuert 
wird.

Am besten wäre, das Datenblatt (insbesondere die Registerbeschreibung) 
zu lesen.
Dann fällt dir auf, wie sich welche Fähigkeiten des Sensors für deine 
Zwecke einsetzen lassen.

Schließlich bleibt die Frage, wie der ADXL mit dir kommunizieren soll:
- soll er sich melden, wenn definierte Grenzwerte überschritten wurden 
(Stichwort Interrupt) ?
- soll er permanent Beschleunigungswerte bereitstellen, die von dir 
regelmäßig ausgelesen und interpretiert werden ?

Hier gibt es eine Vielzahl von Möglichkeiten.
Nur du kannst entscheiden, welcher Weg für deine Aufgabenstellung die 
optimale Lösung darstellt.

Michael S.

von Seb A. (mbauer79)


Lesenswert?

Tachchen,

ich hätte mal ein paar Fragen zum Code.

Ich habe einen Mega32 und nen ADXL345 dran. allerdings über TWI.

Deinen Code bekomm ich damit nich zum laufen :( .

Schöne Grüße

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.