Forum: Mikrocontroller und Digitale Elektronik Taster ohne Interrupt abfragen


von Peter (Gast)


Lesenswert?

Hallo,

meine Aufgabe ist es einen Taster ohne Interrupt abzufragen. Der Taster 
soll als Schalter funktionieren. Also einmal drücken LED an und beim 
zweiten mal drücken soll die LED wieder ausgehen.

Mein Code:
1
#define F_CPU 3000000
2
#include <avr/io.h>
3
#include <util/delay.h>
4
5
int main(void)
6
{
7
8
  DDRB = 0xFF;
9
  DDRC = 0x00;
10
  
11
  
12
       uint8_t a=0;
13
14
15
16
  while(1){
17
    if(PINC&(1<<PC0)){
18
     _delay_ms(100);
19
      a=!a;
20
      _delay_ms(400);
21
    }
22
    
23
    PORTB=a;
24
25
  }
26
}

Bei diesen Werten für die Verzögerung flackert die LED, wenn der Taster 
gedrückt wird.
Wenn ich die Verzögerung erhöhe, wird eine Änderung am Taster nicht 
schnell genug erkannt.
Bei geringerer Verzögerung ist kein Umschalten mehr möglich.

Ich hoffe ihr könnt mir helfen.

von Klaus Dieter (Gast)


Lesenswert?

1
while(1){
2
    if(PINC&(1<<PINC0)){
3
     a=!a;
4
     PORTB=a;
5
     _delay_ms(100);
6
     while(PINC&(1<<PINC0)){}
7
8
    }
9
  }

von HildeK (Gast)


Lesenswert?

Du musst auch prüfen, dass die Taste auch wieder losgelassen wurde für 
mindestens die Entprellzeit.

Aber dein Ansatz ist sowieso recht dürftig. Die Zeiten sind viel zu lang 
und Delay ist die schlechteste Variante.
Im Forum gibt es gefühlt tausende von Vorschlägen zur Entprellung, auch 
einige sehr brauchbare :-).

von batman (Gast)


Lesenswert?

Kein Plan, kein Schaltplan,..

von A. S. (Gast)


Lesenswert?

Vielleicht solltest Du Aufgabenstellung posten oder zumindest, welches 
Thema ihr gerade durchnehmt.

Ansonsten ist Klaus Dieters Lösung schon gut, wenn beim Loslassen kein 
Prellen auftritt. Sonst halt danach auch noch ein delay.
1
for(;;)
2
{
3
   /* warte bis erste Flange "gedrückt" */
4
   while(!(PINC&(1<<PC0)));
5
   /* toggle LED */
6
   a=!a;
7
   PORTB=a;
8
   /* Warte Prellzeit für Tastendruck */
9
   _delay_ms(40);
10
   /* warte bis erste Flanke "losgelassen" */
11
   while(PINC&(1<<PC0));
12
   /* Prellzeit Loslassen */
13
   _delay_ms(40);   
14
}

Wenn Du mit einemn Finger drückst, sind die Zeiten ausreichend kurz, 
d.h. Du wirst keinen einzigen Tastendruck verlieren. Weniger als 100ms 
pro Tastendruck schafft kaum ein Mensch an einer Taste.

Mit einem Trick kann man Folientastaturen etwa doppelt so schnell 
bedienen, wenn man z.B. 20 Menüeinträge weiter will und nicht 2s 
brauchen mag.

Wenn glitches (kurzzeitige Störungen) zu erwarten sind, dann sollte man 
die herkömmliche Methode wählen (alle 10ms samplen und 3-4 Highs bzw. 
lows nacheinander). Wenn man noch etwa anderes machen möchte, dann auch. 
Ansonsten ist Deine Methode mit Flankenerkennung und anschließendem 
Delay ok, Du must halt nur beide Flanken detektieren.

von Stefan S. (chiefeinherjar)


Lesenswert?

Heißt "ohne Interrupt" ohne Pin-Change-Interrupt oder GANZ ohne 
Interrupts?

Denn ja, Pin-Change-Interrupt wäre der falsche Weg, der gute PeDa hat 
hier eine super Lösung zur Entprellung mittels zyklische Abfrage via 
Timer vorgestellt. Das setzt auf dem Prinzip auf, was du versuchst mit 
deinem Delay zu erreichen.

Entprellung

von HildeK (Gast)


Lesenswert?

Achim S. schrieb:
> Weniger als 100ms
> pro Tastendruck schafft kaum ein Mensch an einer Taste.

Aber sicher! Hängt aber bestimmt auch von der mechanischen Ausführung 
der Taste ab.
Ich rege mich regelmäßig auf, wenn Geräte, Aufzüge etc. auf meinen 
kurzen Tastendruck nicht reagieren. Das geht besser!
Hast du die alle programmiert? :-)

von Peter D. (peda)


Lesenswert?

HildeK schrieb:
> Ich rege mich regelmäßig auf, wenn Geräte, Aufzüge etc. auf meinen
> kurzen Tastendruck nicht reagieren. Das geht besser!

