Forum: Mikrocontroller und Digitale Elektronik NGW100 I²C, Ansteuerung eines Beschleunigungssensors (ADXL345)


von qa729 (Gast)


Lesenswert?

Hallo!

Ich habe vor mir ein Projekt, bei dem es gilt, mit dem NGW100 mittels 
I²C Werte von vier ADXL345 Beschleunigungssensoren auszulesen. Nun habe 
ich noch nie mit I²C gearbeitet, und leider kaum eine Ahnung wie genau 
dies vonstatten gehen soll. Was ich bis jetzt herausgefunden habe ist 
dass man besser die I2C-GPIO Funktionen verwenden sollte, da die 
Atmel-eigene Implementierung sehr mangelhaft sein soll.
Weiterhin sollte durch die Verwendung von I2C-GPIO eine freie Wahl der 
verwendeten Pins möglich sein, soweit ich es in Erfahrung bringen 
konnte.
Nun verwenden diese vier Sensoren alle die selbe ID, was ja bedeuted, 
dass sie innerhalb des Netzwerkes wohl nicht einzeln ansteuerbar sein 
werden.
Hier taucht meine erste grundlegende Frage auf: Kann man diese trotdem 
irgendwie auf einfache Weise ansteuern, oder sollte man einfach mittels 
ein paar Transistoren zwischen den einzelnen Sensoren TWI durchschalten 
(Sie werden nicht gleichzeitig benötigt)?
Weiterhin habe ich eben, da ich noch nie mit I²C gearbeitet habe, die 
Frage, ob mit jemand ein Beispiel der Ansteuerung eines solchen Gerätes 
geben könnte. Rein theoretisch müsste es doch nur zuerst ein Öffnen des 
I2C sein, daraufhin ein finden des richtigen Devices, dann ein paar 
Werte auf das Gerät schreiben (zum Einstellen des Sensors) und zuletzt 
die Werte der verschiedenen Achsen auslesen. Leider habe ich praktisch 
soetwas noch nie angewendet.
Im Grunde genommen wird dies der Hauptteil des Programmes, das von dem 
Controller erledigt werden soll, aufgrund der gemessenen Werte sollte 
dann nur noch ein Motor ein oder ausgeschalten werden, je nach dem vorab 
berechneten Wert. Also der Soll-Wert wird mit dem Ist-Wert verglichen, 
um dann den Ist Wert auf den Soll Wert zu bringen. Vom Prinzip her also 
einer Servo-Steuerung sehr ähnlich, nur sollen eben vier Motoren 
angesteuert werden. Diese Ansteuerung sollte aber wohl mittels GPIO kein 
allzu großes Problem darstellen.

Sollte also jemand bereit sein, mir Codebeispiele von I²C auf einem 
AVR32 Gerät zu senden, wäre ich demjenigen sehr dankbar. Auch für 
jeglichen weiterführenden Link wäre ich zudem dankbar!

Auf jeden Fall schonmal Danke im Voraus!

von holger (Gast)


Lesenswert?

>Ich habe vor mir ein Projekt, bei dem es gilt, mit dem NGW100 mittels
>I²C Werte von vier ADXL345 Beschleunigungssensoren auszulesen. Nun habe
>ich noch nie mit I²C gearbeitet, und leider kaum eine Ahnung wie genau
>dies vonstatten gehen soll.

Da fällt mir ein alter Spruch ein:

Was nützen 10000V in den Armen wenn in der Birne das Licht
nicht leuchtet? SCNR;)

von qa729 (Gast)


Lesenswert?

Ich verstehe wohl deine Aussage nicht ganz xD
I2C ist zwar neu für mich, aber wenn ich es nie versuche wird wohl nie 
irgendetwas damit zu stande kommen.
Also grundlegende Kenntnisse von I2C sind schon vorhanden, zum Beispiel 
wie es funktioniert und so weiter, nur eben habe ich es noch nie 
angewendet, ich habe nur theoretische Kenntnisse, und die nützen fast 
nichts...
Hat sonst keiner eine Hilfestellung zu dem Ganzen? Ich stehe einfach nur 
momentan irgendwie auf der Leitung, und die Dokumentation von I2C GPIO 
hilft mir irgendwie einfach nicht sinnvoll weiter... xD

von AKKS (Gast)


Lesenswert?

Ich geh mal davon aus dass du Linux drauf laufen lässt.

http://www.e-reflexes.de/oxy_blog/?cat=3
http://www.e-reflexes.de/oxy_blog/?tag=i2c-scanner
AVR32412: 32-bit AVR AP7 Linux TWI driver
AVR32408: 32-bit AVR AP7 Linux GPIO driver

von Axel K. (axel)


Lesenswert?

Prinzipiell brauchst du keine fertigen libs. Allein anhand des 
Datenblattes von zb den mega8 kann mal sich das schritt fuer schritt 
selbst zusammen wuerfeln. Beitrag "TWI / I2C einf. MASTER SLAVE Beispiel(Assembler) ATmega8"


Wenn die i2c slaves die selbe Adresse haben und du von diesen lesen 
willst, dann geht das nicht wenn die am selben bus haengen. (Eigentlich 
hat man an manchen ICs noch 3 pins die man extern auf high oder masse 
legen kann um zb die letzten 3 bits der adresse festzulegen.) Du 
muesstest dann die SDA Leitung von dem jeweiligen Sensor trennen.

von qa729 (Gast)


Lesenswert?

Danke für die Antworten! Die ersten beiden Links sind schonmal sicher 
sehr hilfreich, vor allem der I2C Scanner.
Was den zweiten Beitrag betrifft, hast du sicher Recht, man muss keine 
Bibliothek verwenden. Aber das ist doch wohl der eigentliche Sinn von 
Bibliotheken: Man kann sie verwenden, und sie ersparen viel Arbeit :)
Falls sonst noch jemand gute Links kennt, nur her damit :) Ich bin für 
jeden weterführenden Link sehr dankbar.
Das Beispiel mit dem Auslesen der Temperatur vom Attiny24 ist schonmal 
sehr nahe an meinem Anwendungsfall, das sollte mir auf jeden Fall sehr 
schnell weiterhelfen :)
Was das Ändern der Adresse betrifft: Es ist möglich durch setzen von 5V 
auf einen Pin die Adresse auf eine Alternativadresse zu ändern! Durch 
deinen Anstoß habe ich das Datenblatt nach soetwas durchsucht, und eben 
auch etwas gefunden.
Nun müsste ich nur noch zwischen 2*2 Sensoren wechseln, was nur 4 
Transistoren bedeuted, oder eben einfach mittels I2C-GPIO verschiedene 
i2c devices machen, die auf verschiedenen Ausgängen liegen (wenn ich 
dafür intelligent genug bin, wenn nicht, gibts ja immer noch 
Transistoren xD).

Auf jeden Fall Danke an Euch!

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.