Forum: Mikrocontroller und Digitale Elektronik 6 Taster und nur 2 Interrupt Pins


von -Gast (Gast)


Lesenswert?

Hallo,

ich habe 6 Taster anzusteuern, aber da der Atmega8 ja nur zwei Pins für 
externe Interrupt Signale hat geht das nicht. Hab was von Polling 
gelesen, aber im Internet nicht sehr viel mehr dazu gefunden. Gibts 
dafür Beispiele oder evtl. eine andere Lösung?

von Karl H. (kbuchegg)


Lesenswert?

-Gast schrieb:
> Hallo,
>
> ich habe 6 Taster anzusteuern, aber da der Atmega8 ja nur zwei Pins für
> externe Interrupt Signale hat geht das nicht.

Brauchst du auch nicht.
Externe Interrupts durch Taster macht man nur dann, wenn die Taster den 
µC aus dem Tiefschlaf holen sollen.

> Hab was von Polling
> gelesen, aber im Internet nicht sehr viel mehr dazu gefunden. Gibts
> dafür Beispiele oder evtl. eine andere Lösung?

Entprellung
Die 'Komfortlösung' macht aus dem Stand 8 Taster an einem Port.

von spontan (Gast)


Lesenswert?

>Hab was von Polling gelesen, aber im Internet nicht sehr viel mehr dazu >gefunden


Das glaub ich Dir so nicht.

Polling ist einfach nur das zyklische Abfragen von Eingangspins.

von -Gast (Gast)


Lesenswert?

Hm, dann hab ich das Prinzip von Interrupts nicht verstanden.
Habe ein Lauflicht mit variabler Schnelligkeit über Timer programmiert.
a la:
1
if ( TCNT1 == (6*zeit))

 Die Geschwindigkeit wird über einen Taster erhöht und über einen 
anderen wieder verkleinert.

Wenn "zeit" nun recht gering ist, fällt es nicht auf, aber sobald "zeit" 
größere Werte annimmt fällt auf, dass der Taster nur nach dem letzten 
Befehl der Funktion detektiert wird, was mich stört.
Dachte, dass Interrupts hier der richtige Weg wären.

von Frank K. (fchk)


Lesenswert?

-Gast schrieb:
> Hallo,
>
> ich habe 6 Taster anzusteuern, aber da der Atmega8 ja nur zwei Pins für
> externe Interrupt Signale hat geht das nicht. Hab was von Polling
> gelesen, aber im Internet nicht sehr viel mehr dazu gefunden. Gibts
> dafür Beispiele oder evtl. eine andere Lösung?

Wenn Du was moderneres verwenden würdest, wie zB den pinkompatiblen 
Atmega88, dann hättest Du Pin-Change-Interrupts.

Denke aber daran, das Taster prellen. Entweder musst Du das entprellen 
in Software machen oder in Hardware (RC-Filter oder 1*Um mit RS-FF). 
Wenn Du es in Software machst, hast Du von den Pin-Change Interrupts 
nicht viel.

fchk

von Karl H. (kbuchegg)


Lesenswert?

-Gast schrieb:

> Wenn "zeit" nun recht gering ist, fällt es nicht auf, aber sobald "zeit"
> größere Werte annimmt fällt auf, dass der Taster nur nach dem letzten
> Befehl der Funktion detektiert wird, was mich stört.
> Dachte, dass Interrupts hier der richtige Weg wären.

Der richtige Weg wäre es zum Beispiel, den Timer mittels Interrupts das 
Lauflicht machen zu lassen.

Der richtige Weg ist es, keine wie auch immer geartete längere 
Warteschleifen zu programmieren.

: Bearbeitet durch User
von Thomas E. (thomase)


Lesenswert?

-Gast schrieb:
> Hm, dann hab ich das Prinzip von Interrupts nicht verstanden.
> Habe ein Lauflicht mit variabler Schnelligkeit über Timer programmiert.
> a la:
>
1
if ( TCNT1 == (6*zeit))
>
>  Die Geschwindigkeit wird über einen Taster erhöht und über einen
> anderen wieder verkleinert.
>
> Wenn "zeit" nun recht gering ist, fällt es nicht auf, aber sobald "zeit"
> größere Werte annimmt fällt auf, dass der Taster nur nach dem letzten
> Befehl der Funktion detektiert wird, was mich stört.
> Dachte, dass Interrupts hier der richtige Weg wären.

Na dann zeig das doch mal. Programmieren ist Sourcecode und keine Prosa.

mfg.

von Chris L. (kingkernel)


Lesenswert?

Lass das Lauflicht doch im Timer-Interrupt eins weiterlaufen. Im 
Compare-Interrupt, dessen Referenzwert du dann in der Main ändern 
kannst.

Zweite Möglichkeit:
Du hängst die Taster an normale Pins und benutzt den PinChangeInterrupt, 
sofern vorhanden. Ansonsten die 6 Taster zusätzlich zu den normalen 6 
Pins über jeweils eine diode noch an einen der ExtInt-Pins anschließen

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.