EA DOGM162 : kein schwarzer Hintergrund, Initialisierung

Gast #2597133
Lesenswert?

Hallo

Ich habe ein DOGM162S-A bei 5V (SPI) mit roter Hintergrundbeleuchtung 
aufgebaut. Alles nach Datenblatt. Doch es bleiben zwei Fragen:
1. Die Initialisierung klappt öfter mal nicht. Dann bleibt er im Init 
hängen.
2. Der Hintergrund ist nicht schwarz sondern gerade mal grau, so daß die 
rote Hintergrundbeleuchtung durchscheint.

Hier der Code:
1
/******************************************
2
 *       Routine für Dog-M Displays       *    
3
 *    mit ST7036 Controller im SPI-Mode   *
4
 ******************************************
5
 *                                        *
6
 * Nur 1-Zeilige Version vorerst...       *
7
 * Beschaltung laut Datenblatt EA-DOG-M   *
8
 *                                        *
9
 * (C)2007 Christopher Müller             *
10
 * shorty@shortysfastlane.de              *
11
 *                                        *
12
 * www.shortysfastlane.de                 *
13
 *                                        *
14
 * Stand: 17.Okt.2007                     *
15
 ******************************************/
16

17

18

19

20
// Veränderliche Variablen
21
//*******************************************
22
//#define F_CPU    1600000UL  //Clockspeed in Hz
23
#define DDR_SPI  DDRB  // DD-Register des SPI-Ports
24
#define DD_MOSI  DDB3  // Port/Pin des MOSI
25
#define DD_SCK   DDB5  // Port/Pin des SCK
26
#define DD_RS    DDRB  // DDR von RS
27
#define PORT_RS  PORTB // Port an dem RS ist
28
#define PIN_RS   PINB2   // Pin an dem RS ist
29
#define DD_CSB   DDRB  // DDR von CSB
30
#define PORT_CSB PORTB // Port an dem CSB ist
31
#define PIN_CSB  PINB1   // Pin an dem CSB ist
32
#define VOLTAGE  5     // Voltage auf 5 oder 3 Volt
33
#define CONTRAST 0x70  // Von 0x70 bis 0x7F Hexadezimal
34
//*******************************************
35
#include <util/delay.h>
36

37

38

39
void InitSPI (void)
40
{
41

42
  /* Set MOSI and SCK output, andere input */
43
  DDR_SPI = (1<<DD_MOSI)|(1<<DD_SCK);
44
  /* aktiviere SPI, Master, setze clock rate fck/16 */
45
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
46

47
  // Setze CSB als Ausgang und low
48
  DD_CSB |= (1<<PIN_CSB);
49
  PORT_CSB &= ~(1 << PIN_CSB);
50

51
  // Setze RS-Pin als Ausgang und low
52
  DD_RS |= (1<<PIN_RS);
53
  PORT_RS &= ~(1 << PIN_RS);
54

55
}
56

57

58

59
void Disp_Command(int Data)
60
{
61

62
  // Command Mode vorbeireiten; setze RS low
63
  PORT_RS &= ~(1 << PIN_RS);
64

65
  /* Starte übertragung */
66
  SPDR = Data;
67
  /* Warte auf ende der Übertragung */
68
  while(!(SPSR & (1<<SPIF)));
69

70
  //Übertragung abschließen durch RS toggle
71
  PORT_RS = (1 << PIN_RS); // high
72
  PORT_RS &= ~(1 << PIN_RS); //low
73

74
  _delay_us(50); // warte auf Display
75
}
76

77

78

79
void Disp_Byte(int Data)
80
{
81
  // Data Mode vorbeireiten; setze RS high
82
  PORT_RS = (1 << PIN_RS);
83

84
  /* Starte übertragung */
85
  SPDR = Data;
86
  /* Warte auf ende der Übertragung */
87
  while(!(SPSR & (1<<SPIF)));
88

89
  //Übertragung abschließen durch RS toggle
90
  PORT_RS &= ~(1 << PIN_RS); //low
91
  PORT_RS = (1 << PIN_RS); // high
92

93
  _delay_us(50); // warte auf Display
94
}
95

96

97

98
void Disp_Char(char cData)
99
{
100
  // Data Mode vorbeireiten; setze RS high
101
  PORT_RS = (1 << PIN_RS);
102

103
  /* Starte übertragung */
104
  SPDR = cData;
105
  /* Warte auf ende der Übertragung */
106
  while(!(SPSR & (1<<SPIF)));
107

108
  //Übertragung abschließen durch RS toggle
109
  PORT_RS &= ~(1 << PIN_RS); //low
110
  PORT_RS = (1 << PIN_RS); // high
111

112
  _delay_us(50); // warte auf Display
113
}
114

115

116

117
void Disp_String(char *cData)
118
{
119
  // Data Mode vorbeireiten; setze RS high
120
  PORT_RS = (1 << PIN_RS);
121

122
  while (*cData)
123
  {
124
    /* Starte übertragung */
125
    SPDR = *cData;
126

127
    /* Warte auf ende der Übertragung */
128
    while(!(SPSR & (1<<SPIF)));
129

130
    //Übertragung abschließen durch RS toggle
131
    PORT_RS &= ~(1 << PIN_RS); //low
132
    PORT_RS = (1 << PIN_RS); // high
133

134
    _delay_us(50); // warte auf Display
135
    ++cData;
136
    }
137
}
138

139

140

141
void Disp_Clear(void)
142
{
143

144
  Disp_Command(0x01); // Disoplay löschen
145
  _delay_ms(25);      // Auf Display warten
146
  Disp_Command(0x06); // Entry Mode set - Display wartet auf Eingabe
147
  _delay_ms(15);      // Auf Display warten
148

149
}
150

151
// zeile =1 oder 2, Position bei 0 beginnend
152
void Disp_Pos(int zeile, int xPos)
153
{
154
  if (zeile == 2)
155
    xPos += 0x40;
156

157
  Disp_Command(0x80|xPos); // Display Position Set DDRAM Address
158
  _delay_ms(25);      // Auf Display warten
159

160
}
161

162

163

164
void InitDisp(void)
165
{
166
  _delay_ms(80); // Warte auf Display
167

168
  int BIAS,PWR,FOLLOW;
169

170
  if (VOLTAGE == 5)
171
    {
172
     BIAS = 0x1c;
173
     PWR  = 0x52;
174
     FOLLOW = 0x69; 
175
    }
176
  else
177
    {
178
     BIAS = 0x14;
179
     PWR  = 0x55;
180
     FOLLOW = 0x6d;
181
    }
182

183
  Disp_Command(0x39); // Function Set ; 8 Bit; 1Zeile, Istr.Tab 1
184
  Disp_Command(BIAS); // Bias Set 
185
  Disp_Command(PWR); // Power Controll
186
  Disp_Command(0x69); // Follower Controll
187
  Disp_Command(CONTRAST); // Kontrast setzten
188
  Disp_Command(0x0c); // Display ein, kein Cursor, kein Blinken
189
  Disp_Command(0x01); // Disoplay löschen
190
  _delay_ms(50);      // Auf Display warten
191
  Disp_Command(0x06); // Entry Mode set - Display wartet auf Eingabe
192
  _delay_ms(50);      // Auf Display warten
193

194
}
Angehängte Dateien:
Gast #2597136
Lesenswert?

Sven schrieb:
> 1. Die Initialisierung klappt öfter mal nicht. Dann bleibt er im Init
> hängen.

Nach dem Einschalten mehr Zeit lassen.

> 2. Der Hintergrund ist nicht schwarz sondern gerade mal grau, so daß die
> rote Hintergrundbeleuchtung durchscheint.

Den Kontrast kann man per Befehl einstellen. Siehe Datenblatt.

Die LEDs haben aber einen Vorwiderstand oder? Sehen recht hell aus.

Ich hab die Dinger schon verbaut, mit Kontrasteinstellung und 
vernünftiger LED-Helligkeit bekommt man die sehr schön kontrastreich rot 
auf schwarz hin.
Gast #2597237
Lesenswert?

