- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Mcp23017

  1. #11
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    05.11.2009
    Ort
    Gerblingerode
    Alter
    58
    Beiträge
    207
    Anzeige

    Praxistest und DIY Projekte
    Hallo Patrick,

    mal die erste Frage, kannst Du den MCP23017 denn über I2C fehlerfrei ansprechen,
    sprich Register schreiben / lesen ...

    Bei der I2C-Übertragung ist das erste Byte die Register Auswahl


    Register 0 (A) DIR 0=OUT / 1=IN
    Register 1 (B) DIR 0=OUT / 1=IN

    Register 12 (A) Pull-UP 0=aus / 1=ein
    Register 13 (B) Pull-UP 0=aus / 1=ein

    Register 18 (A) IO 0=LOW / 1=HIGH
    Register 19 (B) IO 0=LOW / 1=HIGH

    Programm kann ich Dir nicht geben, würde dich nur noch mehr verwirren,
    ich steuere den MCP23017 über einen I2C-Bus und einem IOW-Worrior
    Gruß Ralf ... Projekt-Beschreibungen www.greinert-dud.de ... "Alle sagten: Das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht."

  2. #12
    Benutzer Stammmitglied Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Hagen
    Alter
    47
    Beiträge
    68
    Zitat Zitat von Feuerring Beitrag anzeigen
    Hallo Patrick,

    mal die erste Frage, kannst Du den MCP23017 denn über I2C fehlerfrei ansprechen,
    sprich Register schreiben / lesen ...

    Bei der I2C-Übertragung ist das erste Byte die Register Auswahl


    Register 0 (A) DIR 0=OUT / 1=IN
    Register 1 (B) DIR 0=OUT / 1=IN

    Register 12 (A) Pull-UP 0=aus / 1=ein
    Register 13 (B) Pull-UP 0=aus / 1=ein

    Register 18 (A) IO 0=LOW / 1=HIGH
    Register 19 (B) IO 0=LOW / 1=HIGH

    Programm kann ich Dir nicht geben, würde dich nur noch mehr verwirren,
    ich steuere den MCP23017 über einen I2C-Bus und einem IOW-Worrior
    Morgen

    Das war auch gestern ein Gedanke..ich wollte mal mit einem PCF 8574 testen ob der Port überhaupt läuft
    Laut Oskar wurden aber Daten übertragen

    Jetzt ist ebend meine Frage zu den Registern

    Laut eines Beitrages im Netz soll ich das so machen
    i2c_start();
    i2c_wirte (0x20);
    i2c_write(0x00);
    i2c_write(0x00);
    i2c:stop();

    i2c_start();
    i2c_write(0x20);
    i2c_write(0x01);
    i2c_write(0x00);
    i2c:stop();

    i2c_start();
    i2c_write(0x20);
    i2c_write(0x12);
    i2c_write(0xFF);
    i2c:stop();

    die 0x12 sollen den Port A ansprechen und 0x13 den Port B ist das denn überhaupt richtig ??
    FF wären ja alle Pins auf High..das habe ich aber schon gar nicht hinbekommen

    kannst du mir das mit den Registern evlt mal genauer erklären
    anhand eines kleines Beispieles ?

    Gruss
    Patrick

  3. #13
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von modtronic Beitrag anzeigen
    Morgen

    Das war auch gestern ein Gedanke..ich wollte mal mit einem PCF 8574 testen ob der Port überhaupt läuft
    Laut Oskar wurden aber Daten übertragen

    Jetzt ist ebend meine Frage zu den Registern

    Laut eines Beitrages im Netz soll ich das so machen
    i2c_start();
    i2c_wirte (0x20); <-- hier sollte ACK/NAK ausgewertet werden
    i2c_write(0x00);
    i2c_write(0x00);
    i2c:stop();
    Typischer I2C-Code, wie er so im Netz zu finden ist, keine Auswertung von ACK/NAK. Sonst würde man sehen, daß das Control Byte falsch ist, siehe FIGURE 1-2 im Datenblatt. Eine I2C Adresse hat 7 Bit und liegt in den oberen 7 Bit des Control Bytes, machmal auch Address Byte (nicht Adresse) genannt. Das unterste Bit ist das R/W Bit. Eine I2C Übertagung beginnt immer mit

    i2cStart()
    i2cWrite((I2CAdress << 1) | R/Wbit)

    Wenn bis hierher alles stimmt, die Adresse richtig ist und der Bus am Anfang Idle war, gibts ein ACK und man kann weiter machen. Ansonsten Stop schicken und den Service rufen.

    MfG Klebwax

    P.S. Bei jedem Write sollte ACK/NAK ausgewertet werden, ansonsten ist alles wie das Rufen in einen dunklen Wald. Niemand weiß, ob man je gehört worden ist.
    Strom fließt auch durch krumme Drähte !

  4. #14
    Benutzer Stammmitglied Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Hagen
    Alter
    47
    Beiträge
    68
    Hallo

    Ich habe eine komplette Modellbahnsteuerung mit dem I2C Bus gebaut.
    Diese läuft seit 2,5 Jahren ohne Probleme. Verwendung findet der PCF 8574 für die Adressierung.
    Auch hier wird kein ACK ausgewertet.

    So..der MCP 23017 läuft genau wie oben beschrieben mit dem Code
    Register 0x00 und 0x01 auf Low
    0x14 und 0x15 sind für die Ausgänge..werde damit die Tage dann weiter experimentieren

    Er hört allerdings auf die Adresse 0x40 anstatt auf 0x20..gibt es hier Bauart Unterschiede wie beim PCF 8574 ??
    Übrigens auch hier habe ich die Adresse nicht im Datenblatt damals gefunden

    ich Bedanke mich erstmal für eure Tipps..muss aber sagen "steht im Datenblatt" ist keine Lösung das dann zu schreiben wenn jemand nicht weiterkommt.
    Weil das mit der Adresse steht da nämlich auch nicht.

    Oder habe ich da etwas überlesen ?

    Gruss
    Patrick

  5. #15
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von modtronic Beitrag anzeigen
    Hallo

    Ich habe eine komplette Modellbahnsteuerung mit dem I2C Bus gebaut.
    Diese läuft seit 2,5 Jahren ohne Probleme. Verwendung findet der PCF 8574 für die Adressierung.
    Auch hier wird kein ACK ausgewertet.

    So..der MCP 23017 läuft genau wie oben beschrieben mit dem Code
    Register 0x00 und 0x01 auf Low
    0x14 und 0x15 sind für die Ausgänge..werde damit die Tage dann weiter experimentieren

    Er hört allerdings auf die Adresse 0x40 anstatt auf 0x20..gibt es hier Bauart Unterschiede wie beim PCF 8574 ??
    Ich schrieb oben:
    Eine I2C Adresse hat 7 Bit und liegt in den oberen 7 Bit des Control Bytes, machmal auch Address Byte (nicht Adresse) genannt. Das unterste Bit ist das R/W Bit.
    Er hört schon auf die Adresse 0x20. Wird die, wie sowohl in der I2C Spec:

    After the START condition (S), a slave address is sent. This address is 7 bits long followed by an eighth bit which is a data direction bit (R/W) - a ‘zero’ indicates a transmission (WRITE), a ‘one’ indicates a request for data (READ)
    als auch im Datenblatt

    Klicke auf die Grafik für eine größere Ansicht

