Forum: FPGA, VHDL & Co. LCD Einbindung Altera2 Board


von Bernd (Gast)


Lesenswert?

Hallo Leute,

langsam verzweifle ich... Ich habe mich nun schon extrem lange im Forum 
umgesehen und ich habe die verschiedensten Codes ausprobiert um mein LCD 
(HD44...) zum Laufen zu bringen. Meine Absicht ist es erstmal wirklich 
nur das LCD zu initialisieren und von mir aus "Hello World" o.ä. 
darzustellen.

Habt ihr einen Code, der das realisiert? Den Rest kann ich mir dann 
selber programmieren, aber es klappt einfach nicht mit der 
Initialisierung.

Ich wär euch sehr dankbar, wenn ihr mir helfen könntet!

Viele Grüße
Bernd

von Daniel__M (Gast)


Lesenswert?

Soweit ich weiß, haben die hd44... Datenblätter immer einen 
Initiaisierungsvorschlag. Diesen einfach per State-machine nachbauen. 
Das sollte sich sehr leicht per Simulator prüfen lassen. Meist werden 
die Verzögerungen zwischen den Befehlen nicht eingehalten.

von Norbert (Gast)


Lesenswert?

Hallo Bernd,

schau mal hier, vielleicht hilft dir das weiter

http://pastebin.com/cn7fgJKj

MfG Norbert

von Bernd (Gast)


Lesenswert?

Danke für die Hinweise vorerst. Allerdings weiß ich nicht welche Pins 
ich beispielsweise an
1
                chars_line1 : in std_logic_vector((CHARS_PER_LINE * 8) - 1 downto 0);   -- first line
2
                chars_line2 : in std_logic_vector((CHARS_PER_LINE * 8) - 1 downto 0);   -- second line
3
                clk : in std_logic;                             -- clock
4
                reset : in std_logic;                           -- asynchronous reset

dranhängen muss. Die Pins für den RS, RW, EN habe ich in dem Datenblatt 
gefunden. Aber wo diese Vectoren dranhängen muss, weiß ich absolut 
nicht. Wie finde ich das raus?

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


Lesenswert?

Bernd schrieb:
> Ich habe mich nun schon extrem lange im Forum umgesehen
Das ist schon mal nicht schlecht...
> und ich habe die verschiedensten Codes ausprobiert
Hast du auch (wenigstens ansatzweise) versucht, die jeweiligen 
Beschreibungen zu verstehen? (Kleiner Tipp: das hat was mit 
Nachdenken, Überlegen und durchgemachten Nächten zu tun...)

> Codes ausprobiert um mein LCD (HD44...) zum Laufen zu bringen.
Und was hat da nicht funktionert? Gab es Fehler bei der Synthese? Welche 
und warum?

>  um mein LCD (HD44...) zum Laufen zu bringen.
Mit welcher Beschreibungssprache? Hast du einen Softcore, dann geht das 
in C, sonst gäbge es da noch Verilog und VHDL...

> Allerdings weiß ich nicht welche Pins ich beispielsweise an
> ... dranhängen muss.
Im Ernst, bei clk und reset könntest du einfach mal deine Phantasie 
bemühen...

Und wenn du schreibst
> von mir aus "Hello World" o.ä. darzustellen
und es gibt Ports die heißen chars_line1 und chars_line2, wie könnte 
das wohl zusammenpassen?

> Ich wär euch sehr dankbar, wenn ihr mir helfen könntet!
Das Hello World! der Hardware hast du aber schon durch (blinkende LED 
und Lauflichter in verschiedenen Variationen)?

von Bernd (Gast)


Lesenswert?

Hallo,

selbstverständlich habe ich probiert die Codes zu verstehen, nur mein 
Hauptproblem liegt einfach dabei, dass ich bei nicht weiß, welche Pins 
ich an die genannten inputs oder outputs dranhängen muss.

Ich rede nicht von clk oder reset. Die kann ich schon ganz gut zuordnen. 
Aber wo bekomme ich beispielsweise den Pin für die chars_line1 her.

Die Rede ist hier von VHDL.

Die Hardware habe ich noch nicht durch. Was meinst du damit?

Grüße

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


Lesenswert?

Bernd schrieb:
> Aber wo bekomme ich beispielsweise den Pin für die chars_line1 her.
Kurz nachgerechnet: das wären ja bei einem 16x1 Display (16 * 8) = 128 
Leitungen. Schon aufwendig....

Aber nach kurzem Nachdenken stellt sich heraus:
Das sind keine Pins, sondern da gehöert das Bitmuster für den Text hin. 
Also musst du "nur" die ASCII-Codes hintereinander an den Vektor 
anhängen und fertig ist der Text für die erste Zeile. Ich könnte mir das 
in der Port-Liste etwa so vorstellen:
1
            --   H a l l o   W e l t ! 
2
chars_line1 => x"48616c6c6f2057656c74212020202020"

> Die Hardware habe ich noch nicht durch. Was meinst du damit?
Dass du mit der blinkenden LED anfängst, dann ein Lauflicht bastelst, 
dann eine SIO ansteuerst (super zum Senden und Empfangen von Kommandos 
und Texten), dann kompliziertere Dinge angreifst...

von PittyJ (Gast)


Lesenswert?

