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.
Danke für die Hinweise vorerst. Allerdings weiß ich nicht welche Pins
ich beispielsweise an
1
chars_line1:instd_logic_vector((CHARS_PER_LINE*8)-1downto0);-- first line
2
chars_line2:instd_logic_vector((CHARS_PER_LINE*8)-1downto0);-- second line
3
clk:instd_logic;-- clock
4
reset:instd_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.
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
imFPGA. 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...