i2c0 an pi zero will nicht

  • Hallo Gemeinde


    ich hab eine pi zero und betreibe diverse Sensoren daran. I2C1 hab ich schon belegt und wollte einen BMP180 an I2C0 anschließen (pin27/28). Bei div. Pi2 hat das auch funktioniert. Also wunderte ich mich das es beim zero (stretch) nicht geht. Mit raspi-gpio hab ich pin27/28 auf alt0 umschalten können aber pin 28 lässt sich nicht auf 1 schalten da es dann kein Ausgang mehr ist.


    i2cdetect -y 0 gibt mir die übliche Fehlermeldung. Scheint Stretch spezifisch zu sein, einen Umstieg auf einen Pi3 brachte auch nichts. Gleiches Resultat.


    Wie krieg ich den ic20 ans Laufen so das ich SDA und SCL aktivieren kann? Die werden mir bei "gpio readall" als alt0 angezeigt und somit auch als SDA0 und SCL0. Aber der Ausgang bei Pin28 steht auf "0", der muss auf "1". Somit wird auf dem Bus nichts erkannt.


    in der modules hab ich alle module i2c und i2c-dev drin, ich lade über die config "dtparam=i2c_arm=on"



    Zweite Variante: ein port Expander an I2C1 - hab ich probiert. Der MCP23017 wird erkannt aber weiter nichts, damit kam ich nicht klar. Ein HC-SR04 krieg ich damit nicht angesteuert. Das wäre aber die perfekte Lösung da wahrscheinlich noch mehr i2c sensoren kommen werden. Die Frage hier ist wie verbinde ich den HC-SR04 mit dem MCP? Bin mir nicht sicher ob die Pullup Widerstände auch verwendet werden müssen als wenn ich den US Sensor direkt an den I2C anschließe.


    Schön wäre es aber wenn i2c0 erstmal laufen würde und ich den noch verwenden könnte. Was mach ich falsch?


    viele Grüße

    Werner

  • den MCP23017 hat er erkannt?

    das ist schonmal gut.

    ich muss mal schauen irgendwo hatt ich mal zum MCP23017 was geschrieben gehabt,

    da nachdem er erkannt wurde, ihm noch gesagt werden muss was Eingang und Ausgang ist.

    hatte damals ein paar displays und knöpfe dran gemacht.


    Sind die Daten der sensoren Zeitkritisch oder können die einer nach dem anderen ausgelesen werden?

    sind die sensoren Digital oder Analog?


    zum MCP23017 gab es einige Python libs .... also recht easy zu bearbeiten und einzubinden

  • Hallo Booxi

    zeitkritisch ist hier nichts, d. h. ich kann nacheinander abfragen und auch pausen einplanen. Ich will den MCP über die Python Library ansteuern, in meine Skripte sind aber darauf ausgelegt das ich die Gpio Pins angebe. Hab testweise 8 Stk. HC-SR04 angeschlossen aber mit welchen Adressen frag ich die dann ab. Wäre ja 0x20 und dann?

  • grundsätzlich musst du deine scripte ein wenig umarbeiten,

    da du nicht mehr direkt die Pins ansteuerst, sondern die Libary.


    und der libary sagst du den Pin des MCP den du ansteuern willst.

    sag mir mal welche python lib du verwendest, dann kann ich dir da weiterhelfen


    hast du die mcps auch ordentlich addressiert?

  • Ich nutze die python-smbus library.. zumindest hatte ich es damit versucht. Was meinst du mit adressiert? Ein i2cdetect -y 1 bringt mir als einzige Adresse die 0x20 als Ausgabe von dem MCP.

  • wie viele mcps hast du nun angeschlossen 1 oder 8?

    das macht nen kleinen unterschied

    und A0-A2 sind keine masse...

    sie werden auf Masse gezogen, um dem Chip mitzuteilen auf welche Adresse er lauschen soll :D


    und evtl wäre es angebracht nicht den pi für die gesamte stromversorgung zu nutzen XD

    hält er länger

  • MCP nur einen, an den sollten testweise die 8 Ultraschallsensoren ran. Wie auf dem Plan zu sehen. Die Stromversorgung läuft über Akku. Bislang versorgt der noch ohne Probleme über mehrere Stunden. Mal sehen wie lange der noch hält wenn die 8 Sensoren ständig abgefragt werden, aber laut Datenblatt ziehen die nicht viel Strom.


    Das GPS Modul auf dem Plan trackt die Strecke die der Pi zurücklegt. Das klappt auch alles ohne Probleme.

  • ich glaub ich hatte mir damals ne eigene lib geschrieben.. oder eine liberweiterung .. irgendsowas wars.

    mittlerweile gibt es da was schickes von adafruit




    Adafruit Python lib




    so in etwa könnte das bei dir dann aussehen

  • MCP nur einen, an den sollten testweise die 8 Ultraschallsensoren ran. Wie auf dem Plan zu sehen. Die Stromversorgung läuft über Akku. Bislang versorgt der noch ohne Probleme über mehrere Stunden. Mal sehen wie lange der noch hält wenn die 8 Sensoren ständig abgefragt werden, aber laut Datenblatt ziehen die nicht viel Strom.


    Das GPS Modul auf dem Plan trackt die Strecke die der Pi zurücklegt. Das klappt auch alles ohne Probleme.


    das is gut...wenn du mir mal nen programmschnipsel hinlegst wie man die sensoren ansteuert (mit dem einfachsten beispiel)

    dann kann ich das vllt auf die Adafruit lib umbauen und du kannst dann deinen Code anpassen anhand des Beispiels

    am besten wäre es allerdings wenn wir erst einmal irgendetwas ausprobieren aller "Led zum leuchten bringen" um zu prüfen ob die lib funzt


    kanns hier gerade nicht testen meine beiden Pis sind in Benutzung :D

    einer macht octopi und der andere Streamt gerade meinen Monitor vom PC zum TV XD

  • bin hier über diesen Thread gestolpert,

    Der nette Carusabag hat dort geschrieben wie man den MCP auch ohne dicke Lib

    ansteuern kann.........


    ist aber auch nicht so komfortabel..

    je nach Anwendungsfall kann dass aber auch besser sein

  • Hab den i2c0 erstmal mit Boardmitteln so umbiegen können das er als i2c erkannt wird. Den MCP23017 hab ich jetzt erstmal an I2C1 angeschlossen und wird mit 0x20 adresse erkannt. Aber dazu später mehr.


    Um jetzt erstmal den Googlern zu helfen die über den Fred hier stolpern:

    Es hilft enorm wenn man in der /boot/config.txt beide zeilen einfügt und nicht nur den Eintrag für arm setzt ->

    dtparam=i2c_arm=on

    dtparam=i2c_vc=on


    Dann sind die Pins 27/28 auf Alt0 und auf "high" geschaltet. Dann wird auch am i2c0 Hardware erkannt. Hab jetzt beide I2C's am laufen. Mit dem MCP kann ich mich erst später wieder beschäftigen.

  • Auch wenn der I2C0 angeblich mit i2cdetect abgefragt werden kann läuft der nicht richtig. Jedesmal erhalte ich andere 0x... irgendwas Ausgaben wenn ich mit i2cdetect die Schnittstelle abfrage. Das verwerfe ich wieder, ich brauch ja eh mehrere SDA,SCL's.

    Was mir noch nicht ganz klar ist wie schließe ich den HC-SR04 an den MCP an? Ich hab GPIOA und GPIOB am MCP- am Sensor hab ich Trigger und Echo. Was muss mit was verbunden werden? Direkt am I2C verwende ich ja noch einen Spannungsteiler am Echo.... wie muss das dann an GPIOA und GPIOB aussehen?

    Ich find mit Goolge nichts richtiges, da werden immer nur LEDs an den MCP angeschlossen, das hilft mir nicht. Nach meinem Verständnis müsste Echo an GPIOA und Trig an GPIOB, oder?

  • wenn sich die Addresse vom MCP ändert, hast du A0,A1,A2 scheinbar mit nem wackelkontakt an GND verbunden (oder ist falsch angeschlossen), denn meines Wissens nach wird die MCP addresse dadurch festgelegt.


    die GPB 0-7 und GPA 0-7 sind die sog. "GPIO Bänke" an denen du etwas anschließen kannst.


    Eine Grundkonfiguration könnte so ausschaun

    Pin 9,18 kommen an 3.3V oder 5V RPI(Spannungsversorgung)

    Pins 10,15,17 des Chips werden mit GND des Pi verbunden.

    Pin 12 des Chips wird mit Pin 5 (SCL) des Pi verbunden

    Pin 13 des Chips wird mit Pin 3 (SDA) des Pi verbunden.


    noch bitte nichts weiter anschließen, um Fehlerquellen zu vermeiden.


    dann auf eine stabile Adresse prüfen.


    Wenn Adresse stabil dann


    HC-SR04 Pin 1: VCC-- MCP23017 pin VDD


    HC-SR04 Pin 2: Trigger-- GPB0


    HC-SR04 Pin 3: Echo -- (wird scheibar über ein Spannungsteiler angeschlossen laut hier) GPB1


    HC-SR04 Pin 4: GND -- MCP23017 pin VSS


    Dann noch ordentlich in dein Script einpflegen, dann sollte das funken...

    sag bescheid wenn der MCP weiterhin muggt, dann hol ich mal meinen MCP ausm Schrank (hab davon nochn paar da)

  • Hi Boxi


    ich hab mich nicht klar ausgedrückt. Ich versuch beides Parallel, also I2C0 ans laufen zu kriegen und den MCP an I2C1 zu betreiben. Wenn der MCP läuft und ich die Sensoren damit ansteuern kann brauch ich I2C0 nicht. Das ist nur mein sportlicher Ehrgeiz ("das muss gehen") an I2C0 :) Beim pi2 gings ja auch.


    Der MCP an I2C1 wird stabil erkannt. 0x20.... der I2C0 ist derjenige der zickig ist und dauernd andere Adressen rausgibt. Den lass ich aber jetzt mal weg und ich mach nur mit I2C1 und dem MCP weiter, aber erst heute abend. Vorher komm ich nicht dazu.

  • Ich hab letzte Nacht versucht die HC-SR04 am MCP23017 abzufragen. Ich hab die Ultraschallsensoren mit Spannungsteiler und ohne am GPIOA (Echo) und GPIOB (Trigger) angeschlossen. Egal wie ich die anschließe, kein Ergebnis.

    Ich hab folgendes Skript verwendet

    Damit werden nacheinander alle erweiterten Ports angetriggert und über Echo abgefragt. Aber das Ergebnis ist bei mir immer .9999 - also Lesefehler.

    Nach Abbruch des Skriptes ist die MCP Adresse auch nicht mehr sichtbar mit I2cdetect. Erst wenn ich Pin3 mit

    raspi-gpio set 3 a0

    wieder auf ALT0 gesetzt habe erscheint bei i2cdetect wieder 0x20 als Adresse des MCP.

    Ich hab folgende Seite gefunden:

    https://tutorials-raspberrypi.…-port-expander-erweitern/

    Dort sieht man die Adressierung der Erweiterungsports - ganz nett erklärt. Hat aber auch nicht geholfen.

    Zumindest mir nicht.

    Ich muss mich erstmal um einen anderen Pi kümmern da ich nächste Woche in Urlaub fliege. Das Projekt geht dann mitte Oktober weiter.