[gelöst] mcp23017 Pin keine Spannung

Hallo,

Ich habe einen Arduino und ein mcp23017 denn ich über i2c (mit Pullup Widerständen) angeschlossen habe.

Er wird auch als i2c Gerät mit der Adresse 0x20 gefunden und ich kann mittels digitalWrite den Pin schalten (digitalRead liest dann den Wert 0 oder 1)

Wenn ich den Pin auf HIGH schalte kann ich keine Spannung zwischen dem Pin und GND messen.

Hat schon jemand dieses Phänomen gehabt?

Abgeschlossen habe ich ihn nach dieser Anleitung: MCP23017 I/O-Expander mit dem Arduino

Ich habe auch die Verkabelung mehrfach geprüft...
Ich nutze die Adafruit Bibliothek

VG Robin

Dann zeige uns bitte deinen Sketch, so wie du ihn auf dem Arduino hast. Poste den bitte in Code-Tags.
Und ein Foto deines Aufbaus wo auch die Verkabelung gut zu erkennen ist.

Hast du an dem Pin den du misst schon etwas dranhängen?

Der ist eigentlich nur mit Werten für Stromsenke angegeben, d.h. er dürfte kein aktives HIGH schalten.
Das war falsch.

Gruß Tommy

Tommy56:
Der ist eigentlich nur mit Werten für Stromsenke angegeben, d.h. er dürfte kein aktives HIGH schalten.

Tommy, das Datenblatt sagt hier etwas anderes.

Du verwechselst das mit dem Philips PCF8574.

Du hast Recht.

Gruß Tommy

robinw1:
Abgeschlossen habe ich ihn nach dieser Anleitung: MCP23017 I/O-Expander mit dem Arduino
Ich habe auch die Verkabelung mehrfach geprüft...
Ich nutze die Adafruit Bibliothek

Wir brauchen DEINEN Schaltplan. Was du wo angeschlossen hast. Denn der verlinkte Schaltplan hat entweder keine Pullups, oder es werden zwei ICs mit LED Beschaltung verwendet. Es braucht DEINEN Plan.

Wir brauchen hochauflösende Fotos von deinem Aufbau woraus wir jede Komponente und jedes Kabel eindeutig erkennen können.

Wir brauchen deinen Sktech den du erstellt hast.

Wenn du diese 3 Informationen zur Verfügung stellst, kann man dir vieleicht helfen.

Die Pins müssen wie beim Arduino je nach Bedarf als Eingang oder Ausgang gesetzt werden.

Hast Du das gamacht bevor Du das Pin HIGh geschaltet hast?

Grüße Uwe

robinw1:
Hat schon jemand dieses Phänomen gehabt?

Nein, dieses Phänomen gibt es nicht, wenn du alles richtig gemacht hast.
Leider können wir deinen Fehler nicht finden, wenn du uns die notwendigen Informationen nicht lieferst.
Oder besteht kein Interesse mehr ?
Mitlesen scheinst du ja.....

Hallo,

hier sind die Fotos und der Quellcode.

#include "Adafruit_MCP23017.h"

const uint8_t STATE = 0;
const uint8_t ADDRESS = 0; 

Adafruit_MCP23017 mcp;
 
void setup()
{
  Serial.begin(9600);
  
  mcp.begin(ADDRESS);
  mcp.pinMode(STATE, OUTPUT);
}
 
void loop()
{
  mcp.digitalWrite(STATE, HIGH);
  Serial.println(mcp.digitalRead(STATE));
  delay(1000);
  
  mcp.digitalWrite(STATE, LOW);
  Serial.println(mcp.digitalRead(STATE));
  delay(1000);
}

und noch zwei weitere Fotos.

@HotSystems des Interesse an der Lösung meines Problems besteht durchaus, ich hatte nur keine Fotos parat und habe es erst einmal vorgezogen mit der Familie zu Abend zu essen...

ich habe einen Fehler gefunden, der darauf beruht dass ich die Schaltung noch einmal ordentlich aufgebaut habe, ich möchte Pin 8 schalten, im Sketch habe ich Pin 0 verwendet...

Es ändert sich trotzdem nichts.

Wenn ich die Variante über Wire verwende, funktioniert es...

robinw1:
Wenn ich die Variant über Wire verwende, funktioniert es...

#include <Wire.h>

#include <Adafruit_MCP23017.h>

Ich verstehe Dein Problem nicht?!?!

