DDRAM Adressen Pollin 4x16 LCD

#2230031
Lesenswert?

Hallo,

ich schaffe es einfach nicht die Adressen der dritten und vierten Zeile 
herauszufinden. Weiß die zufällig jemand? Wenn ich immer weiter 
Buchstaben sende schreibt er auch in diese Zeilen bloß würde ich gerne 
die Adresse wissen um direkt in die Zeile zu schreiben. Ich habe schon 
ein Programm geschrieben das einfach die Adresse hoch zählt und immer 
einen Buchstaben ausgibt. So habe ich aber nur Zeile 1 und 2 
herausfinden können.

Gruß und Dank im Voraus Michael
#2230143
Lesenswert?

Klaus Wachtler schrieb:
> Es gibt da irgendwo ein Bit, wo man zwischen einzeiligen und
> zweizeiligen unterscheiden kann (wobei das vierzeilige dann wohl als
> zweizeiliges durchgeht).

Das ist
> 6). Function Set
>
> X: Do not care (0 or 1)
> DL: It sets interface data length.
> DL = 1: Data transferred with 8-bit length (DB7 - 0).
> DL = 0: Data transferred with 4-bit length (DB7 - 4).
> It requires two times to accomplish data transferring.
> N: It sets the number of the display line.
> N = 0: One-line display.
> N = 1: Two-line display.
> F: It sets the character font.
> F = 0: 5 x 8 dots character font.
> F = 1: 5 x 10 dots character font.
1
   RS RW DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
2
   0  0   0   0   1   DL  N   F   X   X
#2230201
Lesenswert?

Klaus Wachtler schrieb:
> Hier steht übrigens etwas mehr als in deinem Pollin-"Datenblatt":
> http://www.google.com/url?sa=t&source=web&cd=14&ve...
Danke! Ich habe jetzt die Adressen 80 C0 90 D0 heraus gesucht. Diese 
stimmen auch für die Zeilen, allerdings stehen die Buchstaben nicht ganz 
links sondern mittig in der Zeile. Erhöhe ich die Adresse wandern die 
Buchstaben nach rechts bis zum Rand und dann nochmal von der Mitte bis 
zum Rand.
Gast #2230339
Lesenswert?

Ich glaube du hast da ein grundlegendes Problem.0x80 ist der Befehl für 
den Kontroller, und die 0x00, 0x40, 0x10, 0x50 sind die Anfangsaddressen 
für die Zeilen.Du must sie zusammen addieren.Also wenn du in die Zeile 0 
schreiben willst dann gibst du 0x80 ein weil 0x00 + 0x80 = 0x80.Un so 
weiter.
#2231085
Lesenswert?

Meine Initialisierung sieht so aus:
1
;**********Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
2
lcd_init:
3
           push  temp1
4
           ldi   temp3,6
5
powerupwait:
6
           rcall delay5ms
7
           dec   temp3
8
           brne  powerupwait
9
           ldi   temp1,    0b00000011   ; muss 3mal hintereinander gesendet
10
           out   LCD_PORT, temp1        ; werden zur Initialisierung
11
           rcall lcd_enable             ; 1
12
           rcall delay5ms
13
           rcall lcd_enable             ; 2
14
           rcall delay5ms
15
           rcall lcd_enable             ; und 3!
16
           rcall delay5ms
17
           ldi   temp1,    0b00000010   ; 4bit-Modus einstellen
18
           out   LCD_PORT, temp1
19
           rcall lcd_enable
20
           rcall delay5ms
21
           ldi   temp1,    0b00101000   ; 4 Bot, 2 Zeilen
22
           rcall lcd_command
23
           ldi   temp1,    0b00001100   ; Display on, Cursor off
24
           rcall lcd_command
25
           ldi   temp1,    0b00000001   ; Display on, Cursor off
26
           rcall lcd_command
27
           ldi   temp1,    0b00000100   ; endlich fertig
28
           rcall lcd_command
29

30
           pop   temp1
31
           ret
Gast #2231719
Lesenswert?

Du meinst, du hast diese routine mit einem anderen display benutzt und 
es hat richtig funktioniert? Dann weiss ich nicht, muss bei dem Display 
auch funktionieren.Ich meine wenn du schon was auf dem display sehen 
kannst, dann ist es ein kleines Problem.Wenn die Zeichen nicht am Anfang 
der Zeile sind dann sind bei dem Display warscheinlich die Addressen 
anders, aber die erste Zeile muss sowieso am 0x00 anfangen.
Dieses Display hat den SPLC780D1 cotroller.
http://tinsharp.en.alibaba.com/product/50485537-210513951/character_lcd_TC1604A_01_.html
Angehängte Dateien:
#2232904
Lesenswert?

Wenn ich die Adresse 0x00 (welche ja das erste Zeichen in der ersten 
Zeile sein sollte) also das Kommando 0x80 sende steht der Text in der 
ersten Zeile aber in der Mitte der Zeile. Damit ich an den Anfang komme 
muss ich eine Adresse zwischen 0x20 und 0x2F verwenden. Aber es können 
doch nicht 16 Adressen für ein Feld des Displays sein, oder doch?

Gruß Michael
Gast #2232908
Lesenswert?

>Damit ich an den Anfang komme
>muss ich eine Adresse zwischen 0x20 und 0x2F verwenden. Aber es können
>doch nicht 16 Adressen für ein Feld des Displays sein, oder doch?

Such mal nach einem Kurzschluss auf den Datenleitungen.
Vieleicht auch eine offene Leitung.
Gast #2232975
Lesenswert?

>> Such mal nach einem Kurzschluss auf den Datenleitungen.
>> Vieleicht auch eine offene Leitung.
>Hab ich schon mehrfach und gerade noch mals. Kein Kurzschluss, keine
>Unterbrechung, keine vertauschten Leitungen.

Wie ist die Pinbelegung vom LCD am Port?
Welche Taktfrequenz und welcher Controller?
Wenn du die Infos lieferst kann ich dir mal
ne HEX Datei zum testen schicken.
Gast #2233100
Lesenswert?

>Ich glaub ich spinne! Es funktioniert. Danke Holger! Jetzt musst mir
>bitte nur noch verraten was ich falsch mache.:)

Du hast die Pins am Port anders angeschlossen als
die Standard Libs es haben möchten. Deine DB7 Leitung
ist schuld. Da wirst du im Assemblercode wohl einiges
ändern müssen.
Gast #2236175
Lesenswert?

Hi

Nachtrag:

>Weder noch. Die Texte und Kommandos komme ja alle richtig an.

Die kamen angeblich auch an als bei dir noch nicht berücksichtigt war, 
das DB7 nicht PD3 sondern an PD4 hängt.

MfG Spess

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