Das Problem ist, daß viele Programmierer kein Hardwarewissen haben und 
meinen, Entprellen wäre keine richtige Aufgabe, die man lösen muß. Daher 
fügen viele nur ein Delay ein, mit all den sattsam bekannten Nachteilen.

Besonders ärgerlich sind die Fußgängerampeln, wo das Licht in der Taste 
erst gefühlte Minuten später angeht. Daher sieht man durchaus nicht 
selten zerstörte Taster, obwohl die sehr robust ausgeführt sind.

von Ingo L. (corrtexx)


Lesenswert?

Peter schrieb:
> meine Aufgabe ist es einen Taster ohne Interrupt abzufragen
Ich frage mich immer wieder, warum solche absolut sinnfreien Aufgaben 
gestellt werden. Sowas macht man eben über Interrupts (Polling und 
Entprellung im Timerinterrupt).

von m.n. (Gast)


Lesenswert?

Ingo L. schrieb:
> Sowas macht man eben über Interrupts (Polling und
> Entprellung im Timerinterrupt).

Oder noch schlichter, wenn einem absolut nichts Besseres einfällt,  mit 
einem RC-Glied vor dem Eingang. AVRs haben an nahezu allen Eingängen 
Schmitt-Trigger.

von Ingo L. (corrtexx)


Lesenswert?

m.n. schrieb:
> wenn einem absolut nichts Besseres einfällt,  mit
> einem RC-Glied vor dem Eingang
Je nach Umgebung ist das sowieso unumgänglich. Wenn man in einer 
umrichterverseuchten Umgebung arbeitet fängt man sich auf einer zu 
hochohmig angebundenen Leitung alles mögliche ein. Fehlt dann ein 
entsprechender C zum Entstören, hat man softwareseitig einen erheblichen 
Mehraufwand um einen gedrückten Taster vom Störnebel zu unterscheiden...

von Peter D. (peda)


Lesenswert?

m.n. schrieb:
> Oder noch schlichter, wenn einem absolut nichts Besseres einfällt,  mit
> einem RC-Glied vor dem Eingang.

Letzendlich sind sauber funktionierende SW-Lösungen auch nichts anderes, 
als ein Integrator mit nachfolgendem Schmitt-Trigger. Es fallen nur 
keine zusätzlichen Bauteil- und Bestückungskosten an.

von m.n. (Gast)


Lesenswert?

Peter D. schrieb:
> Es fallen nur
> keine zusätzlichen Bauteil- und Bestückungskosten an.

Jetzt geht das schon wieder los :-(

Ingo L. schrieb:
>> wenn einem absolut nichts Besseres einfällt,  mit
>> einem RC-Glied vor dem Eingang
> Je nach Umgebung ist das sowieso unumgänglich.

von Ingo L. (corrtexx)


Lesenswert?

Peter D. schrieb:
> Letzendlich sind sauber funktionierende SW-Lösungen auch nichts anderes,
> als ein Integrator mit nachfolgendem Schmitt-Trigger.
Da hast du Recht, aber es tut dem Gesamtsystem besser, wenn man Störer 
unterdrückt (durch geeignete RC-Beschaltung) statt sie nur softwaremäßig 
zu bekämpfen. Nichts desto Trotz, sollte man auch mit RC-Beschaltung 
Signale zusätzlich in Software entstören indem man das Signal mehrfach 
erfasst und dann entscheidet ob es wirklich gültig ist. Machen IMHO 
Automatisierungsgeräte auch so, hardwareseitig und softwareseitig, 
Gürtel und Hosenträger.

Edit: Dieser Aufwand ist natürlich nur in absolut rauer Umgebung 
gerechtfertigt.

: Bearbeitet durch User
von batman (Gast)


Lesenswert?

Was man als Störung ansieht, ist allerdings immer subjektiv. Für mich 
ist das bloß ein Eingangssignal.

von A. S. (Gast)


Lesenswert?

HildeK schrieb:
> Aber sicher! Hängt aber bestimmt auch von der mechanischen Ausführung
> der Taste ab.

Nein. Deutlich unter 100ms Periodendauer (also > 10 Tastendrücke pro 
Minute) schaffst Du es auch nicht. Probiere es aus, z.B. per Oszi.

> Ich rege mich regelmäßig auf, wenn Geräte, Aufzüge etc. auf meinen
> kurzen Tastendruck nicht reagieren. Das geht besser!
> Hast du die alle programmiert? :-)

Die verwenden nicht meinen Code von oben mit 80ms Periodendauer!

von Der Andere (Gast)


Lesenswert?

HildeK schrieb:
> Ich rege mich regelmäßig auf, wenn Geräte, Aufzüge etc. auf meinen
> kurzen Tastendruck nicht reagieren. Das geht besser!

100% Zustimmung!

von HildeK (Gast)


Lesenswert?

Achim S. schrieb:
> Deutlich unter 100ms Periodendauer (also > 10 Tastendrücke pro
> Minute) schaffst Du es auch nicht. Probiere es aus, z.B. per Oszi.