Name:	Selection_014.png
Hits:	6
Größe:	34,0 KB
ID:	32425

    beschrieben, in die oberen 7 Bit des Control Bytes gepackt, ergibt das 0x40.

    Ob man einen Slave ansprechen kann, egal ob es ein HW oder ein SW Problem ist, läßt sich leicht am ACK erkennen. Aber man kann natürlich auch fragen.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    So, jetzt hab ich aufgeholt und bin wieder auf dem Laufenden.
    Daß du Meinungen und Codeschnipsel Dritter zitiert hast, fördert bei mir nicht gerade den Eindruck ernsthafter Eigenbemühungen. War nicht böse gemeint, nur ehrlich . Jetzt also konstruktiv weiter.

    Die Chipadresse ist aus Figure 1-2 im Abschnitt 1.4 abzulesen: beginnend mit dem MSBit: 0100, dann die drei HW-Aresspins/-bits, danach das R/W-Bit.
    Je nachdem, in welchen Format die Adresse anzugeben ist, variiert diese auch: als Adresse OHNE R/W-Bit ist es eben 0100 000, also 0x20, dazu das R/W-Bit.
    Zählt man aber das R/W-Bit zur Adresse dazu, dann ist die Leseadresse des Chips 0100 000 0, also 0x40, die Schreibadresse 0100 000 1, also 0x41. (Die Leerzeichen sind nur zur Strukturierung eingefügt, haben keine Bedeutung!)
    Aus Table 1-5 und 1-6 ist abzulesen, dass der Wert des IOCON.BANK-Bits nach dem Reset gleich "0" ist. Das ist, wie bereits gesagt, wichtig für die richtige Registeradressierung.

    Byte Mode, Sequential Mode - ich gestehe, ich krieg die speziellen Sachen auch nicht mehr aus dem Ärmel geschüttelt, habe aber vor ein, zwei Jahren eine Pin-sparende Grafik-LCD-Ansteuerung via MCP23017 nach Datenblatt zum laufen gekriegt. Da steht schon alles drin was man zu diesem Chip wissen muss.

    Prüfe doch einfach bei den Lib-Funktionen mal nach, ob du nicht doch das ACK bzw. NACK abwarten musst. Das ist im Grunde anzunehmen.
    Ich hab selbst schon mal Code Produziert, der nicht I2C-konform war, aber trotzdem funktionierte, weil damals der Controller diesen Fehler kaschierte, sein Nachfolger aber nicht mehr ...

    Zitat Zitat von modtronic Beitrag anzeigen
    Adress(hex) Name Funktion Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
    00 IODIRA In or Out GPA GPA7 GPA6 GPA5 GPA4 GPA3 GPA2 GPA1 GPA0
    01 IODIRB In or Out GPB GPB7 GPB6 GPB5 GPB4 GPB3 GPB2 GPB1 GPB0
    12 GPIOA On Off GPA GPA7 GPA6 GPA5 GPA4 GPA3 GPA2 GPA1 GPA0
    13 GPIOB On Off GPB GPB7 GPB6 GPB5 GPB4 GPB3 GPB2 GPB1 GPB0
    14 OLATA On Off GPA GPA7 GPA6 GPA5 GPA4 GPA3 GPA2 GPA1 GPA0
    15 OLATB On Off GPB GPB7 GPB6 GPB5 GPB4 GPB3 GPB2 GPB1 GPB0
    Das sind jedenfalls schon mal die richtigen Registeradressen nach einem Reset.

  7. #17
    Benutzer Stammmitglied Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Hagen
    Alter
    47
    Beiträge
    68
    Zitat Zitat von RoboHolIC Beitrag anzeigen
    So, jetzt hab ich aufgeholt und bin wieder auf dem Laufenden.
    Daß du Meinungen und Codeschnipsel Dritter zitiert hast, fördert bei mir nicht gerade den Eindruck ernsthafter Eigenbemühungen. War nicht böse gemeint, nur ehrlich . Jetzt also konstruktiv weiter.

    Die Chipadresse ist aus Figure 1-2 im Abschnitt 1.4 abzulesen: beginnend mit dem MSBit: 0100, dann die drei HW-Aresspins/-bits, danach das R/W-Bit.
    Je nachdem, in welchen Format die Adresse anzugeben ist, variiert diese auch: als Adresse OHNE R/W-Bit ist es eben 0100 000, also 0x20, dazu das R/W-Bit.
    Zählt man aber das R/W-Bit zur Adresse dazu, dann ist die Leseadresse des Chips 0100 000 0, also 0x40, die Schreibadresse 0100 000 1, also 0x41. (Die Leerzeichen sind nur zur Strukturierung eingefügt, haben keine Bedeutung!)
    Aus Table 1-5 und 1-6 ist abzulesen, dass der Wert des IOCON.BANK-Bits nach dem Reset gleich "0" ist. Das ist, wie bereits gesagt, wichtig für die richtige Registeradressierung.

    Byte Mode, Sequential Mode - ich gestehe, ich krieg die speziellen Sachen auch nicht mehr aus dem Ärmel geschüttelt, habe aber vor ein, zwei Jahren eine Pin-sparende Grafik-LCD-Ansteuerung via MCP23017 nach Datenblatt zum laufen gekriegt. Da steht schon alles drin was man zu diesem Chip wissen muss.

    Prüfe doch einfach bei den Lib-Funktionen mal nach, ob du nicht doch das ACK bzw. NACK abwarten musst. Das ist im Grunde anzunehmen.
    Ich hab selbst schon mal Code Produziert, der nicht I2C-konform war, aber trotzdem funktionierte, weil damals der Controller diesen Fehler kaschierte, sein Nachfolger aber nicht mehr ...


    Das sind jedenfalls schon mal die richtigen Registeradressen nach einem Reset.
    Nabend

    Na ich habe versucht diesen IC nach Datenblatt zum laufen zu kriegen.
    Ob es nun falsch oder Richtig war, oder ob meinen Eigenbemühungen zu wenig sind und dann im Netz zu suchen, sei dahin gestellt.
    Ich habe versucht eine Lösung zu finden, ohne dieses Forum.
    Dachte eigentlich dieses Forum ist für sowas gut geeignet...sorry das man dann halt fragt...
    Hatte mich halt durch die Suche im Netz auch etwas verannt und wie es so schön heisst, den Wald vor lauten Bäumen nicht gesehn.

    Bin dann mit der Adresse dann auch von selber drauf gekommen

    Das Zitieren kam nur, weil es Leute auch so gemacht hatten wie ich, es aber nicht geklappt hat.

    Und wie man sieht bin ich hier schon länger angemeldet aber nicht wirklich aktiv gewesen, weil ich immer alleine drauf gekommen bin.
    bin jetzt öfters hier bereits angemacht worden, weil man man ein Frage hat die für andere vielleicht ganz klar ist..habe mir das MC Programmieren komplett selber bei gebracht.
    war jetzt das letzte Mal das ich hier etwas gefragt habe.

    ich hatte etwas Probleme mit dem ganzen Registern, muss aber sagen habe ausser dem PCF 8574 nicht viel mit dem I2C Bus gemacht..er ist einfach zu Programmieren und hat mir
    20 Jahre Gute Dienste geleistet...da er leider nicht mehr so einfach zu bekommen ist, und wenn nur zu etwas teureren Preisen war ich halt auf der Suche nach einer anderen Lösung

    Der Gedanke war zunächst das ganze über Schieberegister zu lösen, jedoch wollte ich meine Schaltung mit dem AT-Mega 8L lösen und hatte dann für 8 Schieberegister die ich benötigt hätte einfach nicht genug Pins zur Verfügung, und dann stiess ich auf diesen Kanditat hier.

    Tschüss
    Pat

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Zitat Zitat von modtronic Beitrag anzeigen
    ... bin jetzt öfters hier bereits angemacht worden, weil man man ein Frage hat die für andere vielleicht ganz klar ist..
    Ich hab mir mal die Mühe gemacht und die Threads überflogen, an denen du beteiligt warst. Deine Kritik am Forum (also an den Mitgliedern) kann ich absolut nicht nachvollziehen - außer, du verwechselst unverblümte inhaltliche Richtigstellungen bzw. Nachfragen mit Anmache. (Für meine eigenen Beiträge mag dies nicht gelten, ich bin vielleicht zu persönlich geworden, verletzen wollte ich dich aber nicht.)
    Zitat Zitat von modtronic Beitrag anzeigen
    ... war jetzt das letzte Mal das ich hier etwas gefragt habe.
    Mitglieder verprellen ist hier unüblich. Und dein Hinweis auf die abnehmende Verfügbarkeit des PCF 8574 als DIL war mir wertvolle Randinformation.

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. PCF8591 und MCP23017 bei fast i2c (400kHz) ?
    Von HaWe im Forum Sensoren / Sensorik
    Antworten: 28
    Letzter Beitrag: 28.08.2016, 09:44
  2. MCP23017 mit Python steuern
    Von opc im Forum Raspberry Pi
    Antworten: 4
    Letzter Beitrag: 23.01.2015, 10:43
  3. [ERLEDIGT] Frage zu MCP23017 + Ultraschall Sensor hc-sr04 an Raspberry pi
    Von brenan im Forum Elektronik
    Antworten: 0
    Letzter Beitrag: 30.03.2014, 21:46
  4. MCP23017 via I2C... Primitive Funktionstests, Bitte um Kritik
    Von JoeM1978 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 14.01.2014, 23:26
  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
  •  

fchao-Sinus-Wechselrichter AliExpress