Forum: Mikrocontroller und Digitale Elektronik Dip204-4 Display


von mätthu (Gast)


Angehängte Dateien:

Lesenswert?

hallo
benutze das display dip204-4 (20Spalten / 4Zeilen)

habe ein problem mit den adressierung der zeilen. laut datenblatt wäre 
es: 0x00
0x20
0x40
0x60

jedoch funktioniert dies nicht ganz...

zweites problem ist, nach spalte 13 springt es automatisch auf zeile 2!

kann jemand helfen?

im anhang der code fürs display..

initialisierung bin ich auch nicht ganz sicher obs stimmt?!

kontroller ist ks0073 und nicht hd44780

gruss

von ligthninglord (Gast)


Lesenswert?

Wenn du dir die Speicherzuweisung im Datenblatt des KS0073 ansiehst, 
wirst du merken das er nur 24 Zeichen speichert ( ohne Extenion ) -> 24 
/ 2 -> 12, dh. das die 2. Zeile ab Speicherstelle 13 beginnt, da für 2 
Zeilen nur ein KS0073 verwendet wird.

von mätthu (Gast)


Lesenswert?

aber das display hat 4Zeilen 20spalten mit integriertem kontroller. kann 
ja nicht sein das nur 24 zeichen dargestellt werden können? wie weiter?

von Michael U. (amiga)


Lesenswert?

Hallo,

habe mich nicht durch Deine unkommetierten Bitmuster beim Init gekramt,
den 4-Zeilen-Mode bei der Extended Funktionen hast Du aber gesetzt?

Gruß aus Berlin
Michael

von mätthu (Gast)


Lesenswert?

jein... was ist genau das RE Bit? das muss ja auf 1 gesetzt werden, um 
dies zu erledigen..

von Michael U. (amiga)


Lesenswert?

Hallo,

RE ist bei Function Set, wenn das mit 1 geschrieben wurde, wird auf den 
Extended Registersatz umgeschaltet.
Am Schluß eben wieder mit RE = 0 ausschalten.

Gruß aus Berlin
Michael

von mätthu (Gast)


Lesenswert?

Problem, wenn RE aber wieder auf 0 zurückgesetzt wird, wird N auch 
geändert --> d.h. die Anzahl Zeilen..??

von holger (Gast)


Lesenswert?

>Problem, wenn RE aber wieder auf 0 zurückgesetzt wird, wird N auch
>geändert --> d.h. die Anzahl Zeilen..??

Nein, N wird nicht mehr beachtet wenn du auf
4 Zeilen umgeschaltet hast.

von Michael U. (amiga)


Lesenswert?

Hallo,

RE schaltet den Registersatz um. Schau Dir die Liste mal an, es gibt 
fast überall Bedeutungen mit RE = 1 und RE = 0.

Also RE in seinem Register auf 1, zusammen mit den Werten für DL, N, BE, 
LP setzen.
Den Kram in den Extended Registern einstellen und am Schluß
das Register mit RE = 0 und passendem DL, N, DH, REV setzen.
Wenn NW auf 1 ist (4 Zeilen) wird laut Datenblatt N sowieso ignoriert.

Gruß aus Berlin
Michael

von mätthu (Gast)


Lesenswert?

denke meine initialisierung ist jetzt richtig:

void lcd_init(void)
 {
  delay_ms(40);
  RS=RW=0;

  lcd_send(0b00101100,1);  //function set --> RE=1!
  delay_us(50);
  lcd_send(0b00001001,1);  //extended function set
  delay_us(50);
  lcd_send(0b00100000,1);  //function set --> RE=0!
  delay_us(50);
  lcd_send(0b00100000,1);  //function set in 4-Bit Mode
  delay_us(50);
  lcd_send(0b00001100,1);  //Display On-Off Control
  delay_us(50);
  lcd_send(0b00000001,1);  //Display Clear
  delay_ms(2);
  lcd_send(0b00000110,1);
 }


jedoch klappt es immer noch nicht mit den 4-Zeilen. Nach zeile 0 springt 
es automatisch auf zeile 2 und nicht auf zeile 1. Die Zeilen 1 und 3 
sind sozusagen unbrauchbar!



Hier noch die lcd_send() funktion:

void lcd_send(int8 value, int1 four)
 {
 delay_cycles(1);
 EN=1;
 D7=bit_test(value,7);
 D6=bit_test(value,6);
 D5=bit_test(value,5);
 D4=bit_test(value,4);
 delay_cycles(1);
 EN=0;            //Oberes Nibble senden
 delay_cycles(1);
 if(four)
  {
  EN=1;
  D7=bit_test(value,3);
  D6=bit_test(value,2);
  D5=bit_test(value,1);
  D4=bit_test(value,0);
  delay_cycles(1);
  EN=0;
  }
 delay_us(30);
 }

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.