Lochner Eric schrieb:
> Im Anhang befindet sich mein komplettes Programm.
Das ist das komplette Projekt mit zezippten 1,5MB. Reichen würde die
watch.vhd mit 5kB.
Gustl B. schrieb:
> use ieee.numeric_std.all;
> use ieee.std_logic_unsigned.all;
> grusel Nutze NUR die obere Zeile.
Die Hintergründe hatte ich schon beim Kommilitonen angeführt:
Beitrag "DC Motor, PWM, Drehrichtung, Drehzahl"
@Lochner Eric:
Mach den Vorteiler einfach zum integer, dann brauchst du die
std_logic_unsigned.all nicht:
signal Divider : std_logic_vector (27 downto 0);
> Das schöne an einer HDL ist:
Man kann sie im Simulator simulieren...
Hier ist reset unnötig, weil alle Prozesse synchron und damit nur nur
auf clk sensitiv sind: process(clk,reset)
Das ist ist der berühmte off-by-one Fehler: if Divider = 50e6 then ...
Zum Glück wirkt er sich hier nicht wesentlich aus. Falsch ist es
trotzdem, korrekt wäre if Divider = 50e6-1 then...
Wenn man sich ganz tief in die Augen schaut, dann ist hier die 6 völlig
unnötig, denn die Zehnerminuten können gar nie 6 werden:
variable countmin1: integer range 0 to 6 := 0; -- Minuten Zähler bis 6
Weil Uhren im Allgemeinen eine beliebte Spielwiese sind, habe ich da
auch noch 2 Links dazu (besonders der zweite ist recht unterhaltsam):
http://www.lothar-miller.de/s9y/archives/88-VHDL-vs.-Verilog-am-Beispiel-einer-Stoppuhr.html
Beitrag "kruder Fehler bei FPGA-Programmierung (ISE WEBpack-Schematic)"
So weit, so gut. Zu den Fragen:
> Irgendwie habe ich einen Fehler beim Sekundentakt, es zählt momentan
> nicht korrekt. Ich finde den Fehler nicht.
Simulation braucht eine Testbench. Die ist hier echt einfach, weil im
Grunde ja nur der Takt angelegt werden muss...
Ich habe dann gleich gesehen, dass der Taktteiler keine clk_ena
genereirt, das gesamte Konstrukt nicht so richtig kapiert und den Kram
aufgeräumt. Jetzt kommt der Takt und die Uhr tut irgendwas.
> Ebenfalls sollte ich noch mit Knöpfe und Schalter die Funktion
> einprogrammieren um die Uhrzeit an der 7 Segmentanzeige einzustellen.
Das hast du ja ansatzweise schon drin mit deinem reset in dem
Monsterprozess.
Wenn es keine weiteren Vorgaben gibt, dann wäre mein Ansatz jeweils 1
Taster für jede einzelne Stelle. Das kann man locker nach
Einsynchronisieren und Flankeerkennung hinter die eigentlichen
Uhrenzähler hängen, dort wo jetzt der reset sitzt.
> habe ich dort ebenfalls auch noch etwas Mühe dies zu programmieren.
Stell dir vor, welche Hardware dafür nötig wäre, und dann beschreibe
diese Hardware mit der HardwareBESCHREIBUNGSsprache VHDL. Wenn du mit
VHDL "programmierst", wie du deinen AVR mit einer prozeduralen
Programmiersprache programmierst, dann geht das schief.
Die Verwendung der Variablen zeugt vom Programmieren und die recht
unbedarfte Verwendung des % Operators. Glück gehabt, dass das ein %2 und
2 eine Zweierpotenz ist...