mikrocontroller.net

Forum: FPGA, VHDL & Co. Automat-Anzeigemodul


Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich moechte einen Automaten(VHDL) zu Steuerung
des Anzeigemoduls erstellen.

Anzeigemodul: SLR2016

URL - Datenblatt:

http://catalog.osram-os.com/catalogue/catalogue.do...

Kann mir jemand sagen wie ich da ran gehen soll,
bzw. wieviel states ich brauche, oder wie das Programm aussehen soll

Eingaenge: Reset, Clk
Ausgänge: Clear, Blank, Write

würde mich über eure Hilfe freuen,
besten Dank

Gruss
Adrian

Autor: Schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kommt drauf an, was du damit machen willst.
Wenn es nur darum geht, ein Zeichen zu übertragen, dann versuche, das 
Timing von Seite 4 nachzubilden (über ne FSM)
Allerding hast davon ja noch nix, denn irgendwo her müssen ja die 
Zeichen kommen, die du anzeigen willst. Kommen die von nem uC oder 
stehen die in nem RAM, wo das FPGA sie direkt auslesen soll oder kommen 
die über RS232 oder.....? Willst du Laufschriften machen, oder immer nur 
statisch 4 Zeichen darstellen?
Es sind einfach zu viele offene Punkte, als dass man dir hier deine 
Fragen sinnvoll beantworten könnte.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Adrian (Gast)

>ich moechte einen Automaten(VHDL) zu Steuerung
>des Anzeigemoduls erstellen.
>Anzeigemodul: SLR2016

>Kann mir jemand sagen wie ich da ran gehen soll,
>bzw. wieviel states ich brauche, oder wie das Programm aussehen soll

Das kann man nicht so pauschal sagen. Was soll deine State Machine denn 
machen? Einfach nur ein paar Zahlen anzeigen? Oder aus einem RAM Daten 
lesen und anzeigen?

Zunächst solltest du eine einfache State Machine programmieren, welche 
feste Daten ausgibt, z.B. Display löschen und 4 Zeichen anzeigen. 
Fertig. Wenn das läuft kannst du sie aufbohren.

MfG
Falk

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die Antworten

zunächst möchte ich einfach ein Encoder programmieren und einen 
Multiplexer, der Encoder soll die 4-Bit Binährzahlen in entsprechende 
Hexazahlen umwandeln (in der pdf ist die Kodierung), Ansteuerung des 
Multiplexers und des Anzeigemoduls soll der Automat machen,

es sollen einfach die in der TestBench festgelegte Zahlen statisch 
ausgegeben werden

Encoder und Multiplexer hab ich schon fertig, bloß der Automat fehlt 
mir,

Gruss Adrian

Autor: Falk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs mal damit.

MfG
Falk

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ohh toll danke

ich schau mir das gleich an

Gruss
Adrian

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also die Loesung ist genial muss ich einfach sagen ;-),

ich habe ein paar Fragen dazu:

constant data_array: t_data_array:=(x"48", x"65", x"6c", x"70")

sind die statisch angelegten Zahlen beliebig gewaehlt, richtig ?


(index = 0: x"70" usw.)
data_array(index)(6 downto 0):bekommt die daten jetzt aus meinem 
encoder, richtig ?

constant adr_array: t_adr_array:=(x"3", x"2", x"1", x"0"): ist die 
Adresse,
wohin die statischen Zahlen geschrieben werden


adr_array(index)(1 downto 0) : was kommt hierhin ?

Gruss Adrian

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Adrian (Gast)

>constant data_array: t_data_array:=(x"48", x"65", x"6c", x"70")
>sind die statisch angelegten Zahlen beliebig gewaehlt, richtig ?

Ja.

>(index = 0: x"70" usw.)
>data_array(index)(6 downto 0):bekommt die daten jetzt aus meinem
>encoder, richtig ?

???

Poste mal kompletten Sourcecode. Solche Fragemente sind immer 
fragwürdig.

>constant adr_array: t_adr_array:=(x"3", x"2", x"1", x"0"): ist die
>Adresse,
>wohin die statischen Zahlen geschrieben werden

Ja.

>adr_array(index)(1 downto 0) : was kommt hierhin ?

Das bleibt so. Kommt aber auch drauf an, was du genau machen willst.

MfG
Falk

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mein Code:

-- in der pdf gibt es jeweils 128 zeichen, die mit dig0 - dig3
-- ausgewaehlt werden
dig0, dig1, dig2, dig3: in integer range 0 to 128;
--
e: out integer range 0 to 128:

-- FSM-process

mux: process (dig0, dig1, dig2, dig3, cnt)
 begin
    case cnt is
         when "00" => e <= dig0;
         when "01" => e <= dig1;
         when "10" => e <= dig2;
         when "11" => e <= dig3;
         when others => e <= 0;
    end case;
end process mux;

enc:process(e)
 begin
    case e is
         when 1 => data_array(index)(6 downto 0) <= "0000000";
         when 2 => data_array(index)(6 downto 0) <= "0000001";
         ...
         when 128 => data_array(index)(6 downto 0) <= "1111111"
         -- wie in der pdf/tabelle
    end case;
end process enc;

so hab ich mir das gedacht

Gruss Adrian

Autor: Falk (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
@ Adrian (Gast)

>-- in der pdf gibt es jeweils 128 zeichen, die mit dig0 - dig3
>-- ausgewaehlt werden
>dig0, dig1, dig2, dig3: in integer range 0 to 128;

Das sind aber 129 verschiedene Zahlen ;-)
Eher so.

dig0, dig1, dig2, dig3: in integer range 0 to 127;

Wobei man bei IO-Signalen zwischen Modulen eher nicht mit Integer 
arbeitet. Geht zwar, finde ich aber nicht unbedingt sinnvoll.

Dein MUX ist OK.

Aber was soll das hier?

>enc:process(e)
> begin
>    case e is
>         when 1 => data_array(index)(6 downto 0) <= "0000000";
>         when 2 => data_array(index)(6 downto 0) <= "0000001";
>         ...
>         when 128 => data_array(index)(6 downto 0) <= "1111111"
>         -- wie in der pdf/tabelle
>    end case;
>end process enc;

>so hab ich mir das gedacht

Ich fürchte, du denkst VIEL zu kompliziert. In der FSM werden doch nur 
ganz normale Daten ausgegeben. Du willst irgendwie krampfhaft was 
umkodieren (was ich nicht wirklich verstehe).
Du musst doch nur einfach deine Daten ausgeben, welche durch den MUX 
selektiert werden.

Siehe Anhang.

MfG
Falk

Autor: Adrian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok vielen vielen dank, ich glaube ich habe mich selber verwirrt ;-)

ich uebergebe einfach

an data_array(index)(6 downto 0)
zum Beispiel den wert 0111111
so:
data_array(index)(6 downto 0) <= "0111111"
das war der wert des digits den ich vorher durch den muxer gewaehlt 
habe,
und das wars

MfG
Adrian

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Adrian (Gast)

>ich uebergebe einfach

>an data_array(index)(6 downto 0)
>zum Beispiel den wert 0111111

data_array gibt es gar nicht mehr.

Das hab ich nur vergessen im neuen Quelltext zu löschen.

MfG
Falk

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.