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?
Nicht ganz: CE ("clock enable") ist 1, wenn ein Schritt stattgefunden hat, die Richtung wird durch up_down angegeben.
Ahh vielen Dank. Da war ich wohl durch die Beschreibung etwas verwirrt.
> 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.
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.
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?
1 | if (updown = '1' AND ce = '1') then |
2 | counter <= counter + 1; |
> 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):
1 | process (clk) begin |
2 | if(rising_edge(clk)) then |
3 | if (ce='1') then -- zählen? |
4 | if (updown = '1') -- hoch oder runter? |
5 | then counter <= counter + 1; |
6 | else counter <= counter - 1; |
7 | end if; |
8 | end if; |
9 | end if; |
10 | end process; |
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.
> 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.
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.
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.