- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 9 von 9

Thema: MCP23017 Adressierungsproblem

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    I2C Adresssen sind immer 7 Bit, das unterste Bit wird als Steuerinformation für lesen oder schreiben gewertet

    Manche Hersteller geben die Adresse maskiert also als 8 bit WErt an udn manche geben sie als 7Bit Wert an

    In der Programmierung sieht dass dann üblicherweise so aus

    Code:
    address = (SOME_ADDRESS<<1)+DIRECTION_BIT
    und der Shift nach Links verdoppelt dann logischerweise den Wert den du zunächst angenommen hast 0x20 zu sein auf 0x40 + 1 für lesen




    -----------------


    Nachtrag

    http://ww1.microchip.com/downloads/e.../20001952c.pdf

    mit 3 Address-Bits hast du 2^3 = 8 Mögliche Adressen

    Auf Seite 15, Figure 3-4 findest du wie genau deine Adresse aussehen muss
    Geändert von Ceos (04.06.2019 um 18:26 Uhr)
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  2. #2
    Benutzer Stammmitglied Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Hagen
    Alter
    47
    Beiträge
    68
    Mahlzeit

    mit der 7 und 8 Bit Adressierung hatte ich mich beschäftigt.
    Mit der 7 Bit Adressierung kann ich den MCP aber von meinem Microcontroller nicht ansprechen, somit habe ich mich für die andere
    Variante entscheiden müssen. ich habe lange damit rumgespielt, allerdings bisher nich so hohe adressen belegt.

    wenn ich das also richtig verstehe komme ich bei der 6. Adresse nicht mehr an den MCP ran, weil der Adressraum durch die 8 Bit Adresse überläuft ?? nennen
    wir das mal so..
    Mein Ansprechen sind nun folgender Massen aus

    i2c_start();
    i2c_write(ox50); beispiel
    i2c_write(Port a oder b)
    i2c_write(Portwert)
    i2c_stop;


    Wie kann ich nun die anderen Drei Adressen ansprechen, bzw was ist ein I2C scanner ? wo bekomme ich so einen Her ?
    bzw wie müsste ich das schreiben das ich evlt doch per 7 Bit Adresse an den MCP rankomme ?

    vllt ein beispiel in meiner schreibweise ?

    grüsse
    Patrick

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    Ein I2C Scanner ist nichts weiter als eine kleine Schleife die einfach versucht ein Byte über I2C zu lesen mit steigender Adresse pro Schleife

    deine Basis Adresse lautet 0x20 (7bit) das macht dann dem Datenblatt nach 0b.0010.000x

    Du die letzten 3 Bit vor dem x-Bit entsprechen deinen Adressleitungen A0-A2

    du kannst also folgende Adressen nutzen (Hex in 8bit, alles nur schreiben ... jeweils +1 zum lesen logischerweise )

    0b.0010.000x (0x40)
    0b.0010.001x (0x42)
    ...
    0b.0010.111x (0x4E)
    Es gibt 10 Sorten von Menschen: Die einen können binär zählen, die anderen
    nicht.

  4. #4
    HaWe
    Gast
    ich würde mir an deiner Stelle für deine Software fertige Codebeispiele oder fertige libs für die mcp23017 suchen und dann darauf aufbauen.
    Ist übrigens genau der Grund, weshalb ich zum Programmieren grundsätzlich Arduino mit fertigen C++ libs nutze.
    Ich bin mir auch einigermaßen sicher, dass sich dein ATMega128 per Arduino programmieren lässt.

  5. #5
    Benutzer Stammmitglied Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Hagen
    Alter
    47
    Beiträge
    68
    ok..dank dir

    ich habe das ganze mal in einem hex - dez umgerechnet
    würde da in dem fall evlt auch gehn.weil

    ox40 wäre ja 64
    ox48 w#re ja 72
    ox50 aber schon 80...

    würde das auch gehn, oder muss es dann wirklich die 7 bit variante sein?

    grüsse
    Patrick

    - - - Aktualisiert - - -

    ich glaube ich aber die falsche adresse genommen
    wenn ich das wie du das hier schreibst, lese
    ist es nciht der adressraum 0x40 - 0x54 sondern ox40 - 0x4e...
    und die letzten drei adressen sind nicht 0x50, 0x52 und 0x54 sonder ox4a, ox4c und ox4e..

    kann das evlt sein das ich einfach nur ein denkfehler habe bzw wenn ich es dezimal programmierz hätte es gar nicht aufgefallen wäre ?

    grüsse
    Patrick

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Ich denke du hast es erfasst! Du hast den Adressraum in dezimalen Zahlen gedacht, aber als hex-Zahlen geschrieben. Mit 0x40 .. 0x4e wird das jetzt funktionieren.

    Im Übrigen sind 7bit-Adressen und 8bit-Adressen keine verschiedenen Adressen oder Methoden sondern ĺediglich eine Frage der binären Interpretation des erforderlichen Registerinhaltes beim Adressbyte. Das nur nochmals zur Verdeutlichung.

  7. #7
    Benutzer Stammmitglied Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Hagen
    Alter
    47
    Beiträge
    68
    Mahlzeit

    Danke für eure Hilfe..ich habe wirklich die letzten drei Adressen falsch programmiert, bzw den Falschen Adressraum genutzt.
    Jetzt geht es. Perfekt.

    Grüsse
    Patrick

Ähnliche Themen

  1. i2c Bus Timing mit dem MCP23017
    Von modtronic im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 13.03.2018, 16:55
  2. Input beim MCP23017
    Von modtronic im Forum C - Programmierung (GCC u.a.)
    Antworten: 14
    Letzter Beitrag: 23.03.2017, 11:08
  3. Mcp23017
    Von modtronic im Forum C - Programmierung (GCC u.a.)
    Antworten: 17
    Letzter Beitrag: 20.02.2017, 00:15
  4. MCP23017 mit Python steuern
    Von opc im Forum Raspberry Pi
    Antworten: 4
    Letzter Beitrag: 23.01.2015, 10:43
  5. [ERLEDIGT] MCP23017 - I2C ansprechen ohne Erfolg
    Von JoeM1978 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 07.01.2014, 08:15

Berechtigungen

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

12V Akku bauen