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
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.)
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.