Kontrast EA DOG 162

OP #522497
Lesenswert?

Hi!

Habe vor Kurzem ein Display von Electronic Assembly in die Hände 
bekommen.
Bisher läuft es recht gut, nur bin ich mit dem Kontrast überhaupt nicht 
zufrieden!

Den kann man ja bereits bei der init festlegen. ich habe alle C-Bits 
laut DB gesetzt, nur sehe ich immer noch gleich viel. Einen Text zu 
schreiben geht, nur lesen wird verdammt schwer.


Gibt es da irgendeine Lösung, oder habden diese Displays generell einen 
schlechten Kontrast? Ansocnsten sehen die wirklich top aus...

Oder mache ich nur etwas grundsätzlich verdreht?

Freue mich auf jede Hilfe!!

Vielen Dank und freundliche winterliche Grüße

philipp
#522503
Lesenswert?

Ich dabe das Teil in einem Projekt im Einsatz.
Zur Kontraständerung muß zunächst die Instruction-Tabelle umgeschaltet 
werden.

Hier ist meine Init-Sequenz:

void Lcd_Init(void)
{
  Lcd_Ctrl(0b00111001);    // 8-Bit, 2 Zeilen, Instr. Table 1
  Lcd_Ctrl(0b00011101);    // BS:1/4, 3-Zeiliges LCD
  Lcd_Ctrl(0b01010000);    // Booster aus Kontrast C5, C4 setzen
  Lcd_Ctrl(0b01101100);    // Spannungsfolger und Verstärkung setzen
  Lcd_Ctrl(0b00001100);    // Display ein, Cursor aus
  Lcd_Ctrl(0b00000110);    // Cursor Auto-Increment
  Lcd_Ctrl(0b00111000);    // 8-Bit, 2 Zeilen, Instr. Table 0
}

Und hier die Routine zur Kontrasteinstellung:

void Lcd_SetContrast(U8 b)
{
  Lcd_Ctrl(0b00111001);    // 8-Bit, 2 Zeilen, Instr. Table 1
  Lcd_Ctrl(b | 0b01110000); // Kontrast C3,C2,C1,C0 setzen
  Lcd_Ctrl(0b00111000);    // 8-Bit, 2 Zeilen, Instr. Table 0
}

Ich hoffe, ich konnte Dir damit helfen.

mfG. Erwin Reuss
Gast #522721
Lesenswert?

Was denn für ein Display genau? Die Dinger mit Hintergrundbeleuchtung 
sind natürlich nicht so toll was den Kontrast an geht. Das normale 
EA-Dog ohne Hintergrundbeleuchtung ist aber sehr gut lesbar.
OP #523230
Lesenswert?

@Erwin

Super, jetzt habe ich erst überrissen was es mit den verschiedenen 
Instruction tables auf sich hat. Nun funkt es auch tadellos mit dem 
Contrast. (Das Display ist ein 16x2 EA DOG-M mit blauer 
Hintergrundbeleuchtung)

Achja noch etwas. Ich versuchte das Display so zu initialisieren, dass 
es die Zeichen doppelt so groß darstellt. Nun sehe ich die zeichen zwar 
doppelt so groß, nur leider fehlen zwischen den zeilen pixel. Ist es bei 
der Initialisierung ausreichend in Fubction Set DH="1" und N="0" zu 
setzen? oder muss ich sonst noch was einstellen?


vielen dank nochmals!!!

schöne grüße

philipp
OP #523923
Lesenswert?

Aha, eigentlich logisch. Da hab ich mich wohl zu früh gefreut. Wäre doch 
ein super Feature gewesen, naja egal.

Das Teil läuft jetzt ziemlich gut, sieht auch super aus!!


Hat jemand schon mal etwas mit customchars mit so einem DOG-Display 
ausprobiert? Das wäre so das nächste was in in Angriff nehmen würde



grüße
philipp
Gast #524116
Lesenswert?

> Hat jemand schon mal etwas mit customchars mit so einem DOG-Display
> ausprobiert?
Ja :)
1
////////////////////////////////////////////////////////////////////////
2
/*!
3
 * \brief LCD Zeichen Generieren
4
 * \param new_char Datenstring mit Hex Werten für 8 Zeilen und 5 Spalten
5
 * \param addr CGRAM Adresse 0x00 oder 0x08
6
 */
