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 !
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
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
In deinem Fall würde ich auch die Hardware vorschlagen. Das ist nämlich Professionell! mfg Vendor2k
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
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
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
Entprellen mit Hardware ist einfacher als mit Software. Und warum willst du das unbedingt Softwaremässig machen?
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.
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
@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
@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.
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.
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.
Dann kommst du um einen Timer und zusätzliche Prozessorzeit nicht rum.
Stimmt. Und sowohl Timer als auch Rechenzeit sind, im Gegensatz zu zusätzlicher Hardware, bereits beide vorhanden und wollen nur richtig eingesetzt werden.
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
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
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
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 :)
@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.
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....
@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
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.
@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
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
Hallo, "die allesamt haltlos sind:" Arrogant und dummes Zeug! MfG Manfred Glahe
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.