Forum: Mikrocontroller und Digitale Elektronik Benutzereingaben: polling vs. int


von Armin (Gast)


Lesenswert?

Hallo zusammen,

ich möchte eine Art Mischpult basteln: mit Drehencodern und Tastern für 
die Eingabe. Konkret komme ich auf ca. 8 encoder und 50 Taster.
Mein Plan sieht vor, das alles einfach per Entprell-RC-Glieder an 
In-Schieberegister anzuschließen, beispielsweise 74HC165, um so die 
Daten in meinen uC zu bekommen (irgendein 8bit avr; Im Moment atmega 
162; 8MHz osc intern).

Jetzt stellt sich die Frage:
Sollen die Inputs ständig per Polling abgefragt werden? Man bräuchte ja 
eine geringe Zykluszeit, um wirklich auch kurze Tastimpulse abdecken zu 
können. Was wär da sinnvoll...
Alternativ könnte man auch zusätzlich alle bits verXodern (74HC86) und 
das herauskommende Signal an einen Interrupt-Eingang hängen. Dann werden 
die Schieberegister nur abgefragt, wenn sich auch wirklich was geändert 
hat.

Für die Drehencoder steht zwar was zu einer INT-Methode im wiki. Aber so 
wie ich das verstanden habe, ist das etwas Anderes als ich vorschlage. 
Ich möchte ja jedes bit verodern und immer dann Abfragen, wenn sich 
etwas ändert. Im Wiki geht ein bit an den INT das andere wird dann 
abgefragt...



Entscheidungskriterium kann auch sein, dass das Routing mit den XORs 
deutlich schwieriger werden könnte.
Meinungen?

von Karl H. (kbuchegg)


Lesenswert?

Armin schrieb:

> Sollen die Inputs ständig per Polling abgefragt werden? Man bräuchte ja
> eine geringe Zykluszeit, um wirklich auch kurze Tastimpulse abdecken zu
> können.

Das kürzeste, was du mit einem Taster und sehr viel Training zustande 
bringen kannst sind ein paar Hunderstel Sekunden. Für dich ist das kurz. 
Für deinen µC ist das eine halbe Ewigkeit.

> Was wär da sinnvoll...
> Alternativ könnte man auch zusätzlich alle bits verXodern (74HC86) und
> das herauskommende Signal an einen Interrupt-Eingang hängen. Dann werden
> die Schieberegister nur abgefragt, wenn sich auch wirklich was geändert
> hat.

Macht nur dann Sinn, wenn du den µC schlafen legen willst und er mit 
einem Tastendruck aus dem Tiefschlaf aufwachen soll.

> Meinungen?

Polling ist mehr als genug. Alle 5 oder 10 Millisekunden mal ein Blick 
auf die Tasten. Das reicht dicke und belastet den µC mit weniger als 1%

von Samuel C. (dragonsam)


Lesenswert?

Das dürfte mit Polling überhaupt kein Problem darstellen. Der Controller 
ist um einiges schneller als du. Selbst wenn er hunderte Signale prüfen 
muss.

von MaWin (Gast)


Lesenswert?

Vergiss deine RC-Glieder, die machen das nur schlimmer wenn der 
Schaltkreis keinen Schmitt-Trigger-Eingang hat. Entprellen machst du per 
Software. Siehe
http://www.dse-faq.elektronik-kompendium.de/dse-faq.htm#F.29.1

Ein Mischpult soll schnell reagieren, dennoch halte ich Interrupts hier 
nicht für notwendig, denn auch 64 Inputs abzufragen und mit ihrem 
vorherigen Zustand zu vergleichen kostet keine 64us, verzögert also auch 
nicht mehr als 64us, da ist selbst die Prellzeit der Taster länger.

Die Frage ist, was der uC noch zusätzlich macht. Den Interrupt könnte 
man für DMX aufheben.


Zum Theme Drehencoder und Interrupt: Man fragt Drehencoder nicht nach 
Flanken ab, sondern in festen Zeitintervallen, z.B. 1msec, entsprechend 
der schnellsten Drehung und längsten Prellzeit.

Wenn man aber nicht dauernd abfrat, bekommt man keine Info, ab wann man 
abfragen müsste. Man könnte also jeden Signalwechsel an den beiden 
Leitungen verodert zu einem Interrupt führen lassen, ab dann läuft die 
zyklische Abfrage bis man meinst der Drehencoder würde wieder stehen. 
Aber wenn man offenbar sowieso die Rechenleistung hat, dauernd 
abzufragen, wozu dann den Interrupt ? Es macht keinen Sinn, höchstens 
wenn der uC im sleep Strom sparen soll und bei Beginn des Drehens 
enizelne Pulse fehlen dürften.

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.