Forum: Mikrocontroller und Digitale Elektronik DG-16080 / LC7981 Treiber: Ausgabe Puffern möglich?


von Rene K. (draconix)


Lesenswert?

Hiho,

hab da mal eine Frage bezüglich eines GLCD Displays... und zwar dreht es 
sich um dieses Pollin DG-16080 Dingens (Ja... Touch funktionierte).

Soweit funktioniert das Display auch wunderbar. Allerdings jedoch ist es 
etwas träge im Bildaufbau. Schon so das man es sehen kann. Gerade wenn 
man den Screen softwareseitig auf clear setzt (Da laß ich höhe mal 
breite 0x00 durchlaufen). Aber wie gesagt man sieht es.

Gibt es eine Möglichkeit den Screen zu "buffern" und dann auf einen 
Schlag zu Ausgabe zu geben?! Bietet der LC7981 Controller solch eine 
Möglichkeit?! Oder sogar Hardwaremäßig? Wozu ist der Reset Pin und der 
CS gut (Pin 15 und 16)? Dort habe ich Reset hardwareseitig auf high und 
CS auf low.

Jemand einen Hinweis?

von K. J. (Gast)


Lesenswert?

Hi, also so wie es ist nicht allerdings war hier in nen terat dazu was 
wie man den kompletten Speicher nutzen kann eventuell geht es damit.

cs,reset sind nur zum resetten b.z.w. halt Chip selekt wird dir dabei 
auch erstmal nicht weiterhelfen.

von Sascha W. (sascha-w)


Lesenswert?

@Rene

also wenn du den Bildaufbau sehen kannst, dann machst du was falsch.

Ich kann bei meinem DG16080 den Bildinhalt löschen und neue Daten 
darstellen ohne dabei eine nennenswerte Verarbeitungszeit feststellen zu 
können.

Wie löschst du den Bildinhalt? - doch nicht etwa pixelweise!
Wertet deine LCD-Routine das Busy-Bit aus oder verwendest du Delay's?

Sascha

von Rene K. (draconix)


Lesenswert?

Sascha Weber schrieb:
> @Rene
>
> also wenn du den Bildaufbau sehen kannst, dann machst du was falsch.
>
> Ich kann bei meinem DG16080 den Bildinhalt löschen und neue Daten
> darstellen ohne dabei eine nennenswerte Verarbeitungszeit feststellen zu
> können.
>
> Wie löschst du den Bildinhalt? - doch nicht etwa pixelweise!
> Wertet deine LCD-Routine das Busy-Bit aus oder verwendest du Delay's?
>
> Sascha

Nunja, es nun, wie gesagt, nicht so das ich es direkt sehen kann, es 
flackert halt kurz, das nervt aber :D

Ich warte die Busyflag mit einem delay ab von 3x nop, Das auslesen der 
Bussyflag würde über der Verarbeitsungszeit liegen - aber so 
ansastzweise bin ich bei ca. 1µs für die Flag.

Den Bildschirminhalt lösche ich byteweise (0x00) also in 1600 Schritten 
:/

von Daniel T. (Gast)


Lesenswert?

Du könntest einen µC mit etwas mehr Ram nehmen (z.B. atmega32) und das 
Bild in diesen Ram abspeichern. Dann kannst du das Bild periodisch 
aktualisieren indem du das Bild einfach überschreibst.

z.B in C etwa so:

ISR:
{
for(i=0;i<1600;i++) writeByte(bild[i]);
}


void setRamPixel(int x, int y)
{
 ...
 bild[i]=...;
}

von Sascha W. (sascha-w)


Angehängte Dateien:

Lesenswert?

Rene K. schrieb:

> Den Bildschirminhalt lösche ich byteweise (0x00) also in 1600 Schritten

setzt du die Cursorposition für jedes Byte neu? Oder gibst du die 20Byte 
pro Zeile hintereinander aus?

Hab bei mir gerade mal gemessen das löschen des Bildinhaltes dauert 15ms 
und der Bildaufbau siehe Anhang 180ms.
ATMega644 läuft mit 18MHz.

Sascha

von Rene K. (draconix)


Lesenswert?