Nicht 10 Drücke pro Sekunde (nicht Minute - dein Schreibfehler), die 
schaffe ich nicht. Sondern einer, der <100ms gedrückt ist und dann durch 
die schlechte Entprellung nicht akzeptiert wird.
Aber, ich werde es mal ausprobieren ....

Achim S. schrieb:
> Die verwenden nicht meinen Code von oben mit 80ms Periodendauer!

Du hast das Smiley gesehen?

von Mike99 (Gast)


Lesenswert?

HildeK schrieb:
> Ich rege mich regelmäßig auf, wenn Geräte, Aufzüge etc. auf meinen
> kurzen Tastendruck nicht reagieren. Das geht besser!

Naja, je nach dem, wie alt der Aufzug ist, entsteht diese Verzögerung 
durch ein elektromechanisches Verhalten: weil das zugehörige Relais eben 
etwas länger einen konstanten Strom benötigt, um sicher zu haften und 
die Selbsthaltung wirksam weden zu lassen.

von Ingo L. (corrtexx)


Lesenswert?

batman schrieb:
> Was man als Störung ansieht, ist allerdings immer subjektiv. Für mich
> ist das bloß ein Eingangssignal.
Wenn das Eingangssignal so verrauscht ist, dass es es schafft, die 
Schaltschwellen der Schmitttrigger-Eingänge zu reißen, ohne das eine 
tatsächliche Betätigung/Auslösung statt gefunden hat, sehe ich das als 
eine Störung an, denn es stört meinen Betriebsablauf. Wenn dich sowas 
nicht stört, ist das für deine Anwendung halt keine Störung.

von Ingo L. (corrtexx)


Lesenswert?

Der Andere schrieb:
> Ich rege mich regelmäßig auf,
Is das eine Form der Lernresistenz? Irgendwann hat man sich doch damit 
mal abgefunden!? SCNR ;)

von A. S. (Gast)


Lesenswert?

HildeK schrieb:
> Nicht 10 Drücke pro Sekunde ... sondern einer, der <100ms gedrückt
> ist und dann durch die schlechte Entprellung nicht akzeptiert wird.
> Aber, ich werde es mal ausprobieren ....

Nur zur Klarstellung: Bei mir oben ist es egal, wie lange die Tasten 
prellen oder wie kurz der (Nicht-)Tastendruck ist.

 * Also 1ms gedrückt reicht zum erkennen
 * 1ms losgelassen reicht zum erkennen von loslassen und erneut 
startbereit sein nach dann 40ms.

Bei der Realisierung dürfen dann aber keine kurzen Spikes als Störung 
auftreten.

von Peter II (Gast)


Lesenswert?

Mike99 schrieb:
> Naja, je nach dem, wie alt der Aufzug ist, entsteht diese Verzögerung
> durch ein elektromechanisches Verhalten: weil das zugehörige Relais eben
> etwas länger einen konstanten Strom benötigt, um sicher zu haften und
> die Selbsthaltung wirksam weden zu lassen.

nein ganz bestimmt nicht. Relais schaltet sehr schnell.

z.b. ABB

http://www.abb.de/product/seitp329/12404419d98ff1d8c125704c0041a5d2.aspx?tabKey=2&app=9AAG1827&lc=de&cc=DE&cid=9AAC100109&gid=ABB1SFL451001R2600&ev=1568

Betriebszeit:
zwischen Spulenerregung und Schließen des Schließerkontakts 10 ... 25 ms
zwischen Spulenentregung und Schließen des Öffnerkontakts 7 ... 15 MS

da braucht es schon mehr als 4 schütze in Reihe um auf 100ms zu kommen.

von Mike99 (Gast)


Lesenswert?

Peter II schrieb:
> nein ganz bestimmt nicht. Relais schaltet sehr schnell.
>
> z.b. ABB
>
> 
http://www.abb.de/product/seitp329/12404419d98ff1d8c125704c0041a5d2.aspx?tabKey=2&app=9AAG1827&lc=de&cc=DE&cid=9AAC100109&gid=ABB1SFL451001R2600&ev=1568
>
> Betriebszeit:
> zwischen Spulenerregung und Schließen des Schließerkontakts 10 ... 25 ms
> zwischen Spulenentregung und Schließen des Öffnerkontakts 7 ... 15 MS
>
> da braucht es schon mehr als 4 schütze in Reihe um auf 100ms zu kommen.

So und jetzt machst du das Ganze noch mal aber bitte:

1. mit Relais aus den 60er/70er Jahren
2. unter Beachtung der möglichen schaltungsbedingten Kaskadierung, 
welche zusätzliche Verzögerungen verursacht

In einem Aufzug, der 40 Jahre alt ist, werden sich schließlich keine 
Relais von vorgestern finden.

von batman (Gast)


Lesenswert?

Ingo L. schrieb:
> batman schrieb:
>> Was man als Störung ansieht, ist allerdings immer subjektiv. Für mich
>> ist das bloß ein Eingangssignal.
> Wenn das Eingangssignal so verrauscht ist, dass es es schafft, die
> Schaltschwellen der Schmitttrigger-Eingänge zu reißen, ohne das eine
> tatsächliche Betätigung/Auslösung statt gefunden hat, sehe ich das als
> eine Störung an, denn es stört meinen Betriebsablauf. Wenn dich sowas
> nicht stört, ist das für deine Anwendung halt keine Störung.

