- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: Input beim MCP23017

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

    Input beim MCP23017

    Anzeige

    Praxistest und DIY Projekte
    Mahlzeit

    Ich experimentiere länger schon mit dem MPC 23017 herum.
    Inzwischen funktioniert er auch und ich kann die Ausgänge und Register schreiben.

    Leider bekomme ich das nicht hin, mir die Ports als Eingänge zu nutzen.
    Das ich die Register 0x00 und 0x01 dafür verwende, das weiss ich. im Grundzustand sind diese ja auch als Eingänge definiert.

    Leider komme ich auch aus dem Datenblatt da nicht so ganz schlau.
    wenn ich das richtig lese ist dafür 0x12 und 0x13 zuständig..jedoch stehe ich da irgendwie auf dem Schlauch..
    .ich möchte das die Pins im Grundzustand Low sind, das mache ich über Pull Down Widerstände.
    mir reicht es die Gesamte Information eines Bytes in eine Variable zu schreiben. (0-255)

    kann mir da jemand auf die Sprünge helfen.bzw hat das schonma in C Programmiert ?

    Gruss
    modtronic

  2. #2
    HaWe
    Gast
    die Gretchenfrage lautet: für welche Zielplattform?

    Für nackte Atmels sieht der Code völlig anders aus als für Arduinos und erst recht für Raspis, einfach weil die i2c-Libs völlig anders implementiert sind.

    Ich selber habe Tonnen von Code für den

    Raspi http://www.mindstormsforum.de/viewto...p=68574#p70059

    und Arduino: http://www.mindstormsforum.de/viewto...tart=75#p69287 .

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

    Ich arbeite mit den klassischen Atmels AT Mega 8,16 und 32.
    Ich programmiere mit Codevision in der Sprache C.

    Gruss
    Patrick

    - - - Aktualisiert - - -

    Hallo

    Ich arbeite mit den klassischen Atmels AT Mega 8,16 und 32.
    Ich programmiere mit Codevision in der Sprache C.

    I2C Bus ist eine Routine von CV..

    ich spreche den BUs mit i2c_start an,,bzw i2c_stop.
    mit write und read kann man halt schreiben oder lesen

  4. #4
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    05.11.2009
    Ort
    Gerblingerode
    Alter
    58
    Beiträge
    207
    das hatten wir doch schon mal ...

    Register 0 /1 und 12/13 wie folgt schreiben ...

    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


    und Register 18 /19 einlesen ...


    Register 18 (A) IO 0=LOW / 1=HIGH
    Register 19 (B) IO 0=LOW / 1=HIGH
    Gruß Ralf ... Projekt-Beschreibungen www.greinert-dud.de ... "Alle sagten: Das geht nicht. Dann kam einer, der wusste das nicht und hat's gemacht."

  5. #5
    Benutzer Stammmitglied Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Hagen
    Alter
    47
    Beiträge
    68
    Zitat Zitat von Feuerring Beitrag anzeigen
    das hatten wir doch schon mal ...

    Register 0 /1 und 12/13 wie folgt schreiben ...

    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


    und Register 18 /19 einlesen ...


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

    ich möchte jedes der 8 Eingänge in eine Variable schreiben..
    da habe ich gerade irgendwie ein Problem..oder ich seh den Wald vor lauter bäumen nicht

    Gruss
    Patrick

  6. #6
    HaWe
    Gast
    du liest ja bytes, also 8 Eingänge als Bitmuster auf einmal.
    Ist dein Problem, wie du das Byte in ein Bitpattern auflösen kannst, wo jedes Bit einen diskreten Eingang repräsentiert?

    das wäre dann so etwas was du meinst...? (source ist dein Byte, funktioniert aber auch mit int)

    #define bitRead(source, bit) ( ((source) >> (bit)) & 0x01 )

    daneben kann man noch machen:

    #define bitSet (source, bit) ( (source) |= (1UL << (bit)) )
    #define bitClear(source, bit) ( (source) &= ~(1UL << (bit)) )
    #define bitWrite(source, bit, bitvalue) ( bitvalue ? bitSet(source, bit) : bitClear(source, bit) )

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

    Nein..ich möchte einfach 1 Byte eines MCP23017 auf einen anderen Übertragen...relativ simpel.
    über eine Expander soll der Bus dann ca 10 - 15 Meter überwinden. Auf der Eingabeseite sollen dann 4 MCP sitzen mit der CPU und sender und auf der anderen Seite der Empfänger mit 4 MCP23017 als Ausgabe. also nix wildes. so spare ich mir halte viele Adern.

    Daher der Gedanke immer ein Byte in eine Variable Lesen z.b int data1, int data2..etc und einfach auszugeben.

    vom Programm her wäre das ub.
    data = i2c_read (0x12)..lesen vom MCP..aber irgendwie will er das nicht so machen

    Gruss
    Patrick

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.09.2009
    Ort
    Berlin (Mariendorf)
    Beiträge
    1.023
    Hast du jetzt schon zwei MCPs auf dem Bus? Falls ja, mit unterschiedlichen HW-Adressen?

  9. #9
    Benutzer Stammmitglied Avatar von modtronic
    Registriert seit
    14.05.2011
    Ort
    Hagen
    Alter
    47
    Beiträge
    68
    Zitat Zitat von RoboHolIC Beitrag anzeigen
    Hast du jetzt schon zwei MCPs auf dem Bus? Falls ja, mit unterschiedlichen HW-Adressen?
    Hallo

    Ja..habe zwei Stück am Bus
    einer sind alle Adresspins auf Low der andere alle auf HIgh.
    zum testen reicht es ja erstmal.

    bei einem wollte ich alle 16 Pins über Pull Down auf Masse legen, habe ich aber noch nicht gemacht
    der andere sind 16 Leds über 2 ULN 2804 Treiber angeschlossen

    Gruss
    Patrick

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

    Keiner der mir hier helfen kann ?
    Das mit den Registern verstehe ich nicht, was ihr meint

    Laut Datenblatt muss ich 0x12 und ox13 lesen für die Eingangpins.
    Leider weiss ich auch noch nicht so ganz welche Adresse er zb bei alle Adresspins auf LOw braucht

    0x21 ? 0x41 ?

    Beispiel
    i2c_start();
    i2c_write(0x21); (0x41) ??
    data = i2c_read(0x12);
    i2c_stop();

    kann mir hier mal einer auf die Sprünge helfen ? beim PCF 8574 war das kein Problem

    Hat den keiner nen kleinen Programmauszug ? stehe grade irgendwie auf dem Schlauch

    Patrick

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Mcp23017
    Von modtronic im Forum C - Programmierung (GCC u.a.)
    Antworten: 17
    Letzter Beitrag: 20.02.2017, 00:15
  2. MCP23017 mit Python steuern
    Von opc im Forum Raspberry Pi
    Antworten: 4
    Letzter Beitrag: 23.01.2015, 10:43
  3. [ERLEDIGT] MCP23017 - I2C ansprechen ohne Erfolg
    Von JoeM1978 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 8
    Letzter Beitrag: 07.01.2014, 08:15
  4. "Input" scheint nur beim ersten mal richtig erkannt zu werden?!
    Von Testus2K im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 9
    Letzter Beitrag: 06.06.2013, 23:09
  5. int2 am avr32 braucht beim input ein zusatzbefehl
    Von robbifan im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 17.05.2007, 12:52

Berechtigungen

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

LiFePO4 Speicher Test