www.mikrocontroller.net

Forum: FPGA, VHDL & Co. LCD Display scrollt leider


Autor: Hans-Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem die Ansteuerung des LCD Displays des Spartan 3AN Starter Kits 
nun funktioniert kämpfe ich noch mit dem Problem das dieses scrollt.
Ich setze bei der Konfiguration das Entry mode Set Command.
  when eleven_a =>  
                              lcd_enable <= '1';
                              lcd_rs <= '0';
                              lcd_rw <= '0';
                              lcd_data <= "00000110";
                              delay <= 2000;
                              configuration_state <= eleven_b;
Die einzelnen Zeichen werden innerhalb einer Schleife ausgegeben. Da das 
Autoinkrement gesetzt ist werden die Zeichen von links nach rechts 
ausgegeben. Nach jedem Schleifendurchlauf für die Ausgabe der Uhrzeit 
wird die Position mit dem DD Ram Set Command immer wieder neu gesetzt. 
Die einzelnen Zeichen sollten also überschrieben werden. Ein Scrollen 
sollte nicht stattfinden.
when fifteen_a =>  -- Set DD RAM Address = 00
                              lcd_enable <= '1';
                              lcd_rs <= '0';
                              lcd_rw <= '0';
                              lcd_data(7) <= '1';
                              lcd_data(6 downto 0) <= "0000000";
                              delay <= 2000;
                              output_state <= fifteen_b;
Was mache ich falsch ? Wie kann ich dem Display das Scrollen abgewöhnen 
?

Autor: Hans-Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht habe ich mich mißverständlich ausgedrückt.
Die Zeichen werden fortlaufend von links nach rechts ausgegeben.
Eine Neupositionierung um die bereits ausgegebenen Zeichen zu 
überschreiben ist nicht möglich. Inzwischen habe ich ein zusätzliches 
Clear Display Command eingefügt welches laut User Guide zum Spartan 3 AN 
Starter Kit den Cursor wieder in die linke obere Ecke setzen soll.
Leider werden weiterhin die Zeichen fortlaufend ausgegeben.
Habe ich das "Set DD RAM Address" Kommando falsch verstanden ?
Dient dieses nicht zur Positionierung der Ausgabe ?

Autor: Sigint 112 (sigint)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hans-Werner,
  theoretisch sollte es so funktionieren. Vielleicht handelt es sich 
aber nicht um ein HD44780 - Display sondern um einen anderen Controller. 
Versuch es mal mit dem Befehl "Cursor auf Startposition" :
http://www.mikrocontroller.net/articles/HD44780

Gruß,
  SIGINT

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
GGf wartest du auch nciht lange genugn display clear sol eins der seeehr 
langsamen Kommandos sein.

Autor: Ralf J. (rujatt)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was du beschreibst klingt ungewöhnlich.
Ich denke das du probleme mit dem Timing hast.
Normalerweise arbeiten die Displays mit 250 khz, wenn dies so ist, und 
das display ein
HD 44780 kompatibler typ ist sind die Ausführungszeiten Set DD RAM und 
alle anderen
bei 40ys ausser Display Clear der braucht fast 2ms.
Prüfe das du nicht zu schnell bist.
Ausserdem hat das Display ein Busy Flag das man abfragen kann ob das 
Display bereit
ist Befehle und Daten entgegen zu nehmen.

Autor: Hans-Werner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo SigInt,

noch zum Verständnis. Legt der Cursor auch die Posititon der Ausgabe 
fest oder kann die Cursorposition unabhängig von der Position der 
Ausgabe gesteuert werden ? Wenn ich nun nicht auf der Anfangsposition 
etwas ausgeben will sondern an einer anderen Position, dann muß ich ja 
zusätzlich einen Positionierungsbefehl absetzen ?!
Verstehe immer nur Bahnhof.

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der "Cursor" legt wie beim PC fest an welcher Stelle das nächste Zeichen 
erscheinen wird. Also Cursor auf 0,0 und du schreibst an den Anfang, 
Cursor auf 5,0 und du schreibst an diese Postion. Je nach 
Inistialisierung wird der Cursor bei jemdem schreiben 
incrementiert/decrementiert oder bleibt auf der Stelle wo er gesezt 
wurde. Hast du dir obigen Link schon angeschaut? Insebsondere die 
Beispiel für Assembler und C sind manchmal hilfreich.