7
void LCD_generate_icon (unsigned char *new_char, unsigned char addr)
8
{
9
  unsigned char i;
10

11
  i = 0;
12

13
  LCD_SET_INSTRUCTION;                  // RS auf low (Instruction)
14

15
  put_LCD_Data_out(FUNCTION_NORM_MODE); // 8/4 Bit operation, 1/2 Zeilen
16
  LCD_clock();                          // Befehl ausfuehren
17

18
  put_LCD_Data_out(addr);               // Set CGRAM Adress
19
  LCD_clock();                          // Befehl ausfuehren
20

21

22
  LCD_SET_DATA;                         // RS auf high (Daten)
23

24
  put_LCD_Data_out(new_char[i++]);      // Char Zeile einfach auf Port 
25
  LCD_clock();                          // Befehl ausfuehren
26

27
  put_LCD_Data_out(new_char[i++]);      // Char Zeile einfach auf Port 
28
  LCD_clock();                          // Befehl ausfuehren
29

30
  put_LCD_Data_out(new_char[i++]);      // Char Zeile einfach auf Port 
31
  LCD_clock();                          // Befehl ausfuehren
32

33
  put_LCD_Data_out(new_char[i++]);      // Char Zeile einfach auf Port 
34
  LCD_clock();                          // Befehl ausfuehren
35

36
  put_LCD_Data_out(new_char[i++]);      // Char Zeile einfach auf Port 
37
  LCD_clock();                          // Befehl ausfuehren
38

39
  put_LCD_Data_out(new_char[i++]);      // Char Zeile einfach auf Port 
40
  LCD_clock();                          // Befehl ausfuehren
41

42
  put_LCD_Data_out(new_char[i++]);      // Char Zeile einfach auf Port 
43
  LCD_clock();                          // Befehl ausfuehren
44
}
45
////////////////////////////////////////////////////////////////////////
OP #524193
Lesenswert?

Super!

Eine Frage gleich dazu:
Ein Zeichen besteht ja bekanntemaßen aus pixeln, welche ich 
setzten(einschalten) und löschen(ausschalten kann. Ist es dann auch 
richtig, dass ich zb. wenn ich ein "T" darstellen will 8mal 8bit (da 8 
Spalten) mit richtig gesetzten Bits? verdammt, das kling 
unverständlich...

also so:

1.)  000111111
2.)  000001000
3.)  000001000
4.)  000001000
5.)  000001000
6.)  000001000
7.)  000001000
8.)  000000000

Da Du in deinem Code nur 7 mal etwas schreibst, gehe ich davon aus, dass 
man eine Nullzeile gar nicht schreiben bräuchte. Könnte ich diese denn 
überhaupt verweden? Wäre ja eigenlich für den Cursor gedacht?

Benutzt du bei deinem Code den internen Icon-Speicher? oder geht es auch 
ohne?


Vielen vielen Dank für deine Hilfe

grüße
philipp
OP #524223
Lesenswert?

Achja, noch eine Sache die ich nicht ganz verstehe: Mit der Instruction 
Table 0 kann ich ja bereits bei der Initialisierung die CGRAM-Adresse 
setzen. Muss ich das machen? Oder mache ich das z.b auch nach der init, 
indem ich mit dem FunctionSet in die IT0 gehe und dort meine Adresse 
setzte?


Achja, der CGRAM hat 6bits platz, also 63 Mögliche Speicherstellen, 
nicht?

Im DB des ST7036 steht:
"In the character generator RAM, the user can rewrite character patterns 
by program. For 5 x 8 dots, eight character patterns can be written."

Heißt das, ich kann nur 8 Zeichen speichern, oder sind da die Zeilen 
gemeint?


so, morgen werde ich mich mal dran wagen!!

grüße

philipp
OP #525773
Lesenswert?

So, jetzt verzfeifle ich!

Wie ich meine Zeichen ins CGRAM bekomme, ist mittlerweile ziemlich klar; 
Nur eine Frage bleibt noch:
Die Adressen des CGRAM wie verwende ich die? Es sind ja 6bits da, kann 
ich die adressen so vergeben: zb adr 15 = 0b01001111 (die letzten 1er 
für 15 dez, der erste für den Befehl laut DB)
Oder kann ich nur jedes Bit für ein Zeichen nutzten? zb. 0b01000001 für 
das erste zeichen; 0b01000010 fürs zweite?


Wenn ich nun die Zeichen im Display habe, wie sag ich dem Ding, dass er 
mir das Zeichen anzeichen soll?


Hier mein Code; vielleicht hilfts:


void lcd_generate_icon(unsigned char *zeichen, unsigned char adr)
{ unsigned char i=0, a;
  a=(adr<<3) | 0x40;
  lcd_write(0b00101000, 0);  //Function Set mit IT0  - Instruction
  lcd_write(0b01000000, 0);  //CGRAM adresse setzten - Instruction
  for(i=0; i<8; i++)
  {  lcd_write(0b01000000, 0);
     lcd_write(*zeichen, 1);  /Daten ins RAM schreiben - Data
     zeichen++;
  }
}


Meine Idee zum Anzeigen war:

void lcd_show_icon(unsigned char adr)
{  unsigned char a;
   a=(adr<<3) | 0x40;
   lcd_write(0b00101000, 0);  //Function Set mit IT0  - Instruction
   lcd_write(a, 0);
}

Das funktioniert allerdings NICHT!!! Verdammt!

Kann mir jemand einen guten Tip geben? Wäre demjenigen sehr dankbar!

freundliche Grüße
philipp

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