Ich habe das Ding schon mal programmiert.
Das LCD wird mit Befehlen gesteuert, und einzelne Zeichen dahin 
geschickt.
Es gibt kein Memory-Mapping der Zeichen direkt zum FPGA.
Genaueres steht im Dokument: CFAH1602BTMCJP.pdf welches auf der CD mit 
dabei liegt.
Ab Seite 14 werden die Befehle beschrieben.
Wichtig ist auch die Initialisierungssequenz ab Seite 17. Insbesondere 
die Wartezeiten sind sehr wichtig.

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


Lesenswert?

Norbert schrieb:
> schau mal hier, vielleicht hilft dir das weiter
Ich würde das hier vorschlagen:    ;-)
Beitrag "Re: EA DOG-M initialisieren"

von Bernd (Gast)


Angehängte Dateien:

Lesenswert?

Ok, danke erstmal für die Hilfe.

Allerdings bin ich blutiger Anfänger in VHDL. Den Code verstehe ich 
soweit Lothar.

Doch wiederum tut sich hier mein Problem auf, dass ich nicht weiß, wo 
ich die ganzen inputs an mein Board hängen soll.

Ich habe mal meine Pins vom Board angehängt.

Grüße

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


Lesenswert?

Bernd schrieb:
> Allerdings bin ich blutiger Anfänger in VHDL.
Ich weiß, ich wiederhole mich, aber:
Ich würde erst einmal die blinkende LED und das Lauflicht empfehlen.

> Den Code verstehe ich soweit Lothar.
Eigentlich gut, ich bezweifle es aber ein wenig (dazu später mehr)...

> Doch wiederum tut sich hier mein Problem auf, dass ich nicht weiß, wo
> ich die ganzen inputs an mein Board hängen soll.
Na gut: RS, EN und RW sind wohl ebenso wie die Datenleitungen klar, 
oder?
BL_ON heißt üblicherweise Backlight ON, kann also nicht schaden, wenn 
man das auf '1' setzt. Selbiges für das Signal ON, das vermutlich die 
Versorgung vom Display einschaltet (mehr Info im Schaltplan zum 
EVAL-Board). Und dann nimmst du noch einen der Takte (50MHz sehen gut 
aus für den Anfang). Für den Reset (wenn du shcon unbedingt einen 
willst) kannst du ja z.B. den KEY0 verwenden...

> Den Code verstehe ich soweit ...
> wo ich die ganzen inputs an mein Board hängen soll.
Und jetzt kommts: die chars_line1 und chars_line2 sind keine Eingänge, 
die von irgendwelchen Pins kommen, sondern das sind interne Signale 
im FPGA. Und weil dir das anscheinend doch nicht so ganz klar ist, 
bezweifle ich, dass du den Code soweit verstehst...

Sieh dir mal meine beiden Dateien an, die ich im 
Beitrag "Re: EA DOG-M initialisieren" 
verlinkt habe: nur die Ports vom Modul top_LCD.vhd gehen tatsächlich an 
IO-Pins. Die Ports vom Modul LCD_CTRL.vhd werden nur als Komponente im 
Modul top_LCD.vhd verwendet.

von Bernd (Gast)


Lesenswert?

Hallo,

also ich habe jetzt einfach mal zu Testzwecken die beiden Dateien 
eingenommen und wollte wissen was passiert.

Was soll denn nun eigentlich passieren? Wenn ich es reinlade, dann ist 
es nach 3 Sekunden wieder fertig und auf dem Display steht nichts.

Ich glaube das ist nicht normal oder?

Grüße

von PittyJ (Gast)


Lesenswert?

Bernd schrieb:
> Ich glaube das ist nicht normal oder?
>
Doch, das ist normal.
Bevor man etwas reinlädt, sollte man wissen was man tut.
Ich kann z.B. auf meinen PC alles mögliche reinladen. Dann ist er auch 
nach 3 Sekunden fertig und hat nichts sinnvolles zustande gebracht.

Kauf dir ein Buch (z.B. das von Peter Ashenden). Lerne VHDL. Lies die 
Datenblätter der Peripheriebausteine gründlichst durch. Fang mit 
blinkenden LEDs an.
Verstehe, was du tust.

Und nach 3 Monaten lernen kannst du dich auch an das LCD wagen.

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


Lesenswert?

> Was soll denn nun eigentlich passieren?
Es sollte passieren, dass du nicht irgendwas irgendwo reinlädst, sondern 
dir VORHER mal Gedanken machst. Hast du dem Design irgendwelche 
Constraints vorgegeben? Oder auf deutsch: hast du die Ein- und Ausgänge 
(Ports) den richtigen Pins zugeordnet? Und: hast du das mit der 
blinkenden LED schon erledigt? Mit der blinkenden LED lernt man nämlich 
ganz viel zum Thema "unbedingt nötige Grundlagen"...

Den Rest hat PittyJ schon gesagt: von nix kommt nix. Hör auf 
zusammenzukopieren und fang an zu mitzudenken und zu Lernen...

> Was soll denn nun eigentlich passieren?
Ganz einfach: dieses Design wird (sobald es läuft) einfach auf allen 
Stellen des LCDs jedes der 256 Zeichen aus dem Zeichensatz nacheinander 
darstellen...

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.