Forum: Mikrocontroller und Digitale Elektronik Bitte um Hilfe: Sitronix ST7541


von Seyhan Kozan (Gast)


Lesenswert?

Hallo

Benötige dringend Hilfe

Ich habe da ein Problem mit einem Sitronix ST7541:

Das Display an sich funktioniert zwar, aber wenn im gleichen I2C Bus
noch ein anderes IC ist haben wir das folgende verhalten (In unserer
Anwendung ist noch ein Eeprom im gleichen I2C Bus):

 - Wenn das Eeprom adressiert ist und aus dem Eeprom das Byte 0x78
(=Slave Adresse des Displays) gelesen wird, fühlt sich das Display
adressiert und die folgenden Daten, die aus dem Eeprom gelesen werden,
werden dann auch auf dem Display angezeigt.

 Auch der folgende Code zeigt dies:



    I2CStart ();
    c8I2CWriteByte (0x55);  // Dummy Byte
    c8I2CWriteByte (0x78);  // LCD slave address
    c8I2CWriteByte (0x40);
    c8I2CWriteByte (0xFF);
    c8I2CWriteByte (0xFF);
    I2CStop();

Obwohl nach der Startsequenz zuerst ein 0x55 gesendet wird und somit
nur das IC mit dieser Adresse adressiert sein sollte, generiert das
Display nach dem senden des zweiten Bytes (0x78) ein Acknowledge und
übernimmt dann alle folgenden Daten.

Gruss + Danke

Seyhan

von arc (Gast)


Lesenswert?

Welches EEPROM wird denn mit 0x55 (01010101b) selektiert?
Üblich wäre 1010xxxRb xxx=Busadresse/Seitenadresse, R=R/W

von Seyhan Kozan (Gast)


Lesenswert?

0x55 ist nur ein Beispiel. Denn nach der I2C Startsequenz sollte jede
andere Slaveadresse als diejenige des LCD (0x78 und 0x79) bewirken,
dass das LCD die folgenden I2C Daten ignoriert bis die nächste
Startsequenz eintritt.
Unser Eeprom hat die Adresse 0xA0 und 0xA1, der Fehler tritt genau so
auf wie mit 0x55 als Slaveadresse

Grüsse

von arc (Gast)


Lesenswert?

Dann würde ich darauf tippen, daß eine ungewünschte Start-Bedingung
erzeugt wird.

von Seyhan Kozan (Gast)


Lesenswert?

Hallo arc

Danke für den Tip. Falls nichts geht melde ich mich wieder.

Noch einmal vielen Dank. Wenn ich "nur" das Problem beheben kann.

Grüsse

seyhan

von Seyhan (Gast)


Lesenswert?

Hallo

Benötige dringend Hilfe

Ich habe da ein Problem mit einem Sitronix ST7541:

Das Display an sich funktioniert zwar, aber wenn im gleichen I2C Bus
noch ein anderes IC ist haben wir das folgende verhalten (In unserer
Anwendung ist noch ein Eeprom im gleichen I2C Bus):

 - Wenn das Eeprom adressiert ist und aus dem Eeprom das Byte 0x78
(=Slave Adresse des Displays) gelesen wird, fühlt sich das Display
adressiert und die folgenden Daten, die aus dem Eeprom gelesen werden,
werden dann auch auf dem Display angezeigt.

 Auch der folgende Code zeigt dies:



    I2CStart ();
    c8I2CWriteByte (0x55);  // Dummy Byte
    c8I2CWriteByte (0x78);  // LCD slave address
    c8I2CWriteByte (0x40);
    c8I2CWriteByte (0xFF);
    c8I2CWriteByte (0xFF);
    I2CStop();

Obwohl nach der Startsequenz zuerst ein 0x55 gesendet wird und somit
nur das IC mit dieser Adresse adressiert sein sollte, generiert das
Display nach dem senden des zweiten Bytes (0x78) ein Acknowledge und
übernimmt dann alle folgenden Daten.

Gruss + Danke

