Tag allerseits, ich habe mir ein DOGXL (160x104 Pixel, UC1610 Controller) gekauft und an meinen AT89C51CC03 angeschlossen, es läuft einwandfrei, ich habe auch schon Bilder ausgegeben (durch Auto-Increment-Einstellungen vom RAM). Allerdings sind ein zwei Dinge sehr seltsam: Links oben sieht es aus als währe dort Page 0 in Column 0-3 nicht ansprechbar, wenn ich als Column 0 einstelle und als Page 0, dann legt er mir das Byte dass ich ihm schicke aber nicht genau links oben in die Ecke, sondern ca. 4 pixel weiter rechts, das wirkt wie ein kleiner Bereich der einfach nicht ansprechbar ist, wenn ich nun Page 1 einstelle, passt das mit den Columns, nur bei Page 0 ist alles verschoben, weiß vielleicht jemand warum? und das andere Problem ist beim setzen der Pages: wenn ich als Page 0 einstelle, ist es die oberste Reihe wie es sein soll, stelle ich als Page z.B. 2 ein, ist das ganze viel weiter unten als nur 8 Pixel evtl. hängen die zwei probleme ja zusammen, jedenfalls bin ich ratlos :/ Hier mal meine Initialisierungssequenz: call StartTWC call ConnectLCD mov VAL, #11110001b ; Com End Command call SendByte mov VAL, #01100111b ; Com End Value call SendByte mov VAL, #11000000b ; LCD Mapping call SendByte mov VAL, #01000000b ; Startline Value call SendByte mov VAL, #01010000b ; Startline Value call SendByte mov VAL, #00101011b ; Set Panelloading call SendByte mov VAL, #11101011b ; Set Bias call SendByte mov VAL, #10000001b ; Contrast Command call SendByte mov VAL, #01011111b ; Contrast Value call SendByte mov VAL, #10001001b ; Auto Increment Options call SendByte mov VAL, #10101111b ; Enable Display call SendByte call EndTWC StartTWC und EndTWC senden nur die Start und End-Bedingung, hier noch das ConnectLCD und das SendByte Unterprogramm: ConnectLCD: mov R0, #6 mov R1, #10000000b ConnectLoop: mov A, ADR anl A, R1 cjne A, #0, AdrHigh call SendLow jmp AdrLow AdrHigh: call SendHigh AdrLow: mov A, R1 rr A mov R1, A djnz R0, ConnectLoop call SendCDRW call Acknowledge ret SendByte: mov R0, #8 mov R1, #10000000b ByteLoop: mov A, VAL anl A, R1 cjne A, #0, ValHigh call SendLow jmp ValLow ValHigh: call SendHigh ValLow: mov A, R1 rr A mov R1, A djnz R0, ByteLoop call Acknowledge ret Ich bin mittlerweile echt ratlos :/ Hoffe ihr könnt mir weiter helfen >.< Mfg, Max
Hi Max, http://www.lcd-module.de/deu/disk/development%20service/DOGXL160%20UC1610/hello_world_DOGXL160_MSP430.zip das hat mir geholfen. Gruß RABIS
Hallo, ich bins wieder, danke für den Link, allerdings bringt der mich nicht wirklich weiter da ich das ganze mit I²C steuere. Was aber interessant ist, die Page-Ansteuerung funktioniert ja falsch, aber es ist irgendwie ein gewisses Muster zu erkennen: Gesendete Page Zahl | Von UC1610 angesteuerte Page ------------------------------------------------------ 0 | 0 1 | 1 2 | 0 3 | 1 4 | 0 5 | 1 6 | 0 7 | 1 8 | 6 9 | 7 10 | 6 11 | 7 12 | 6 13 | 7 14 | 6 15 | 7 16 | 0 17 | 1 18 | 0 19 | 1 20 | 0 21 | 1 22 | 0 23 | 1 24 | 6 25 | 7 Allerdings komm ich einfach nicht drauf warum genau diese Pages angesteuert werden, ich bin mittlerweile auf C umgestiegen (Keil µVision) Hier mal meine Methode um die Page ein zu stellen bzw. um Bytes zu senden/lesen: void SendByte(unsigned char Value) { unsigned char i; unsigned char shifter = 128; for (i = 0; i < 8; i++) { if ((Value & shifter) == 0) Data = 0; else Data = 1; Clock = 1; Clock = 0; shifter = (shifter >> 1); } Clock = 1; Clock = 0; } unsigned char ReadByte() { unsigned char i; unsigned char value; for (i = 0; i < 8; i++) { value = (value | Data); value = (value << 1); Clock = 1; Clock = 0; } Clock = 1; Clock = 0; return value; } void SetPage(unsigned char Adress, unsigned char Page) { Connect(0, 0, Adress); SendByte(0x60 | (Page & 00011111)); Disconnect(); Connect(1, 1, Adress); ReadByte(); Disconnect(); } Ich komm einfach auf keine Lösung und finde keinen Fehler, weiß vielleicht irgend jemand weiter?
Hallo, Max schrieb: > Ich komm einfach auf keine Lösung und finde keinen Fehler, weiß > vielleicht irgend jemand weiter? bin mir nicht sicher ob das das Richtige ist? * +--------------+ +--------------+ * | | | | * | X = 0..159 | | X = 160.. 319| * | Y = 0.. 15 | | Y = 0.. 15 | * | | | | * +--------------+ +--------------+ * * +--------------+ +--------------+ * | | | | * | X = 0..127 | | X = 128..255 | * | Y = 16.. 31 | | Y = 16.. 31 | * | | | | * +--------------+ +--------------+ * * +--------------+ +--------------+ * | | | | * | X = 0..127 | | X = 128..255 | * | Y = 32.. 47 | | Y = 32.. 47 | * | | | | * +--------------+ +--------------+ * * +--------------+ +--------------+ * | | | | * | X = 0..127 | | X = 128..255 | * | Y = 48.. 65 | | Y = 48.. 65 | * | | | | * +--------------+ +--------------+ Gruß XMEGA
Hi >Ich komm einfach auf keine Lösung und finde keinen Fehler, weiß >vielleicht irgend jemand weiter? Ich tippe auf deine grenzwertigen I2C-Routinen. Ich habe das DOG-XL schon in den Fingern gehabt. Mit Soft-SPI ging das problemlos. MfG Spess
@ XMEGA: Sorry aber ich versteh nicht ganz was genau du damit meinst, könntest du es vll erklären? @ spess53: Was genau meinst du mit Grenzwertige I²C Routinen? Die Initialisierung des Displays funktioniert ja einwandfrei, also sollte die I²C Verbindung richtig funktionieren.
Hi >Was genau meinst du mit Grenzwertige I²C Routinen? Die Initialisierung >des Displays funktioniert ja einwandfrei, also sollte die I²C Verbindung >richtig funktionieren. Z.B. vermisse ich die unterschiedliche Behandlung des ACK-Bits beim Schreiben bzw. Lesen. Wie teilst du dem Display mit, das das Lesen beendet wird? MfG Spess
Das habe ich nur nicht gepostet, aber die Komunikation des I²C Buses ist schon ordentlich und vollständig, hab nur das wichtigste hier gezeigt. Aber es gibt gute Neuigkeiten.. ich habe meinen fehler gefunden, ich Idiot habe eine Zahl als Binärzahl einfach reingeschrieben (noch aus ASM gewohnheiten) ... aber in Keil geht nur Dec oder Hex -.- Unglaublich wie man manchmal auf dem Schlauch stehen kann! >.< Trotzdem danke für eure Hilfe! Hab nun nur noch das Problem dass die Column 0 um 5 Pixel nach Rechts verschoben is, das bekomm ich aber auch noch irgendwie gelöst :) Mfg, Max
Hallo, ich benutze auch das DOGXL, steuere es aber mit SPI an Bei der Kommunikation per I2C steht im Datenblatt, dass "Nach den Befehlen zum Setzen der Page- bzw. Column-Adresse muss immer zuerst ein Dummy-Byte gelesen werden" Kann das evtl. zu dem Fehler führen?!
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.