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?
-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.
>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.
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.
-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
-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
-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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.