- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: Mcp23017

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    05.11.2009
    Ort
    Gerblingerode
    Alter
    59
    Beiträge
    207
    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. #2
    Benutzer Stammmitglied Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Hagen
    Alter
    48
    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. #3
    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. #4
    Benutzer Stammmitglied Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Hagen
    Alter
    48
    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. #5
    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. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.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.

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, 08:44
  2. MCP23017 mit Python steuern
    Von opc im Forum Raspberry Pi
    Antworten: 4
    Letzter Beitrag: 23.01.2015, 09: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, 20: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, 22:26
  5. [ERLEDIGT] MCP23017 - I2C ansprechen ohne Erfolg
    Von JoeM1978 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 07.01.2014, 07:15

Berechtigungen

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

LiFePO4 Speicher Test