I2C Kommunikation mittels Wire.h funktioniert nicht

Hi!

Ich besitze ein arduino nano board und habe versucht mittels Wire Library ein MIDAS Display über i2C anzusteuern. Da sich das Display
nichteinmal konfigurieren und einschalten lässt habe ich mir dann mal mit dem Oszilloskop die zwei Pins SDA und SCL (beim arduino nano board die pins 4 (SDA) und 5 (SCL))angesehn. Da tut sich jedoch gar nichts. Die zwei Pins liegen immer auf 5 V (verwende 1kOhm pull-ups auf die 5V Schiene).

Ich habe dann mal versucht die Pins mittels digitalWrite() auf low und high zu setzen und das funktioniert. Kann mir jemand sagen wo das Problem liegen könnte?

mfg

Ich glaube da kann Dir schwerlich jemand weiterhelfen, weil es so wenige echte Hellseher oder Besitzer funktionierender Kristallkugeln gibt. :wink: :wink: :wink:

Ich schätze mal da ist ein Fehler in Deinem Sketch. Bitte sende uns den.

Grüße Uwe

42!

Her mit dem Sketch!

Vielleicht eine blöde Frage, aber man weiß ja nie:

hast Du auch während einem I2C-Zugriff mit dem Oszilloskop gemessen?

und du verwendest analog 4&5 (und nicht digital 4&5)?

Weil die I2C Schnittstelle des AVR Auf den Pins hängt die bei Arduino Anlaog 4+5 Heissen :slight_smile:
Gruß
Daniel

Hi!
Danke für die schnellen Meldungen!

@uwefed: Da hast du natürlich recht. Hier ist mein Sketch:

#include <Wire.h>

void setup()
{
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(byte(0x7c));
Wire.write(byte(0x00));
Wire.write(byte(0x38));
Wire.endTransmission();
delay(2);
Wire.beginTransmission(byte(0x7c));
Wire.write(byte(0x00));
Wire.write(byte(0x39));
Wire.endTransmission();
delay(2);
//Wire.beginTransmission(byte(0x7c));
Wire.write(byte(0x00));
Wire.write(byte(0x14));
//Wire.endTransmission();
delay(2);
//Wire.beginTransmission(byte(0x7c));
Wire.write(byte(0x00));
Wire.write(byte(0x79));
//Wire.endTransmission();
delay(2);
//Wire.beginTransmission(byte(0x7c));
Wire.write(byte(0x00));
Wire.write(byte(0x50));
//Wire.endTransmission();
delay(2);
//Wire.beginTransmission(byte(0x7c));
Wire.write(byte(0x00));
Wire.write(byte(0x6c));
//Wire.endTransmission();
delay(2);
//Wire.beginTransmission(byte(0x7c));
Wire.write(byte(0x00));
Wire.write(byte(0x0c));
//Wire.endTransmission();
delay(2);
//Wire.beginTransmission(byte(0x7c));
Wire.write(byte(0x00));
Wire.write(byte(0x01));
Wire.endTransmission();
delay(2);
}

void loop()
{
Wire.beginTransmission(byte(0x7c));
Wire.write(byte(0x00));
Wire.write(byte(0x08));
Wire.endTransmission();
Serial.println("Display aus");
delay(100);
Wire.beginTransmission(byte(0x7c));
Wire.write(byte(0x00));
Wire.write(byte(0x0C));
Wire.endTransmission();
Serial.println("Display ein");
delay(100);
}

@spaceball: natürlich habe ich während eines Zugriffs gemessen :slight_smile:

@thewknd: ich verwende die digitalen Pins 4 und 5. Bei den Analogen Pins handelt es sich doch nur um Eingänge, soweit ich die Beschreibung verstanden habe.

@volvodani: sollten die I2C Pins wirklich auf den Analogen Pins 4 und 5 befinden wurde mein Problem gelöst :slight_smile: ich probiers gleich mal aus!

Und da ist auch schon das Signal!

Ein Dankeschön an euch alle! Und einen schönen Ostersonntag!

mfg

thewknd hat gewonnen:

