PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrere SRF02 verbinden/zusammenschalten mit I2C



superkato
13.07.2010, 12:27
Hi,
ersteinmal begrüße ich alle recht herzlich. Mein name ist Sam ich bin 25 und bin Hobbyelektroniker. Durch Google bin ich auf dieses Forum gestoßen um eine Lösung für mein Problem zu finden.

Es geht darum, drei SRF02 zusammen zuverbinden. Ich würde gerne je einen für eine Achse im Raum verwenden. Visualisieren und auslesen tue ich via LabVIEW 2009. (wer das Programm haben will, kann sich gerne bei mir melden)

Momentan siehts so aus, dass ich drei SRF02 (i2c) mit je drei USB Serial Bridges mit dem PC Verbinde und auslese.
Ich würde aber liebend gerne irgendwie zwie sensoren ablöten und diese noch an den bus von dem dritten sensor anlöten, so dass ich nur ein usb port benutze aber über den i2c die 3 sensoren auslese.

So sieht der SRF02 aus den ich benutze samt USB Board. (je 3 mal vorhanden). Ich will das für meinen Quattrokopter benutzen um die Daten für meine AHRS zu stützen. Aber erstmal alles nur in LabVIEW.

Für Lösungsvorschläge wäre ich sehr dankbar!

LG,
Sam

Kampi
13.07.2010, 12:53
Hallo erstmal und willkommen O:)

Da du ja gesagt hast das du I²C nehmen willst, nehm ich mal an willst du einen µC programmieren. Nun die Frage: Wie willst du ihn programmieren? Also in welcher Sprache.

Wenn du Basic nimmst hast du hier schonmal eine recht ordentliche Doku:
http://www.robotikhardware.de/download/srf02doku.pdf

Jetzt weiß ich nicht was das für USB Adapter sind, aber ich vermute mal das sind Adapter von RS232 auf USB (denk ich mir mal, weil die Module selbst ja auch RS232 haben).
Das heißt du nimmst dir einen Mikrocontroller (Mega32 z.B.) und verbindest dein USB Modul über Rx und Tx mit dem Controller. Dann schreibst du noch ein Programm welches die Register der drei US-Module ausliest und per UART an deinen PC sendet.
Nun ist es ja so das die drei Module dieselbe Adresse haben. Diese musst du dann erstmal ändern. Das geht aber nur nacheinander, also es darf immer nur 1 Modul am Bus hängen.
So wie ich das verstanden habe bleibt die Adresse dann dauerhaft in diesem Modul. Das heißt du schreibst erstmal ein ganz einfaches Programm für den Bus, womit du deine drei Module unterschiedlich Adressieren kannst. In der Doku steht das du nur das 4. Byte dafür ändern musst, weil das die Adresse ist.
Danach schreibst du das eigentliche Hauptprogramm wo alle drei, von dir festgelegten Adressen angesprochen werden und ausgelesen werden und die Daten schickst du dann über UART zu deinem PC.

superkato
13.07.2010, 13:43
Das ist doch schonmal ein ordentlicher Ansatz ! Vielen Dank!

Ja die Usb Module haben einen FTDI RS232.

Also ich würde im Prinzip mein Atmega32 Eval-Board (hat auch USB) nehmen, die 3 Sensoren an Ports bringen.
Den 3 Sensoren eine unterschiedliche Adresse geben und diese dann via Atmega i2c auslesen und weiterverarbeiten.
Ist dass so richtig ?
Also mir gehts nur ums Prinzip, den rest schaffe ich ja dann irgendwie :)
hier gibts soviele Anleitungen.

Vielen Dank Kampi , du hast mir wirklich sehr geholfen!

Ich bin natürlich noch für weitere Ideen offen!!


lg sam

Richard
13.07.2010, 13:57
Es dürfte kein Problem sein über I²C mehrere Sensoren auszulesen.
Allerdings braucht so ein US Sensor eine gewisse Zeit für die
Wandlung, das (die Zeit) muss beim Abfragen/Weiterschalten beachtet
werden. Sonnst kommen nur Fehlmessungen heraus. Wie lange so eine
Messung dauert sollte im Datenblatt zu finden sein.

Gruß Richard

Kampi
13.07.2010, 14:24
Laut Doku dauert eine Messung 65ms. In dieser Zeit ist der I²C Bus blockiert. D.h. wenn ein Sensor misst kann kein anderer Busteilnehmer was machen.
D.h. dein Programm müsste dann so aussehne

I2C starten
I2C Adresse 1 übermitteln
I2C Maßeinheit übermitteln (81 für cm)
I2C Stop
65ms warten

I2C starten
I2C Adresse vom 1. Sensor
I2C Adresse vom 2. Register (für die Entfernung
I2C Stop

I2C starten
I2C Adresse vom 1. Sensor
I2C Lesen 1. Byte mit Ack
I2C Lesen 2. Byte mit Nack
I2C stop

Danach machste aus dem 1. und 2. Byte eine fertige Zahl.
Und diese Befehlsreihenfolge wiederholst du zwei mal für die anderen beiden Sensoren.
Die Sachen speicherst du dann in Variablen wie Sensor1, Sensor2 und Sensor3 und gibst die via UART und deinem FT232 an deinem PC aus.

Mit der Adressierung machste das wie folgt:
Du schließt einen(!) Sensor an dein Board an und schreibst ein Programm welches so aussieht:

I2C starten
I2C Adresse vom 1. Sensor
I2C Schreibe 0
I2C Schreibe A0
I2C Stop
Warte 50ms

I2C starten
I2C Adresse vom 1. Sensor
I2C Schreibe 0
I2C Schreibe AA
I2C Stop
Warte 50ms

I2C starten
I2C Adresse vom 1. Sensor
I2C Schreibe 0
I2C Schreibe A5
I2C Stop
Warte 50ms

I2C starten
I2C Adresse vom 1. Sensor
I2C Schreibe 0
I2C Schreibe z.B. F2 , mögliche Adressen stehen in der Doku
I2C Stop
Warte 50ms

So hast du dann die Adresse von dem Sensor geändert. Den machst du nun ab und machst einen anderen dran und nimmst dasselbe Programm aber die Stelle wo F2 steht wird durch eine andere ersetzt.

superkato
14.07.2010, 03:19
Hey vielen Dank! Das hilft mir bei der Programmierung sehr viel weiter!!!
Wie sieht es denn jetzt hardwaretechnisch aus ?
Wie verbinde ich nun die anderen Sensoren und wohin ?
Einfach die I2C Ports vom Atmel nehmen ? oder nacheinander reihen ?

Viele Dank nochmal!

Das wichtigste ist ja die Software gewesen! =D>

Kampi
14.07.2010, 05:01
Hardware sieht so aus das du dir einen Controller nimmst der UART hat für den USB Treiber und TWI für die Sensoren.
TWI wird dann per Pull-up Widerstände (1k-10k typischerweise 4,7k) an 5V gelegt und dann verbindest du jeden SCL Anschluss von den Sensoren mit dem SCL vom Controller und dasselbe machste mit SDA.
Und von dem FT232 machste Tx an Rx vom Controller und Rx an Tx vom Controller.