Warum sollte es auch. Das ist der ganz normale Alltag eines MC mit 
unbenutzten Pins, die oft als Eingang ohne Pullup munter herumfloaten 
und keiner beklagt sich.

von Der Andere (Gast)


Lesenswert?

Mike99 schrieb:
> In einem Aufzug, der 40 Jahre alt ist, werden sich schließlich keine
> Relais von vorgestern finden.

Aber sichr, sos schnell wirft man Aufzüge nicht raus, eher erneuert man 
Verschleissteile, und Schütze sind Verschleißteile.

Ausserdem haben HildeK und ich nicht elektromechanische Steuerungen 
gemeint, es gibt genügend elektronische Steuerungen die so beschissen 
entprellt sind, daß sie einen kurzen Tastendruck ignorieren.

von Ingo L. (corrtexx)


Lesenswert?

batman schrieb:
> Warum sollte es auch. Das ist der ganz normale Alltag eines MC mit
> unbenutzten Pins, die oft als Eingang ohne Pullup munter herumfloaten
> und keiner beklagt sich.
Gute Entwickler und Programmierer schalten unbenutzte Pins als Ausgang 
und auf einen definierten Zustand...

Ich habe mal erlebt (reproduzierbar) wie ein AVR bei Berührung des 
Programmiersteckers abstürzte, weil man vergessen hatte, die Eingänge 
auf definierte Pegel zu legen.

Sowas gilt es schon seit TTL-Zeiten mit Widerständen zu unterbinden.

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Mike99 schrieb:
> 1. mit Relais aus den 60er/70er Jahren
warum sollte alte Relais langsamer sein? So viel Entwicklung wie bei 
Computer gibt es dort nicht.

> 2. unter Beachtung der möglichen schaltungsbedingten Kaskadierung,
> welche zusätzliche Verzögerungen verursacht

habe ich doch geschrieben, das man mehr als 4 Relais verschalten müsste 
um auf 100ms zu kommen.

von Mike99 (Gast)


Lesenswert?

Der Andere schrieb:
> Aber sichr, sos schnell wirft man Aufzüge nicht raus, eher erneuert man
> Verschleissteile, und Schütze sind Verschleißteile.

Genau da liegt dein Verständnisproblem: ich rede nicht von 
Schaltschützen, welche ganz am Ende des Ablaufes die Motoren schalten, 
sondern wirklich von Relais, welche Steuerungsaufgaben übernehmen und 
die Schaltlogik implementieren. Und um so mehr Logik aufeinander folgend 
geschaltet werden muss, um so größer wird die Verzögerung.

D.h. die reine Schaltzeit von einem einzelnen Relais ist genau so wenig 
aussagekräftig wie die nackte Taktfrequenz einer CPU, so lange du nicht 
weißt, wie viele Schaltvorgänge/Instruktionen zum Erfüllen einer Aufgabe 
durchgeführt werden müssen.

von batman (Gast)


Lesenswert?

Ingo L. schrieb:
> ein AVR bei Berührung des
> Programmiersteckers abstürzte

Glaub ich gern aber da gehts wohl eher um einen mangelhaft beschalteten 
Resetpin als um Eingänge, die keine Funktion haben.

von Ingo L. (corrtexx)


Lesenswert?

batman schrieb:
> Glaub ich gern aber da gehts wohl eher um einen mangelhaft beschalteten
> Resetpin als um Eingänge, die keine Funktion haben.
Nee, der Reset war als einziger Pin mit 47k Pull-up und 100pF nach GND 
beschaltet.

von Stefan F. (Gast)


Lesenswert?

> 47k Pull-up

Das ist zu viel, kein Wunder dass eine Berührung genügt, um den Reset 
auszulösen. Hie sind 10k oder besser noch 4,7k angemessen.

von HildeK (Gast)


Lesenswert?

Der Aufzug war nur ein Beispiel, das mir täglich begegnete - unser 
Aufzug. Er hat aber durch kurzes Aufleuchten einer LED angezeigt, dass 
die Taste tatsächlich Kontakt hatte.
PeDa hat die Ampel genannt, ich hab auch einen Kaffeeautomaten, bei dem 
das so ist. Da wird kein altes Relais bedient :-).

Ingo L. schrieb:
> Is das eine Form der Lernresistenz?

So könnte es man auch nennen :-).

HildeK schrieb:
> Aber, ich werde es mal ausprobieren ....

Das hab ich inzwischen gemacht. 9 von 10 Tastendrücken (habe einen 
Print-Kurzhubtaster und Tasten vom STK500 als Versuchsobjekt benutzt) 
sind deutlich unter 100ms, manche unter 50ms.

Achim S. schrieb:
> Zur zur Klarstellung: Bei mir oben ist es egal, wie lange die Tasten
> prellen oder wie kurz der (Nicht-)Tastendruck ist.