Seyhan

von Seyhan (Gast)


Lesenswert?

Hallo;

Hat leider nicht funktioneiert. Was könnte ich sonst noch tun?

Grüss + Danke

Seyhan

von thkais (Gast)


Lesenswert?

Schonmal den I²C-Bus analysiert? Ich fahre die Geschwindigkeit bei
solchen Fällen auf 0,5 bis 1 Hz herunter, dann kann man die einzelnen
Bits mit zwei Leuchtdioden an SDA und SCL sehen. Damit sollte sich eine
Startbedingung, die irgendwo nicht hingehört, finden lassen. Ich tippe
auch auf eine Startbedingung zuviel.
Die c8I2CWriteByte() - Funktion solltest Du auch mal posten, vielleicht
ist da ser Wurm drin.
Es wäre auch sinnvoll, wenn Du mal kurz beschreibst, was Du alles
bisher überprüft hast, sonst stochert man im Dunkeln.

von Seyhan (Gast)


Lesenswert?

Hallo thkais

Vielen Dank für den Tip. Falls ich nicht weiterkommen sollte werde ich
den Beitrag entsprechend erweitern.

Gruss + Dank

seyhan

von Seyhan (Gast)


Lesenswert?

Hallo zusammen

Leider auch nichts;

Den i2C BUS habe ich genau analysiert. Ich habe den Signalverlauf auch
auf dem Oszilloskop angeschaut und nach einer Startbedingung gesucht
und ich habe das Programm im Einzelschritt durchlaufen, aber keine
Startsequenz gefunden. Und wie gesagt, mit einem anderen LCD Kontroller
funktioniert es.
Hier noch die WriteByte Funktion:



/*---------------------------------------------------------------------- 
-------
 * Function     : (EXTERNAL)   c8I2C_WriteByte
 * Description  : Schreibt ein Byte über die I2C Schnittstelle
 *
 * Parameter    :  card8 c8Data        | Datenbyte
 * Return Value :  card8 c8ReturnValue | TRUE, FALSE

*----------------------------------------------------------------------- 
---
*/
card8 c8I2CWriteByte (card8 c8Data)
{
  card8 i;
  card8 c8Status = TRUE;

  // Byte senden
  SDA_MODE = OUTPUT;
  for (i=0;i<8;i++)
  {
    // Bit bereitstellen
    if(c8Data & 0x80)
      SDA = HIGH;
    else
      SDA = LOW;

    c8Data <<= 1;

    // SCL Puls Generieren
    SCL = HIGH;
    //_NOP ();
    SCL = LOW;
  }

  // Acknowledge Empfangen
  asm("nop");
  SDA_MODE = INPUT;
  SCL      = HIGH;
  while(i-- > 5);
  if (SDA == HIGH) c8Status = FALSE;
  SCL      = LOW;
  asm("nop");
  asm("nop");
  SDA      = HIGH;
  SDA_MODE = OUTPUT;

  return c8Status;
}

Ich werde nun eine Liste von allen bereits geprüften und beachteten
Dingen zusammen.

Grüsse + Danke

Seyhan

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

OT: Warum muss ein Datentyp "card8" benannt werden? Steckt dahinter
ein tieferer Sinn?

von Seyhan (Gast)


Lesenswert?

Hallo Rufus

Vielen Dank für Deine Antwort. Hier die Antwort:

card8 = unsigned char

Kannst Du was damit anfangen?

Gruss + Danke

Seyhan

von Seyhan (Gast)


Lesenswert?

Hallo Zusammen

Bin leider noch nicht weitergekommen. Wer kann mir weiterhelfen.

Grüsse + Danke im Voraus.

Seyhan

von Seyhan (Gast)


Lesenswert?

Hallo

Bin leider nicht weiter gekommen. Bitte um Hilfe.

Grüsse

Seyhan

von Seyhan (Gast)


Lesenswert?

Hallo Zusammen

Falls mir jemand weiterhelfen kann bin ich sehr dankbar und habe ein
offenes Ohr.

