Hallo
Ich brauch mal wieder Eure Hilfe!
Euren Ratschlag befolgt, habe ich zur Port-Erweiterung des uno mich für den MCP23017 entschieden. Um mir die Programmierung zu erleichtern, habe ich mich für die „ Adafruit MCP23017 Library “ entschieden. Damit lassen sich die einzelnen I/O Pins fast wie normale Pins ansteuern. Dies verspricht jedenfalls der Vertreiber.
Zum Lernen habe ich einen einfachen Sketch geschrieben und die Schaltung auf einem Steckbord aufgebaut. Leider funktioniert sie nicht so wie ich es mir vorgestellt habe. Kann mir jemand weiterhelfen und mir erklären, was ich falsch gemacht habe.
Wenn mir jemand einen Tipp geben könnte, wo ich die Befehle zu dieser Library nachlesen kann, wäre ich ihm sehr dankbar.
Gruß BJS
#include <Wire.h>
#include <Adafruit_MCP23017.h>
Adafruit_MCP23017 mcp1; // Create MCP 1
void setup() {
mcp1.begin(0); // Start MCP 1 on Hardware address 0x20
mcp1.pinMode(7, INPUT); // Define GPA7 on MCP1 as input
mcp1.pullUp(7, HIGH); // Activate Internal Pull-Up Resistor
mcp1.pinMode(0, OUTPUT); // Define GPB0 on MCP1 as Output
}
void loop()
{
if (mcp1.digitalRead(7) == LOW)
{
mcp1.digitalWrite(0, HIGH);
}
else
{
mcp1.digitalWrite(0, LOW);
}
}
Pullups 4.7k am i2c Bus?
Wird immer wieder gerne genommen
Klassen haben keine "Befehle". Sie haben Methoden
Schau dir die Header Datei an:
https://github.com/adafruit/Adafruit-MCP23017-Arduino-Library/blob/master/Adafruit_MCP23017.h
Im public Teil ist alles auf was du Zugriff hast
Die Library enthält auch mehrere Beispiele
BJS-1952:
Kann mir jemand weiterhelfen und mir erklären, was ich falsch gemacht habe.
Du verwendest keines der zahlreichen Beispiele, die es dir sicher einfacher machen.
Weitere Fehler können wir nicht feststellen, da du uns dein Schaltbild nicht zeigst.
Pullups 4.7k am i2c Bus?
Den Pullups 4.7k am i2c Bus ist vorhanden.
Kurze Beschreibung der Schaltung, da ich mir kein Schaltbild gemacht habe:
Bei betätigen des Taster an Eingang GPA7 auf der rechten Seite, soll die LED am Ausgang GPB0 auf der linken Seite des MCP23017 ausgehen. Bei nicht betätigen des Tasters soll die LED immer leuchten. Um mir den Pullup-Widerstand am Eingang des Tasters zu sparen, habe ich den Eingang intern auf Pullup gelegt. Beim deaktivieren des internen Pullup-Widerstandes und schalten eines externen funktioniert die Schaltung auch nicht. Die LED am Ausgang GPB0 leuchtet immer.
Lass dir mal alle Pins seriell ausgeben, natürlich vorher Pullup aktivieren, vielleicht hast du was mit den Anschlüssen durcheinander gebracht.
Und schau mit dem i2c Scanner nach, ob der Chip überhaupt auf der Adresse sitzt.
BJS-1952:
Kurze Beschreibung der Schaltung, da ich mir kein Schaltbild gemacht habe:
Dann zeichne eines, da ich aus deiner Beschreibung nicht schlau werde.
Dann erkennst du evtl. auch selbst deinen Fehler.
Hast du alle Pins des MCP23017 so angeschlossen wie in der Doku vorgegeben ?
Ok....die Frage mit der I2C-Adresse hast du noch nicht berücksichtigt.
Die "0" in deiner Anweisung ist sicher falsch. Entweder leer oder eine richtige Adresse angeben.
Edit: Sollte doch richtig sein. Auch eine 0 geht.
Wie hast du den Taster angeschlossen ?
Geht leider aus deiner komischen Beschreibung nicht hervor.
Wo ist links und wo ist rechts des MCP ?
Und evtl. hilft dir dies weiter: Beispiel
Im übrigen hilft dir auch Google weiter.
Die Schaltung funktioniert.
Bin mit der Zählweise der Pin durcheinander geraten. Meine Zählweise von 0 bis 7 war falsch. Ich muss von 0 bis 15 entgegen dem Uhrzeiger Zählen.
Die Internet Seite, die HotSystems vorgeschlagen hat, ist genau richtig und hilft mir weiter.
Danke an allen für die Unterstützung, durch die ich auf meinem Fehler gekommen bin.
Gruß BJS
BJS-1952:
Bin mit der Zählweise der Pin durcheinander geraten. Meine Zählweise von 0 bis 7 war falsch. Ich muss von 0 bis 15 entgegen dem Uhrzeiger Zählen.
Die Internet Seite, die HotSystems vorgeschlagen hat, ist genau richtig und hilft mir weiter.
Freut mich, dass es jetzt geht.
Mit Schaltbild wärst du sicher schneller drauf gekommen. 