Geräte mit I2C funktionieren nicht mehr?

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Geräte mit I2C funktionieren nicht mehr?

      Hallo,
      ich habe vor wenigen Tagen bemerkt, dass bei mir I2C-Anwendungen nicht mehr funktionieren, z.B. mit diversen AD-Wandlern:
      -ADS1100
      -ADS1110
      -ADS1115
      Offenbar werden die Bausteine noch angesprochen, da bei vertauschten SCL- und SDA- Leitungen nichts auf dem Display erscheint.
      Bei richtiger Beschaltung von SCL und SDA wird durchweg "0.0" oder "0.0000" oder was sonst in den Programmen angezeigt werden soll.
      Egal, welche Spannung ich drauf gebe, oder die Eingänge frei lasse, es tut sich nichts, nur 0.00, usw.
      Ich habe schon das Bascom-Programm neu aufgeladen, die Controller getauscht, verschiedene (auch neue) AD-Wandler angeschlossen, ältere Programm-Versionen aus meinem backup benutzt (die früher ohne Probleme funktioniert haben) und ebenfalls einen neuen Programmieradapter eingesetzt. Hat alles nichts gebracht, es wird immer noch 0.000 angezeigt.
      Andere Funktionen in den Programmen (Tastendruck, Interrupts, ect) funktionieren nach wie vor.


      Angehängt mal ein Beispielprogramm, das auch nicht funktioniert:

      Habt ihr eine Idee, was die Ursache sein könnte? Wie schon gesagt, bis vor ca. ein paar Monaten (da hab ich einen Temperaturregler gebaut) hat dies noch ohne Probleme funktioniert.

      Danke schon mal im Voraus!
      Dateien
    • hab gerade noch mal nachgeschaut:
      Controller läuft mit 1MHz, pullup-Widerstände sind dran. Sind fertige Boards (entweder selber gemacht oder gekauft) mit pullup-Widerständen drauf.
      Was mich so ratlos macht, ist, dass es bisher funktioniert hat, und nun nicht mehr. Hab mehrere Module im Haus in Betrieb, die funktionieren, aber ich kann nichts neu programmieren, da keine sinnvollen Werte mehr zurück kommen. Ebenfalls schon ein anderes Steckbrett getestet.
      Wie stelle ich den I2C-Scanner an?
      Gruss
    • Cable,
      ich kann dein Programm leider nicht so ohne weiteres einsetzen und prüfen, da ich keinen Portexpander á la PFC8574 habe.
      Gibt es noch Möglichkeiten, warum es nicht mehr funktioniert? Mir bleibt als Ursache fast nur noch mein Laptop, das ist das Einzige, was ich nicht getauscht habe, bzw. nicht auf Anfang gesetzt habe.....
    • Wie Michael geschrieben hat: Brenne Dir das I2C-Scanner-Programm auf den Controller.
      Am Ende liegt es vielleicht nur an einem lockeren Kabel.

      I2C-Scanner

      Hast Du den PC mit Programmer zur Laufzeit noch angesteckt? Ich habe jetzt nicht nachgesehen, ob Du evtl. als I2C-Pins welche benutzt, die auch für ISP benutzt werden und bei eingestecktem Programmer beeinflusst werden.
      Lehn Dich einmal zurück. Was hat genau schon funktioniert und funktioniert jetzt nicht? Schreib nicht bei jedem Vorschlag „ist ok“, sondern überprüfe das auch wirklich! Beispiel Takt: Setze vor Deine Hauptschleife eine kleine Schleife, in der Du eine LED im Sekundenrythmus blinken lässt? Erst wenn sie das wirklich im Sekundenrythmus tut, dann wird wohl $crystal stimmen. Du schreibst ja, dass Du den Controller getauscht hast: Fuses wieder eingestellt? Pullup-Widerstände: Kannst Du den Controller aus einer Fassung nehmen und die Pullup-Widerstände messen? Sonst siehst Du die vielleicht, aber vielleicht gibt es eine kalte Lötstelle.
      Was ein Tausch des Laptops bringen sollte ist mir nicht klar. Was soll der Exkurs mit einer LCD-Lib? Dein LCD scheint doch etwas anzuzeigen, oder?
      Geh das mal systematisch und unvoreingenommen an. LED-Einsekundenblinktest, Zähler auf LCD hochzählen, I2C-Scanner, dann Deinen Slave ansprechen (beschreiben, Register auslesen), ...
    • Hallo Hueppi114,
      also dein Programm läuft so auch nicht bei mir. Der AD-Wandler arbeitet nicht.
      Füge die beiden Zeilen in deine Routine ein, danach sollte es gehen.
      I2cstart
      I2cwbyte Ads1110_write
      I2cwbyte &B00000001 '<----- einfügen
      I2cwbyte Config_high 'Eingänge AIN0 - AIN1
      I2cwbyte &B00000000 '<----- einfügen LowByte
      I2cstop
      Versuch macht klug !
    • Das Problem ist ohne diese Zeilen arbeitet der AD-Wandler nicht korrekt. Wird er allerdings einmal mit einem funktionierenden Programm angestoßen, arbeitet er bis zur Spannungsunterbrechung weiter.
      Ich kann mir vorstellen dass das ursprüngliche Programm funktioniert hat. Dann wurde es verändert . Das Programm arbeitet dann solange weiter bis halt die Stromversorgung unterbrochen wird.
      Versuch macht klug !
    • So,
      Ich hab heute mal den I2C-Scanner laufen lassen, und er erkennt verschiedene Module mit Adresse, das ist schon mal gut.
      Hab dann das o.g. Testprogramm für den ADS1110 wie von Cable beschrieben angepasst, und die Zeilen eingefügt.
      Das Modul bringt jetzt Werte, die per Poti auch verstellt werden können. Die Kommunikation zwischen Atmega und ADS1110 läuft also.
      Aber:
      Als Maximalwert werden 0,128V angezeigt, obwohl ich bis 5V (Betriebsspannung) hochdrehen kann. Mit den Einstellungen (PGA = 1, und der Referenzspannungdes ADC von 2,048V)
      müssten eigentlich maximal 2,048V angezeigt werden, oder? Wenn man den summierten ADC-Wert durch 5 (wg. 5-fach Messung) teilt, kommt man auf 2047, das wären 11 bit. Wo die nun herkommen sollen, ist mir ein Rätsel.
      Könnt ihr das erklären?
      Gruss
      Dateien
    • Er führt eine Differenzmessung aus, versuch mal Const Config_high = &B11011100

      'When writing
      'No effect = &B0xxxxxxx xxxxxxxx
      'Start a single conversion = &B1xxxxxxx xxxxxxxx
      'When reading
      'Device is currently performing a conversion = &B0xxxxxxx xxxxxxxx
      'Device is not currently performing a conversion = &B1xxxxxxx xxxxxxxx
      'Bit 14..12 Input Multiplexer configuration
      'Ain0+Ain1= &Bx000xxxx xxxxxxxx default
      'Ain0+Ain3= &bx001xxxx xxxxxxxx
      'Ain1+Ain3= &Bx010xxxx xxxxxxxx
      'Ain2+Ain3= &bx011xxxx xxxxxxxx
      'Ain0+GND= &Bx100xxxx xxxxxxxx
      'Ain1+GND= &Bx101xxxx xxxxxxxx
      'Ain2+GND= &Bx110xxxx xxxxxxxx
      'Ain3+GND= &Bx111xxxx xxxxxxxx
    • Hallo Pluto25,
      bringt auch keine Änderung,
      ich hatte Ain1 bereits auf Masse, so ist es egal, ob ich die beiden Eingänge als Differenzeingänge konfiguriere, dabei Ain1 auf Masse lege, oder anders.
      Hätte vorher Ain1 in der Luft gehangen, so wäre der Wert auch sicher nicht stabil gewesen, das ist er aber.
      Es kommt wieder 0,128V maximal raus....
    • Warum Spannung = Sumhi_lo / 80000? - 10000 wäre richtig.
      2,048V / 4096 = 0,5mV Auflösung
      Bei mehr als 2,047V Eingang gibt er 4095 aus. mal 5 Messungen ergibt 20475
      /10000 ergeben die gemessenen 2,047V

      PS Ich hatte mal 1115 bestellt die angeblich 16Bit auflösung haben sollten. Real haben die auch 12 bit Aulösung (nur 11 bit im Differenzmodus um negative darzustellen ).

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Pluto25 ()

    • Hallo Pluto25,
      der ADS1110 hat 16 Bit Auflösung, 15 Bit plus Vorzeichen, da Differenzeingang.
      Er zeigt im o.g. Programm dann 10235 an, was dann einzeln (wg. 5-fach Messung) 2047 ergibt, also 11 Bit.
      Hat vor ein paar Monaten auch noch funktioniert. Nur irgendwo ist jetzt der Wurm drin.
      Bei den ADS1115 Boards muss man aufpassen, da gibt es in der Tat weitgehend baugleiche Boards, auf denen dann der ADS1015 mit 12 Bit Auflösung verbaut ist. Gibt ne Markierung auf diesen kleinen Boards, die dann schwarz ist. Manchmal ist nichts markiert, und dann muss man sehen......
      Hat noch jemand ne Idee?
      Ich
      hab diese verschiedenen ADCs in den letzten zwei Jahren mehrfach
      verbaut, und es funktionierte bisher ohne Probleme, und nun hab ich
      unerklärbare Phänomene.....