Ja, deinen Code hatte ich nicht ganz genau angeschaut. Sorry.
Aber damit ist die zweite Funktion der Entprellung nicht vorhanden: eine 
sehr kurze Störung schaltet bereits. Kann man in sauberer Umgebung so 
machen, die Ansätze sind aber meist so, dass beides, das Prellen und 
eine Einstreuung behandelt werden sollen. Und, weiterer Nachteil, bei 
dir ist dann das Programm unterbrochen, solange jemand auf die Taste 
drückt. Auch nicht immer akzeptabel.
Ein weiterer Ansatz wäre unter Benutzung von Delays aber ohne die 
genannten Nachteile, den Tastenpegel zu pollen und in ein 
Schieberegister einzulesen z.B. alle 5...10ms und wenn n von n (n ≈ 4 
... 8) Pegel den selben Wert haben, dann das als 'gedrückt' oder 
'losgelassen' zu interpretieren. Das hat den Vorteil, dass das Programm 
zwar mehrmals, aber jeweils nur um 5ms ... 10ms) ausgebremst wird, sonst 
aber weiterlaufen kann und sogar Teile der 5-10ms nutzen kann.
Besser ist natürlich die Timer-Variante anstatt Delays ...

von Sebastian S. (amateur)


Lesenswert?

@Peter

Ich packe eine Taste in eine status-Maschine mit folgenden Stati:
1. Taste nicht betätigt (und vorher auch nicht)
2. Taste gerade betätigt (vorher nicht)
3. Taste gehalten (vorher auch)
4. Taste losgelassen (vorher betätigt) - ähnlich 1.

Also ein paar einfache Abfragen mit nur wenigen Statusregistern.

2. Ist sinnvoll, wenn Du eine sofortige Reaktion brauchst.
3. Ist brauchbar, wenn Du z.B. eine Wiederholfunktion nutzt.
4. Brauchst Du wenn die Sequenz: Betätigt und losgelassen gefragt ist.

Mit ein bisschen Spielerei bei 2 und 3 kannst Du auch das Entprellen 
erledigen.

Muss aber nicht sein

: Bearbeitet durch User
von Teo D. (teoderix)


Lesenswert?

Sebastian S. schrieb:
> Muss aber nicht sein

Das ist Quasi das Minimum....

von m.n. (Gast)


Lesenswert?

Peter schrieb:
> Ich hoffe ihr könnt mir helfen.

Vorausgesetzt, Du steckst nicht im Aufzug fest, solltest Du nun alles 
Wissenswerte verstanden haben ;-)

von Herr M. (herrmueller)


Lesenswert?

Ich will ja nicht nerven, aber
ich denke die Verzögerung in den Aufzügen ist absichtlich, damit man 
beim versehentlichen Vorbeistreifen oder kurzen Dranlehnen nicht alle 
Taste betätigt. Auch ein absichtliches Hochstreifen über alle Tasten 
wird damit vermieden. Die 3-10sec Verzögerung des Alarmknopfes ist auch 
nicht wegen der Entprellung.

von Teo D. (teoderix)


Lesenswert?

Herr M. schrieb:
> Ich will ja nicht nerven

Da Nervt nur, das man nich selber drauf kam. :)
(da häd i leergeid zoid)

von batman (Gast)


Lesenswert?

Yea, it's not a Bug it's a Feature!!! :-)

von HildeK (Gast)


Lesenswert?

Herr M. schrieb:
> ich denke die Verzögerung in den Aufzügen ist absichtlich, damit man
> beim versehentlichen Vorbeistreifen oder kurzen Dranlehnen nicht alle
> Taste betätigt.

Ich meinte die Ruftaste außen. Aber egal, es wurden ja auch Beispiele 
von anderen Geräten genannt - das Problem ist imho vorhanden und wäre 
besser lösbar ...

von Peter D. (peda)


Lesenswert?

Herr M. schrieb:
> ich denke die Verzögerung in den Aufzügen ist absichtlich

Das kann man nicht generalisieren, da kocht jeder Aufzugbauer sein 
eigenes Süppchen. Z.B. in der Firma reicht es, wenn man über den Teppich 
läuft und das Tastenfeld nur berührt, daß beide Richtungstasten angehen. 
Der Programmierer hat also die externen Interrupts verwendet und nicht 
entprellt. Daher reicht die ESD beim Berühren aus, um sie zu triggern.
Auch zeigt das Display beim Anlaufen des Motors gerne mal zufällige 
Pixelmuster an.
Ich hätte eigentlich erwartet, daß die Firmware von Aufzügen 
sorgfältiger geprüft wird. Und auch, daß zusätzliche niederohmige 
Pullups verbaut werden, um die ESD zu unterdrücken.

: Bearbeitet durch User
von Georg (Gast)


Lesenswert?

Ingo L. schrieb:
> Ich frage mich immer wieder, warum solche absolut sinnfreien Aufgaben
> gestellt werden

Was soll denn so ein armer Professor machen, wenn er selbst keine Ahnung 
von Interrupts hat...