Daniel T. schrieb:
> Du könntest einen µC mit etwas mehr Ram nehmen (z.B. atmega32) und das
> Bild in diesen Ram abspeichern. Dann kannst du das Bild periodisch
> aktualisieren indem du das Bild einfach überschreibst.

Sehr schön danke, eine nette idee! Einfach selber einen Framebuffer 
bauen. µC ist sowieso ein ATMega32.

Sascha Weber schrieb:
> setzt du die Cursorposition für jedes Byte neu? Oder gibst du die 20Byte
> pro Zeile hintereinander aus?

Nein nein, ich schreibe die 1600byte hintereinander rein, da er ja eh 
jede Zeile bei Ende springt:
1
void lcd_clear(void) {
2
        unsigned int i;
3
4
        lcd_Cmove(0, 0);
5
        
6
        for (i = 0; i < 1600; i++) lcd_graphics_draw_byte(0x00);
7
}

Sascha Weber schrieb:
> Hab bei mir gerade mal gemessen das löschen des Bildinhaltes dauert 15ms
> und der Bildaufbau siehe Anhang 180ms.
> ATMega644 läuft mit 18MHz.

Nuja, messen könnte ich es ja mal mit meinem Logicanalyzer. Mein Atmega 
läuft mit 16Mhz, jedoch wird es halt durch die Bussyflag nicht deutlich 
schneller, auch kann ich das schreiben gegenüber einem 8Mhz Quarz nicht 
deutlich steigern, da ich dann die fallenden E-Flanke in der Zeit 
anpassen muß.

von PIC N. (eigo) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe nochmal eine Frage an die Profis hier: Ich kann mit der
Funktion von Benedikt, zum "springen" zu einer Adresse im Display:
1
void GLCD_SetAdress(unsigned char x, unsigned char y)
2
{
3
  unsigned short adress;
4
  adress=y*20+x;
5
  GLCD_writecom(0x0A);        // write adress low
6
  GLCD_writedata(adress&255);
7
  GLCD_writecom(0x0B);        // write adress high
8
  GLCD_writedata(adress/256);    
9
}

..nur bis zur Zeile 7 springen danach geht es nicht mehr, bzw. wird ab
hier dann nichts mehr geschrieben =( Wenn ich aber keine Zeile anwähle
sondern einfach nur wild aufs LCD drauf los schreibe schreibt er sauber
das ganze Display voll aufgrund des inkrementieren um 1 je Datensatz.

Meine Initialisierung sieht so aus:
1
void GLCD_Init_C(void)
2
{
3
  GLCD_RES=0;
4
  Delay10KTCYx(1);
5
  GLCD_RES=1;
6
7
  GLCD_writecom(0x00);  // Mode Con
8
  GLCD_writedata(0x3C);  // Character Mode, Cursor blink  
9
  
10
  GLCD_writecom(0x01);  // Character Pitch
11
  GLCD_writedata(0x77);  // 8x8 Chars  
12
13
  GLCD_writecom(0x02);  // Number of Characters
14
  GLCD_writedata(19);  // 19 Zeichen <--->
15
16
  GLCD_writecom(0x03);  // Set Duty
17
  GLCD_writedata(0x4F);  // 80-1
18
19
  GLCD_writecom(0x04);  // Cursor Position
20
  GLCD_writedata(0x07);  // Line 1
21
22
  GLCD_writecom(0x08);  // Start Adresse Low
23
  GLCD_writedata(0x00);  // 0
24
25
  GLCD_writecom(0x09);  // Start Adresse High
26
  GLCD_writedata(0x00);  // 0
27
28
  GLCD_writecom(0x0A);  // Cursor lower adress
29
  GLCD_writedata(0x00);  // 1
30
31
  GLCD_writecom(0x0B);  // Cursor upper adress
32
  GLCD_writedata(0x00);  // 1
33
}

1. Wo ist der unterschied zwischen Cursor Adresse und Start Adresse?

schönen Abend! Nico

PS: Ich hatte den Beitrag mal in einem anderen Thread gestellt der war 
aber schon ziemlich alt ich hoffe hier nimmt sich einer Zeit mir zu 
helfen =/

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.