Hallo, ich habe das Programm im Anhang für das Spantan 3an Board geschrieben. In der Simulation funktioniert alles, aber sobald ich das Programm auf das Board übertrage, zeigt as Display zwar 00:00:00 an, geht aber mit der Uhrzeit nicht hoch. Drückt man STD_S (hochzählen der Stunden Button), dann fängt die Uhr an in einer rasenden Geschwindigkeit (statt im Sekundentakt) hochzuzählen bis z. B. 12:25:45. Dabei wird aber auch immer berücksichtigt, dass die Stunden nur bis 23 und die Minuten/Sekunden bis 59 gehen. Ich hoffe echt ihr könnt mir helfen, da mir nichts mehr einfällt... Wenn noch Fragen zu dem Programm sein sollten, dann einfach nachfragen.
Hallo Armin, 1) Wie schnell ist Dein Takt? 2) Wenn STD_S und MIN_S Taster sind, mußt Du die noch entprellen. 3) In die sensitivity-List müssen nur die asynchronen Signale.
1 | Statemachine_01: process (takt, reset, AB_02, AB_03, |
2 | ZUSTAND, SEC_E, SEC_Z, MIN_E, MIN_Z, STD_E, STD_Z) |
Bei Dir ist das takt und reset. 4) Falls reset auch von außen kommt (Taster?) mußt Du es einsynchronisieren. 5) Wo ist Deine Testbench? P.S.: Es reicht hier die .vhd-Files zu veröffentlichen. Duke
1.) Der Takt ist 50MHZ 2.) Die Taster sind bereits auf dem Board entprellt (laut Hersteller) Hat mit anderen Projekten auch schon funktioniert. 3.) Hab ich gemacht, hat aber auf das Programm wenig Auswirkungen, außer das eine Warnung kommt: One more signals are missing... Gehe mal davon aus, dass das die sind die ich gelöscht habe, da Zeilenangabe auch stimmt. 4.) Die Reset Taste ich die einzige, die richtig funktioniert. Nach dem Drücken ist alles wieder auf 00:00:00 5.) Im Anhang 6.) Ich heiße Toni
Duke Scarring schrieb:
> 3) In die sensitivity-List müssen nur die asynchronen Signale....
Der Prozess ist erst mal Getaktet und dann noch Kombinatorisch, da muß
die Sensitivliste schon so sein... :-o
1 | if reset='1' then ZUSTAND <= A; |
2 | elsif takt='1' and takt'event then -- getaktet |
3 | ZUSTAND <= FOLGEZUSTAND; |
4 | end if; |
5 | |
6 | case ZUSTAND is -- kombinatorisch |
7 | :
|
Allerdings ist diese Schreibweise durchaus unüblich. Das ist quasi eine 2-Prozess-SM in einen Prozess gepackt... > Drückt man STD_S (hochzählen der Stunden Button), dann fängt die Uhr an > in einer rasenden Geschwindigkeit (statt im Sekundentakt) hochzuzählen Tritt der Effekt auch mit der MIN_S Taste auf? Ich steige da jetzt nicht mit den vielen Zählern so ganz durch, aber das hier könntest du anders schreiben:
1 | MUX_1: process(MIN_S, c_szeh_int, sec) |
2 | begin
|
3 | case MIN_S is |
4 | when '1' => c_szer_int <= sec; |
5 | when others => c_szer_int <= c_szeh_int; |
6 | end case; |
7 | end process MUX_1; |
Nämlich so:
1 | c_szer_int <= sec when MIN_S='1' else c_szeh_int; |
Danke für den Tipp mit der MIN_S Taste. Hab mich da noch mal dran gegeben und die Uhr komplett neu gemacht und jetzt läuft es...
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.