- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 3 von 3

Thema: I2C Adressändeung

  1. #1

    I2C Adressändeung

    Anzeige

    Praxistest und DIY Projekte
    Hey zusammen,

    Ich habe ein kleines Problem. Ich will zwei srf02 Ultraschallsensoren über I2C an meinem Arduino Uno anschliessen. Ich habe inzwischen herausgefunden, dass ich die Adressen der slave's ändern muss. Ich habe auch die Befehle gefunden mit denen ich das anstellen kann:

    Changing the I2C Bus Address
    To change the I2C address of the SRF02 you must have only one sonar on the bus. Write the 3 sequence commands in the correct order followed by the address. Example; to change the address of a sonar currently at 0xE0 (the default shipped address) to 0xF2, write the following to address 0xE0; (0xA0, 0xAA, 0xA5, 0xF2 )
    (gefunden bei http://www.robot-electronics.co.uk/h...2C.htm#Address)

    ich habe jedoch nicht 0xE0 als Standart, sondern 0x70. dafür muss ich die Adresse ja einfach um einen Byte nach rechts verschieben.

    was ich allerdings nicht ganz verstehe: wie und wo muss ich die Befehle anordnern, damit die Adresse auch geändert wird.


    meine bisherigen Versuche waren nicht gerade von Erfolg gekrönt.

    #include <Wire.h>
    #define srfAddress ( 0xE0 >> 1, 0xA0 >> 1, 0xAA >> 1, 0xA5 >> 1, 0xF2 >> 1) // Address of the SRF08
    #define cmdByte 0x00 // Command byte
    #define rangeByte 0x02 // Byte for start of ranging data
    byte highByte = 0x00; // Stores high byte from ranging
    byte lowByte = 0x00; // Stored low byte from ranging

    void setup()
    {

    }

    void loop()
    {

    }



    Vielen Dank schon im voraus,

    Freundliche Grüsse,

    toopic

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Hi toopic,

    die Bytes 0xA0, 0xAA, 0xA5 dürfen nicht mit ">> 1" nach rechts geschoben werden, weil das keine Adressen sind.
    Diese Bytes werden halt an deine Adress 0x70 gesendet, gefolgt von deiner neuen Adresse (0xYY >> 1).
    Gruß
    Dirk

  3. #3
    Danke für deine Hilfe Dirk,

    das hat mir sehr geholfen. Jetzt habe ich es entlich doch noch geschafft.
    Hier wäre der Sketch:





    #include "Wire.h"

    #define currentAddress 0x70 //aktuelle Adresse reinschreiben / type in current address
    #define newAddress 0x74 //neue Adresse reinschreiben / type in new adress

    void setup() {

    delay (10000); //Delay for Serial Monitor

    Serial.begin(115200);
    Wire.begin();
    Wire.beginTransmission(currentAddress);
    Wire.write(0x00);
    Wire.write(0xA0);
    if (Wire.endTransmission()) {
    Serial.println("Error writing 1. command byte (maybe adress already changed)");
    return;
    }
    Wire.beginTransmission(currentAddress);
    Wire.write(0x00);
    Wire.write(0xAA);
    if (Wire.endTransmission()) {
    Serial.println("Error writing 2. command byte");
    return;
    }
    Wire.beginTransmission(currentAddress);
    Wire.write(0x00);
    Wire.write(0xA5);
    if (Wire.endTransmission()) {
    Serial.println("Error writing 3. command byte");
    return;

    } Wire.beginTransmission(currentAddress);
    Wire.write(0x00);
    Wire.write(newAddress << 1);
    if (Wire.endTransmission()) {
    Serial.println("Error writing new adress byte");
    return;
    }
    Serial.print("Successfully configured new Address: ");
    Serial.println(newAddress);
    }

    void loop() {
    }



    Man muss darauf achten, dass auf dem Datenblatthttp://www.robot-electronics.co.uk/htm/srf02techI2C.htm die Befehle um die Adresse zu ändern nicht in der richtigen Reihenfolge sind. In diesem Sketch stimmt die Reihenfolge und so funktioniert es.
    Am Anfang des Sketches habe ich einen Delay eingebaut, damit man Zeit hat den Serial Monitor zu öffnen und die Erfolgreiche Änderung auch zu sehen. Denn ansonsten führt das Programm den Befehl aus und wenn man den Serial öffnet will es ihn nochmal ausführen, hat aber bereits eine andere Adresse und gibt daher eine Error Warnung an.

    Freundliche Grüsse,

    Toopic

Ähnliche Themen

  1. Problem mit I2C Sensor DRMOD-I2C-RVI
    Von muerzi im Forum Sensoren / Sensorik
    Antworten: 23
    Letzter Beitrag: 22.02.2010, 18:29
  2. I2C-Bus, analog <-> I2C
    Von Normalo im Forum Elektronik
    Antworten: 26
    Letzter Beitrag: 29.12.2008, 19:24
  3. Antworten: 2
    Letzter Beitrag: 10.08.2006, 12:18
  4. Problem: Zwei MEGA8 via I2C-Bus koppeln (mit I2C-slave-Lib)
    Von Ulfens im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 11.01.2006, 15:25
  5. *I2C* maximale eingänge per i2c auf 8 digitale Pins
    Von Christian Sturm im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 22.06.2004, 19:44

Berechtigungen

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

Labornetzteil AliExpress