Forum: Mikrocontroller und Digitale Elektronik DOG XL160 mit UC1610


von Klars (Gast)


Lesenswert?

Hallo gemeinde
Habe ein Display DOG XL160 zum Gebustag geschenk bekommen. Da ich einige 
Teile mit dem i2C Bus betreibe möchte ich auch dieses Display mit dem 
Bus betreiben. Habe nach dem DB es so aufgebaut, wie es der Hersteller 
vorgibt. Kann auch die Adresse 0x7e auslesen. Mehr kommt leider nicht. 
Das DB des Herstellers ist für mich seht kurz geraten und geht wenig auf 
die Programmierung ein. Nach einer längeren Suche im Netz mit Tante 
google habe ich kaum was zum i2C Bus gefunden. SPI scheint es weit mehr 
zu geben. Kann mir dabei jemand auf die Sprünge helfen?
Arbeite mit C und einem Atmega 128

LG Klars

von Klars (Gast)


Lesenswert?

Sorry noch was vergessen. Es wird ein UC1610 verwendet

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Klars schrieb:
> Es wird ein UC1610 verwendet

Und in dessen Datenblatt hast Du schon mal 'reingeschnuppert?

von Klars (Gast)


Lesenswert?

Habe mir das Datenblatt des UC1610 angesehen und auch im Netz nach Infos 
gesucht. Steht einiges dazu drin. Leider komme ich damit nicht klar. Das 
beginnt schon mit der init.
Hast du ein parr Infos für mich?

von spess53 (Gast)


Lesenswert?

Hi

>Leider komme ich damit nicht klar. Das beginnt schon mit der init.

Die funtioniert so, wie im Datenblatt beschrieben. Was verstehst du 
daran nicht?

MfG Spess

von Klars (Gast)


Lesenswert?

Im Datenblatt ist die Reihenfolge beschrieben, bei mir Seite 31. Danach 
erfolgt der Anschluss an den Prozessor mit I2C und andere Anschlüsse. 
Scheint verschiedene DB zu geben. Es sind Register beschrieben. Leider 
komme ich mit dem Aufruf wann welches nicht klar und welche Daten.

von Arc N. (arc)


Lesenswert?

Etwas mehr Quelltext wäre ganz nett. U.U. auch wie das LCD bzw. ob es so 
wie im DB auf Seite 5 verschaltet ist (ein Kondensator 100nF oder 1uF 
zw. VDD und VSS nah an den Pins 23/24 bzw. 25/26 kann u.U. nützlich 
sein)
Initialisierung nach DB sollte funktionieren bzw. die Sequenz wäre:
Reset auf Low, 1 ms warten, Reset auf High, danach die Werte wie im DB 
schreiben, dann Set Display Enable. Danach läuft die Programmierung 
recht simpel: Spalte festlegen (Set Column Address LSB und MSB), Zeile 
festlegen (Set Page Address) und dann die Daten mit Write Data hinterher 
(hab die Teile hier allerdings nur im SPI-Modus in etlichen Geräten in 
Betrieb)

Edith: Datenblatt = 
https://www.lcd-module.com/eng/pdf/grafik/dogxl160-7e.pdf

: Bearbeitet durch User
von Klars (Gast)


Lesenswert?

Habe es genau wie auf Seite 5 beschrieben ist verdrahtet. Habe auch den 
Kondensator mit 100nF eingesetzt, fast direkt an den Pins. Es sind auch 
beiden Bus Widerstände drin. Display geht ohne Problem da ich die 
Adresse auslesen kann.
Mit SPI finde ich einiges im Netz. Leider kaum was zu I2C. Habe auch 
andere Displays von EA in Nutzung, alles mit I2C, keine Probleme

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Klars schrieb:
> Mit SPI finde ich einiges im Netz. Leider kaum was zu I2C.

Meinst Du denn, daß das Display andere Daten sehen will, nur weil es an 
einer anderen Schnittstelle hängt?

von Klars (Gast)


Lesenswert?

Kennst du Beispiele für die Ansteuerung?

von Christian S. (roehrenvorheizer)


Lesenswert?

" Display geht ohne Problem da ich die Adresse auslesen kann."

Hallo,

Das Display hat vier Adressen, zwei zum Lesen und zwei zum Schreiben, 
oder vier andere, wenn A2 high ist.

Bekommst Du ACK beim Schreiben?

MfG

: Bearbeitet durch User
von Klars (Gast)


Lesenswert?

Beim auslesen der Adresse bekomme ich ACK. Ist so in diesem Programm. 
Wenn ich die Adressenwahl umstecke bekomme ich die 2 Adesse. Ist die 
0x7e und 0x7a. Etwas auf Display habe ich nocht nicht geschrieben. 
Verstehe das init nicht

von Christian S. (roehrenvorheizer)


Lesenswert?

OK, das ist "write data".

Ich beziehe mich auf Seiten 5 und 6 aus dem Link oben. Das Datenblatt 
zum Controller habe ich NICHT ausführlich gelesen.

