MCP23017 reed/temperatur sensor auslessen

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo bin neu hier, aber schon ein klein wenig in besitzt von 2 rpis eigentlich gekauft für meine Bitcoin miner die es nun aber nicht mehr gibt, deswegen spiele ich nun etwas mit ihnen rum :D

    und versuche ein paar sachen zu realisieren die ich später für meine Home Automatiesierung nutzen kann.


    nun mein problem ich habe einen MCP23017 erfolgreich am RPI angeschlossen jetzt würde ich über die neuen GPIO's gerne Temperatur sensoren ( DS18B20 ) auslessen nur bin ich am verzweiflen ist das überhaupt möglich ? wenn ja als was muss der Gpio vom i2c deklariert werden ?

    desweitern würde ich gerne über die "neuen" gipos reed-kontakte ansprechen, aber auch hier meine frage wie kann ich jetzt z.b. GPB0 direkt ansprechen ( auslessen )

    mit "i2cget -y 1 0x20 0x13" lesse ich ja die komplette "B"-Bank aus oder ?

    wie kann ich jetzt von bank B gpio "0" ( GPB0 ) auslessen ?


    ich hoffe ihr versteht was ich machen möchte und könnt mir helfen

    Einmal editiert, zuletzt von gMaN (8. Oktober 2014 um 20:46)

  • Hallo gMaN,


    nun mein problem ich habe einen MCP23017 erfolgreich am RPI angeschlossen jetzt würde ich über die neuen GPIO's gerne Temperatur sensoren ( DS18B20 ) auslessen nur bin ich am verzweiflen ist das überhaupt möglich ?


    Das kann ich nicht (sicher) beantworten da ich mich mit dem 1-wire Bus noch gar nicht und mit I2C nur wenig auseinandergesetzt habe aber ich glaube dass I2C dafür zu langsam ist. :neutral:



    ...mit "i2cget -y 1 0x20 0x13" lese ich ja die komplette "B"-Bank aus oder ?
    wie kann ich jetzt von bank B gpio "0" ( GPB0 ) auslesen ?


    Ja, i2cget kann nur ganze Bänke(oder genauer gesagt Register) auslesen. Die Ausgabe erfolgt in Hexadezimaler Form und um zu sehen was für ein Zustand z.B. der von der erwähnte Pin(GPB0) hat musst du diesen Wert(die hexadezimale Ausgabe von i2cget) in das Binärsystem umrechnen und schauen was für ein Wert Bit 0 hat. Hat Bit 0 den Wert 1, liegt Spannung am Pin an; Hat Bit 0 den Wert 0, liegt keine Spannung am Pin an.


    Einfacher hast du es wenn du dafür das "gpio" Tool verwendest. Damit hast du auch die Möglichkeit einzelne Pins zu lesen und zu setzen.
    z.B. gibt:

    Code
    sudo gpio -x mcp23017:100:0x20 read 108


    den aktuellen Zustand von Pin 0, Bank B zurück. (entweder "0" oder "1")

    Eine kurze Erklärung dazu findest du hier.


    Joh

    DON'T PANIC!

    Einmal editiert, zuletzt von joh.raspi (9. Oktober 2014 um 07:07)

  • Einfacher hast du es wenn du dafür das "gpio" Tool verwendest. Damit hast du auch die Möglichkeit einzelne Pins zu lesen und zu setzen.
    z.B. gibt:
    Code: Alles markieren
    sudo gpio -x mcp23017:100:0x20 read 108
    den aktuellen Zustand von Pin 0, Bank B zurück. (entweder "0" oder "1")

    Eine kurze Erklärung dazu findest du hier.

    Prima, das hat funktioniert habe ich schon mit rumgespielt mit dem befehle allerdings habe ich anstadt 0x20 für den Baustein 1 genommen und deswegen hat es nicht funktioniert
    Aber wo finde ich eine dukumentation das jetzt 108 genu GPB0 ist ?

    Danke dafür!


    zu dem Temperatur sensoren gibt es einen "anderen" weg wie ich ca. 20 Stück getrennt ansprechen kann ?

    edit: mit dem 1-Wire kann man wohl mehre Temperatur sensoren paralel anschliesen und alle "einzeln" auslessen damit hat sich das ja dann wohl auch erledigt!

    Einmal editiert, zuletzt von gMaN (9. Oktober 2014 um 09:39)


  • ... Aber wo finde ich eine dukumentation das jetzt 108 genu GPB0 ist ?

    Das ist im Grunde ganz einfach und wird dir vielleicht klar wenn du folgendes liest:

    Zitat von http://wiringpi.com/the-gpio-utility/i2c-mcp23008-and-mcp23017-extensions/


    The syntax is:

    gpio -x mcp23017:base:devId …

    where base is the base pin number and devId is the devices I2C bus ID. The number of pins is known by the expansion module and it’s 16 for the mcp12017 and 8 for the mcp23008.

    The mcp23017 and mcp23008 support mode (in, out, up, tri), read and write commands.

    Zitat von http://wiringpi.com/examples/quick2wire-and-wiringpi/the-16-pin-gpio-expansion-board/


    The -x flag tells gpio to use an expansion module – the mcp23017 in this instance. The parameters (separated by colons) for the mcp23017 module are the new pin base number (100 in this case), and the I2C address of the chip (0x20). At that point, you can issue most standard gpio commands.


    Kurz zusammengefasst:
    Die Zahl 100 bedeutet also dass der erste Pin des MCP23017 (Pin 0 aus Bank A) in diesem Fall über die "vituelle" Pinnummer 100 angesprochen wird.
    Also liest

    Code
    sudo gpio -x mcp23017:100:0x20 read 100


    ...den ersten Pin aus Bank A (Pin 0, Bank A) aus

    Code
    sudo gpio -x mcp23017:100:0x20 read 101


    ...den zweiten Pin aus Bank A (Pin 1, Bank A) aus

    Code
    sudo gpio -x mcp23017:100:0x20 read 107


    ...den achten (und letzten Pin) aus Bank A (Pin 7, Bank A) aus

    Code
    sudo gpio -x mcp23017:100:0x20 read 108


    ... den ersten Pin aus Bank B (Pin 0, Bank B) aus
    usw.


    Joh

    DON'T PANIC!

    Einmal editiert, zuletzt von joh.raspi (22. November 2014 um 02:08)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!