- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Probleme mit I2C Verbindung

  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1

    Probleme mit I2C Verbindung

    Anzeige

    Praxistest und DIY Projekte
    Hallo Freunde , vieleicht bin ich wieder mal ein bischen blind, oder wieder das oft zetierte Brett vorm K... Ich habe Versucht eine Master-Slave-I2C Verbindung zwischen 2 Arduino(Uno) herzustellen. Am Master wird seriel die Tastatureingabe abgefragt und soll zum Slave übertragen per I2C übertragen werde. Dort soll der empfangene Byte Wert( Buchstaben A...Z Ziffern 0...9) auf einem LCD als Kontrolle angezeigt werden..
    Wird aber nix angezeigt vom gesendetem Wert....
    Hier mal der Source:
    Code:
    /* ========================================================================== */
    /*                                                                            */
    /*   I2C_Master_Tx.c                                                          */
    /*   (c) 2013 Gerhard Hinze                                                   */
    /*                                                                            */
    /*   Description                                                              */
    /*                                                                            */
    /* ========================================================================== */
    /*
      The circuit:
     * SDA pin to analog pin  4
     * SCL pin to analog pin  5
     */
    
    #include <Wire.h>
    #define I2C_Slave_Adress 127
    
    
    
    
    void setup()
    {
      Serial.begin(9600);
      Wire.begin(); //als Master am Bus anmelden
    }
    
    void loop()
    {
    if (Serial.available())
      {
      Wire.beginTransmission(I2C_Slave_Adress);  
      byte tx = Serial.read(); // Eingabe lesen
      Wire.send(tx);           // Eingabe über I2C senden
      Wire.endTransmission();
     
      Serial.write(tx);        // Eingabe als Echo return zum Terminal
      delay(100);
      
      
      }
           
     
    }
    
    
    /* ========================================================================== */
    /*                                                                            */
    /*   I2C_Slave_LCD.c                                                          */
    /*   (c) 2013 Gerhard Hinze                                                   */
    /*                                                                            */
    /*   Description                                                              */
    /*                                                                            */
    /* ========================================================================== */
    /*
     * SDA pin to analog pin  4
     * SCL pin to analog pin  5
     */
    
    #include <LiquidCrystal.h>
    #include <Wire.h>
    #define I2C_Slave_Adress 127
    LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7);
    
    
    
    void setup()
    {
      lcd.clear();
      lcd.begin(16, 2);
      lcd.setCursor(0,0);
      lcd.print("I2C-Verbindung");
      Wire.begin(I2C_Slave_Adress); //als Slave am Bus anmelden
    }
    
    void loop()
    {
    if (Wire.available())
    {
    byte x = Wire.receive();
    lcd.setCursor(0, 1);
    lcd.print("Empfange : "); 
    lcd.setCursor(11,1);
    lcd.print (char(x));        
     delay(100);
    }}
    Ich danke schon mal dem Edlen Helfer , der mich ein wenig auf die Sprünge, besser zu einer Zeichenanzeige am LCD bringt.
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    ... Master-Slave-I2C Verbindung zwischen 2 Arduino ... #define I2C_Slave_Adress 127 ...
    Arduino-Slang kann ich nicht, sorry. Aber ich weiß definitiv, dass eine I²C-Adresse IMMER gerade ist. Im Prinzip. Das LSBit ist das R/W-Bit, es ist Null fürs Schreiben, und Eins fürs Lesen. Lies das doch ruhig mal im R.N.Wissen nach. Deswegen wird Dein Slave wohl auf Adresse 126 liegen, nur zum Lesen musst Du das Read-Bit setzten, dann liest der Master von 127 . Du verwendest im Code aber offenbar nur eine einzige Adresse fürs schreiben UND lesen.

    Darüber hinaus kann ich Richtigkeit oder Fehler in Deinem Code leider garnicht beurteilen.
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1
    Danke für die Ausführungen !
    Es ist mein erstes I2C Proj. dieser Art. Beim Arduino bekommt der Master keine Nummer/Adresse zugeornet , darum steht da auch "#define I2C_Slave_Adress 127" , dem Slave kann als Adresse 0...127 zugeordnet werden.
    So die Beschreibung in den Arduino Büchern. Ich werde aber mal danach googlen, da mir die Listings in den Büchern oft zu fehlerbehaftet sind...

    Der Grund dieses Projektes ist, einen I2C -LCD-Datenmonitor zu bauen, um andere I"C Anwendungen zu testen. Da ich nun ..zig Arduino zu liegen habe und auch ein passendes LCD Shield , wolte ich das nutzbringend dafür verwenden...

    Gruss und Dank

    Gerhard

    PS: werde dieses Tutorial als Grundlage meiner weiteren Arbeit nehmen
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    32
    Beiträge
    1.192
    Hallo,
    ich sehe bei der I2C-Verbindung keine Pullup-Widerstände. Sind die internen überhaupt aktiviert?
    I2C verwendet ja Open-Collector-Ausgänge und braucht deswegen Pullup-Widerstände.
    Um auf Nummer sicher zu gehen würde ich empfehlen, zusätzliche Pullup-Widerstände einzubauen.
    Zur Dimensionierung: Es dürfen bis zu 3mA fließen, wenn ein Ausgang auf Low gezogen wird, d.h. bis 5V/3mA=1,67kOhm darfst du gehen (oder hochohmiger).
    Je niederohmiger die Widerstände, desto schneller werden die parasitären Kabelkapazitäten umgeladen aber desto höher die Stromaufnahme bei Low-Pegel.
    Ich habe meistens 3,3kOhm verwendet, das ist ein Kompromiss zwischen Stromaufnahme und max. Übertragungsgeschwindigkeit.
    Grüße,
    Bernhard

  5. #5
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    ... einen I2C -LCD-Datenmonitor zu bauen, um andere I"C Anwendungen zu testen ...
    Als Monitor für den I²C-Bus ist natürlich ein Logikanalysator die beste Wahl

    Bild hier  

    da bekommt man die Schritte gleich im Klartext und kann auch triggern. Weil ich das viele Geld dafür nicht ausgeben will/wollte, hatte ich mir einen Sniffer gebaut (Dank an Peter Dannegger) klick hier. So kann ich prächtig die Ereignisse mitschneiden (klick). Als weitere Hilfe hatte ich mir bei ELV einen USB-I²C-Adapter gekauft (Fertiggerät), der kann nach I²C lesen und schreiben. SEHR zweckmässig.
    Ciao sagt der JoeamBerg

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.08.2009
    Ort
    Berlin
    Alter
    69
    Beiträge
    348
    Hallo Oberallgeier, habe mir den Beitrag über den Sniffer gezogen. Eigentlich kaum Aufwand und schnell zu machen. Was für ein Programm ist im Text vorher dargestellt? Sieht recht gut aus.achim

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Zitat Zitat von Achim S. Beitrag anzeigen
    ... Was für ein Programm ist im Text vorher dargestellt? ...
    Hallo Achim, sorry, diese Frage versteh ich nicht :.-./
    Ciao sagt der JoeamBerg

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    11.08.2009
    Ort
    Berlin
    Alter
    69
    Beiträge
    348
    Du hast oben ein Bild reingestellt von Intronix mit einem schicken Bild und so. Das mein ich. achim

  9. #9
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.652
    Ist einfach ein Bildschirmdump von/mit dem Intronix - beim Mitschnitt einer I²-C-Kommunikation (mehr zum Intronix).
    Ciao sagt der JoeamBerg

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    73
    Beiträge
    1.175
    Blog-Einträge
    1
    Zitat Zitat von BMS Beitrag anzeigen
    Hallo,
    ich sehe bei der I2C-Verbindung keine Pullup-Widerstände. Sind die internen überhaupt aktiviert?
    I2C verwendet ja Open-Collector-Ausgänge und braucht deswegen Pullup-Widerstände.
    Um auf Nummer sicher zu gehen würde ich empfehlen, zusätzliche Pullup-Widerstände einzubauen.
    Zur Dimensionierung: Es dürfen bis zu 3mA fließen, wenn ein Ausgang auf Low gezogen wird, d.h. bis 5V/3mA=1,67kOhm darfst du gehen (oder hochohmiger).
    Je niederohmiger die Widerstände, desto schneller werden die parasitären Kabelkapazitäten umgeladen aber desto höher die Stromaufnahme bei Low-Pegel.
    Ich habe meistens 3,3kOhm verwendet, das ist ein Kompromiss zwischen Stromaufnahme und max. Übertragungsgeschwindigkeit.
    Grüße,
    Bernhard
    Wie schon gesagt, ist das mein allererstes I2C Projekt dieser Art und ich denke das die Wire Bibliothek vom Arduino, das mit den PullupWiderständen macht. Ich habe da noch nicht im Quellcode weiter geschnüffelt..
    Mir genügt es, das das Projekt mir einen übertragenen Wert auf dem LCD ausgibt. Das ist auch im Preis günstiger, als als der Intronix LogiPortAnalyzer... denn die Preislage ist für mein Hobbygebrauch zu happig.

    Ich hatte heut in der Natur-Therme ein wenig Lesezeit für ein Fachbuch vom Arduino und denke, ich habe den Fehler , jedenfalls einen schon gefunden, wird später praktisch getestet und dann hier gepostet, das Ergebnis.


    Gruss und Danke
    Gerhard
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Probleme mit XBee Verbindung
    Von lord-maricek im Forum Elektronik
    Antworten: 11
    Letzter Beitrag: 26.07.2010, 21:35
  2. Probleme mit der Verbindung zum rp6 !!
    Von rp6newbie im Forum Robby RP6
    Antworten: 30
    Letzter Beitrag: 20.12.2007, 19:41
  3. I2C Verbindung mit dem PIC
    Von Adonai im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 14.05.2007, 14:20
  4. probleme mit der verbindung
    Von cinek im Forum Asuro
    Antworten: 6
    Letzter Beitrag: 28.03.2007, 18:33
  5. probleme mit der seriellen verbindung
    Von michiE im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 8
    Letzter Beitrag: 30.06.2006, 12:09

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad