Hallo, beschäftige mich erst seit kurzem mit uControllern und habe die ersten LED/Taster Übungen hinter mir und habe jetzt ein 2*16 LCD an einem ATMega88 Controller. Das ganze betreibe ich mit der Library von Peter Fleury, funktioniert prima. Würde nun gerne Zahlen per RS232 an den PC senden, klappt mit statischen auch super (wobei ich noch nie über 5 Stellige Zahlen (mit atoi) gekommen bin). Mein Wunsch ist nun, über das LCD und ein paar Taster (z.B. rechts/links für Stellenauswahl und hoch/runter zum ändern der Ziffer an der Stelle) eine Zahl über das LCD einzugeben und diese zu versenden. Wie macht man das am Besten? Man kann das LCD ja auch wieder auslesen, sprich ich zeige eine Zahl auf dem LCD an, mache was mit den Tasten und lese die Zahl wieder aus. Oder eher Zahl anzeigen, nur Tastendrücke auswerten und im uC verarbeiten und nach Druck auf eine Enter/OK-Taste das LCd aktualisieren? 1) Wie geht man da prinzipiell vor? 2) Hat das evtl. schon mal jemand gemacht und hätte einen Codeschnipsel? 3) Wie kann ich "beliebig" große Zahlen in einzelne Chars, bzw. einen String wandeln? Gruß, Jan
mit itoa und utoa kannst Du nach char wandeln. Ich würde mir von hand ein char mit beliebiger Länge machen char zahl[i]. Bei Druck auf die Enter-Taste wird i incrementiert. Dann die Ziffer aus dem Array mit +/- incrementieren bzw decrementieren. Den Cursor würde ich mit lcd_gotoxy(i, y) an die entsprechende Ziffer stellen und blinken lassen (lcd_command(LCD_DISP_ON_BLINK)). Und dann halt nur an dieser Stelle nach Auswertung der Taste die Ziffer updaten (lcd_putc (zahl[i])). Zumindest so in groben Zügen. Gruss Ralf
Hallo, Ralf: danke für die Tipps, werde es wohl so machen Falk: das wäre der "umgekehrte Weg", möchte ja ncihts ausgeben, sondern vom LCD einlesen. Hat mich aber auch nicht dümmer gemacht ;=) Gruß, Jans
Wieso willst Du vom LCD etwas einlesen, was Du eh vorher da reingeschrieben hast? Hast Du Angst, das LCD könnte eigenmächtig etwas an dem Text verändern?
@Jan, normalerweise geht das so: - im uC wird der anzuzeigende Wert im Programm in einer Variable gespeichert und auf dem Display angezeigt - beim Drücken der [+] bzw. [-] Taste erhöht bzw. erniedrigt der uC den Wert der Variablen und aktualisiert die Anzeige auf dem Display Für Fließkommazahlen und die Änderung einzelner Stellen mußt Du dir im uC die Stelle merken, die Du ändern möchtest (auch in einer Variablen). Bei [+]/[-] ist dann etwas an Berechnung notwendig, damit sich nur die eine Stelle ändert bzw. bei einem Überlauf/Unterlauf die vorherigen Stellen auch angepaßt werden (4,594 -> 2'te Nachkommastelle [+] -> 4,604). Nach jedem Tastendruck auf [+] bzw. [-] wird die Änderung duchgeführt und anschließend das Display aktualisiert. Zur Information, welche Stelle geändert wird, kannst Du nach jeder Display-Aktualisierung den aktivierten Cursor auf die jeweilige Stelle setzen. Gruss Christoph
@ Christoph (Gast) >Für Fließkommazahlen und die Änderung einzelner Stellen mußt Du dir im >uC die Stelle merken, die Du ändern möchtest (auch in einer Variablen). Fliesskommazahlen braucht man nur sehr selten. Besser sind meist Festkommazahlen. Festkommaartihmetik MFg Falk
Hallo, noch mal zum Verständnis: mein LCD ist ein 2*16, also 2 Zeilen a 16 Stellen. Was ich bis jetzt schaffe, sind Zahlen die in 2^16 (also atoi) passen einfach in der letzten Stelle zu erhöhen/erniedrigen. Hätte aber gerne so etwas wie: 123456789012345 im uController. aber selbst mit einem long bin ich da aufgeschmissen. Und das auch nur mit Hilfe einer +/- Taste immer um 1 zu erhöhen ist wohl auch nicht so toll. Also suchte ich nach etwas was ich Stellenweise erhöhen kann. Hätte dann auf dem Display halt die Zahlenkolonne zu Anfang ausgegeben und würde die an den einzelnen Stellen verändern (Ziffer an Cursorposition auslesen, je nach Tastendruck um eins erhöhen oder erniedrigen) und zum Schluss die Zeile ganz einlesen und irgendwie in eine Zahl umwandeln. Werde da mal eine Nacht drüber schlafen und mir Gedanken machen. Grüße, Jan
So viel ich weiss haben die meisten uC einen eigenen Speicher, du musst nicht auslesen, was im LCD steht, denn das hast du bereits im Speicher deines uC. Wenn du nun mit dem Cursor auf dem Display auf der Hunderterstelle bist und die Taste + gedrückt wird, dann addierst du im uC 100 zu deiner Variable und lässt die Zahl wieder auf dem uC anzeigen.
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.