Forum: Mikrocontroller und Digitale Elektronik entprellen professionell?!


von Samy (Gast)


Lesenswert?

Guten Abend

Habe da ein kleines Problem. Und zwar habe ich im Moment ein Programm
was ein LCD ansteuert und auf mehreren Kanälen PWM erzeugt. So für PWM
habe ich T/C0 verwendet.
Jetzt steh ich vor dem Problem das ich mehrere Taster (4-6Stück kommt
noch auf) entprellen möchte und zwar per Software. So habe das Forum
und Internet durchsucht und mehrere Lösungen gefunden. Der Gänsefuss
ist das aber bei so gut wie jeder Lösung ein Timer erforderlich ist.
Habe ja noch T/C1 frei aber den brauch ich später für was anderes.
Welche Möglichkeiten habe ich mehrere Taster zu entprellen ohne einen
Timer/Counter verwenden zu müssen die auch was taugt. Die Lösung nach
dem einlesen der Taster einfach ein paar µS zu warten ist in meinen
Augen nett besonders professionell! Möchte natürlich auch nicht zu viel
Rechenleistung verbraten indem ich 20mal nop programmiere (ist auch
nett professionell).
Habt ihr ein paar Anregungen?

P.S. bin noch nicht all zu lange dabei AVR´s zu traktieren.

Thanks schon mal
!

von Stefan (Gast)


Lesenswert?

Also ohne Timer - ist es etwas schwierig.

Aber bei Deinen PWM-Modulen etc. wird doch irgendwo ein einigermassen
gleichmässiges IR-Signal abfallen. Wenn Du T0 für PWM benutzt, dann
häng doch hinten an den IR noch die Tasten-Auswertung dran. Ein IR muss
ja nicht nur eine einzige Sache machen.

Stefan

von Marc Donner (Gast)


Lesenswert?

Hi

von Maxim gibt es einen stand alone IC der acht eingänge entprellen
kann. Warum so viel stress mit Software ? Hardware ist in diesem Fall
bedeutend einfacher und funktioniert zuverläsig.


Marc

von Vendor2k (Gast)


Lesenswert?

In deinem Fall würde ich auch die Hardware vorschlagen. Das ist nämlich
Professionell!


mfg
Vendor2k

von Stefan (Gast)


Lesenswert?

Professionell bedeutet für mich immer die wirtschaftlichste Lösung. Und
dies ist in vielen Fällen die mit der wenigsten Hardware.

5 Tasten zu entprellen sollte für einen professionellen Programmierer
in 2 Stunden abgehakt sein. In der Zeit hat man bei externer Hardware
gerade mal das Datenblatt gefunden, gelesen und die Muster bestellt.

Spätestens wenn so Sachen wie einstellbares Key-Repeat gefordert
werden, wird man externe (nicht progarmmierbare) Hardware wieder
bereuen.

Sicherlich hat Zusatz-Hardware manchmal seine Berechtigung. Die fängt
bei mi aber nicht bei 4-6 Tastern an.

Stefan

von Peter D. (peda)


Lesenswert?

Das mit dem Timer ist doch kein Problem. Man braucht doch immer einen
Timer, der die verschiedensten Ablaufzeiten generieren muß. Und der
kann doch bequem nebenbei die Tasten entprellen.

Den PWM-Timer kann man in jedem Fall verwenden.

In der Codesammlung findest Du mehrere Beispiele von mir.

Zusätzliche Hardware ist also immer überflüssig.

Ich kenne jedenfalls keinen MC der überhaupt keinen Timer hat.


Peter

von Michael (Gast)


Lesenswert?

Vergiß die ganzen Hardwarelösungen, egal ob von Max oder Moritz. Wenn Du
schon neu mit AVRs anfängst, ist es doch eine besonders nette Übung,
Taster per Software zu entprellen. Solche Programm(teile) braucht man
immer wieder.

Tastaturentprellung per Software braucht einen Timerinterupt im bereich
50µs bis 50ms. Das dürfte doch kein Problem sein. Eine sinnvolle
Entprellzeit liegt bei 50-100ms. Ist das Timerintervall kürzer, wird
mit einem (Software)Zähler vorgeteilt und die Entprellroutine
angesprungen; der gesperrte Interrupt kann/sollte gleich wieder
freigegeben werden, weil der nächste Überlauf der Vorteilers nicht so
schnell stattfinden wird.
Falls Du Bedenken wegen der benötigten Prozessorleistung hast, die wird
unter 1% liegen (100 Aufrufe der Entprellroutine pro Sekunde). Als
Hilfe: www.mino-elektronik.de/tast_dekoder/tastatur_dekoder.htm

von Vendor2k (Gast)


Lesenswert?

Entprellen mit Hardware ist einfacher als mit Software. Und warum willst
du das unbedingt Softwaremässig machen?

von Ichbinsnur (Gast)


Lesenswert?

Dann lass gleich den Controller weg und mach alles mit Logikgattern :D
Naja aber im Ernst.. Wenn ich schon was mit Controller aufbaue dann
fliegt jedes bisschen Hardware das sich durch ein paar Programmzeilen
ersetzen lässt raus, und wenns nur nen Widerstand ist. Das Progamm hast
Du immer mal flott geändert wenn Dir mal was nicht passt. Alles in
Hardware zu machen ist unnötiger Aufwand und verschwendete
Rechenleistung.

von Stefan (Gast)


Lesenswert?

Gegenfrage: warum willst Du das unbedingt hardwaremässig machen?
* Du musst den Chip bestellen + kaufen (Zeit, Geld)
* Du musst ihn in Deine Platine designen (Zeit, Platz = Geld)
* Du musst ihn ansteuern per Software, und das dürfte nicht einfacher

  sein als gleich per SW zu entprellen.

Unterm Strich kommen keine Vorteile raus?!

Und falls das Entprellen per SW zu kompliziert erscheint: es gibt kaum
ein Thema, was hier nicht mehr diskutiert wurde, Infos sind also
reichlich vorhanden.

Stefan

von Marc Donner (Gast)


Lesenswert?

@Stefan

*Du must hardware mäßig gar nichts ansteuern ! Du bekommst saubere
Rechtecksignale !
*und der Chip von MAXIM kostet gerade mal 22Cent
-> nie wieder ärger

Marc

von Vendor2k (Gast)


Lesenswert?

@Ichbinsnur
Und warum sollte ich jemals geprellte eingänge haben wollen?

Für mich wäre die Lösung klar. Wenn ich soviele Ansprüche an eine
Softwarelösung stelle, kann man keine Lösung finden.

@Stefan
Es ist einfacher und schneller als per Software.
Entprellen per SW ist nicht schwierig, aber Zeitaufwändig, da gewartet
wird.

von Samy (Gast)


Lesenswert?

Hallo Leute

Das wird ja hier der volle Streit. Hätte nett gedacht das meine Frage
so viel Staub aufwirbelt.
Warum Software. Ganz einfach --> die Platine ist eh schon voll wie Sau
da bin ich um jeden Chip der sich vermeiden lässt dankbar. Zum zweiten
muss so ein Programm nur einmal erdacht werden (Zeitaufwand) und wenn
es mal steht kann man es immer wieder einbauen.
Zum Thema MAXIM --> jede Software ist hundert mal einfacher und weniger
Zeitintensiv als einen IC von MAXIM zu besorgen! Das ist meine
Erfahrung.

von Ichbinsnur (Gast)


Lesenswert?

Ich würde das Entprellen von ein paar Tastern nicht gerade anspruchsvoll
und zeitaufwändig nennen, aber das hängt wahrscheinlich vom Knowhow des
Programmieres ab. Alle 5ms den Zustand der Taster abzufragen und zu
'verarbeiten' ist für jeden Controller ein Kinderspiel falls man
nicht gerade irgendwelche Warteschleifen oder sonstwas anfängermässiges
benutzt. Wer's nicht per Software hinkriegt und mit dem unnötigen
Mehraufwand an Hardware leben kann solls so machen aber dann bitte
nicht anderen Leuten einreden das es nicht auch einfacher geht.

von Vendor2k (Gast)


Lesenswert?

Dann kommst du um einen Timer und zusätzliche Prozessorzeit nicht rum.

von Ichbinsnur (Gast)


Lesenswert?

Stimmt. Und sowohl Timer als auch Rechenzeit sind, im Gegensatz zu
zusätzlicher Hardware, bereits beide vorhanden und wollen nur richtig
eingesetzt werden.

von Marc Donner (Gast)


Lesenswert?

Wenn dus unbedingt per Software machen willst nimm deinen Timer den du
für die PWM nutzt und frag bei jedem Interrupt den Zustand der Portpins
ab die du Entprellen möchtest. Wenn dein Timer zu schnell ist dann nimm
halt nur jeden 5. oder 10. Interrupt oder so.

Marc

von Peter D. (peda)


Lesenswert?

Ich glaube auch, es macht keinen Sinn, um weniger als 1%
Prozessorauslastung zu feilschen.

Auch hat ja jeder MC mindestens einen Timer, dann braucht man diesen
doch nicht unnütz in der Ecke liegen lassen.

Ein weiterer Vorteil der Softwarelösung ist auch, daß man bei mehreren
benötigten Tasten (>8) diese leicht auf Matrixabfrage anpassen kann.
Bei Hardware braucht man aber immer einen Pin pro Taste.

Auch dürfte die Entwicklungszeit bezogen auf das 1.Projekt unter 1%
liegen.
Und einmal entwickelt, Copy+Paste beim nächsten Projekt kostet nichts
mehr.
Max und Moritz aber kosten wieder und immer wieder, bei jedem Projekt
je Gerät und je Taste.


Für mehr Komfort braucht man ja sowieso eine Softwarelösung, z.B. für
lang/kurz-Erkennung, Shift-Taste, Wiederholfunktion usw. Dann fallen
die paar Zeilen mehr für die Entprellung überhaupt nicht mehr ins
Gewicht.



Peter

von Manfred Glahe (Gast)


Lesenswert?

Hallo,
für eine spezielle Anwendung mit dem HC11 habe ich eine Sofentprellung
aus dem Prog. wieder entfernt um die erforderliche
Schleifengeschwindigkeit am Ausgabeport zu erreichen. Es kommt schon
darauf an WAS man mit dem µP steuern muß und dann ist es gut zu wissen
wie es auch anders (z.B. welche IC's woher usw.) geht. Aber die
Reihenfolge ist bei mir immer erst Soft- und dann Hardware- Lödung.

MfG  Manfred Glahe

von Tobias Vaupel (Gast)


Lesenswert?

Ich habe mal bei einem Projekt die Taster nicht direkt entprellt,
sondern habe auf die Flanken reagiert.

Beispiel:


void main(void){
  unsigned int zaehler=0;
  init(); //Initalisiert
  lcd_init();
  while(1){
    if (P1.0 == 1) { zaehler++; while(P1.0); }
    if (P1.1 ==1) { zaehler--; while(P1.1); }
    printf("%u\n",zaehler);
  }
}


Hat ganz gut geklappt :)

von Michael (Gast)


Lesenswert?

@Tobias
Den Optimissmus bezüglich Deines Programmes kann ich nicht teilen.
Viele Punkte könnte man ironisch kommentieren.
Selbst wenn man prellfreie Sensoren nimmt (Taster prellen immer), sehe
ich mit dem obigen Verfahren das Ausbremsen oder Stoppen eines
Programmes als einzige Anwendung.

Ganz oben wird gefordert 4-6 Taster zu entprellen, wobei ich davon
ausgehe, daß das Drücken der Taster und nicht das Loslassen eine Aktion
auslösen soll.

Versuche doch einmal, nur 4 Taster nach Deinem Verfahren zu entprellen,
wobei ich voraussetze, daß diese auch gleichzeitig gedrückt werden
können. Auch wenn jemand so etwas programmieren kann, das wird ein
riesiger Berg Unkraut, der zu nichts zu gebrauchen ist.

von Dominic Thomé (Gast)


Lesenswert?

Jetzt muß ich meinen Käse aber auch noch ablassen.
Was haltet ihr davon :
    360 char taste(int taste) {
    361    char alterZustand,neuerZustand;
    362    neuerZustand=0; // nicht gedrückt
    363    alterZustand=1; // gedrückt
    364    while (neuerZustand!=alterZustand) { //solange toggle,
abfragen
    365       alterZustand=neuerZustand;
    366       if (bit_is_clear (PIND, taste))
    367          neuerZustand=1;
    368       else
    369          neuerZustand=0;
    370    }
    371    return neuerZustand; // Gedrückt oder nicht gedrückt....
    372
    373
    374 }
Und im Hauptprogramm entweder
    455       if (taste(RECHTS)) {
    456          bild++;
    457          while (taste(RECHTS));
    458       }
    459       if (taste(LINKS)) {
    460          bild--;
    461          while (taste(LINKS));
    462       }
Oder halt wenns durchlaufen soll ohne das zweite while....

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

@Vendor2k:
Ich kann mich Peter und den anderen nur anschließen, es ist sinnlos
etwas in Hardware machen zu wollen was man auch in Software machen
kann. Mach doch mal eine Stereoanlage, Waschmaschine, Digicam, einen
MP3-Player oder sonst irgendwas mit uC auf, und schau rein - ich kann
dir versichern dass du nirgendwo ein Entprell-IC oder etwas ähnliches
finden wirst. Warum? Software kostet (in diesem Fall) nichts, Hardware
schon.

@Dominic, @Tobias:
"Blockierende" Entprellroutinen sind nicht der Weisheit letzter
Schluß, wenn man nicht gerade ein Multitasking-OS verwendet. Wie man es
richtig macht hat Peter ja schon mehrmals in der Codesammlung gezeigt.
Ausnahmen bestätigen natürlich die Regel, falls man also keine Timer
mehr frei hat bleibt einem nichts anderes übrig.

Gruß
Andreas

von Ratber (Gast)


Lesenswert?

Also den Streit um Hardware- oder Softwareentprellung kann ich mit
bestem Willen nicht nachvollziehen.

Es gibt genau diese 2 Lösungen wobei jede ihre Vor und Nachteile hat.

Die Softwarelösung ist die villigste,braucht am wenigsten Hardware
(Nämlich garnix also keine Zusatzkosten.Jedenfalls keine direkten).
Aber sie kostet Rechenleistung und behindert etwas den Programmablauf.


Die Hardswarelösung ist das Gegenteil.
Man muß sich beim PRogrammablauf keine Kopf machen und kann evtl. noch
das eine oder andere Jota an Resourcen rausholen.

Welche lösung man nutzt hängt also davon ab was wichtig ist oder wie
das Projekt gelagert ist.

Für die meisten geschichten reicht ne Softwarelösung voll und ganz
aus.
Wer Probleme mit dem Programmfluss hat der muß eben zur Hardwarelösung
greifen und etwas mehr aufwand bei der Hardware treiben wobei es hier
ein breites Specktrum an möglichkeiten von RC-Kombi über Gatter bis
Spezialchip gibt.

von Dominic Thomé (Gast)


Lesenswert?

@Andreas

in gewisser Weise gebe ich Dir recht, daß ein MT/RT-OS dabei besser
wäre. Ist aber auf so einem kleinen IMHO übertrieben.
Zudem, wenn Du auf Ereignisse in einem Interrupt reagierst, blockiert
auch die while-Schleife nicht.


Gruß
Dominic

von Peter D. (peda)


Lesenswert?

Hier werden doch immer wieder Argumente für die Hardwareentprellung
angegeben, die allesamt haltlos sind:


1. verbraucht weniger CPU-Zeit

Ich möchte nochmal auf eine meiner Routinen verweisen:

http://www.mikrocontroller.net/attachment.php/20554/Get8key4.asm

Diese benötigt zusätzliche 12 Zyklen in irgendeinem Timerinterrupt von
2ms-200ms.
Z.B. bei einem ATTiny26 mit 8Mhz sind 20ms = 160.000Zyklen, d.h. 12
Zyklen sind dann enorme 0,0075% CPU-Zeit !
Und bei nur 0,0075% von enormer Einsparung zu reden ist aber nun
wirklich Krümelkackerei.


2. spart einen Timer ein

Zeig mir mal einer ein Programm, was ganz ohne Timer auskommt.
Und in einen bereits verwendeten Timerinterrupt noch 12 Zeilen
einzufügen kostet ja keinen weiteren Timer sondern nutzt nur den
bereits verwendeten Timer ein bischen mehr aus.
Bzw. dem PWM-Timer noch ganz nebenbei einen Overflowinterrupt zu
spendieren kostet auch keinen extra Timer.


3. ist besser.

Ganz im Gegenteil, die Softwarelösung ist mit Abstand deutlich
leistungsfähiger. Egal ob Matrixabfrage, Doppelbelegung,
Wiederholfunktion, alles easy in Software, aber sehr schwer in
Hardware.


4. behindert Programmfluß

ob ich nun den entprellten Tastendruck aus einem interne Register
auslese oder direkt von einem hardwareentprellten Portpin macht nun
absolut keinen Unterschied.
Höchstens, daß ich auf das Register sogar direkt zugreifen kann und
nicht erst vom Port einlesen muß. Auch kann die Softwareentprellung
gleich die Erkennung des Wechsels von Losgelasssen nach Gedrückt mit
übernehmen.
Der Programmfluß wird also sogar noch einfacher.


5. ist störsicherer

Ganz im Gegenteil, da die Softwareentprellung ja intern erfolgt ist
damit automatisch auch die Leitung vom Taster zum MC gegen Störimpulse
gesichert. Oftmals kann man dadurch sogar auf einen zusätzliche Pull-up
verzichten und den hochohmigen internen nehmen. d.h. Strom sparen.



Übrig bleibt also wirklich nur ein einziges Argument für die
Hardwareentprellung, der (einmalig) eingesparte Programmieraufwand.


Peter

von Manfred Glahe (Gast)


Lesenswert?

Hallo,

"die allesamt haltlos sind:"

Arrogant und dummes Zeug!

MfG  Manfred Glahe

von Ratber (Gast)


Lesenswert?

Kinners ,ihr streitet euch um des Kaisers Bart.

Wie ich schon schrieb: soll jeder machen wie er will.

Ich nutze zu 99% die Softwaremethode und nur wenn es Zeitkritisch wird
(Zyklische Geschichten) entlaste ich den Ablauf soweit es geht mit
Gattern und etwas logik.

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.