Immerhin, es sind weder Röhren noch Relais verlangt.

Georg

von Teo D. (teoderix)


Lesenswert?

Georg schrieb:
>> Ich frage mich immer wieder, warum solche absolut sinnfreien Aufgaben
>> gestellt werden
>
> Was soll denn so ein armer Professor machen, wenn er selbst keine Ahnung
> von Interrupts hat...

Fangen wir mal an.
Was sind die Vor UND Nachteile eine Interrupt gesteuerten Tasten 
abfrage?

von Einer K. (Gast)


Lesenswert?

Welchen Interrupt hätten sie den gerne?
Timer, oder IO?

von m.n. (Gast)


Lesenswert?

Es kommt auf die geforderte Reaktionszeit an. Für eine Tastatur mit 
vielen Tasten reicht ein Timer. Für einzelne Schaltkontakte mit 
schneller Reaktion sind INTx oder PCINT besser geeignet, auch wenn das 
von vielen Leuten, die üblicherweise mit Millionenstückzahlen hantieren, 
nicht verstanden wird ;-)

Aber diese Diskussion ist eine unendliche Geschichte, die viel mit 
Religion zu tun hat und den 'Argumenten' endet: das brauche ich nicht, 
das mache ich immer so,...

von Teo D. (teoderix)


Lesenswert?

Arduino F. schrieb:
> Welchen Interrupt hätten sie den gerne?
> Timer, oder IO?

OK, der war gut. :)
Natürlich der, der vom Taster kommt (angefordert wird).

m.n. schrieb:
> Es kommt auf die geforderte Reaktionszeit an. Für eine Tastatur mit
> vielen Tasten reicht ein Timer.

Eher(!) die Ökonomie. Ständig den Prozessor mit zB. 80% Tatspurabfragen 
zu beschäftigen, ist nicht Sinn der Sache. Batteriebetrieben....

m.n. schrieb:
> Aber diese Diskussion ist

Die (meine) Erste ohne SOFORT in,

Interrupt, Taste -> NIEMALS
doch
Interrupt, Taste -> NIEMALS
...

zu enden. :)

von Matthias K. (mkeller)


Lesenswert?

m.n. schrieb:
> Für einzelne Schaltkontakte mit
> schneller Reaktion sind INTx oder PCINT besser geeignet, auch wenn das

Aha. Um welche Reaktionszeit geht es denn? Da braucht man dann schon 
gute Taster die sehr kleine Prellzeiten (<20ms) haben, damit der 
Pollingansatz langsamer ist. Entprellen muss man immer.

Aufwecken kann man den µC natürlich mit einem INT oder PCINT, den aber 
nach dem Aufwachen sofort wieder sperren und gut ist.

Teo D. schrieb:
> Eher(!) die Ökonomie. Ständig den Prozessor mit zB. 80% Tatspurabfragen
> zu beschäftigen, ist nicht Sinn der Sache. Batteriebetrieben....

80% ?! Entweder hast du einen µC mit 32kHz Takt (kann man ja machen...) 
oder dein Code ist einfach grottig.

Ich würde gerne eure Ansätze sehen und diskutieren (wirklich!), bisher 
habe ich aber keinen gesehen.

von Teo D. (teoderix)


Lesenswert?

Matthias K. schrieb:
> 80% ?!

Wenn du das unbedingt So auslegen willst, bitte.

Matthias K. schrieb:
> Ich würde gerne eure Ansätze sehen und diskutieren (wirklich!), bisher
> habe ich aber keinen gesehen.

Da gibts nichts zu diskutieren!
Ist immer wieder die selbe Leier.

Ein eigentlich simple aber Abstrakte Aufgabe, die scheinbar nur schwer 
in manche Köpfe will.
Ähnlich wie beim Eagle Bauteil-Editor. :)
Das mal mit Hilfe eines Programmablaufplans, durch zu Spielen hilft. So 
viele Möglichkeiten gibts da garnicht. Es ist eher die Frage auf was man 
verzichten kann o. will (o. vergessen hat).

von Gerhard O. (gerhard_)


Lesenswert?

Peters D. key routine is the best!!!

Das Problem hat er schon vor Jahren brilliant und perfekt gelöst und im 
Forum hinterlegt.
Ich habe es schon auf einigen uC (PIC, AVR, STM32, Z8, 8051) eingesetzt 
und es funktioniert ueberall 100% zuverlässig. Auch seine Keypad 
Routinen funktionieren absolut perfekt ohne irgendwelche Prellprobleme.

Warum also das Rad immer wieder neu erfinden? Sorry, ich mußte das mal 
sagen.

: Bearbeitet durch User
von Matthias K. (mkeller)


Lesenswert?

Gerhard O. schrieb:
> Warum also das Rad immer wieder neu erfinden?

Sehe ich auch so.

Teo D. schrieb:
> Matthias K. schrieb:
>> 80% ?!
>
> Wenn du das unbedingt So auslegen willst, bitte.