Grüsse

seyhan

von Seyhan (Gast)


Lesenswert?

Hallo zusammen

Erwarte noch immer gerne Ratschläge, Tips oder Tricks.

Grüsse

Seyhan

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Scheinbar kennt sich niemand mit deinem Controller etc aus, oder alle
sind wegen deiner "Unnachgiebigkeit" genervt.
Übrigens habe ich dir in deinem anderen Thread zum selben Thema schon
geantwortet: Schalte notfalls den Bus zum Display an.

von Seyhan (Gast)


Lesenswert?

Hallo

Meine Unnachgiebigkeit hat seinen Grund. Zu Deiner Info:

Ein getrennter Bus ist ein Workaround der natürlich funktioniert. Dies
ist aber in unserem Design nicht möglich weil wir keine zusätzlichen
Prozessorpins mehr zur verfügung haben.

Gruss

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Du hast IMO auch noch keine Angaben zum Display gemacht. Um welches
handelt es sich? Vielleicht hast du irgendwas vergessen zu
konfigurieren.

von Seyhan (Gast)


Lesenswert?

Es handelt sich um ein kundenspezifisches COG Grafik LCD
(128x88 dot) mit Controller Sitronix ST7541.

Gruss + Danke für die Bemühungen

von Seyhan (Gast)


Lesenswert?

Hallo Zäme

Werde Heute den ganzen Tag ausser Hause sein. Kann erst am Abend wieder
antworten. Bin jedoch immer noch auf der Suche nach Hilfe.

Grüsse

von Seyhan (Gast)


Lesenswert?

Bitte um weitere Unterstützung allerseits.

Grüsse + Danke

von Seyhan (Gast)


Lesenswert?

Hallo

Bin wieder online und erwarte gerne EURE HILFE

DANKE

von Seyhan (Gast)


Lesenswert?

Kann mir den niemand weiterhelfen?

Grüsse + Danke

as

von Stefan (Gast)


Lesenswert?

Der Sitronix ST7541 Controller springt auf Daten vom Bus an und ein
anderer LCD Controller nicht.

Da ist vielleicht ein Bug im Sitronix ST7541 Controller? Was meint die
Firma Sitronix dazu? Appnote? Datenblatt-Revision?

Könntest du nicht viel Zeit und Energie sparen, wenn du den
funktionierenden Controller verwendest?

von Seyhan (Gast)


Lesenswert?

Hallo Stefan

Da es sich um ein kundenspezifisches COG LCD handelt ist dies zum
jetzigen Zeitpunkt nicht sehr einfach. Ich denke das ich noch einige
Versuche machen werde. Trotzdem Danke.

Grüsse

as

von Seyhan (Gast)


Lesenswert?

Bin wieder da und noch immer nicht klar gekommen.

Wer kann mir weiterhelfen. Von Seiten Sitronix ist nicht viel zu
erwarten.

Grüsse

von thkais (Gast)


Lesenswert?

Also, fassen wir mal zusammen:
- Der Sitronix-Controller funktioniert nicht.
- Ein anderer Controller tut aber.

Ergo: Problem liegt beim Sitronix-Controller.

- keine Hilfe von Sitronix zu erwarten

Ergebnis: Das Ding wegwerfen.


Das einzige, was mir noch einfällt: Könnte es sein, dass der Controller
eine zusätzliche Select (oder Enable) - Leitung hat?

Ansonsten sehe ich mehr als schwarz für Dich. Es könnte theoretisch
auch sein, dass Sitronix den I²C-Bus nur unvollständig implementiert
hat und keine weiteren Devices auf dem gleichen Bus duldet. Aber ohne
eine Information seitens Sitronix wirst Du da rumprobieren können bis
zum St.-Nimmerleins-Tag.
Ein erweiterter Workaround: Mit einem PCF8574 und einem 4066 den Bus
zwischen EEProm und Display umschalten. Das braucht keine zusätzlichen
Portpins.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.