Es scheint Befehle zu geben, die mehr als ein Byte lang sind, siehe 
Seite 5 unten. Kommandos sollen auf die Kommandoadresse geschrieben 
werden als ein I2C-Zugriff mit Start und Stop. Dann das nächste Kommando 
auf diese Art, bis die Initialisierung laut Plan durchlaufen ist. Du 
wendest hierfür nur das Schema "write mode" an.

Die Umschaltung zwischen Kommando und Daten macht das Bit CD auf Seite 5 
unten. Dieser Trick wird als neue Adresse verkauft.

So ein kompliziertes Datenblatt versteht man eigentlich nur dann, wenn 
man es bereits versteht oder mit ähnlichen heimlich vorher geübt hat. 
Das ist wie mit dem Ei und der Henne, wobei ebenso ein Krokodil dafür in 
Frage kommen könnte.


Hier habe ich das Spiel mal für ein anderes Display gemacht:
https://www.mikrocontroller.net/attachment/308034/Sanbum_LBL-11337-1-01.zip


Du kannst ja mal die Initialisierung schreiben und hier rein stellen, 
dann werden die Experten schon finden, woran es liegt.

MfG

: Bearbeitet durch User
von Klars (Gast)


Lesenswert?

Da kann ich dir nur Rechtr geben. Habe das Datenblatt teilweise 
übersetzt und versucht zu verstehen. Habe beim Hersteller nach Infos 
gesucht und im Netz dazu. Leider gibt es kaum was dazu. Das Datenblatt 
verstehe ich auch nicht in DE. Ist so ein schönes Display ...

von Christian S. (roehrenvorheizer)


Lesenswert?

Dann lies mal das Dabla zum Sanbum durch und vergleiche mit dem Code aus 
dem ZIP. Das kann durchaus ein paar Tage dauern, aber das Sanbum ist 
deutlich einfacher und dann klappts auch mit dem Krokodil.

Beim RFM70 habe ich mich auch mal für Übersetzen entschieden.

MfG

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Das Datenblatt verstehe ich auch nicht in DE.

Was verstehst du da eigentlich nicht? Ist es die Befehlsfolge oder hast 
du Probleme mit I2C.
Ich habe das DOGXL160 (mit der angegebenen Initialisierung) mit SPI 
getestet.  Das hat ohne Probleme sofort funktioniert.

Allerdings verstehe ich eigentlich nicht, warum man bis zu 12MHz 
Ubertragungs takt bei SPI gegen I2C mit zweifelhaften Eigenschaften 
eintauschen sollte.

MfG Spess

von Klars (Gast)


Lesenswert?

Hallo Spess
mit dem I2C Bus habe ich keine Probleme. Betreibe auch andere Displays 
und ICs am Bus. Habe Probleme mit der Befehlsfolge des displays. Bei 
meinen Teilen funktioniert der Bus ohne jede Probleme. Habe teilweise 
ca. 5 verschiedene Teile am Bus. Leider ist für mich die Reihenfolge und 
was ich zum Display übertragen soll das Problem.

LG Klars

von Tippgeber (Gast)


Lesenswert?

Klars schrieb:
> Habe Probleme mit der Befehlsfolge des displays.

> Leider ist für mich die Reihenfolge und
> was ich zum Display übertragen soll das Problem.

Klars schrieb:
> Mit SPI finde ich einiges im Netz.


Was verstehst Du an:


Rufus Τ. F. schrieb:
> Meinst Du denn, daß das Display andere Daten sehen will, nur weil es an
> einer anderen Schnittstelle hängt?

nicht?

von Christian S. (roehrenvorheizer)


Lesenswert?

Also es muß sich wirklich niemand damit beschäftigen:
1
/* gehört zum Sanbum-Display */
2
const uint8_t UC1601_init[13] = {    //die sieben Bytes zum Initialisieren des Displays von hier auslesen und ans Display übertragen.
3
0x24,//|0b00,    //Set Temperature Comp. TC[1:0]
4
// falsch 0x28,//|0b110,    //Set Power Control PC[2:0]    bedeutet internal VLCD x 7
5
0x2C,//|0b110,    //Set Power Control PC[2:0]    bedeutet internal VLCD x 7
6
0x40,//|0b000000,  //Set Scroll Line SL[5:0]  
7
//0x81, günstiger Wert  //Set VBIAS Potentiometer PM [7:0] (Double byte command)
8
0x81,          //bei 0x50 begint das Display grau zu werden. Bei 0x80 sind Punkte schwarz. Set VBIAS Potentiometer PM [7:0] (Double byte command)
9
0xC0,    
10
0x84,//|0b0,    //Set Partial Display Enable LC [4]
11
0x88,//|0b001,    //Set RAM Address Control AC [2:0]
12
0xA0,//|0b0 ,    //Set Frame Rate LC [3]
13
0xC0,//|0b100,    //Set LCD Control LC[2:1]
14
0xE8,//|0b00,     //Set Bias Ratio BR [1:0]  Bias-ratio = 6 ist der default-Wert. Damit läßt sich das Display "ganz dunkel schwarz" steuern
15
0xF1,        //Set CEN [6:0] (Double byte command)
16
0x15,        ///auf diesen Wert COM_end einstellen: 0x15 = 21. Das Display hat also 21 Pixels Höhe
17
0xAF//|0b1      //Set Display Enable DC[2]    0xAe = off, 0xAF = on
18
};

