Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage Schleifen (Bascom)


von Fabian F. (fabiii9)


Lesenswert?

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

von Georg G. (df2au)


Lesenswert?

Stichwort: Interrupt.

von Rainer V. (rudi994)


Lesenswert?

Georg G. schrieb:
> Stichwort: Interrupt.

Frage: Welcher?

2. Stichwort: Subroutine (Unterprogramm)

von Cyblord -. (cyblord)


Lesenswert?

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

von Paul Baumann (Gast)


Lesenswert?

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

von c-hater (Gast)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@ 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!

von Paul Baumann (Gast)


Lesenswert?

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

von Fabian F. (fabiii9)


Lesenswert?

Hallo,

vielen, vielen Dank für die ganzen Antworten.

Werde einen Taster an Reset-Pin anschließen.
Daran hatte ich nicht gedacht.

Gruß
Fabi

von Schimanski (Gast)


Lesenswert?

:)
Der beste heute, oder?

von Karl H. (kbuchegg)


Lesenswert?

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
von Falk B. (falk)


Lesenswert?

@ 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
Noch kein Account? Hier anmelden.