Hä? Das hast du doch geschrieben, ich bin verwirrt. Irgendwie verstehe 
ich deinen Post nicht. :)

Vielleicht hab ich dich falsch verstanden. Ich hatte dich so verstanden, 
dass du die Entprellung per Polling in einer Timer-ISR, also durch einen 
SW-Tiefpass für keine gute Lösung hältst.

Die Routine von Peda ist super optimiert, ich verwende sie auch oft, da 
sie sehr kompakt ist.

von Teo D. (teoderix)


Lesenswert?

Gerhard O. schrieb:
> Peters D. key routine is the best!!!

Kein Frage. Das dürfte 99,9% aller aller Ansprüche befriedigen.


> Warum also das Rad immer wieder neu erfinden? Sorry, ich mußte das mal
> sagen.

Ich kann da nur für mich sprechen.
Bevor ich da, bei fremden Code durchsteige, is das schon fertig.
Bei ein paar Tastern, sind das ja nur wenige Zeilen.

Bei mir ist ja auch der Weg das Ziel.... Fremdcode Bääää ;)

von Teo D. (teoderix)


Lesenswert?

Matthias K. schrieb:
> Hä? Das hast du doch geschrieben, ich bin verwirrt. Irgendwie verstehe
> ich deinen Post nicht. :)

Das war eine WILLKÜRLICHE Zahl!
Entscheide selbst wann dir das zu viel wird....

Matthias K. schrieb:
> Ich hatte dich so verstanden,
> dass du die Entprellung per Polling in einer Timer-ISR, also durch einen
> SW-Tiefpass für keine gute Lösung hältst.

Nein, natürlich nicht! DIE 0815 Standardlösung. :)
(PS: denn braucht man doch sowie so o. willst du 'Delays' einsetzen)
A bisher Faul bin ich schließlich auch und meine Prozessoren 
langweilen sich eh die meiste Zeit.

: Bearbeitet durch User
von Matthias K. (mkeller)


Lesenswert?

Na dann kann der 1001te thread zum Thema Tasten Entprellung geschlossen 
werden :-)

Teo D. schrieb:
> Ich kann da nur für mich sprechen.
> Bevor ich da, bei fremden Code durchsteige, is das schon fertig.

Ohja das geht mir auch so, deshalb hab ich lange Peters Code ignoriert 
;) bis ich verstanden habe, dass er das selbe wie meiner tut nur eben 
beträchtlich kompakter ist.

von Teo D. (teoderix)


Lesenswert?

Matthias K. schrieb:
> dass er das selbe wie meiner tut nur eben
> beträchtlich kompakter ist.

Willst du mich zwingen, mir das doch mal genauer anzusehen... .-/

Noch weniger, würde nicht viel optimieren.... da is einfach zu wenig 
Substanz...

von Mike99 (Gast)


Lesenswert?

Georg schrieb:
> Ingo L. schrieb:
>> Ich frage mich immer wieder, warum solche absolut sinnfreien Aufgaben
>> gestellt werden
>
> Was soll denn so ein armer Professor machen, wenn er selbst keine Ahnung
> von Interrupts hat...
>
> Immerhin, es sind weder Röhren noch Relais verlangt.

Das sieht man mal, WER hier keine Ahnung hat.

Was machst du, wenn auf deiner Hardware keine externen Interrupts mehr 
frei sind, die du für den Taster verwenden könntest?

Was machst du, wenn du auf einer Hardware wichtigere Interrupts hast, 
die keinesfalls durch so etwas unwichtiges wie einen IRQ von einem 
Tastendruck verzögert werden dürfen?

Und dass die Aufgabe keinesfalls trivial ist, zeigen ja die Probleme, 
die der Fragesteller damit hat...

von m.n. (Gast)


Lesenswert?

Mike99 schrieb:
> Was machst du,

Mike99 schrieb:
> Was machst du,

Vorher nachdenken, was gebraucht wird!

Mike99 schrieb:
> Und dass die Aufgabe keinesfalls trivial ist, zeigen ja die Probleme,
> die der Fragesteller damit hat...

Die Aufgabe ist absolut trivial. Darum hat sich der TO ja auch nicht 
mehr gemeldet ;-)

von micha54 (Gast)


Lesenswert?

Hallo,

mal zum Aufzugsproblem: ich vermute, ich weiß, welche Knöppe welchen 
Herstellers da unwillig reagieren ;-)

Bei Aufzügen brauch es keine Entprellung, weil die Funktionalität ist: 
Knopf drücken --> Lampe an. Rufspeicher, also ein Latch.

Dummerweise ist der Read-Zyklus 100ms, d.h. ein kurzer Druck < 100ms 
kann ggf. verloren gehen. War ursprünglich im letzten Jahrtausend eine 
Firmenspezifische CMOS-Lösung. Jetzt ist es vermutlich ein PIC, der sich 
langweilt, weil man dem auch kein Latch programmiert hat, so dass die 
Funktionalität nicht besser geworden ist.

Ach ja, ich denke auch es sind manchmal Kleinigkeiten, die dem Kunden 
Freude  machen.

