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,
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)
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
>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.
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.
>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.
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??
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