Ich bräuchte mal eure hilfe.
Ich möchte gerne ein DOGM 163 (3 Zeilig) für 5V im 4Bit-Modus
initialisieren.
Bisher hatte ich mit einem 2Zeiligen keine Probleme. Das lief auf
Anhieb.
Nur das 3Zeilige bekomme ich nicht hin.
Die Initialisierung läuft quasi soweit das ich eine Anzeige erhalte, nur
wenn ich dann mit:
1
dogm_gotoxy(0,0);
2
dogm_puts("1 Zeile");
3
dogm_gotoxy(0,1);
4
dogm_puts("2 Zeile");
5
dogm_gotoxy(0,2);
6
dogm_puts("3 Zeile");
meine Zeilen fülle, schreibt er mir nur in die erste Zeile.
Die Initialisierung sieht so aus:
Hi
>gibt es diese Option bei den DOGM LCD überhaupt?>Das läuft doch ausschließlich über die Initialisierung oder?
Das müssen die dogm_gotoxy-Routine angepasst werden.
MfG Spess
>> taucht irgendwas von dem Text in der 2. bzw. 3. Zeile auf?
Das verhält sich recht seltsam.
Die erste Zeile wird normal ausgefüllt, die beiden weiteren Zeilen wird
dann die Schrift doppelt groß.
Vielleicht liegt es wirklich an dem dogm_gotoxy
Das sieht momentan so aus:
Lokus Pokus schrieb:> Karl Heinz schrieb:>> mach mal folgendes> Das verhält sich recht seltsam.> Die erste Zeile wird normal ausgefüllt, die beiden weiteren Zeilen wird> dann die Schrift doppelt groß.>> Vielleicht liegt es wirklich an dem dogm_gotoxy
der goto hat nix mit doppelt so hoher Schrift zu tun.
Aber hier in der Init
schaltest du zum SChluss auf dDouble Height und Instruction Table 1
Wie wärs, wenn du dich einfach mal an die Initalisierungssequenz im
Datenblatt halten würdest, mit der einen Ausnahme, dass du den 4 Bit
Modus nimmst anstelle des 8 Bit Modus?
Ich denke mal, für den allerersten Versuch macht man nicht viel
verkehrt, wenn man die vom Hersteller veröffentlichte Version nimmt.
http://www.lcd-module.de/pdf/doma/dog-m.pdf
//Prüfe, auf welche Zeile geschrieben werden soll und setzt Adresse entsprechend
9
if(line==1){SPI_Write=0x80;__delay_us(100);}// Setze Adresse auf Zeile 1 = 0x80 + 0x00
10
elseif(line==2){SPI_Write=0x90;__delay_us(100);}// Setze Adresse auf Zeile 1 = 0x80 + 0x10
11
elseif(line==3){SPI_Write=0xA0;__delay_us(100);}// Setze Adresse auf Zeile 1 = 0x80 + 0x20
12
else{error=2;}
13
while(SPI1STATbits.SPITBF){};
14
// RS-Pin auf Daten schreiben setzen
15
oRS_PIN=1;
16
__delay_us(30);//execution time of display, see datasheet
17
18
//Buchstaben aus übergebenem String schreiben
19
for(i=0;i<length;i++)
20
{
21
SPI_Write=*(Text+i);
22
while(SPI1STATbits.SPITBF){};
23
//__delay_us(70);
24
}
25
returnerror;
26
27
}
Das ist lang, lang her,
aber so wie ich das sehe muss man einen entsprechenden Offset auf die
Addresse geben.
Das ist für ein DOGM mit Siltronics ST7036. Bei den DOG-Displays
ignoriert man am besten das Datenblatt und schaut direkt, welcher
Controller drin ist. Dann schaut man da drin nach.
Wenn die zweite und dritte Zeile zusammenfallen, ist vermutlich etwas in
der Initroutine falsch. Man kann - glaube ich mich zu erinnern - mehrere
Zeilen zu einer größeren Schrift zusammenfassen. Habs aber nie probiert.
> Wie wärs, wenn du dich einfach mal an die Initalisierungssequenz im> Datenblatt halten würdest, mit der einen Ausnahme, dass du den 4 Bit> Modus nimmst anstelle des 8 Bit Modus?> Ich denke mal, für den allerersten Versuch macht man nicht viel> verkehrt, wenn man die vom Hersteller veröffentlichte Version nimmt.> http://www.lcd-module.de/pdf/doma/dog-m.pdf
Würd ich gerne, wenn ich da durchblicken würde.
Woran erkennst du das hier auf Double Height geschalten wird?
Und wie errechne ich mir den 4Bit Modus?
Lokus Pokus schrieb:>> Wie wärs, wenn du dich einfach mal an die Initalisierungssequenz im>> Datenblatt halten würdest, mit der einen Ausnahme, dass du den 4 Bit>> Modus nimmst anstelle des 8 Bit Modus?>> Ich denke mal, für den allerersten Versuch macht man nicht viel>> verkehrt, wenn man die vom Hersteller veröffentlichte Version nimmt.>> http://www.lcd-module.de/pdf/doma/dog-m.pdf>> Würd ich gerne, wenn ich da durchblicken würde.> Woran erkennst du das hier auf Double Height geschalten wird?
?
Ähm.
Indem ich ins Datenblatt geschaut habe?`
Da steht das Commando Function Set (Bild)
Wenn Bit 2 auf 1 ist, dann wird auf double Height geschaltet.
Wie lautet dein letztes Kommando in dier Initialisierung an das LCD?
Lokus Pokus schrieb:> Würd ich gerne, wenn ich da durchblicken würde.
?
Wo ist da jetzt das Problem.
Der Hersteller hat dir doch eh ein INitialisierungsbeispiel für 5V
rausgegeben.
(Bild)
Er war sogar so freundlich, dir auch noch die Hex-Zahlen hinzuschreiben.
> Und wie errechne ich mir den 4Bit Modus?
Den hast du schon.
Hier am Anfang der Init
ist bereits korrekt in den 4 Bit Modus geschaltet worden.
Wenn dem nicht so wäre, dann würde gar nichts gehen.
Diese Mehrfachsequenz ersetzt die erste Initialisierung aus dem
Datenblatt. Anstatt der 0x39 sind es bei dir 0x29. Das eine Bit
Unterschied
1
0x39
2
+---+---+---+---+---+---+---+---+
3
|0|0|1|1|1|0|0|1|
4
+---+---+---+---+---+---+---+---+
5
6
0x29
7
+---+---+---+---+---+---+---+---+
8
|0|0|1|0|1|0|0|1|
9
+---+---+---+---+---+---+---+---+
ist genau das eine Bit, welches im Function Set Kommando für die
Unterscheidung 8-Bit/4-Bit steht.