www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Eingabe einer Zahl per Taster


Autor: Robert Budde (Gast)
Datum:

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

Autor: edi (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Autsch. Ein einziger Taster? Wer soll dieses Gerät bedienen?

Autor: thkaiser (Gast)
Datum:

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

Autor: Robert Budde (Gast)
Datum:

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

Autor: Carsten Sprung (Gast)
Datum:

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

Autor: Peter Dannegger (peda)
Datum:

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

Autor: Markus Burrer (Gast)
Datum:

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

Autor: Robert Budde (Gast)
Datum:

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

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.