EA DOG-M initialisieren

OP #1913360
Lesenswert?

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
Angehängte Dateien:
Gast #1913422
Lesenswert?

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.
OP #1913436
Lesenswert?

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 !!!
OP #1913493
Lesenswert?

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.
OP #1913867
Lesenswert?

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
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #1913902
Lesenswert?

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.
Moderator (Firma: Titel) Persönliche Seite #1914060
Lesenswert?

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...
Angehängte Dateien:
OP #1914724
Lesenswert?

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! :-)
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #1914824
Lesenswert?

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... ;-)
OP #1914849
Lesenswert?

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ß
Moderator (Firma: Titel) Persönliche Seite #1914871
Lesenswert?

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...
Gast #2982636
Lesenswert?

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
Moderator (Firma: Titel) Persönliche Seite #2982677
Lesenswert?

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.
Gast #2982727
Lesenswert?

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.
Gast #2982795
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren