I2C: kein Signal an SLC

  • Hallo,

    ich habe heute versucht, I2C an meinem Raspi zum Laufen zu bekommen.

    I2C via raspi-config hab ich aktiviert, rebootet und ebenso die i2c-tools installiert.-

    Da mein Atmega nicht gefunden wurde (was auch an einem Problem auf dessen Seite liegen mag) hab ich erstmal mein DSO an die Leitung drangehängt und festgestellt, dass beide Leitungen dauerhaft Low sind. D.h. trotz Ausführung von Kommandos tut sich da gar nichts. Zumindest das Taktsignal sollte ich sehen. Das DSO hat auch einen I2C-Auswertefunktion, die aber aufgrund der nicht vorhandenen Daten natürlich auch nichts findet.

    i2c-detect findet nichts am Bus (weil nichts dranhängt) aber auch während das läuft kommt keinerlei Änderung an den beiden Leitungen und auch keine Fehlermeldung

    Zur Sicherheit hab ich es neben dem RPI 2B auch noch mit nem 1er versucht erhalte aber auch dort das selbe Verhalten. Daher würde ich mal einen Hardwaredefekt erstmal für unwahrscheinlich halten, sondern denke eher, dass da irgendwas "basic" noch falsch ist.

    Ich habe allerdings trotz Suche nichts gefunden.

    Hat mir jemand einen Tipp, was ich noch prüfen kann?

    Danke und Gruß

    Micha

  • Mein Verdacht: 2 I2C Master können nicht miteinander.

    Du brauchst einen Master (=Pi) und einen, oder mehrere Slaves.

    Servus !

    Ed: Wenn Dein Atmel ein 5 V Device ist, brauchst Du neben der Slave Konfiguration darüberhinaus einen 5 V -> 3,3 V Pegelwandler.

    RTFM = Read The Factory Manual, oder so

    Edited once, last by RTFM (October 1, 2022 at 9:05 PM).

  • Hallo und willkommen im Forum.

    ... Hat mir jemand einen Tipp, was ich noch prüfen kann?

    Ein SLC Signal kenn ich jetzt nicht, aber vlt. meinst Du SCL? Schau mal nach ob das i2c-dev Kernelmodul geladen ist, falls nicht könnte man mal modprobe i2c-dev probieren. Danach kannst Du ja nochmal mit einem I2C Slave testen. Fragst Du denn auch den richtigen I2C Bus ab?

    Edited once, last by Fliegenhals (October 1, 2022 at 9:45 PM).

  • Moinsen,

    Erst einmal würde ich die GPIO Pins 3&5 Prüfen, die für den Datentransfern des I²C verantwortlich sind.
    Wenn du schon einmal den Versuch unternommen haben solltest, den Atmega, wo hier jetzt noch die Frage zu klären wäre mit welcher Vc du diesen bei deinem Test betrieben hast, ob diese überhaupt richtig verbunden waren.
    Meine grundsätzlichen Bedenken wären, wenn der Atmega mit 5 Volt betrieben wurde, und du keinen Levelshifter ( Pegel-Konverter 3,3 V to 5,0 V ) verwendet hast, dass zumindest der SDA einen Schaden genommen haben könnte, denn diese Leitung wird bidirektional genutzt.
    Also mal ne einfache LED nehmen, wenn du kein gescheites Multmeter hast, diese mit einem 470 Ohm Vorwiderstand ausstatten und den Pin togglen lassen ( Digital Output High/ LOW / High / Low usw )

    Damit kannst du beide GPIO Pins sowohl mit einer LED, welche dann im Taktverhältnis 1:1 mit 1 Hz blinkt, wie auch mit einem Multimeter ( aber bitte nur mit einem entsprechenden Adapter, nicht die Meßspitzen direkt an die GPIOs halten ) gegen GND prüfen.

    Dann ist die Frage, was hier auch schon erwähnt wurde, muss einer der beiden PI oder Atmega als Bus Client fungieren. Zweimal Bus-Master geht nicht.

    Da I²C mit Bit-Banging läuft, also die Zeiten hier essentiell sind, kann man den Takt nicht so ohne weiteres rein mit Software darstellen. Zwar gibt es u.a. für Python das Modul / Library SMBus, aber ohne eine Slave Adresse wirft das auch nur einen Fehler aus. Vielleicht hast du in deiner Sammlung einen anderen Baustein der auch das I²C Protokoll benutzt. PCF8574, MCP23017, ADS1115, oder ähnliches womit du diese PINs in Verbindung mit dem Shell Befehl i2cdetect prüfen könntest.


    Eine weitere Testmöglichkeit wäre den Übertragungsmodus Standard 0:0 Low = Low / High = High beim Taktsignal in Modus 1:1 zu ändern. Dann müßte ohne Taktung, und ohne Datentransfer auf beiden Pins ein HIGH-Level anliegen.

    Sollten schon die Ausgabe-Tests via LED / Multimeter nicht funktionieren, hast du wahrscheinlich dein PI / bzw. dessen GPIOs auf Grund falscher Pegelspannungen zerschossen. Hier könntest du noch mit einem Eintrag in der /boot/config.txt auf andere PIns ausweichen.

    Ergänzender Nachtrag:

    Falls du den Atmega weiterhin mit 5 Volt betreiben willst, und die Ausgänge damit einen 5 Volt Pegel ausgaben, benötigst du einen bidirektional wirkenden Levelshifter. Alternativ kannst du auch einen 2N7000 zum BSS138 verwenden.

    Franky

    Edited once, last by Franky07: Nachtrag Levelshifter (October 2, 2022 at 10:22 AM).

  • Hallo zusammen,

    der Punkt ist soweit gelöst.

    Ja, der Atmega läuft mit 5V, da aber keine PullUps auf der 5V-Seite genutzt werden, ist das unkritisch.

    Ich hab mittlerweile einen I2C-Sensor bestellt und diesen dran gehängt. Der lässt sich auslesen, aber nicht mehr, wenn das DSO dranhängt. Es scheint, dass das DSO die Leitung auf Masse gezogen hat und damit kein Signal mehr durchging.

    Das ursprüngliche Problem war eine falsch-Verdrahtung des Atmegas.

    Vielen Dank für die vielen Hilfestellungen, welche mich im Endeffekt auf den richtigen Punkt gebracht haben.

    Jetzt habe ich ein Folgeproblem, was ich aber in einem eigenen Thread aufmache (betrifft die Python-Bibliothek)

    Danke und Gruß

    Micha

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!