Forum: Mikrocontroller und Digitale Elektronik Drehencoder in Matrixschaltung machbar?


von Mad79 (Gast)


Lesenswert?

ich habe das problem 8 drechencoder an einem xmega betreiben zu "müssen"

das würde mich 16 portpins kosten

wenn ich mir dir einfachen drehencoder als mechanisch verbunden 
doppelschalter vorstelle sollte doch auch eine matrixschaltung mit 
dioden möglich sein. oder nicht?

hat das jemand schonmal probiert?
oder hat jemand andere vorschläge?

wäre für anregungen dankbar

gruß
Robert

von Andreas B. (andreasb)


Lesenswert?

Sollte gehen, also ich frage meinen Drehencoder meist in einer Interrupt 
Routine ab, in der ich auch die Taster abfrage.

Zudem denke ich brauchst du keine Dioden, du kannst die Pins einfach 
hochohmig schalten.


mfg Andreas

von Dr G. Reed (Gast)


Lesenswert?

Evtl einen I2C 16 Bit Portexpander PCA9555 verwenden?

von Mad79 (Gast)


Lesenswert?

Soweit mir bekantrixnt ist sind die signalleitungen bei den 
rastpositionen entweder beide hihg oder beide low ... dioden wären also 
notwendig da sonst ghosting entstehen würde
mach mir ein bisschen gedanken über die performance ... aber bei 8 
drehencodern in matrixschaltung bräuchte ich genau einen port ... sollte 
also ähnlich schnell sein als wenn ich nur zwei pins auswerte

von Andreas B. (andreasb)


Lesenswert?

Mad79 schrieb:
> Soweit mir bekantrixnt ist sind die signalleitungen bei den
> rastpositionen entweder beide hihg oder beide low ... dioden wären also
> notwendig da sonst ghosting entstehen würde

Also meine sind entweder verbunden oder offen, bei offen ziehe ich per 
Pullup auf 1, bei geschlossen gegen Massen.

Wenn du nun statt masse einen IO Pin Verwendest, und den hochohmig 
schaltest, sollte da keinen Beinflussung stattfinden. (bzw. keine 
relevante)

> mach mir ein bisschen gedanken über die performance ... aber bei 8
> drehencodern in matrixschaltung bräuchte ich genau einen port ... sollte
> also ähnlich schnell sein als wenn ich nur zwei pins auswerte

Also wenn du mit 200hz Aptastest reicht das warscheinlich bereits.

Aber du müsstest mal einen Konkreten Typen angeben, denn ich weiss ja 
nicht ob wir vom gleichen Typen reden.


mfg Andreas

von Mad79 (Gast)


Lesenswert?

Handyakku gleich alle und festrechner nicht in reichweite
meld mich morgen nochmal ... danke für die anregungen

von Mad79 (Gast)


Lesenswert?

Zum einsatz kommt warscheinlich dieser typ
http://www.alps.com/WebObjects/catalog.woa/E/HTML/Encoder/Incremental/EC09E/EC09E1520406.html

ist ewtas kleiner als die üblichen 11mm alps oder bourns encoder der 
ec11 reihe,technisch aber identisch

>Also meine sind entweder verbunden oder offen, bei offen ziehe ich per
>Pullup auf 1, bei geschlossen gegen Massen.

>Wenn du nun statt masse einen IO Pin Verwendest, und den hochohmig
>schaltest, sollte da keinen Beinflussung stattfinden. (bzw. keine
>relevante)

so kann man das auch sehen und stimmt auch soweit

aber wenn ich angenommen drei encoder parallel schalte 
(signalleitungen)und masse auf jeweils extra io pin
wäre es doch möglich das der eine encoder gerade in seiner rastposition 
die signalleitungen verbindet
dann kann ich doch auch keinen anderen mehr auswerten?

von Falk B. (falk)


Lesenswert?

@  Mad79 (Gast)

>>Wenn du nun statt masse einen IO Pin Verwendest, und den hochohmig
>>schaltest, sollte da keinen Beinflussung stattfinden. (bzw. keine
>>relevante)

