Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage zu µC und BASCOM


von Daniel (Gast)


Lesenswert?

Hallo,

bin absoluter µC-Anfänger und steh jetzt vor meinem "Start"... Teile 
sind bestellt, ich will dann natürlich mgl. schnell loslegen. Elektronik 
mache ich schon ein paar Jahre, nicht jedoch "selbst denkende"!

Ich will in BASCOM programmieren. Die meisten "Anfänger-Tuts" lauten 
"mach das und das und dann blinkt die LED". So weit so gut. Das dürfte 
ich mit meinen alten BASIC-Kenntnissen hinbekommen, den Code habe ich 
immer sofort verstanden.

Wie läuft das jetzt jedoch, wenn ich haben will, dass beim Reset (also 
Programmstart) LED1 blinkt und wenn ich dann Taster1 drücke, die LED1 
aus geht und LED2 beginnt zu blinken?

Ist ein sehr einfaches beispielhaftes Muster. Mir geht es jetzt jedoch 
darum:

Ich habe eine Schleife, die immer wieder LED1 aus- und einschaltet. Wenn 
jetzt Taster1 gedrückt wird, wird das ja nicht ausgewertet. Sondern 
immer nur dann, wenn ich innerhalb der Schleife sage "schau mal was 
Tastet1 tut". Oder? Weil dann müsste ich ja mit einem kurzen Tasterdruck 
genau den Zeitpunkt treffen, in dem der Taster gerade gedrückt ist...

Ist sicher nur ein einfaches Beispiel, aber das kann man natürlich auch 
auf die komplexesten Dinge anwenden... Wie werte ich also nun aus "mach 
dies und das", wenn der Prozessor, gerade mit anderen Dingen 
"beschäftigt" ist?

Wäre super, wenn mir das mal jemand erklären könnte. Am besten mit 
erklärtem Beispielcode!

Ich danke Euch! Super Forum!

Gruss Daniel

von Karl B. (gustav)


Lesenswert?

Hallo,
also da gibt es schon Befehle für. (Ja, ja, mehr als sich der alte 8051 
zu erträumen wagte...)
Zum Beispiel

"überspringe nächsten Befehl, wenn Bedingung erfüllt (nicht ) erfüllt 
ist."

SBIS PINA, 0x00  also Taste 1 an Port a (Eingang) gedrückt,
Pegel low, dann überspringe den nächsten Befehl nicht.
Da steht dann sinnigerweise ein
rcall Unterprogramm Lampe
oder rjmp Direktsprung zum Unterprogrammm.

Und so weiter..

Ansonsten Zauberwort:

Interrupt-Routinen


Die lösen die Probleme (oder schaffen erst welche) mit den 
Programmaufrufen, (immer wenn sich was irgendwo ändert, gehe in Routine 
zum Beispiel.)

von Michael U. (amiga)


Lesenswert?

Hallo,

da es immer wieder zu bemerken ist, daß die Vorstellung des Ablaufs in 
einem µC Probleme bereitet, mal kein Code (mach sowieso kein Bascom) 
sondern eine Überlegung.
Du schreibst "alte Basickenntnisse...

Beispiel:

Loop:

LED einschalten - Portbefehl -> 2 Takte

Warteschleife mit Zähler

FOR i = 0 TO 10000 (als Beispiel) ca. 8 Takte

IF Taste THEN...  ca 4 Takte

ENDIF

ENDFOR

LED ausschalten

GOTO Loop

Bei 1MHz Taktfrequenz des AVR braucht ein Schleifendurchlauf also 
minimal ca. 12 µs.

Was schätzt Du, wie lang ein kurzer Tastendruck ist?
Was schätzt Du, wie oft die FOR-Schleife für z.B. 0,5s durchlaufen 
werden muß?
Was schätzt Du, wie hoch die Chance ist, den Tastendruck NICHT zu 
erkennen?

Das einfach zur Abschätzung der zeitlichen Abläufe.

Ansonsten bietet Bascom da etliche eingebaute Funktionen zum Thema 
Tasten.

Stichworte
 Entprellen von Tasten
 Interrupt

Gruß aus Berlin
Michael

von Karl B. (gustav)


Lesenswert?

Interessanterweise sind die Tasteneingänge vom ATMega8515 IMHO bereits 
entprellt. Zumindest hatte ich mit dem STK500-Board und den darauf 
befindlichen Tasten bislang keinerlei Probleme damit.

Ich lasse die Tastenabfragen ja auch meistens in Schleifen laufen, wie 
ein nachtriggerbares "Monoflop", erst beim Loslassen der Taste wird's 
interessant. Dann läuft das Programm einmal noch durch und endet wieder 
in einer Schleife oder eben bei "End".

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.