www.mikrocontroller.net

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


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl B. (gustav)
Datum:

Bewertung
0 lesenswert
nicht 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.)

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl B. (gustav)
Datum:

Bewertung
0 lesenswert
nicht 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".

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.