Doch. Wenn man eine Matrix von Schalter sicher auslesen will, und 
mehrere aktive Schalter unterschieden muss, braucht man Dioden. Punkt.

>aber wenn ich angenommen drei encoder parallel schalte
>(signalleitungen)und masse auf jeweils extra io pin
>wäre es doch möglich das der eine encoder gerade in seiner rastposition
>die signalleitungen verbindet
>dann kann ich doch auch keinen anderen mehr auswerten?

Das IST eine Matrix.

Für acht Encoder a zwei Kanäle braucht man 16 IOs, in matrix 4+4 Ios = 8 
Naja. Dazu ggf. noch acht IOs für die Tastfubnktion. Ich würde zwei oder 
drei 74HC165 Schieberegister nehmen, braucht nur drei Pins und kann 
beliebig viele Tasten einlesen, ganz ohne Dioden. Pull-Ups aber nicht 
vergessen.

MFG
Falk

von Mad79 (Gast)


Lesenswert?

@ Falk

ja so hab ich mir das auch gedacht.
war halt verwundert weil Andreas meinte es ginge auch ohne dioden ???

mach mir halt sorgen um die performance
bei meinen bisherigen bastelleien mit einem drehencoder war die 
auswertung schon tricky ... mit 8? mhh?

hat jemand sowas schon mal probiert?

ist man mit schieberegistern überhaupt noch schnell genug für (schnell 
gedrehte) drehencoder?


ich muss auch noch einen DA und einen mux bedienen (per festem 1ms 
timerinterrupt)

von Falk B. (falk)


Lesenswert?

@  Mad79 (Gast)

>mach mir halt sorgen um die performance

Unnötig. Dein xmaega ist damit nur gelangweilt. Das Auslesen dauert eine 
Handvoll Mikrosekunden, die Verarbeitung der Codes ebenfalls. Gähn

>ist man mit schieberegistern überhaupt noch schnell genug für (schnell
>gedrehte) drehencoder?

Siehe oben. Wenn du da mit 1kHz Abtastrate fahren willst, ist das kein 
Thema, selbst 10kHz sind problemlos drin.

>ich muss auch noch einen DA und einen mux bedienen (per festem 1ms
>timerinterrupt)

Und was macht die CPU die restlichen 950us?

von Mad79 (Gast)


Lesenswert?

nun gut

das macht mir ja hoffnungen

hab noch ein paar drehencoder und ein testboard mit einem mega8 
rumliegen
werde mal testen und berichte dann

erstmal vielen dank

MfG
Robert

von Peter D. (peda)


Lesenswert?

Ich würde die Eingänge mit 2 * 74HC165 realisieren. Der Xmega muß dann 
nur die 2 Byte per SPI einlesen.
Man kann ja den SPI-Takt so wählen, daß sich durch den SPI-Interrupt 
gerade das gewünschte Abtastintervall ergibt


Peter

von Andreas B. (andreasb)


Lesenswert?

Mad79 schrieb:

>>Also meine sind entweder verbunden oder offen, bei offen ziehe ich per
>>Pullup auf 1, bei geschlossen gegen Massen.
>
>>Wenn du nun statt masse einen IO Pin Verwendest, und den hochohmig
>>schaltest, sollte da keinen Beinflussung stattfinden. (bzw. keine
>>relevante)
>
> so kann man das auch sehen und stimmt auch soweit
>
> aber wenn ich angenommen drei encoder parallel schalte
> (signalleitungen)und masse auf jeweils extra io pin
> wäre es doch möglich das der eine encoder gerade in seiner rastposition
> die signalleitungen verbindet
> dann kann ich doch auch keinen anderen mehr auswerten?

Sorry, Denkfehler. Natürlich wird bei einem Taster jeder Taster einzel 
angesteuert, wärend beim Drehencoder immer zwei Kontakte parallel 
Verbunden sind (also am einen Anschluss).

Wäre diese Verbindung nicht würde es funktionieren...;-)



mfg Andreas

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.