ATtiny85 soll MSP23017-Eingänge lesen

Ich habe einen MCP23017 an einen ATtiny85 angeschlossen (Pin 5 des Tiny an Pin 13 des MCP und Pin 7 an Pin 12).

Die anderen Pins des MCP: Adresse ist auf 0x20 eingestellt (Pin 15-17 auf Masse), Reset und Vdd auf +5V (Pin 18 + 9), Vss (Pin 10) auf Masse.

Der Tiny: Pin 4 auf Masse, Pin 8 auf +5V, an Pin 3 und 6 hängt jeweils eine LED gegen Masse.

#include <TinyWireM.h>

#define mcA 0x20

byte v = 0;

void setup() {
  TinyWireM.begin();
  
  pinMode(4, OUTPUT);
  pinMode(1, OUTPUT);
}

void loop() {
  TinyWireM.beginTransmission(mcA);
  TinyWireM.send(0x12);                  // GPIOA=x12, GPIOB=x13
  TinyWireM.endTransmission();          
  TinyWireM.requestFrom(mcA,1);         
  v = TinyWireM.receive();           

  for (int i=1; i<=v; i++){
  digitalWrite(1, HIGH);
  delay(500);
  digitalWrite(1, LOW);
  delay(500);
  }
  digitalWrite(4, HIGH);
  delay(500);
  digitalWrite(4, LOW);
  delay(1500);
}

Wenn ich nun das angehängte Prog auf den Tiny schiebe, kommt nur Unsinn raus. Er blinkt auf Pin 6 immer genau so oft, wie ich in der 2. Zeile der loop-Schleife sende. Genau genommen sendet er offenbar gar nix, denn wenn ich mal die beiden Leitung zw. MCP und Tiny wegnehme, bleibt es bei genau dem selben Unsinn.

Wo liegt mein Denkfehler?

PS: Die Blinkerei ist natürlich nicht das Ziel sondern soll einfach nur die gelesene Integerzahl visualisieren. Also hierzu bitte keine Kommentare :wink:

sketch_sep06c.ino (568 Bytes)

:) Problem gelöst:

Das Geheimnis waren fehlende Pull-Up-R's. Manchmal ist man aber auch ganz schön vernagelt.

zappa2: Manchmal ist man aber auch ganz schön vernagelt.

Fehler selbst gefunden, gratuliere :)

Wer was macht, macht auch Fehler, wer nichts macht, macht den größten Fehler!

agmue:
Wer was macht, macht auch Fehler, wer nichts macht, macht den größten Fehler!

Und wer keine Fehler macht, der muss ein ganz f… S… sein. :wink:

Wer arbeitet macht Fehler. Wer keine Fehler macht, wird befördert.

Gruß Tommy