Forum: Mikrocontroller und Digitale Elektronik Displaytech 64128c Osama's lab GLCD-Lib


von Günter M. (gueee)


Lesenswert?

Hallo,

ich versuche schon seit geraumer Zeit ein Displaytech 64128c 
http://docs-europe.electrocomponents.com/webdocs/06dd/0900766b806dda2b.pdf 
, mit der Osama's Lab GLCD-Lib zum laufen zu bekommen.
Leider schaffe ich es einfach nicht, die linke Hälfte des Displays 
anzusprechen!

Das ist mein Code:
1
#include <avr/io.h>
2
#include <util/delay.h>
3
#include "glcd.h"
4
#include "graph.h"
5
6
7
8
int main(void)
9
{
10
11
PORTC=0x00;
12
DDRC=0xFF;
13
14
PORTD=0x00;
15
DDRD=0xFF;
16
17
glcd_rst();
18
19
glcd_on();
20
21
bmp_disp(arr,1,1,127,63); 
22
23
}

das der Headerinhalt:
1
 #include <avr/pgmspace.h>
2
#include <stdlib.h>
3
#include <math.h>
4
#include <string.h>
5
#include "font.h"
6
7
typedef unsigned char byte;
8
//----------------------
9
#define E_DELAY 20
10
#define DATAPORT PORTD
11
#define CONTROLPORT  PORTC
12
#define DATADDR DDRD
13
#define DATAPIN PIND
14
#define CS1 (1<<2)
15
#define CS2 (1<<3)
16
#define DI  (1<<4)
17
#define RW  (1<<0)
18
#define EN  (1<<1)
19
#define RS  (1<<5)
20
//#define CS_ACTIVE_LOW   1   //Define this if your GLCD CS
21
                              //is active low (refer to datasheet)
22
//--------Arabic----------
23
static int prevLet = 193;
24
static byte stat = 0;
25
static byte prevX = 0;
26
static byte prevY = 0;
27
//------------------------
28
void trigger()
29
{
30
  CONTROLPORT |= EN;  //EN high
31
   _delay_us(E_DELAY);
32
   CONTROLPORT &= ~EN;  //EN low
33
   _delay_us(E_DELAY);
34
}
35
//----------------------
36
void glcd_rst()
37
{
38
#ifdef CS_ACTIVE_LOW
39
   CONTROLPORT &= ~RS;  //Activate both chips
40
#else
41
   CONTROLPORT |= RS;  //Activate both chips
42
#endif
43
}
44
  
45
void glcd_on()
46
{
47
#ifdef CS_ACTIVE_LOW
48
   CONTROLPORT &= ~CS1;  //Activate both chips
49
   CONTROLPORT &= ~CS2;
50
#else
51
   CONTROLPORT |= CS1;  //Activate both chips
52
   CONTROLPORT |= CS2;
53
#endif
54
   CONTROLPORT &= ~DI;  //DI low --> command
55
   CONTROLPORT &= ~RW;  //RW low --> write
56
   DATAPORT = 0x3F;   //ON command
57
   trigger();
58
}           
59
60
61
62
//------------BMP Display--------------------
63
void bmp_disp(byte *bmp,unsigned int x1,unsigned int y1,
64
                         unsigned int x2,unsigned int y2)
65
{
66
    unsigned int i,j;    
67
    for(i=y1;i<=y2;i++)
68
    {
69
        for(j=x1;j<=x2;j++)
70
        {                       
71
           goto_xy(j,i);                              
72
           glcd_write(pgm_read_byte(&bmp[(128*i)+j]));
73
           _delay_us(10);
74
        }                                              
75
    }
76
}
bin für jeden Hinweis dankbar!!

grüße gueee

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Leider schaffe ich es einfach nicht, die linke Hälfte des Displays
anzusprechen!


CS richtig verbunden? Tausche mal beide CS und schau ob dann die rechte 
Hälfte nicht geht.

und überprüf das mal:
//#define CS_ACTIVE_LOW   1   //Define this if your GLCD CS
                              //is active low (refer to datasheet)

von Günter M. (gueee)


Lesenswert?

Nils S. schrieb:
> CS richtig verbunden? Tausche mal beide CS und schau ob dann die rechte
> Hälfte nicht geht.

Habe ich schon probiert, gleiches ergebnis: nur rechte hälfte geht.

