- 3D-Druck Einstieg und Tipps         
Ergebnis 1 bis 7 von 7

Thema: Problem mit dem I2C Bus

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    21.10.2004
    Beiträge
    18

    Problem mit dem I2C Bus

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo,
    ich möchte für zuhause eine Heizungssteuerung bauen. Dazu verwende ich das RN-Control Board und das Touchdisplay EAeDip240-7. Das Display steuer ich mit dem I2C-Bus an. Es funktioniert eigentlich alles einwandfrei, kann die Makro aufrufen und die Tastendrücke auswerten. Das Problem ist nur, dass sich bei irgendwelchen Tastendrücken das RN-Control Board bzw. der I2C-Bus aufhängt. Ich denk es liegt an dem I2C-Bus, weil immer die LED von der SCL-Leitung leuchtet, das heißt die SCL-leitung hat einen LOW-Zustand. Das komische ist halt auch, dass bei 95% der Tastendrücke alles funktioniert und dann hängt er sich wieder auf.
    Wäre super wenn mir jemand weiterhelfen könnte?! Danke!!

    Mit freundlichen Grüßen
    Christoph

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

    ich rate 'mal, dass irgendwas (Software, Hardware) nicht stimmt.

    Gruß Dirk

  3. #3
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Hm wäre mal interessant, herauszufinden, welches Gerät dort "spinnt".
    Hast du ne Möglichkeit, das Display über nen anderen Controller anzusteuern? Bzw. irgend ein Gerät, dass du statt dem Display ansteuern kannst? So würde sich der Ort des Fehlers eingrenzen lassen.
    #ifndef MfG
    #define MfG

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    21.10.2004
    Beiträge
    18
    Hallo
    Danke für eure Antworten!
    Ich denk eher dass es an der Software liegt, bei der Hardware sind es ja nur die beiden Leitungen SDA und SCL, die ich miteinander verbinden muss. Oder kann es daran liegen, dass ich keine Masse an dem Display bei der Bus-Verbindung angelegt hab?
    Ich hab noch einen DS1631 Temperatursensor da, werd den morgen mal noch anschließen und in Betrieb nehmen. Mal schauen ob dieser ohne Störung läuft.
    Eine andere Möglichkeit wäre noch, das RN-Control Board mit Bascom zu programmieren und schauen wie sich da das Display verhält.
    Mit freundlichen Grüßen
    Christoph

  5. #5
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    im Prinzip sollte es egal sein, wo die Masse ist, solange alle Gerätemassen verbunden sind.
    Ohne das RN-Control zu kennen: Sind Pullups für SCL/SDA nach 5V vorhanden?
    #ifndef MfG
    #define MfG

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    21.10.2004
    Beiträge
    18
    Ich denk die sind schon vorhanden.
    Für den I2C Bus verwende ich die Libs von Peter Fleury, muss ich eigentlich die Ports dem Bus noch extra zuweisen oder macht der des automatisch.
    Muss ich die Pullups dann noch aktivieren?

    Hab des so gemacht:

    (Portc.0 ist SCL und Portc.1 ist SDA)

    DDRC |= 0xFF;
    PORTC = 00000011;

    Aber die Aktivierung der Pullup-Widerstände nützt doch gar nichts, weil ich ja vorher PortC als Ausgänge definiert hab. Oder?

    Hab da noch ne frage zu der Lib von Peter Fleury, ist es sinnvoller die Funktion i2c_start_wait zu nehmen, als ständig i2c_start?

    Gruß Christoph

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    41
    Beiträge
    2.009
    Also die I2C-Pins müssen nicht gesetzt werden; Die Pins werden hier ja nicht als normale Pins verwendet, sondern die dahinterliegende TWI-Hardware steuert diese. Also einfach ungesetzt lassen.
    Die Pullups müssen dann irgendwo als Hardwareteile = Widerstände am I2C-Bus liegen. Idealerweise beim Master.

    Hab auch die von P.Fleury. Ich nehm da immer das normale I2C_Start:

    Code:
      ui8_t retval = 0;
      retval = I2C_Start(SlaveID);
      if (retval)
      {
        I2C_Stop();
      }
      else
      {
        // ...Daten senden...
        I2C_Stop();
      }
    #ifndef MfG
    #define MfG

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress