Forum: Mikrocontroller und Digitale Elektronik Suche µC (bevorzugt Atmel) mit Zähler welcher "Takt und Richtung"-Eingang hat.


von Leo B. (luigi)


Lesenswert?

Hallo zusammen,

ja im Prinzip stehts schon im Titel. Ich hab nen (Drehencoder-)Sensor 
mit clk/dir-Ausgang und würde diesen gerne an einen µc anschließen. Da 
ich allerdings Taktfrequenzen bis zu 100kHz erwarte fällt mir keine 
sinnvolle Softwarelösung ein, welche den µC nicht blockieren würde. Eine 
Hardwarelösung wäre also fein. Kennt da jemand was?

Vielen Dank

von MaWin (Gast)


Lesenswert?

> Eine Hardwarelösung wäre also fein.

Vergiss es.

100kHz wären bei einem mit 15 MHz getakteten AVR immerhin 150 Befehle, 
davon 10 in der Interruptroutine sollten ja wohl Hinderungsgrund sein, 
und wenn doch, nimmst du einfach einen 16MHz Quartz :-)

von SNR (Gast)


Lesenswert?

Schau mal nach Quadraturencoder Bausteinen...die gibts glaub ich extern 
oder bei manchen uC auch intern.

Definitiv wissen tue ich es vom Lpc1769.

Grüße

von H.Joachim S. (crazyhorse)


Lesenswert?

@MaWin
Da fehlt wohl ein "kein" ??
Machbar sollte es noch sein, aber kann schnell eng werden, wenn noch 
anderes zu tun ist.
Bei 100kHz sollte es dann schon eine signed-long-Variable sein, 
wahrscheinlich noch grösser, kommt drauf an, wie lange der in eine 
Richtung zählen können soll
Das heisst dann: Interrupteinsprung + Sicherung , in Abhängigkeit eines 
weiteren Eingangs diese Variable incrementieren oder decrementieren, 
Register+SREG wiederherstellen und reti.
Damit bist du meilenweit weg von deinen 10 Takten. Schätz ich eher auf 
60-80.
Dazu die fehlende Interruptpriorisierung, d.h. man muss bei allen 
anderen ints wirklich aufpasssen.

Beim M16C hab ich glaub ich mal recht flexible Timer/Counter gesehen. 
Können als up/down-counter extern getaktet arbeiten. Da bleibt dann nur 
noch, die Zählrichtung umzuschalten und die Über/Unterläufe zu zählen.

von Curby (Gast)


Lesenswert?

Wieso dann nicht zwei Controller benutzen, wobei der eine nur die Daten 
übermittelt?

von Matthias L. (Gast)


Lesenswert?

Vielleicht geht es ja mit zwei internen Timer/Counter Einheiten:


                 .---.     .------.
Clk -------o-----¦ & ¦     ¦      ¦
           ¦  .--¦   ¦-----¦Tx    ¦
           ¦  ¦  '---'     ¦      ¦
Dir--------+--o            ¦ uC   ¦    DG = Tx - Ty
           ¦  ¦  .---.     ¦      ¦
           ¦  '-O¦ & ¦-----¦Ty    ¦
           '-----¦   ¦     ¦      ¦
                 '---'     '------'


Somit würde ein Counter nur die CW-Richtung und der andere nur die 
CCW-Richtung zählen. Die richtige Drehgeberposition erhält man dann 
durch Differenzbildung der beiden (gleichzeitig ;-) gelesenen 
Counterwerte.
Einen evtl. COunterüberlauf muss man natürlich geeignet beachten.

von frankman (Gast)


Lesenswert?

Schau mal bei der Firma US-Digital,
die haben Chips im SO-8, der genau diese Umsetzung für dich macht....

von Anonymous (Gast)


Lesenswert?

Vielleicht ist auch der Quadrature-Decoder des XMega für dich brauchbar 
(Siehe http://www.atmel.com/dyn/resources/prod_documents/doc8077.pdf 
Kapitel 6.7)

von crazy horse (Gast)


Lesenswert?

Es geht doch gar nicht Quadratur-Dekoder, da der Sensor schon clk und 
Richtung liefert...

von Falk B. (falk)


Lesenswert?

@  Leo B. (luigi)

>mit clk/dir-Ausgang und würde diesen gerne an einen µc anschließen. Da

>Hardwarelösung wäre also fein. Kennt da jemand was?

Nix fertiges, muss man sich halt stricken. Ein Zähler mit clk und u/d 
Eingang. Der zählt halt Up/Down. Der uC muss den periodisch auslesen. 
Doch Vorsicht, das Ganze läuft mit verschiedenen Takten, also asynchron. 
Da muss man beim synchronisieren aufpassen. Z.B. indem ein zweiter 
Zähler periodisch, z.B. nach 256 Takten den Zähler auf ein 
Zwischenregister kopiert und den Zähler zurück setzt. Dann hat der uC 
256 Takte Zeit, den Zähler auszulesen.

Wenn man einen uC mit Zäherleingang UND up/down Eingang in hardware hat, 
ist das natürlich ideal. Der AVR hat es leider nicht. Man könnte aber 
einen kleinen Tiny AVR eben nur mit dieser Funktion programmieren, 
100kHz bekommt man dabei locker in den Griff. Die Daten kann man dann 
per UART, SPI oder IO-Pins ausgeben.

MFG
Falk

von Tany (Gast)


Lesenswert?

H.joachim Seifert schrieb:
> @MaWin
> Da fehlt wohl ein "kein" ??
> Machbar sollte es noch sein, aber kann schnell eng werden, wenn noch
> anderes zu tun ist.

> Damit bist du meilenweit weg von deinen 10 Takten. Schätz ich eher auf
> 60-80.
 benötigt werden hier
Beitrag "Drehgeber auslesen"
nur 24 Takte

von Michael H. (michael_h45)


Lesenswert?

Leg den "dir" auf einen Interrupt-Eingang. Den "clk" auf einen 
Zähler-Eingang.
Den Interrupt lässt du bei Flankenwechsel auslösen. In jedem Interrupt 
holst du dir den Zählerstand vom Hardware-Zähler und setzt den 
Hardware-Zähler zurück.
Den abgeholten Wert addierst- oder subtrahierst du von einer Variable im 
Controller je nach Zustand des "dir" Pins.

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.