ihaveaquestion:
@thewknd: ich verwende die digitalen Pins 4 und 5. Bei den Analogen Pins handelt es sich doch nur um Eingänge, soweit ich die Beschreibung verstanden habe.

Die I2C Schnittstelle ist auf den ANALOGEN Pin 4 und 5
Deshalb bringst Du die I2C Schnittstelle zum laufen.

Alle Pins des ATmega328 in DIL Gehäuße sind digitale Ein/Ausgänge. Einige Pins haben doppel bis 3-Fachfunktionen.

  • Reset und Oszillator-Pin
  • analoge Eingänge (Pin D14 bis D19 oder A0 bis A5)
  • I2C Schnittstelle (Pin D18 und D19 oder A4 und A5)
  • serielle Schnittstelle (Pin D0 und D1)
  • SPI (pin D11, D12, D13 und ein zusätzliches Pin freier Wahl)
  • externer Interrupt (Pin D2 und D3)

Der Atmega328 im SMD-Gehäuße hat 2 zusätzliche analoge eingänge D6 und D7 die NICHT als digitale Ein/Ausgänge funktionieren.

Grüße Uwe

Hi Leute!
Ich habe nun die Pins richtig angeschlossen, doch beim display tut sich trotzdem nichts. Als Display verwende ich das MIDAS MCC0G21605C6W-SPTLYI. Der Programmcode den ich ausführe ist der den ich ein paar Posts weiter oben reingestellt habe.

Das Display hat 8 Anschluss-Pins:
1 VOUT.... laut Datenblatt bei 5 V VDD mit ebendiesen Pin kurzzuschließen
2 Cap1n... laut Datenblatt bei 5 V Versorgung: not connected
3 Cap1p... laut Datenblatt bei 5 V Versorgung: not connected
4 VDD... Verbunden mit 5 V Pin vom Arduino Nano ( Das Arduino Board wird über USB versorgt)
5 VSS... Verbunden mit GND Pin vom Arduino Nano
6 SDA... Verbunden mit Analog Pin 4
7 SCL... Verbunden mit Analog Pin 5
8 RST... Digital Pin 9

Weiters hat das Display für die Hintergrundbeleuchtung einen Anoden und Kathodenanschluss den ich bis jetzt nicht angeschlossen habe. Das Display müsste doch auch ohne Hintergrundbeleuchtung funktionieren?

Hat jemand eine Idee?

mfg

der Typ ist MCCOG21605C6W-SPTLYI

stimmt denn die Adresse, im Datenblatt steht 0111110, das ist 0x3E

ja die Adresse ist 7 bit lang und soweit ich den I2C Bus verstanden wird das 8e bit als R/W bit gehandhabt. also 0 1 1 1 1 1 0 und dann 0... write oder 1 read. Deshalb komm ich dann auf 7C

ja, aber das RW Bit kontrolliert die Wire Library selber. Je nachdem ob du vom I2C Bus liest oder darauf schreibst.

ok, dann probier ichs mal mit 3E aus

... kann leider auch nicht erkennen das sich das display einschaltet

Hast Du mit dem I2C scanner versucht die Adresse des Displays herauszufinden?
http://todbot.com/blog/2009/11/29/i2cscanner-pde-arduino-as-i2c-bus-scanner/
Grüße Uwe

Hier scheint es eine Library für den ST7032i zu geben, dein Display verwendet den ST7032 (ohne i). Versuch es doch einmal damit, ausser du möchtest als Übung dir selber eine Library dafür schreiben - so kompliziert scheint das nicht zu sein.

http://hmario.home.xs4all.nl/arduino/LiquidCrystal_I2C_ST7032i/

Danke für den link uwe! hab das programm mal durchlaufen lassen. Bei mir findet er gar kein Device....

ok, dann ist nicht Dein Sketch Schuld.
Kontrolliere nochmal die Verdratung des Displays.
Grüße Uwe

hatte einen kontaktfehler, nun findet er ein device mit adresse 62. also die Adresse 0111110 stimmt.
Wenn ich meinen sketch starte tut sich am display trotzdem nichts. Wenn ich es mit dem Befehl einschalte müsste ich doch was sehen oder?