- LiFePO4 Speicher Test         
Ergebnis 1 bis 10 von 14

Thema: Probleme mit I2C Verbindung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    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

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    Zitat Zitat von oderlachs Beitrag anzeigen
    ... mein allererstes I2C Projekt ... ich denke ... das mit den PullupWiderständen macht ...
    Glaub ich ganz bestimmt nicht. Ganz einfach: die internen Pullups sind in den Datenblättern mit (meist) 30 kΩ bis 60 kΩ spezifiziert, die I²C-Pullups sind viel niedriger, dazu gibts in den Atmel-Datenblättern auch Berechnungsgrundlagen. Ansonsten Richtwerte im R N Wissen im einschlägigen Artikel oder in der Originabibel von Philips.
    Ciao sagt der JoeamBerg

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    Wie dem auch sei, sowie Zeit dafür ist probiere ich mit 2x 4k7, das ist so ein Wert vom meinem Handvorrat für solche Sachen....daran soll es nicht liegen
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.698
    Zitat Zitat von oderlachs Beitrag anzeigen
    Wie dem auch sei, sowie Zeit dafür ist probiere ich mit 2x 4k7 ...
    Das ist ein guter, allgemein üblicher Wert. Die teilweise verbauten 10k (in der einen oder andern Fertig-Kauf-Platine) hatte ich alle als zu hoch beurteilen müssen und ersetzt. In einer Platine (glaub ich) habe ich 3k3 eingebaut. Und mein Bus mit vorerst drei, max vier Platinen tickert an einem 100kHz-Bus mit rund 2,2 m Länge recht sicher.
    Ciao sagt der JoeamBerg

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von oderlachs
    Registriert seit
    17.05.2010
    Ort
    Oderberg
    Alter
    74
    Beiträge
    1.175
    Blog-Einträge
    1
    Also ganz kurz, mein Fehler lag darin, das ich den "onReceive-Handler" nicht aufgerufen hatte:
    Code:
    Wire.onReceive(receiveEvent);
    Die Testverbindung zw. 2 Arduino über ca 30cm verbunden geht definitiv auch ohne ext. PullUpsR's, wie folgendes beweist der Empfang einer Zählschleife 0..255:
    Klicke auf die Grafik für eine größere Ansicht

Name:	i2c_putty_rx.jpg
Hits:	7
Größe:	27,4 KB
ID:	26549
    Da ich aber längere Verbindungen , um die 5..7m benötige wird dasdann in der Praxis nicht so gehen, aber um mal empfangende Daten enzuzeigen reicht mir das schon um I2C-Sendemodule zu kontrollieren.

    Vielen Dank
    Gerhard

    Hier nun der funktionierende Code für meine Tests:
    Code:
    //Listing Master & Slave(ID=4)
    
    // Wire Master Writer
    // by Nicholas Zambetti <http://www.zambetti.com>
    
    // Demonstrates use of the Wire library
    // Writes data to an I2C/TWI slave device
    // Refer to the "Wire Slave Receiver" example for use with this
    
    // Created 29 March 2006
    
    // This example code is in the public domain.
    
    
    #include <Wire.h>
    
    void setup()
    {
      Wire.begin(); // join I2C bus (address optional for master)
    }
    
    byte x = 0;
    
    void loop()
    {
      Wire.beginTransmission(4); // transmit to device #4
      Wire.write("x is ");        // sends five bytes
      Wire.write(x);              // sends one byte  
      Wire.endTransmission();    // stop transmitting
    
      x++;
      delay(500);
    }
    /******************************************************************************/
    //Listing Slave mit LCD
    #include <LiquidCrystal.h>
    #include <Wire.h>
    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(4);                // join I2C bus with address #4
      Wire.onReceive(receiveEvent); // register event
    }
    
    void loop()
    {
      delay(100);
    }
    
    void receiveEvent(int howMany)
    {
      while(1 < Wire.available()) // loop through all but the last
      {
        char c = Wire.read(); // receive byte as a character
        Serial.print(c);         // print the character
      }
      int x = Wire.read();    // receive byte as an integer
      Serial.println(x);         // print the integer
      lcd.setCursor(0, 1);
    lcd.print("Empfange : "); 
    lcd.setCursor(11,1);
    lcd.print (char(x)); 
    }
    
    /******************************************************************************/
    Geändert von oderlachs (12.10.2013 um 10:35 Uhr)
    Arduinos, STK-500(AVR), EasyPIC-40, PICKIT 3 & MPLABX-IDE , Linux Mint

Ä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
  •  

Solar Speicher und Akkus Tests