Autor: Thomas Stoll (tstoll)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Hans-Werner,

habe mir ebenfalls ein Spartan 3an als Beginner zugelegt - und wäre sehr 
daran interessiert, ob Du das Problem schon gelöst hast.
Denn ich stehe derzeit vor einem ähnlichen Problem.

Funktioniert Deine Anzeige nun?

Grüße,
Thomas

Autor: Hans-Werner (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

habe an einem anderen Problem geknobelt.
Ich habe mir das VHDL-Programm für die Ausgabe der 
Mandelbrotmenge(Apfelmännchen) aus dem Internet heruntergeladen und mit 
dem Autor Kontakt aufgenommen. Bei dem Board ist nur die Schwarz-Weiss 
Version dabei; ich hätte die Ausgabe gerne in Farbe. Ich möchte das 
Programm verstehen und modifizieren. Der zeitliche Ablauf ist nicht 
ohne.
Im Anhang meine Tick-Tack noch mit der durchlaufenden Anzeige. Falls du 
die Lösung findest bitte zurück an mich. Als Erweiterung könnte man noch 
einen DCF-Empfänger anschliessen und auch das Datum ausgeben. Es fehlen 
noch Funktionen wie Uhrzeit stellen, Alarm stellen. Die Funktion 
conv_Ascii habe ich nur eingefügt aber noch nicht benutzt. Den 
Taktteiler kann man vereinfachen. Für die LCD-Ausgabe sollte man noch 
einen Prozess schreiben der eine Zeichenkette ausgeben kann.
# Definition des Clocks
NET "clock" LOC = "E12" | IOSTANDARD = LVCMOS33; # Systemclock des Boards
NET "clock" TNM_NET = clock;
TIMESPEC TS_clock = PERIOD "clock" 20 ns HIGH 50%;
# Ansteuerung der LEDs (LEDs von links nach rechts)
NET "led<7>" LOC = "W21" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; 
NET "led<6>" LOC = "Y22" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; 
NET "led<5>" LOC = "V20" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; 
NET "led<4>" LOC = "V19" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; 
NET "led<3>" LOC = "U19" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; 
NET "led<2>" LOC = "U20" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; 
NET "led<1>" LOC = "T19" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; 
NET "led<0>" LOC = "R20" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; 
# Ansteuerung des LCD Displays
NET "lcd_enable"    LOC = "AB4" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;
NET "lcd_rs"      LOC = "Y14" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;
NET "lcd_rw"       LOC = "W13" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;

NET "lcd_data<7>"   LOC = "Y15" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;
NET "lcd_data<6>"   LOC = "AB16" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;
NET "lcd_data<5>"   LOC = "Y16" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;
NET "lcd_data<4>"   LOC = "AA12" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;
NET "lcd_data<3>"   LOC = "AB12" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;
NET "lcd_data<2>"   LOC = "AB17" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;
NET "lcd_data<1>"   LOC = "AB18" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;
NET "lcd_data<0>"   LOC = "Y13" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8;

Autor: Läubi .. (laeubi) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß nicht ob es noch aktuell ist, aber ich hab mal einen kleine und 
kompakten Controller für das Spartan3 baord erstellt und der 
funktioniert ohne scrollen: Beitrag "[VHDL] 16x2 LCD Textcontroller / HD44780"

Hatte zwischenzeitlich auch ein "Scrollproblem" das lag aber daran das 
der Enable Impuls nicht richtig erzeugt wurde, bei deinem Code hab ich 
jezt so schnell aufgrund des Umfanges aber auch nicht den Fehler 
entdecken können.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.