Forum: FPGA, VHDL & Co. Signal von Drehgeber nicht erkannt


von Lisa N. (lisan)


Angehängte Dateien:

Lesenswert?

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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Lisa N. (lisan)


Lesenswert?

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?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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;

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Auch wenn ich lieber die numeric_std verwende:
bei meinem Code läuft die Simulation korrekt...  ;-)

von Lisa N. (lisan)


Lesenswert?

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...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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)?

von Lisa N. (lisan)


Lesenswert?

Oh Mann!! Danke das wars!

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

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...

von Duke Scarring (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.