: Bearbeitet durch User
von Klars (Gast)


Lesenswert?

Du meinst also das SPI und I2C beim init gleich ist?

von Arc N. (arc)


Lesenswert?

Klars schrieb:
> Du meinst also das SPI und I2C beim init gleich ist?

Ja, Initialisierung ist identisch. In beiden Fällen ist/sollte(s.o.) die 
Abfolge identisch sein:
Reset auf low, warten, Reset auf high (kann zwar laut Datenblatt 
weggelassen werden bzw. auf VDD gelegt werden, ist aber nicht verkehrt 
den Reset auch manuell durchführen zu können...).
Danach die Sequenz aus dem Datenblatt übertragen (Initialisation 
example).
Rest besteht, falls das Display nicht mehr an/aus geschaltet werden 
soll, nur noch aus Set Column und Set Page Address und Write Data.

von Klars (Gast)


Lesenswert?

Werde es mal im Netz suchen. Welche Daten brauche ich für init?

von Arc N. (arc)


Lesenswert?

Klars schrieb:
> Werde es mal im Netz suchen. Welche Daten brauche ich für init?

Initialisation example (bottom view), Seite 6 im Datenblatt...

von Klars (Gast)


Lesenswert?

Bist du dir sicher mit Seite 6 ?

von Tippgeber (Gast)


Lesenswert?

Klars schrieb:
> Bist du dir sicher mit Seite 6 ?

Jepp, isser.

von Klaus (Gast)


Lesenswert?

Du meinst den UC1610 DB ?
auf Seite 6 steht bei mir Pin Diskreption

von Tippgeber (Gast)


Lesenswert?

Klaus schrieb:
> Du meinst den UC1610 DB ?

Datenblatt des Displays, oben bereits von arc verlinkt, darauf bezieht 
er sich bereits die ganze Zeit.

Autor: Arc N. (arc)
Datum: 06.07.2018 21:26

https://www.lcd-module.com/eng/pdf/grafik/dogxl160-7e.pdf

von Klaus (Gast)


Lesenswert?

Du meinst so was:
1
i2c_start(Write_Command);          // set device address and write mode
2
  i2c_write(0xF1);                        // Set last COM electrode to 103 (number of COM electrodes - 1)
3
  i2c_write(0x67);                        //
4
  i2c_write(0xC0);                        // SEG (column) and COM (row) normal
5
  i2c_write(0x40);                        // Set Display Startline to 0
6
  i2c_write(0x50);                        //
7
  i2c_write(0x2B);                        // Set Panelloading
8
  i2c_write(0xEB);                        // Set Bias to 1/12
9
  i2c_write(0x81);                        // Set Contrast
10
  i2c_write(0x5F);                        //
11
  i2c_write(0x89);                        // Set Auto-Increment
12
  i2c_write(0xAF);                        // Display on
13
  i2c_stop();                             // set stop conditon = release bus
Damit kann ich die INI Exampel übertragen.
Das Teil des Codes steht bei mir schon drin. Die Adresse von 
Write-Command ist damit 0x7e oder 0x7a.
Bleibt noch die Frage nach den UC1610 Programming Commandes. Was muss 
ich damit übertragen?

von spess53 (Gast)


Lesenswert?

Hi

>Also es muß sich wirklich niemand damit beschäftigen:

Und du meinst das passt für alle Displays?

MfG Spess

von Klars (Gast)


Lesenswert?

Soll nur für das DOG XL160 passen. Im Netz habe ich auch die LIB von Jan 
gefunden. Das hat ja die verschiedensten Display drin. Bin gerade beim 
durcharbeiten

von Christian S. (roehrenvorheizer)


Lesenswert?

spess53 schrieb:
> Hi
>
> Also es muß sich wirklich niemand damit beschäftigen:
>
> Und du meinst das passt für alle Displays?
>
> MfG Spess

Nein, aber ich hoffte, er würde zu Übungszwecken erst mal mit einem 
einfacheren Dabla beginnen, dieses zu verstehen und hätte anhand des 
Programmschipsels einen Anhaltspunkt, worum es geht. Dann hätte er den 
Transfer machen können und die neu sich selbst beigebrachten Fähigkeiten 
auf sein favorisiertes Display anwenden können und hätte die Aufgabe 
ohne fremde Hilfe lösen können.
Aber ich glaube, diesen Weg wollte er nicht gehn. Es gibt andere Wege...

Diese GLCD-Datenblätter sind nichts für ungeübte, finde ich. Nur wenn 
man mehrere bereits verstanden hat, kann man auf Bekanntem aufbauen und 
Lücken im Verständnis schließen.



MfG

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.