Liste der Anhänge anzeigen (Anzahl: 2)
Hallo mare_crisium,
nach dem der gestrige Tag im Zeichen des Gartens stand, melde ich mich erst heute... 8-[
Habe nun den Code wieder so angepasst, dass die gewuenschte Funktion "Ein- und Ausschalten" der LED mittels der jeweiligen Taste geschieht.
so 100%ig gefaellt es mir aber noch nicht...
eventuell liegt es an dem was mir so noch im Hinterkopf spukt:
>>>>
... eine Menueabfrage einfuegen.
Diese soll aufgerufen werden, wenn Tasten0 und Taste7 3 sec lang gedrueckt wurde.
--- denkbar ware hier das reservierte DatenByte (bzw. noch ein Zweites) im RAM zu nutzen - Timer ist bei 0,1 sec -> also 300 mal hoch zaehlen... ---
--- oder kann ich das TIMER1 COMPB eventuell dafuer nutzen? ---
--- sind die Werte beider Tasten > 300 dann Einstieg ins Menue ---
Im Menue stehen dann die einzelnen Tasten mit unterschiedlichen Funktionen zur Verfuegung. Signalisierung fuer Menue koennte ein Blinken der LEDs sein...
Nach Erkennen einer Taste wird das Menue verlassen und das Programm arbeitet mit der ausgewaehlten Funktion,
die hinter der Taste steht.
Wurde 5 sec lang, keine Eingabe gemacht, wird das Menue wieder verlassen.
--- denkbar auch hier ein Datenbyte auf 500 zaehlen ---
Als default soll das Programm mit SWITCH_LED nach dem Starten/Einschalten laufen bzw. zu einem spaeteren Zeitpunkt
soll das Programm nach dem Starten/Einschalten mit der zuletzt ausgewaehlten Funktion arbeiten.
<<<<
Das sind erst einmal nur Ueberlegungen... eventuell loese ich die Aufgabe dann doch etwas anders.
Auf Deine Kommentare und event. Vorschlaege bin ich wieder sehr gespannt.
PS. "Computersteuer" - so etwas Aehnliches hat man doch endlich geschafft :-k - in Form der GEZ-Gebuehren
Liste der Anhänge anzeigen (Anzahl: 3)
robo_wolf,
hier ist noch ein Zwischenschritt auf dem Weg zur Menusteuerung. In der .pdf-Datei habe ich versucht zu erklären, warum ich den für nötig halte. So gut ich's konnte, halt :-).
Morgen kommt der nächste Schritt mit einem Testprogramm für die Komponenten der Menusteuerung.
Ciao,
mare_crisium
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo mare_crisium,
vielen Dank fuer die tolle Ausarbeitung.
Die IDEE eines gekapselten "IO-Treibers" kann man nun sehr schoen erkannen.
Habe mal einen sehr einfach gehaltenen Signalfluss aufgezeichnet.
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo mare_crisium,
habe im Simulator 2 Problemchen bemerkt.
Beim Initialisieren der Ports
LED_PORT habe ich noch ser r16 eingefuegt, da sonst r16 noch den Wert von "ldi r16,(1<<OCIE1A) ; Timer1 Overflow aktivieren" hatte.
Beim TASTCTL_PORT habe ich noch "out TASTCTL_PINS, r16" eingefuegt, da die Tasten gegen GND geschaltet werden.(Besonderheit beim STK500).
-- sehr schoene Loesung --
...wenn ich das mal so sagen darf
Auf Deine Menueloesung bin ich schon sehr gespannt.
Liste der Anhänge anzeigen (Anzahl: 1)
Fuer den weiteren Aufbau des Programm und mit Hinsicht auf Kapselung habe ich nun Nachfolgendes:
Modul Menuesteuerung:
Das Menue wird aufgerufen durch das gleichzeitige Druecken der Tasten T0 und T7 fuer 3sec(Menue-Abfrage).
1 - nach dem Aufruf des "Menue-Auswahl" bleibt dies ohne weiteren Eingriff(Tastendruck)
5sec aktiv und beendet sich nach abgelaufender Zeit mit dem Ruecksprung zu MainSchleife.
2 - wird waehrend des Aufrufs von "Menue-Auswahl"ein Taste gedrueckt,
so schreibt der Inhalt von R18 in R15 geschoben
T0 := Bit0.... T7 :=Bit7 von rTastMenue und bendet "Menue-Steuerung" mit dem Ruecksprung zu Main-Schleife.
3 - Register r18 enthaelt die gedrueckten Tasten(High-Flanken)
-> r18 wird fuer die "Menuesteuerung" eingelesen und verarbeitet.
4 - fuer die Ausarbeitung und Erstellung des Testprogramms wird folgendes festgelegt:
Der Zeitgeber wird durch ein RegisterZaehler simuliert.
Code:
.equ MenueInTime = 3
.equ MenueTimeOut = 5
def r15 = rTastMenue ; wird default mit 0x01 geladen
def r20 = rMenueTC ; (MenueTimer-Counter)
F U N K T I O N:
Menue-Abfrage:
r18 wird in einer Schleife mit 0x81 (0b1000 0001) verglichen.
bei Uebereinstimmung incrementiert rMenueTC.
rMenueTC wird mit MenueInTime verglichen.
bei Uebereinstimmung wird das Untermenue "Menue-Auswahl" aufgerufen
und rMenueTC wird mit MenueTimeOut geladen.
Menue-Auswahl:
Menue-Auswahl durchlaeuft eine Schleife, in der rMenueTC decrementiert.
Bei "tst rMenueTC" wird rTastMenue mit 0x01 geldaen und die Funktion mit dem Ruecksprung in Main beendet.
oder die naechste erkannte Taste in R18 wird in R15 verschoben und das Menue-Auswahl damit beendet.
Innerhalb von Menue-Auswahl sollen die LEDs zur Signalisierung blinken.
Dazu wird rTastMenue geloescht := 0x00.
rTastMenue wird mit der naechsten in der Main-Schleife befindlichen Prozedur "SWITCH_OUT_PORT" bislang "SWITCH_LED" verarbeitet.
rTastMenue := 0x00 liefert das Blinken aller LEDs
Liste der Anhänge anzeigen (Anzahl: 3)
robo_wolf,
Du weisst ja, ich bin momentan zeitlich ziemlich eingeschränkt. Deshalb zeigen die Dateien im Anhang noch einen nicht komplett ausgetesten Zwischenstand. - Interessant, wie sich unsere Ansätze unterscheiden :-) . Das Ausknobeln hat richtig Spass gemacht und war eine gute Ablenkung.
Ciao,
mare_crisium
EDIT_1: Verbesserte Versionen der drei Anhänge hochgeladen
EDIT_2: Fehler (siehe Post von robo_wolf 02.04.2010) in _V03 korrigiert. Neue Version "TestPrgrm_04i_V03.asm"
EDIT_3: Neue Version _V09 mit Korrektur/Ergän
zung des Übergangskriteriums von A.0 nach A.1.
EDIT_4: Fehler (siehe Post von robo_wolf 10.04.2010) in "MENU8STRG_V02.asm" korrigiert, korrigierte Version hochgeladen