Guten Tag zusammen! Ich programmieren ein Spartan3an mit ISE 12.1. Der Teil "BTN" soll je nach dem wie oft ein Button gedrückt wird eine andere Bitfolge ausgeben (inkl. Entprellung). Das scheint auch zu funktionieren. Im Teil "dreh" soll abhängig davon, welche Bitfolge von "BTN" kommt das Signal "count" unterschiedlich vergrößert werden. Beim angehängten Code stellt sich mir nun folgendes Problem: Es scheint so, als würden die Signale ROT_A und ROT_B nicht erkannt und somit funktioniert der ganze "dreh.vhd"-Teil nicht. Ohne "BTN.vhd" funktioniert der Drehgeber. Ich bin noch Anfänger in Sachen VHDL und weiß mir grad nicht mehr zu helfen :( Wäre nett, wenn mir jemand weiterhelfen würde! MfG Lisa
Lisa N. schrieb: > Beim angehängten Code stellt sich mir nun folgendes Problem: Es scheint > so, als würden die Signale ROT_A und ROT_B nicht erkannt und somit > funktioniert der ganze "dreh.vhd"-Teil nicht. funktioniert also nicht... > Ohne "BTN.vhd" funktioniert der Drehgeber. oder doch... Was denn jetzt? Hast du das mal SIMULIERT? Das Design ist dafür hervorragend geeignet. Zumindest das ist schon sehr suspekt:
1 | case sel is |
2 | when "00001" => if (cu = '0') then ... |
3 | :
|
4 | when "00010" => if (cu = '1') then ... |
Und deine etwas eigenartige Weiterschaltung im btn.vhd bringt sogar mich ins Grübeln... Der Beschreibung nach soll hier mit einem Tastendruck einfach ein Bit weitergeschoben werden. Aber eine Entprellung funktioniert auf jeden Fall anders. Und auch eine Flankeerkennung lässt sich wesentlich lesbarer schreiben...
Hallo, when "00001" => if (cu = '0') then... Auf Fehlersuche hingeschrieben und vergessen zurückzuändern. Soll natürlich (cu = '1') sein. ich wollte nur sagen, dass ich den Drehgeber erst mal allein ausprobiert habe. Das hat funktioniert. Danach wollte ich den Code erweitern mit "BTN.vhd". Das ging nicht mehr. Natürlich dachte ich auch erst, dass der Fehler dann wohl in BTN liegt. Was mich dann aber verwirrt hat war, dass wenn ich schreibe: case sel is when "00001" => count <= "00000001"; when "00010" => count <= "00000010"; ... end case; end process; LED <= count; sel <= TIME_SEL; dann kann man den Stand von TIME_SEL an den LEDs erkennen. Also dachte ich, dass "BTN" das Signal richtig ausgibt und das Problem ein anderes ist. Oder liege ich da falsch?
Lisa N. schrieb: >> Oder liege ich da falsch? Ich zitiere mich: > Hast du das mal SIMULIERT? > Das Design ist dafür hervorragend geeignet. BTW: warum übergibst du TIME_SEL nicht als Wert (1..5) und schreibst dann
1 | if (cu = '0') then |
2 | count <= count + time_sel; |
3 | elsif (cd = '0') then |
4 | count <= count - time_sel; |
5 | end if; |
Auch wenn ich lieber die numeric_std verwende: bei meinem Code läuft die Simulation korrekt... ;-)
So, erst mal danke für den Code! Das Simulieren hat etwas länger gedauert bei mir...aller Anfang ist schwer! In der Simulation hat mein ursprünglicher Code allerdings funktioniert. Habe deinem Code noch ein constraints-file zugefügt und das ganze mal auf mein Board gespielt => Tut sich auch nichts Ich fürchte ich habe da noch irgend einen grundlegenden Fehler reingebaut...
Lisa N. schrieb: > Habe deinem Code noch ein constraints-file zugefügt und das ganze mal > auf mein Board gespielt => Tut sich auch nichts Wenn die Simulation tut, dann funktionieren so einfach Designs idR. auch in der Hardware... > Ich fürchte ich habe da noch irgend einen grundlegenden Fehler > reingebaut.. Hast du Pullups an den Drehgeber-Pins eingebaut(Platine) bzw. konfiguriert(FPGA)?
Lisa N. schrieb: > Danke De nada. > das wars! Mich wundert, dass dann der Geber allein schon vorher mal funktioniert hat, denn Lisa N. schrieb: >> Ohne "BTN.vhd" funktioniert der Drehgeber. Das hat mich doch ein wenig aufs Glatteis geführt...
Lothar Miller schrieb: >> das wars! > Mich wundert, dass dann der Geber allein schon vorher mal funktioniert > hat Die Wege des Stroms sind unergründlich... ...manchmal ;-)
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.