Wichtig aber: Man muss nicht jeden Knopf in jedem Zusammenhang 
entprellen.

Gruß,
Michael

von Mike99 (Gast)


Lesenswert?

m.n. schrieb:
> Mike99 schrieb:
>> Was machst du,
>
> Mike99 schrieb:
>> Was machst du,
>
> Vorher nachdenken, was gebraucht wird!

Ahja...schön, dass du in so einer Traumwelt lebst. In der Realität sieht 
das eher so aus, dass dir Preisvorgaben einen Strich durch deine 
wunderbare Rechnung machen. Oder die Tatsache, dass die Hardware bereits 
vorhanden ist, nicht geändert werden kann und trotzdem erweitert werden 
muss.

So gesehen ist diese Aufgabenstellung schon nah an der Wirklichkeit.

von batman (Gast)


Lesenswert?

Ja, das ist die harte Realität von millionen 
Arduinoversteher(versuchern).

von m.n. (Gast)


Lesenswert?

Mike99 schrieb:
> Ahja...schön, dass du in so einer Traumwelt lebst. In der Realität sieht
> das eher so aus, dass dir Preisvorgaben einen Strich durch deine
> wunderbare Rechnung machen.

Realität ist, daß ich die Preisvorgaben mache. Da kosten ext. Interrupts 
nichts Zusätzliches.

Teo D. schrieb:
> Ich kann da nur für mich sprechen.
> Bevor ich da, bei fremden Code durchsteige, is das schon fertig.
> Bei ein paar Tastern, sind das ja nur wenige Zeilen.

Und was noch hinzu kommt: die Lösung richtet sich nach dem Problem und 
nicht das Problem nach der Lösung.

von Teo D. (teoderix)


Lesenswert?

m.n. schrieb:
> Und was noch hinzu kommt: die Lösung richtet sich nach dem Problem und
> nicht das Problem nach der Lösung.

Auch ja.
Andererseits wurmt es aber schon ein bisschen, nicht die Muse und 
Disziplin wie Peter D. aufgebracht zu haben und sich seine Eigene 
Eierlegendewollmilchsau auf Halde gelegt zu haben.... Das gehört nun 
mal dazu und ist nur mit Faulheit zu erklären. :-}

von batman (Gast)


Lesenswert?

Die Halde hat man doch mit Altprojekten gefüllt, wo man den passenden 
Vierzeiler bei Bedarf rauskopiert.

von Teo D. (teoderix)


Lesenswert?

batman schrieb:
> wo man den passenden
> Vierzeiler bei Bedarf rauskopiert.

Für Bastler empfehlenswert, bzw. nur für kleine Halden.
Faulheit rächt sich da schnell und meist in ungeglaubter Heftigkeit.

: Bearbeitet durch User
von Mike99 (Gast)


Lesenswert?

m.n. schrieb:
>
> Realität ist, daß ich die Preisvorgaben mache. Da kosten ext. Interrupts
> nichts Zusätzliches.
>
> Und was noch hinzu kommt: die Lösung richtet sich nach dem Problem und
> nicht das Problem nach der Lösung.

Naja, wenn du eh' nur an deiner Lampensteuerung für's Aquarium 
rumbastelst, da mag das ja so sein.

Andere müssen mit Ihrer Hardware Geld verdienen und da können ein paar 
Euro Preisunterschied bei einzelnen Komponenten schon mal entscheidend 
sein. Oder den Unterschied ausmachen zwischen "lohnt sich nicht" und 
"wirft vernünftig Gewinn ab".

Aber das brauche ich kaum mit jemandem diskutieren, der täglich nur 
seine 8 Stunden am Schreibtisch absitzt und der Meinung ist, das Geld, 
was er dafür bekommt, kommt von der Bank.

von m.n. (Gast)


Lesenswert?

Alles klar.

von Teo D. (teoderix)


Lesenswert?

m.n. schrieb:
> Alles klar.

Hast wohl in ne eitrige Wunde gebohrt :-|

Mike99 schrieb:
> Aber das brauche ich kaum mit jemandem diskutieren, der täglich nur
> seine 8 Stunden am Schreibtisch absitzt

Lenkt nur ab, mit Sachen wie 'Wie baue ich mir am schnellsten eine 
Armbrust aus meinem Werkzeug....' :)

Aber das nem Hobbyisten auf die Rübe zu hauen.... nenene :-/

von A. S. (Gast)


Lesenswert?

Teo D. schrieb:
> batman schrieb:
>> wo man den passenden
>> Vierzeiler bei Bedarf rauskopiert.
>
> Für Bastler empfehlenswert, bzw. nur für kleine Halden.
> Faulheit rächt sich da schnell und meist in ungeglaubter Heftigkeit.

Ich sehe das wie batman. Der Vierzeiler funktioniert ja und kann 
leichter in die bestehende Architektur eingepasst werden, als jetzt das 
passende Modul von Peter rauszusuchen und anzupassen. Das macht m.E. nur 
Sinn, wenn ich mich mit der Thematik weder jetzt, noch in Zukunft 
beschäftigen will.

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.