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.
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
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
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
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
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...
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.