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
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.
Hallo Bernd, schau mal hier, vielleicht hilft dir das weiter http://pastebin.com/cn7fgJKj MfG Norbert
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?
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)?
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
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...
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.
Norbert schrieb: > schau mal hier, vielleicht hilft dir das weiter Ich würde das hier vorschlagen: ;-) Beitrag "Re: EA DOG-M initialisieren"
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
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.
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
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.
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.