Taster ansteuern - Extern IRQ oder normaler Port?

BlackDevil

Neues Mitglied
09. Mai 2009
282
0
0
Sprachen
Servus

Bisher habe ich einen Taster oder mehrere immer an die externen Interrupts angeklemmt. Hatte dann den vorteil das man sehr einfach über die Software entprellen kann (nach dem abarbeiten einer Aufgabe werden in der Hauptschleife die IRQs (extern!) deaktiviert, im Timer IRQ tickt ein Counter und wenn der abgelaufen ist (pollen in der Hauptschleife) werden die ext. IRQs wieder eingeschaltet).

Nun bin ich aber letztens in die Diskussion reingestolpert das Taster an extInt blöd sind und man niemals nie mache sollte - eben weil sie Prellen und der Prozessor dadurch möglicherweise unnötig oft in die IRQ reinspringt.

Also: ExtInt oder normaler Port der gepollt wird?

Grüße
 
Hallo BlackDevil!

Ich würde nicht behaupten, dass ein Taster am externen Int Unsinn ist....
Es hängt eben von Programm ab und wie "wichtig" der Taster dort ist.
Schießlich kann er das laufende Programm sofort unterbrechen.

Wenn du aber den Taster nur wegen dem Entprellen am externen Int anschließt, ist es in der Tat der falsche Weg.
Dafür kannst du auch einen ganz normalen Eingang nehmen und diesen dann softwareseitig "entprellen".
Am einfachsten ist es aber, wenn du das echte Entprellen hardwareseitig erledigst. ;)

Gruß,
Cassio
 
Hallo BlackDevil,
Ich würde nicht behaupten, dass ein Taster am externen Int Unsinn ist....
Es hängt eben von Programm ab und wie "wichtig" der Taster dort ist.
Schießlich kann er das laufende Programm sofort unterbrechen.

da stimme ich Cassio zu. Manchmal macht es schon einen Sinn, einen Externen Interrupt zu verwenden, nämlich dann wenn man schnell drauf reagieren muss. Was man aber nie nicht machen sollte, innerhalb der ExtInt ISR entprellen, zumindest nicht dann, wenn das Programm noch andere Bereiche hat, die abgearbeitet werden müssen :)

Gruß,
Dirk
 
Nene ich wollte weder sagen das ich in der ExtIRQ entprelle noch das der Taster nur da dran soll damit ich ihn entprellen kann (ich finds nur eleganter). Davon ab das man immer Hardwaresetiig entprellen sollte - Softwareseitig schadet aber auch nicht.
Das ganze hier soll auch mehr eine Grundsatzdiskussion sein ;)

Nehmen wir mal an wir haben einen Prozess oder eine Funktion am laufen die äußerst wichtig ist und zwar wichtiger als jeder Taster der an dem verdammten Prozessor hängt. Was hindert uns daran die Interrupts für die Zeit zu deaktivieren?

Nehmen wir mal weiter etwas an, nämlich ein Konkretes Beispiel. Ich habe eine Statemachine, die ist mein Programmteil, und ich weiß nicht was noch drum rum soll. Die Taster sollen eine Unterschiedliche Priorität bekommen. Aus diesem Grund hätte ich die Taster in einer Timer IRQ gepollt, den mit der höchsten Priorität ausgewählt (hab da schon eine feine Methode gefunden) und mit dem ausgewählten Taster dann den Zustand der Statemachine gewechselt.

Es geht beides. Klar geht das. Aber ist ein weg besser als der andere? Oder ist es tatsächlich nur vom Anwendungsfall abhängig?

Nochmal: Grundsatzdiskussion :D
 
Hallo,

also Taster am Eingang INT0/INT1 brauchst du sogar zwingend wenn du zB
den Atmel bei einem Batteriegerät in den Stromsparmodus bringst. Wenn du
ihn dann wieder aufwecken willst brauchst du einen hochpriorisierten Interrupt
oder nen Reset. Also ist das nicht unbedingt unsinnig.

Wie Cassio schon sagt. Es kommt auf die Aufgabe an. Normalerweise reicht ein
pollen absolut aus. Da geht das entprellen mit ein paar Zeilen Code auch ganz
gut.

Wenn man es mit Interrupts macht sollte man in der Interruptroutine den
Eingang nach dem ersten Interrupt abschalten da sonst tatsächlich für jeden
Tastenpreller ein Interrupt ausgelöst wird. Und das können schon einige sein.
Aber das ist eine Designfrage für die Software was man sich an Prozessorlast
leisten will und was für die Anwendung zuviel ist.

Gruß
Dino
 
Hi,

...und es kommt anscheinend auf die Tasterart an. Ich habe in meinem Testgerät 8 Kurzhubtaster mit einer Prellzeit von 0.5ms (leider nur die billigen 6x6mm, für die besseren 12x12mm mit kürzerer Prellzeit war kein Platz). Da brauch ich noch nicht einmal eine Wartezeit eingeben und kann die Pins des Ports schnell rauf- und runterbetätigen. Allerdings nicht mit DEBOUNCE, sonder mit IF oder SELECT.


Grüsse,

Michael
 
Hi
Nun, man kann nicht wirklich sagen, Taster über Interrupt einzulesen sei Blödsinn, doch ich behaupte mal, das in der Regel kein Taster in einer ISR eingelesen und bearbeitet werden muß. Grund: welchen Programmzyklus hast du ? 1mS ? 10mS ? oder 1 s? Ich geh mal davon aus, ein einigermaßen "langsames" Programm ist in 10 mS fertig. Bist du mit dem Betätigen eines Tasters unter diesen 10 mS? Das wage ich zu bezweifeln, eher liegst du wenn du schnell bist zwischen 100 und 200 mS Betätigungszeit, also allemal Zeit genug für den Controller, da mal vorbei zu schauen und die Information mitzunehen. Interrupt ist etwas, was im Zeitpunkt und in der Zeitdauer unbekannt ist. Mit einem Interrupt erfaßt du einen Nadelimpuls von nS-Länge. Wenn du also solche Signale nicht "verpassen" willst, dann ok, eine ISR und gut is. Aber alle Signale, die länger der Zykluszeit sind, machen in einer ISR keinen Sinn. Ich halte es auch nicht für Sinnvoll, eine ISR abzuschalten oder auszublenden. Damit wirkt man gerade dem Sinn einer ISR entgegen, wichtige Signale nicht zu verpassen. Besser, man gewöhnt es sich gar nicht erst an. Auch wenn es jetzt vielleicht noch nicht von Bedeutung ist, aber irgendwann braucht man wirklich diese Funktion und wundert sich vielleicht, warum nur jedes 10. Ereignis erfaßt wird, nur weil man den Hintergrund nicht wirklich verstanden hat.
Gruß oldmax
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)