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
Welches EEPROM wird denn mit 0x55 (01010101b) selektiert? Üblich wäre 1010xxxRb xxx=Busadresse/Seitenadresse, R=R/W
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
Dann würde ich darauf tippen, daß eine ungewünschte Start-Bedingung erzeugt wird.
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
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
Hallo; Hat leider nicht funktioneiert. Was könnte ich sonst noch tun? Grüss + Danke Seyhan
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.
Hallo thkais Vielen Dank für den Tip. Falls ich nicht weiterkommen sollte werde ich den Beitrag entsprechend erweitern. Gruss + Dank seyhan
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
OT: Warum muss ein Datentyp "card8" benannt werden? Steckt dahinter ein tieferer Sinn?
Hallo Rufus Vielen Dank für Deine Antwort. Hier die Antwort: card8 = unsigned char Kannst Du was damit anfangen? Gruss + Danke Seyhan
Hallo Zusammen Bin leider noch nicht weitergekommen. Wer kann mir weiterhelfen. Grüsse + Danke im Voraus. Seyhan
Hallo Bin leider nicht weiter gekommen. Bitte um Hilfe. Grüsse Seyhan
Hallo Zusammen Falls mir jemand weiterhelfen kann bin ich sehr dankbar und habe ein offenes Ohr. Grüsse seyhan
Hallo zusammen Erwarte noch immer gerne Ratschläge, Tips oder Tricks. Grüsse Seyhan
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.
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
Du hast IMO auch noch keine Angaben zum Display gemacht. Um welches handelt es sich? Vielleicht hast du irgendwas vergessen zu konfigurieren.
Es handelt sich um ein kundenspezifisches COG Grafik LCD (128x88 dot) mit Controller Sitronix ST7541. Gruss + Danke für die Bemühungen
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
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?
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
Bin wieder da und noch immer nicht klar gekommen. Wer kann mir weiterhelfen. Von Seiten Sitronix ist nicht viel zu erwarten. Grüsse
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.