Nils S. schrieb:
> und überprüf das mal:
> //#define CS_ACTIVE_LOW   1   //Define this if your GLCD CS
>                               //is active low (refer to datasheet)

Bei meinem Display (Displaytech 64128c) ist definitiv aktiv HIGH

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

>Habe ich schon probiert, gleiches ergebnis: nur rechte hälfte geht.
zusammenfassend:

Der Controller gibt also BEIDE Hälften aus. Sprich wenn CS1 und CS2 
richtig angeschlossen sind, zeigt er die rechte Bildhälfte auf der 
Rechten Displayhälfte an. Wenn du die CS umdrehst, zeigt er die Linke 
Bildhälfte auf der Rechten Displayhälfte an. Stimmt das so?

Versuchs einfach mal mit Active Low, braucht genau einmal Flashen und 
ein Kommentar entfernen ;)

Die Pin-Definitionen der CS überprüfst du am besten mal indem du mitm 
Durchgangsprüfer vom Multimeter auf der einen Seite direkt den 
Controllerpin antatschst (PC2, PC3) und dann direkt am Display mit der 
zweiten Messstrippe. In der fertigen Schaltung mit allen Bauteilen 
(Controller, Stecker, Display, eben alles was aufm Weg ist), aber ohne 
Strom.

Versuch vlt auch mal einen anderen Treiber und schau ob in deinem vlt 
irgendwas auf 64x64 hindeutet.

> E_DELAY 20
das auch mal etwas höher ausprobieren.

von Günter M. (gueee)


Lesenswert?

Nils S. schrieb:
> Der Controller gibt also BEIDE Hälften aus. Sprich wenn CS1 und CS2
> richtig angeschlossen sind, zeigt er die rechte Bildhälfte auf der
> Rechten Displayhälfte an. Wenn du die CS umdrehst, zeigt er die Linke
> Bildhälfte auf der Rechten Displayhälfte an. Stimmt das so?

Ja, das stimmt so ...

Nils S. schrieb:
> Versuchs einfach mal mit Active Low, braucht genau einmal Flashen und
> ein Kommentar entfernen ;)

bereits versucht --> gar keine anzeige auf dem display

Nils S. schrieb:
> Versuch vlt auch mal einen anderen Treiber und schau ob in deinem vlt
> irgendwas auf 64x64 hindeutet.

keinen plan was du mit treiber meinst?!

Nils S. schrieb:
>> E_DELAY 20
> das auch mal etwas höher ausprobieren.

schon schrittweise bis 100 erhöht, selbes ergebnis.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

>keinen plan was du mit treiber meinst?!
Na den Code zum Ansteuern des Displays ;) Eben deine Osama-Lib, die dich 
grad terrorisiert :D

Gibt nen mindestens noch 2-3 andere, die gut und stabil laufen, nur die 
Pins anzupassen. Ich verwende meistens die von "Master Andre" und "ape", 
findest mit google sehr leicht, oder direkt hier im Forum suchen.

Die von Master Andre ist nur fürs nötigste ausgelegt und die von ape ist 
n richtiger Klopper. Finde beide sehr gut.

von Günter M. (gueee)


Lesenswert?

Irgendwie sitzt ein massiver fehler zwischen den ohren, denn ich habe es 
jetzt auch die libs von master.andre und ape probiert!

Kann es sein, dass der ATm168 mit 20MHz ext. OSC zu schnell ist??

von Günter M. (gueee)


Lesenswert?

hallo!

..... ich bin jetzt probehalber auf einen ATmega32 umgestiegen.

Mit der lib von Fabian Maximilian Thiele. Der Reset Pin wird in dieser 
Lib nicht angesteuert und plötzlich funktioniert nur die linke hälfte 
des displays????

Ich habe die "nop" schon verdreifacht um überhaupt etwas auf die linke 
hälfte zu zaubern. Doch die rechte hälfte kann ich nicht dazu bewegen 
etwas an zu zeigen.

Fest steht, beide hälften des displays funktionieren!

F_CPU ist auf 1MHz!

kann jemand dem Datenblatt 
http://docs-europe.electrocomponents.com/webdocs/06dd/0900766b806dda2b.pdf 
etwas entnehmen, dass ich evtl. übersehen hätte??

Schön langsam treibt mich das Display in den Wahnsinn, bin für jeden Tip 
dankbar!

P.S. Jtag ist disabled

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.