// Don't forget the Wire library

Steht in Zeile 8.

Und Du willst das jetzt ohne wire.h?

my_xy_projekt:
Ich verstehe Dein Problem nicht?!?!
Steht in Zeile 8.

Und Du willst das jetzt ohne wire.h?

Nein, ich habe mich da etwas unglücklich ausgedrückt...
Mein Sketch mit der Library funktioniert nicht, wenn ich einen Demo-Sketch ohne die Adafruit Library verwende, der nur Wire nutzt, funktioniert es.
Geht:

#include "Wire.h"
 
void setup()
{
Wire.begin(); // wake up I2C bus
// set I/O pins to outputs
Wire.beginTransmission(0x20);
Wire.write(0x00); // IODIRA register
Wire.write(0x00); // set all of port A to outputs
Wire.endTransmission();
}
 
void loop()
{
Wire.beginTransmission(0x20);
Wire.write(0x12); // address bank A
Wire.write((byte)0xAA); // value to send - all HIGH
Wire.endTransmission();
delay(500);
Wire.beginTransmission(0x20);
Wire.write(0x12); // address bank A
Wire.write((byte)0x55); // value to send - all HIGH
Wire.endTransmission();
delay(500);
}

Geht nicht:

#include <Wire.h>
#include <Adafruit_MCP23017.h>

const uint8_t STATE = 0;
const uint8_t ADDRESS = 0; 

Adafruit_MCP23017 mcp;
 
void setup()
{
  Serial.begin(9600);
  
  mcp.begin(ADDRESS);
  mcp.pinMode(STATE, OUTPUT);
}
 
void loop()
{
  mcp.digitalWrite(STATE, HIGH);
  Serial.println(mcp.digitalRead(STATE));
  delay(1000);
  
  mcp.digitalWrite(STATE, LOW);
  Serial.println(mcp.digitalRead(STATE));
  delay(1000);
}

Ich vermute jetzt, dass es irgendwie daran liegt, dass der Wire Sketch alle IO Ports schaltet und mein anderer nicht...

Mein Fehler....

Ich habe eine Grafik gefunden wo die IO Ports für die Library nummeriert sind... :confused:
Ich habe falsch gezählt und es funktioniert jetzt.

mcp23017_pin_assignments.png

mcp23017_pin_assignments.png

robinw1:
Nein, ich habe mich da etwas unglücklich ausgedrückt...

Ich vermute jetzt, dass es irgendwie daran liegt, dass der Wire Sketch alle IO Ports schaltet und mein anderer nicht...

Ja!

ich bin noch am überlegen....
Aber leider sind Deine Bilder nur von der Seite und nicht von oben.
zudem muss ich mal kurz ins Dabla schauen.

Aber in der Zeit kannst Du den Toogle aus den examples der lib mal laufen lassen.
Wichtig! Die Beschreibung genau lesen.

robinw1:
Ich habe falsch gezählt und es funktioniert jetzt.

Ist das geil... :slight_smile:
Da hab ich es genau so erwartet....

Na dann.
Schreib ein [gelöst] in Deinen ersten Beitrag in die Betreffzeile.

[edit] Für die Nachwelt:
In dem Example steht eindeutig:

// Output #0 is on pin 21 so connect an LED or whatever from that to ground

https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library/blob/master/examples/toggle/toggle.ino
Na dann...

Ich habe falsch gezählt und es funktioniert jetzt.

Das ist genau der Fehler den wir nicht finden hätten können.
Grüße Uwe

robinw1:
und noch zwei weitere Fotos.

@HotSystems des Interesse an der Lösung meines Problems besteht durchaus, ich hatte nur keine Fotos parat und habe es erst einmal vorgezogen mit der Familie zu Abend zu essen...

Ok, alles klar und kein Problem.
Ich hoffe es hat geschmeckt.

Und danke für deine Rückmeldung.

Für die Reflexionsrunde:

HotSystems:
Mitlesen scheinst du ja.....

Auch wenn ich nicht mehr angemeldet bin, ist manchmal bei mir der grüne Punkt zu sehen1). Und selbst, wenn ich angemeldet bin, tue ich möglicherweise gerade andere Dinge. Wie willst Du also sehen, ob jemand mitliest? Natürlich nur eine rhetorische Frage.


Anm.:

  1. Auch "in diesem Punkt" ist die Forensoftware ungenau. Aber das ist ein anderes Thema :frowning: