www.mikrocontroller.net

Forum: FPGA, VHDL & Co. Drehgeber (Richtungserkennung)


Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

in dem Artikel http://www.mikrocontroller.net/articles/Drehgeber gibt es 
ja einen schönen Drehgeber. Dort wird für die Richtungserkennung der 
Port CE benutzt. Nach welchem Muster wird dieser mit 1 oder 0 belegt?

Autor: Jan M. (mueschel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nicht ganz: CE ("clock enable") ist 1, wenn ein Schritt stattgefunden 
hat, die Richtung wird durch up_down angegeben.

Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh vielen Dank. Da war ich wohl durch die Beschreibung etwas verwirrt.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Dort wird für die Richtungserkennung der Port CE benutzt.
Das ist offenbar der Count-Enable. Für die Richtung ist up_down 
zuständig.

> Nach welchem Muster wird dieser mit 1 oder 0 belegt?
Wenn gezählt werden soll, ist dieses CE für 1 Taktzyklus (von clk) 
aktiv.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau so ist es: CE ist einen Takt lang 1 wenn gültiger(!) Schritt war, 
up_down gibt die Richtung an. Ich hab den hier genau so im Einsatz in 
einem Virtex 4, mit Zählern dahinter und kleiner Entprellung am Eingang, 
funktioniert astrein.

Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich programmiere gerade ein Projekt in dem ich Sensoren (erstmal einen 
später mehr) auslese und dadurch dann die Richtung festelle).

D.h. ich kann mit CE und updown einen Zähler hoch oder runter zählen 
lassen, oder?
if (updown = '1' AND ce = '1') then
counter <= counter + 1;

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> D.h. ich kann mit CE und updown einen Zähler hoch oder runter zählen
> lassen, oder?
Nein, du brauchst noch den Takt (CLK):
process (clk) begin
  if(rising_edge(clk)) then
    if (ce='1') then     -- zählen?
      if (updown = '1')  -- hoch oder runter?
      then   counter <= counter + 1; 
      else   counter <= counter - 1; 
      end if;
    end if;
  end if;
end process;

Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank. Jetzt bekomme ich nur noch eine Fehlermeldung:

Error (10309): VHDL Interface Declaration error in E_sensor.vhd(96): 
interface object "left_right" of mode out cannot be read. Change object 
mode to buffer.

left_right ist mein updown. Und eigentlich sieht es genauso aus wie aus 
dem Beispiel. Aber im Zähl Process gibt es dann diesen Fehler. 
left_right jetzt als Buffer definieren ist wohl nicht der richtige Weg, 
oder?


Nachtrag:

Ich habe left_right jetzt einfach als Signal definiert. Ich glaube so 
könnte es funktionieren. Ob das eine gute oder schlechte Lösung ist kann 
ich nicht beurteilen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> interface object "left_right" of mode out cannot be read.
Du verwendest das Signal offenbar lokal und willst es über einen 
entity-Port ausgeben.

> left_right jetzt als Buffer definieren ist wohl nicht der richtige Weg
Gut erkannt ;-)

> Ich habe left_right jetzt einfach als Signal definiert.
Das ist richtig so.
Für die Ausgabe über den Port mußt du das dann nochmal extra zuweisen.

Autor: Robert T. (robert0815)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ahh ok...also geht man erst über ein Signal (wenn man es noch 
verarbeiten will) und dann auf den Port (wenn das benötigt wird).

Vielen Dank soweit.

P.S. Deine Seite werde ich jetzt auch erstmal regelmässig lesen @Lothar 
Miller.

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.