Forum: FPGA, VHDL & Co. LCD auf dem De2-70


von S. L. (contor)


Angehängte Dateien:

Lesenswert?

Hallo Community,
ich habe schon mehrfach gesucht aber leider nie eine konkrete Antwort 
dazu gefunden.

Ich möchte auf meinem LCD etwas schreiben das klappt auch soweit 
zumindest laut Modelsim.

1.Nun zu meinen Fragen muss ich nach jeden Buchstaben den Cursor eine 
Stelle weiter schieben oder brauch ich das nicht? Wenn ja wie schiebe 
ich diesen weiter?

ich habe dazu im LCD Handbuch nachgesehen und das steht sowas drin:

Cursor or Display Shift:
00 00 01 S/C R/L XX

was bedeutet diese S/C R/L ?

2. Wie komme ich in die 2 Zeile des LCD? Ich kann dazu leider nichts 
finden? Oder ich bin Blind!

PS: Erster Versuch ein LCD mit VHDL anzusteuern.
Mein Projekt habe ich angehängt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tony L. schrieb:
> auf meinem LCD
Ratestunde? Welches LCD? Grafik? Character? Interface?

> ich habe dazu im LCD Handbuch nachgesehen
Schön. Und wir?

> Fahrstuhl.rar
Wäre schön, wenn du nicht dein halbes Laufwerk hier posten würdest, 
sondern nur die paar VHDL-Files, die interessant sind. Was wenn z.B. 
mein Tablet nichts mit rar anzufangen weiß?

> PS: Erster Versuch ein LCD mit VHDL anzusteuern.
Glück gehabt, dass Andere sowas auch schon gemacht haben. Man muss 
nicht das Rad jedesmal neu erfinden. Meist reicht es, wenn man weiß, wie 
es funktioniert...

: Bearbeitet durch Moderator
von S. L. (contor)


Angehängte Dateien:

Lesenswert?

1. DE2-70 HD44780 compatible 8-bit interface character LCD module


2. 
http://eewiki.net/download/attachments/4096079/lumex_lcd_information.pdf?version=1&modificationDate=1343228756397&api=v2

3. Da sind 3 .vhd Dateinen im Projekt

- lcd_Controller (init etc.)
- lcd_Schnittstelle (data send)
- takt

aber kein Problem kann auch gern nur die .vhd Datein hochladen

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tony L. schrieb:
> 1. DE2-70 HD44780 compatible 8-bit interface character LCD module
Siehe http://www.adafruit.com/datasheets/HD44780.pdf auf Seite 25:
S/C = 1: Display shift
S/C = 0: Cursor move
R/L = 1: Shift to the right
R/L = 0: Shift to the left

Tony L. schrieb:
> 2. Wie komme ich in die 2 Zeile des LCD?
Setze die DDRAM-Adresse auf den Wert, der im Datenblatt steht. Ich 
vermute, das dürfte 0x40 sein...
1
        IF(clk_count < (50 * freq)) THEN  --do not exit for 50us
2
           busy <= '1';
3
           IF(clk_count < freq) THEN      --negative enable
4
            e <= '0';
5
           ELSIF(clk_count < (14 * freq)) THEN  --positive enable half-cycle
6
            e <= '1';
7
           ELSIF(clk_count < (27 * freq)) THEN  --negative enable half-cycle
Hier würde ich empfehlen, den FPGA-Takt auf 1us herunterzubrechen und 
einen Clock-Enable mit 1 us zu verwenden. Dann fällt dort überall das 
"*freq" weg und die Zähler und Vergleicher werden wesentlich 
kompakter...
Das mit dem Clock-Enable siehst du z.B. dort:
http://www.lothar-miller.de/s9y/archives/61-Lauflicht.html

: Bearbeitet durch Moderator
von S. L. (contor)


Lesenswert?

okay danke soweit.

also das mit dem Cursor habe ich soweit verstanden. Ich muss dann quasi 
nach jedem zeichen den cursor weitersetzen um das nächste zeichen zu 
schreiben. Richtig?


wo muss ich die adresse in das telegramm schreiben? kann dies noch nicht 
greifen.

mein Telegramm sieht ja folgendermaßen aus:

1 0 0000   0000

w r db7-4 db3-0

: Bearbeitet durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tony L. schrieb:
> Ich muss dann quasi nach jedem zeichen den cursor weitersetzen um das
> nächste zeichen zu schreiben. Richtig?
Wenn du es schlau machst, das Datenblatt genau ansiehst und dann die 
richtigen einstellungen machst, dann musst du nur die DDRAM-Adresse auf 
0 setzen, die Zeichen der ersten Zeile schreiben, dann die DDRAM Adresse 
auf 0x40 setzen und dann die Zeichen für die zweite Zeile schreiben. 
Hochzählen tut das Display dann von allein...

Tony L. schrieb:
> wo muss ich die adresse in das telegramm schreiben? kann dies noch nicht
> greifen.
> mein Telegramm sieht ja folgendermaßen aus:
>
> 1 0 0000   0000
> w r db7-4 db3-0
Eigentlich sind R und W auf der selben Leitung, und dann gibt es noch 
die RS-Leitung...

Lies dir einfach mal das Datenblatt durch und versuche es zu 
verstehen. Und dann denk an meinen letzten Satz im ersten Post...

von S. L. (contor)


Lesenswert?

okay
also das sind die Adressen

However, when N is 0 (1-line display), AAAAAAA can be 00H to 4FH. When N 
is 1 (2-line display),
AAAAAAA can be 00H to 27H for the first line, and 40H to 67H for the 
second line


geschrieben werden die so 001AAAAAAA

und daten schreib ich so:

10DDDDDDDD


ich muss erst die Adresse schreiben und dann auf das BF warten und im 
Anschluss die Daten. Richtig?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tony L. schrieb:
> ich muss erst die Adresse schreiben und dann auf das BF warten und im
> Anschluss die Daten. Richtig?
Ja. Aber ich würde eher sagen: mach einen lokalen Puffer für das Display 
und einen "langsamen" Prozess, der diesen Puffer laufend auf das Display 
schreibt (z.B. alle 2ms ein Zeichen). Und dann kannst du, wenn dieser 
Puffer z.B. ein Dual-Port RAM ist, jederzeit ohne zu Warten neue Daten 
da rein schreiben.
Ich habe das im Beitrag "Re: EA DOG-M initialisieren" für 
ein 4-Bit Interface gemacht...

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.