Go Down

Topic: I2C Kommunikation mittels Wire.h funktioniert nicht (Read 4193 times) previous topic - next topic

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

uwefed

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

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

Grüße Uwe


spaceball

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

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

thewknd

#4
Apr 07, 2012, 08:26 pm Last Edit: Apr 07, 2012, 08:28 pm by thewknd Reason: 1
und du verwendest analog 4&5 (und nicht digital 4&5)?
duemilanove / OSX & WIN
Arduino & Teensy: http://bit.ly/13rbdtQ

volvodani

Weil die I2C Schnittstelle des AVR Auf den Pins hängt die bei Arduino Anlaog 4+5 Heissen :-)
Gruß
Daniel
So ist das Leben:
Manchmal bis du das Denkmal, manchmal die Taube!

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 :)

@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 :) ich probiers gleich mal aus!

Und da ist auch schon das Signal!

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

mfg

uwefed

#8
Apr 08, 2012, 08:41 pm Last Edit: Apr 08, 2012, 08:43 pm by uwefed Reason: 1
thewknd hat gewonnen:

Quote from: 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


thewknd

der Typ ist MCCOG21605C6W-SPTLYI

stimmt denn die Adresse, im Datenblatt steht 0111110, das ist 0x3E
duemilanove / OSX & WIN
Arduino & Teensy: http://bit.ly/13rbdtQ

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

thewknd

ja, aber das RW Bit kontrolliert die Wire Library selber. Je nachdem ob du vom I2C Bus liest oder darauf schreibst.
duemilanove / OSX & WIN
Arduino & Teensy: http://bit.ly/13rbdtQ

#13
Apr 17, 2012, 07:20 pm Last Edit: Apr 17, 2012, 07:33 pm by ihaveaquestion Reason: 1
ok, dann probier ichs mal mit 3E aus



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

Go Up