Forum: Mikrocontroller und Digitale Elektronik Kontrast EA DOG 162


von Philipp P. (putzer_philipp)


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

von Erwin R. (er-tronik)


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

von Jörg S. (Gast)


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.

von Philipp P. (putzer_philipp)


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

von Jörg S. (Gast)


Lesenswert?

> nur leider fehlen zwischen den zeilen pixel.
Was vollkommen normal ist, da du ja ein 2-Zeilen Display hast.

von Philipp P. (putzer_philipp)


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

von Jörg S. (Gast)


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
////////////////////////////////////////////////////////////////////////

von Jörg S. (Gast)


Lesenswert?

Wobei mir auffällt das man das auch schön in ner Schleife hätte 
programmieren können... Na ja, egal, es funktioniert ;)

von Philipp P. (putzer_philipp)


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

von Philipp P. (putzer_philipp)


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

von Philipp P. (putzer_philipp)


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

von Philipp P. (putzer_philipp)


Lesenswert?

Hi!

Nun läufts! Jawohl!

War ein Denkfehler drin, aber nun gehts prima

von Ivo Burkart (Gast)


Lesenswert?

@ Philipp Putzer: Wäre es möglich dass Du Deinen LCD-Code mal komplett 
postest? Ich will das Ding auch mit 8 Bit betreiben und bekomme es nicht 
zum laufen.

Danke schonmal :-)
Ivo

von Philipp P. (putzer_philipp)


Angehängte Dateien:

Lesenswert?

Ja, kann ich machen. Ist aber nicht alles von mir, nur der Teil fürs 
DOG-LCD.

Hier erst mal die C-Datei

Grüße

von Philipp P. (putzer_philipp)


Angehängte Dateien:

Lesenswert?

Und die Header

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.