Morgen zusammen, also ich habe einen Lattice XP2 auf einem Brevia Board. Ich habe eine Erweiterunsplatine gebastelt, die über den 40 Poligen stecker angeschlossen wird. Auf dem Erweiterungsboard ist ein Drehgeber ein paar LEDs und ein paar Taster und dieser (siehe Datenblatt ) EA DOGM162 angebracht. Alle anderen Teilchen habe ich schon erfolgreich in betrieb genommen und nun wage ich mich an den Display, aber ich weiß nicht so recht wie? Ich habe mir schon ein paar Inits von Xilinx displays angeschaut aber nicht sorecht durchgeblickt, außerdem habe ich auch eine C Implementierung für dieses Display gefunden, aber auch diese fand ich komisch/ unverständlich. Kann mir einer ein Kochrezept zur Initialisierung posten oder einen Quellcode den man umschreiben kann, oder ähnliches. Danke schon mal. Flo
Florian Z. schrieb: > Auf dem Erweiterungsboard ist ein Drehgeber ein paar LEDs und ein paar > Taster und dieser (siehe Datenblatt ) EA DOGM162 angebracht. Wie ist das Display versorgt und angeschlossen? Immerhin gibt es ja 3 verschiedene Betriebsarten (8-Bit, 4-Bit, SPI).
Sorry, dass hatte ich vergessen zu posten, ich habe mich für die 8 Bit Variante entschieden... Da ich es zu beginn für das einfachste hielt.
Hatte die SPI Variante auf Anhieb zum Laufen gebracht, weniger Kabel -> weniger Fehler. Schau mal die einfache Ini von Peter Danneger an, einfacher geht's nimmer. Beitrag "Re: Dog-M / ST7036 Routine für 1-Zeiliges Display SPI-Mode" Florian Z. schrieb: > Sorry, dass hatte ich vergessen zu posten, > ich habe mich für die 8 Bit Variante entschieden... > Da ich es zu beginn für das einfachste hielt.
Hi, danke für den Post! Ich hab mir uach gerade die SPI-Variante durchgelesen, aber leider ist die in C geschrieben und meine C Kentnisse sind mehr schlecht als recht...mir ist schon klar, dass ich diese Initialisierungssignale senden muss, und dazwischen immer ein bisschen warten, aber irgendwie fidne ich da keinen start um es in VHDL zu realisieren. Wenn einer so etwas schon in VHDL hat und es verständlich ist, fänd ichdas toll. Danke !!!
Florian Z. schrieb: > Wenn einer so etwas schon in VHDL hat und es verständlich ist, fänd > ichdas toll. Ich hab da was für ein 4-Bit Interface. Das kann ich heute Abend mal posten...
Das wäre doch cool, hauptsache mal was zum reinschauen und nachvollziehen, dass dann für 8 Bit umwandeln, wird dann wohl möglich sein. Ist das dann speziell für ein Xilinx board oder allgemein für LCDs? Weil ich festgestellt habe das die XilinX LCDs so ein bisschen eigen sind. Aber danke, da hoffe ich mal dass dies mir weiter hilft.
Hallo Zusammen, damit ich den ganzen Tag nicht so untätig rumsitze habe ich versucht die Initialisierung selbst zum laufen zu bekommen, aber es klappt nicht, zumindest sieht man mal nichts, und das ist doch immer das beste... Im File sind ein paar, Signale, Ausgänge die nicht gebraucht werden, ich weiß,aber zu Testzwecken (reagiert der Pin überhaupt etc.) verwendet worden sind, also seht es mir nach. Ich gebe auch zu, meine realisierung der Wartezeiten ist nicht super toll, aber im Simulator tut sie was sie soll. Im Anhang mein File...hoffe mir kann jemand Helfen, oder Lothar postet seines und ich vergleiche morgen ;-) Danke schon mal
Ohne jetzt den ganzen Code angeschaut zu haben:
1 | :
|
2 | rising_edge (clock) |
3 | :
|
4 | rising_edge (delay) |
5 | :
|
So macht man das nicht. Hier nochmal meine Postulate für Anfänger: Es gibt nur 1 Takt im Design. Es wird nur 1 Flanke dieses Takts abgefragt (rising oder falling). Es gibt keinen (und schon gar keinen asynchronen) Reset. Es wird jedes asynchrone Signal mit 2 FFs einsynchronisiert. Ausnahmen von den genannten Regeln sind nur mit fundierter Begründung möglich. Dir wird für deinen Code keine fundierte Begründung einfallen... :-/ BTW: Ich sollte das noch erweitern um: Es werden keine Variablen verwendet.
Hier die versprochenen Daten. Die Datei LCD_CTRL.vhd verwaltet ein DPRAM, das zu Beginn die Initialisierungssequenz und später die Daten für das LCD enthält. Über ein Interface können dann unter Angabe der x und y-Position Zeichen in das DPRAM geschreiben werden, die dann laufend auf das LCD ausgegeben werden. Das Einschreiben ins RAM übernimmt das Modul top_LCD.vhd. Hier werden zur Demo einfach ASCII-Zeichen ins DPRAM abgelegt. EDIT: Ich sehe gerade, dass die Zeile x"20", -- 8-Bit Interface richtigerweise x"20", -- 4-Bit Interface heissen muß... ;-) Und über den Port sf_cen wird das Strataflash auf dem S3 Evalboard deselektiert. Dieser Port ist für eine andere Plattform nicht nötig...
Morgen Lothar, Morgen Zusammen erstmal danke für deine Files, ich habe sie auch schon eifrig studiert, aber ein paar Sachen sind mir noch nicht ganz klar, ich weiß ich bin erst ein VHDL Anfänger, aber ich habe jetzt schon ein paar Projekte realisiert und lerne gerne, deshalb: Du erzeugts durch prescale einen Takt von einer µs, richtig? dann nutzt du diesen quasi als Zähler, weil wie ja oben steht gibt es nur einen wahren Systemtakt. ;-) Das gleiche machst du dann auch mit fosc und prellus, als Zähler. Des weiteren würde ich gerne wissen, wie der Kompiler den Speicher anlegt? weil aus anderen Programmiersprachen kenne ich das so, wenn nichts gesagt wird wird es ein 1D Array, sprich linear und dann brauchst man ja keine y-Koordinate, oder habe ich da was falsch verstanden? Dann nutzt du quasi 2 statemachine zum laden der Werte aus dem speicher und zum schreiben der Werte an den Display, aber meine große Frage, ich habe bei mir unzählige Timings zu beachten, aber bei dir finde ich da sehr wenig Berücksichtigung oder ich finde es einfach im Quelltext nicht. Zur besseren verdeutlichung schicke ich nochmal 2 Seiten mit die in meiner Sicht ausschlaggebend sind. Wenn mir noch mal jemand Helfen könnte, vielleicht hat auch schon jemand diesen Display mit einem XP2 angesteuert und kann mir da weiterhelfen. Aber an dieser stelle schonmal DANKE Lothar für deine tolle Hilfe und ich werde auch den Beitrag oben berücksichtigen, versprochen! :-)
Florian Z. schrieb: > Du erzeugts durch prescale einen Takt von einer µs, richtig? Nein. Es gibt nur 1 Takt. Dieser 1us "Takt" ist ein Clock-Enable. > Des weiteren würde ich gerne wissen, wie der Kompiler den Speicher > anlegt? Es gibt keinen Compiler. Das macht hier der Synthesizer. Und wenn das so beschrieben ist, wie es im XST-Userguide steht, dann wird da ein Dual-Port-BlockRAM draus. > weil aus anderen Programmiersprachen kenne ich das so, wenn > nichts gesagt wird wird es ein 1D Array, sprich linear und dann brauchst > man ja keine y-Koordinate, oder habe ich da was falsch verstanden? Diese y-Koordinate wird dann ja auch einfach in die Adresse mit aufgenommen. Es ist nur zur Virtualisierung der Schnittstelle zum User hin gedacht, dass der wie beim PC eine Zeile und eine Spalte und ein Zeichen angibt. Den Rest (=die Speicherverwaltung) macht die Hardware... > ich habe bei mir unzählige Timings zu beachten, Nein, du hast normalerweise irgendwelche Minimalzeiten, du darfst die auch gern länger machen. Es dauert dann nur länger. Und so mache ich das in der Initialisierung: einfach pauschal lang genug warten (ich brauche hier max 2ms). Fertig. Und die ganz lange Zeit am anfang mache ich einfach, indem ich oft den selben Wert (0x30) rausschreibe... ;-) Und die 2ms Wartezeit passieren hier:
1 | when BUSY => |
2 | if (oneus='1') then -- 1us vorbei? |
3 | if (waitbusy<shorttime) then -- 2ms vorbei? |
4 | waitbusy <= waitbusy+1; |
5 | :
|
EDIT: Du kannst das ja einfach mal Simulieren. Du mußt nur an top_LCD einen Takt anlegen... ;-)
Hallo, ja einfach pauschal langenug warten ist ja schon ok. Das habe ich auch eingesehen. Zum Ram, ich habe leider kein XST-Userguid, da ich mit lattice arbeite und nicht mit XilinX. Mit Clock-Enable ist eine "Aktivierungsbedingung" gemeint, verstehe ich das richtig? Danke Lothar, dann werde ich mal versuchen es auf meinen FPGA zu flashen und du / ihr kannst/könnt sicher sein, ich melde mich wieder, wenn was nicht läuft. besten gruß
Florian Z. schrieb: > Zum Ram, ich habe leider kein XST-Userguid, da ich mit lattice arbeite > und nicht mit XilinX. Es gibt von Lattice auch solche Synthese-Guidelines: http://www.latticesemi.com/lit/docs/technotes/tn1008.pdf > Mit Clock-Enable ist eine "Aktivierungsbedingung" gemeint, verstehe ich > das richtig? Ja. Sieh dir mal so ein FF genauer an: Es gibt einen Takteingang, Setz- und Rücksetz-Eingänge und eben den Clock-Enable-Eingang. Der sagt dann, ob die (nächste) Taktflanke auf diesem FF wirken soll oder auch nicht...
Hallo, danke nochmal für deine Hilfe... was wär ich nur ohne dieses Formum?! ;-) Gut dann werde ich mich mal an das Arbeiten machen, und mir eine LCD Lösung für 8 Bit schreiben. Ich hoffe das klappt mit der großen Vorhilfe auch ziemlich gleich.
Lothar Miller schrieb: > Hier die versprochenen Daten. Die Datei LCD_CTRL.vhd verwaltet ein > DPRAM, das zu Beginn die Initialisierungssequenz und später die Daten > für das LCD enthält. Hallo, ich habe versucht ein Display mit HD44780 Controller anzusteuern. 4 Datenleitungen auf einem Spartan 6. Ich habe einfach den Code von Lothar genommen und bei mir eingebunden, sonst nichts verändert. Ich bekomme eine Warnung PhysDesignRules:2410 - This design is using one or more 9K Block RAMs (RAMB8BWER). 9K Block RAM initialization data, both user defined and default, may be incorrect and should not be used. For more information, please reference Xilinx Answer Record 39999. und es erscheint nichts auf dem Display. Kann mir jemand sagen was ich falsch mache? Viele Grüße Beginner
Beginner schrieb: > Kann mir jemand sagen was ich falsch mache? Du gibst die ISE-Version nicht an. Du liest die Fehlermeldung nicht. Siehe einfach mal http://www.xilinx.com/support/answers/39999.htm Dort findest du dann einen Link auf http://www.xilinx.com/support/documentation/errata/en148.pdf Und dort gehts weiter auf Seite 5 oben.
Danke für die Tips, soweit ich das verstehe ist das hinfällig solange man eine Version älter als 13.2 benutzt. Block RAM used in the 9K mode (RAMB8BWER) can fail to initialize user-specified data or default values (all zeros) during configuration in all Spartan-6 devices using ISE 13.1 and prior software versions. A fix has been implemented beginning in ISE Design Suite 13.2. Oder muss ich den Ram irgendwie mit dem Block Memory Generator neu erzeugen. Entschuldigt meine Fragen, ich hab noch nie was mit Blockram gemacht, aber im Prinzip ist das ja ganz normaler sram.
Beginner schrieb: > aber im Prinzip ist das ja ganz normaler sram. Ja, eben nicht... Denn beim SRAM kommt sofort (naja, ziemlich bald) nach dem Anlegen einer Adresse was heraus. Beim BRAM erst nacht dem nächsten Takt. BTW: was sagt denn die Simulation deines Designs?
Danke für deine Hilfe. Ich habe jetzt noch mal alles schnell neu gemacht und nur die Dateien von dir eingebunden (sf_cen habe ich ignoriert, weiß nicht was das ist). Was hilft mir die Simulation? Bei dir scheint es ja zu funktionieren. Ich habe das Sim-file mal angehängt (50 ms). Hast du eine Idee was falsch läuft? Muss ich den Ram irgendwie neu beschreiben? Ich habe keine Ahnung von Ram.
Oh das war wohl nur die Konfiguartion, würdest du die bitte löschen. Danke
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.