Also das Display sieht sehr hell und ungleichmäßig beleuchtet aus...

Hab diese Displaykombination schon sehr oft verbaut. Da könnte was nicht 
stimmen. Ich betreibe das Display meist bei ca. 40-60% (PWM) und damit 
wirkt es sehr schick!

http://bilder.hifi-forum.de/medium/19361/mit-3m-carbonfoile-siehts-endlich-gut-aus_99942.jpg

Vielleicht hast du nicht alle Schutzfoilen abgezogen. Auf der 
LED-Beleuchtung ist auch nochmal eine. Dann auf der Rückseite + 
Frontseite des Displays. Seit neustem mit grüner Lasche, nicht zu 
übersehen...

Würde dem Display auch mehr Zeit geben... falls es gar nicht wird, hast 
du es kaputt bekommen. Laut Messevertreter sind die Displays sehr 
empfindlich gegen ESD. Hab auch nen totes hier. Das startet nur noch 
jedes 40te mal ordentlich durch und hängt sich nach 3 Sekunden wieder 
auf...

MfG

Basti
#2597273
Lesenswert?

Ich habe hier ein EA DOGM132S-5 mit der gleichen Beleuchtung EA 
LED55X31-R und 3.3V Versorgung. Bei mir ist es zwar etwas besser, aber 
irgendwie bin ich doch enttäuscht. Die rot-schwarzen LCDs in meinem Audi 
A4 (8E5) fürs Fahrer-Informationssystem, km-Zähler und die Einstellungen 
der Klimaautomatik sind meilenweit besser - da ist der schwarze 
Hintergrund wirklich fast schwarz. So etwas in der Richtung hätte ich 
auch von EA erwartet, aber das war wohl zu viel verlangt.

fchk
Angehängte Dateien:
Gast #2597383
Lesenswert?

Bassti schrieb:
> damit
> wirkt es sehr schick!
>
> http://bilder.hifi-forum.de/medium/19361/mit-3m-ca...

Hm, das finde ich gar nicht schick. Ich ging davon aus, daß der 
Hintergrund schwarz ist. So gaukelt es einem das Datenblatt ja auch vor 
oder 
http://such001.reichelt.de/?SID=11T2RDv38AAAIAACY7Bbk19dc4ddcfb9fcbf587bbdf558e12995c;ACTION=444

Manfred John schrieb:
> Doch, Vorwiderstand vergessen o. falscher wert (0,15 statt 1,5...).

??? Im Datenblatt steht 36 Ohm.

Bassti schrieb:
> Vielleicht hast du nicht alle Schutzfoilen abgezogen.

Alle ab (bis auf vorne), aber die stört nicht.

Frank K. schrieb:
> Ich habe hier ein EA DOGM132S-5 mit der gleichen Beleuchtung EA
> LED55X31-R und 3.3V Versorgung.

Das Foto kommt meiner Situation ziemlich nahe. Wieso hast Du da so viele 
Cs?
Gast #2597431
Lesenswert?

und die kann man bei dem Display vergessen... viel zu hell... immer 
gleich über nen einfachen Transistor und nen PWM Ausgang das Display 
dimmbar machen. Dann bekommt man halbwegs gute Optik...

Das es nicht aussieht wie das Audi Display geb ich zu, aber mir fallen 
jetzt für Hobbybastler keine bessern Display ein... (mit der Vielfalt)
Gast #2599387
Lesenswert?

Sven schrieb:
> Ich
> will echtes schwarz - tief schwarz

Dann musst Du OLED nehmen.

Wenn Du Dich mal informieren würdest, wie LC-Displays funktionieren, 
würdest Du merken, dass "tiefschwarz" nicht möglich ist, weil die 
Polfilter immer eine Resttransmission haben.

Außerdem sind die Polfilter auf Grün optimiert und haben im Blauen und 
Roten eine höhere Resttransmission als im Grünen.

Von daher ist das, was die DOGM bringen durchaus in Ordnung.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren