-         

Ergebnis 1 bis 7 von 7

Thema: Mehrere SRF02 verbinden/zusammenschalten mit I2C

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    13.07.2010
    Beiträge
    22

    Mehrere SRF02 verbinden/zusammenschalten mit I2C

    Anzeige

    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
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken srf02_mit_usb.jpg  

  2. #2
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Hallo erstmal und willkommen

    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.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    13.07.2010
    Beiträge
    22
    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

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    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

  5. #5
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    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.

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    13.07.2010
    Beiträge
    22
    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>

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    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.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •