Hallo zusammen, ich habe eine kurze Verständnisfrage. Ich bin gerade daran mein Projekt zu planen und einen PAP zu zeichnen. Jetzt ist die Frage. Der Mikrocontrolelr (Atmega8) soll einmal Befehle ausführen, die in einer eigenen Schleife sind und aber auch einen anderen Taster dauernd überwachen ob er gedrückt wird. Wenn dieser Taster gedrückt wird geht es das Programm wieder von vorne los (Reset). Aber wie mach ich das, dass der Mikrocontroller quasi dauernd einen Taster überwacht und im gleichen Augenblick irgendetwas anderes macht. Ein Mikrocontroller kann doch nur Befehl für Befehl abarbeiten. Oder bin ich da gerade total falsch und habe einen Denkfehler. Vielen Dank Gruß Fabi
Georg G. schrieb:
> Stichwort: Interrupt.
Frage: Welcher?
2. Stichwort: Subroutine (Unterprogramm)
Georg G. schrieb: > Stichwort: Interrupt. Quatsch. Nicht bei Tastern. Da ist das Stichwort eher "polling". Der Controller arbeitet in einer Schleife seine Arbeit ab und prüft bei jedem Durchlauf den Taster. Wenn ein Durchlauf <250ms dauert reicht das locker. gruß cyblord
Fabian frug: >Aber wie mach ich das, dass der Mikrocontroller quasi dauernd einen >Taster überwacht und im gleichen Augenblick irgendetwas anderes macht. "Im gleichen Augenblick" ist gar nicht nötig. Der Kontroller arbeitet (normalerweise) so schnell, daß Du als Mensch so lahm bist und Sachen als "gleichzeitig" erkennst, die für den Kontroller im übertragenen Sinne "Stunden" auseinanderliegen. MfG Paul
cyblord ---- schrieb: > Quatsch. Nicht bei Tastern. Da ist das Stichwort eher "polling". Nicht bei Tastern, die nur einen einmaligen Vorgang auslösen sollen, wie hier den "Reset". Da ist ein Interrupt wirklich die effizienteste Lösung, denn die erspart das sinnlos rechenzeitfressende Polling, wenn das Programm etwas sinnvolles tun soll. Der einzige Nachteil ist, daß der Anlauf des normalen Programms nach einem "Reset" durch das Prellen sozusagen "stotternd" erfolgen kann. Darauf kann man in in den meisten Fällen getrost einen GGB (ganz großen Berg) scheißen. Und wenn im Ausnahmefall doch nicht, dann genügt in erster Näherung auf jeden Fall, zu Beginn des Programms einfach eine hinreichend lange Wartescheife einzufügen. Die Grundidee ist: nur dann Entprellen, wenn es tatsächlich etwas zu entprellen gibt. Alles andere ist naturgemäß nur eins: sinnlos ineffizient.
@ Fabian Müller (fabiii9) >Aber wie mach ich das, dass der Mikrocontroller quasi dauernd einen >Taster überwacht und im gleichen Augenblick irgendetwas anderes macht. Mit Multitasking. Und ja, das geht genau so auch mit BASCOM!
Fabian schrub: >Wenn dieser Taster gedrückt wird geht es >das Programm wieder von vorne los (Reset). Ja, dann mache den Taster doch an den Reset-Anschluß dran. Da braucht man ihn gar nicht im Programm zu berücksichtigen. MfG Paul
Hallo, vielen, vielen Dank für die ganzen Antworten. Werde einen Taster an Reset-Pin anschließen. Daran hatte ich nicht gedacht. Gruß Fabi
Absolut :-) Persönlich denke ich ja nicht, dass ein Reset Taster die saubere Lösung seines Problems ist. Denn in den seltensten Fällen sind 'Programm geht wieder von vorne los' und 'eine Funktionalität wird abgebrochen' tatsächlich identisch. Spätestens wenn es um Benutzereinstellungen geht, die dann wieder auf dem Power-On Default stehen ist dann Schluss mit lustig. Das wird einfach nur nervig, sofern man nicht alles und jedes im EEPROM ablegt. Auf der anderen Seite finde ich, dass jeder mit Tastern in einem Programm umgehen können muss. Von daher wäre eine Umstellung der klassischen 'Wir warten auf Godot' Programmierung auf eventbasiertes Arbeiten bzw. das grundsätzliche Verstehen des Unterschieds eine Basistechnik, die er so und so irgendwann mal lernen muss. Also warum nicht jetzt? Da gehts um grundlegende Programmiertechniken, die eben völlig anders als
1 | Do |
2 | LED ein |
3 | wait 2 |
4 | LED aus |
5 | wait 2 |
6 | Loop |
funktionieren und der Schlüssel zu einem Programm sind, das scheinbar mehrere Dinge gleichzeitig erledigen kann.
:
Bearbeitet durch User
@ Karl Heinz (kbuchegg) (Moderator) >Persönlich denke ich ja nicht, dass ein Reset Taster die saubere Lösung >seines Problems ist. Ich auch nicht. >Auf der anderen Seite finde ich, dass jeder mit Tastern in einem >Programm umgehen können muss. Nicht nur das. Aber es ist ein nahezu IDEALER Anstieg in das Thema! Siehe Multitasking (Notiz: Werde wohl mal ein BASCOM-Beispiel einfügen).
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.