Forum: Mikrocontroller und Digitale Elektronik Eingabe einer Zahl per Taster


von Robert Budde (Gast)


Lesenswert?

Hallo!
Ich bitte Euch um Hilfe bei einem kniffligen Problem für das mir keine 
Lösung mehr einfällt:

Ich habe an einem 2313 einen Taster und ein LCD. Ich brauche nun eine 
Routine (Assembler) um nun eine 5-stellige Dezimalzahl einzugeben. 
Wichtig ist dabei das die Routine so klein wie möglich ist.
Hab es bisher so, das die 2-byte lange Zahl aus dem EEProm gelesen wird 
und per relativ raffinierter Division in 5 Dezimalzahlen umgewandelt 
wird. Jeweils wird eine Variable bis zum Überlauf des Dividenden hoch- 
oder runtergezählt. Vorher wurde sie noch mit einem Wert initialisiert, 
so dass am Ende sofort 48 für "0" in der Variablen steht. Das Zeichen 
wird dann im SRAM gespeichert usw. Eine 1-stellige Zahl lese ich ein, 
indem ich den Taster gedrückt halte bis die Zahl eingestellt ist. Wenn 
ich loslasse geht's weiter. So könnte ich auch zur nächsten Stelle 
springen. Problematisch ist jedoch bei dieser Lösung das zusammensetzen 
der 5 jeweils bytegroßen Speicherzellen zu einer 2-byte-Variablen. Auch 
andere Vorschläge sind herzlich willkommen! Danke!

Robert

von edi (Gast)


Lesenswert?

hi,

knifflige probleme loest man mit einem flussdiagram.
zeichne also deine flowchart auf papier...und wenn die logik stimmt , 
dann sollte der erfolgreichen programmierung nichts im weg liegen.
man kann auch noch eine nacht darueber schlafen ...danach
kommt dann 'die' loesung.

eine taste...ein glueckspiel?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Autsch. Ein einziger Taster? Wer soll dieses Gerät bedienen?

von thkaiser (Gast)


Lesenswert?

Das ist ein neuer Auswuchs, den ich auch schon bei Handys gesehen habe. 
"One-Touch" oder so nennt sich das...
Du brauchst eigentlich nur eine Routine, die eine 16-Bit-Zahl mit 10 
multiplizieren kann.
Die 5 Bytes zunächst des Ascii-Offsets entledigen, dann nimmst Du die 
höchstwertige Stelle und schreibst sie in die 16-Bit-Zahl hinein. Nun 
mit 10 multiplizieren. Die nächste Stelle hinzuaddieren - mit 10 
multiplizieren, nächste hinzuaddieren....etc.
Eine "16-Bit-Zahl *10" Routine könnte optimiert werden, da die "10" nur 
eine 4-Bit Zahl darstellt.

von Robert Budde (Gast)


Lesenswert?

Hallo!
Danke erstmal für die Antworten! Das Gerät sollen Autofahrer bedienen. 
Es ist die Eingabe für eine Art Bordcomputer. Da im Auto nicht immer wer 
weiß wie viele Taster so rumliegen wollte ich nur einen einzigen nehmen. 
Und da man im normalen Betrieb nur die Funktionen durchschaltet reicht 
ein Taster völlig aus.
Die Idee von thkaiser ist auf den ersten Blick sehr gut, vielen Dank! 
Das war der Denkanstoß auf den ich gehofft habe. Danke!

Robert

von Carsten Sprung (Gast)


Lesenswert?

Wäre in dem Fall ein Dreh-Encoder nicht besser geeignet? Ich stell mir 
grad vor wie das ding bei 120km/h bedient wird.

Gruss Carsten

von Peter D. (peda)


Lesenswert?

Voll meine Meinung.

Bevor Du die 5. Ziffer eingegeben hast, beendet der Straßengraben, 
Gegenverkehr oder Baum die Eingabe für immer.

Du brauchst mindestens 2 Tasten, eine zum Weiterschalten der Stelle und 
eine zum Hochzählen der Ziffer. Mit Piep bei Tastendruck ist dann eine 
Bedienung während der Fahrt möglich.


Peter

von Markus Burrer (Gast)


Lesenswert?

Jo, mit der einen Taste wird zuerst die 1000er (oder was die höchste 
stelle sein soll) hochgezählt, dann die 100er, 10er und 1er Stelle. Mit 
der zweiten Taste wird immer von einer Stelle zur nächsten geschaltet, 
und bei der letzten wird die zahl übernommen.

Gruß
Markus

von Robert Budde (Gast)


Lesenswert?

Hallo!
Eure Sorge ehrt Euch! Aber ich hatte jetzt in der Kürze nicht die ganze 
Wahrheit erzählt. Die Eingabe der 5-stelligen Zahl ist eine Art 
Grundkonfiguration um die Wegstrecke abzugleichen. Dieses 
Grundeinstellungsmenü ist nur zugänglich wenn man beim Einschalten der 
Zündung (Schalterstufe 1!!, nicht Motor anlassen!) den Taster gedrückt 
hält. Im normalen Betrieb werden nur die Anzeigen per Taster 
durchgeschaltet. Allerdings werde ich sofern ich noch Platz habe (2313: 
2kb, ich hab 813 words code) werde ich ne Abfrage machen ob der Motor 
läuft und sonst die Konfiguration abbrechen! Denn Ihr habt recht, 
Sicherheit geht vor!

Viele Grüße
Robert Budde

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.