Hallo zusammen, ich habe eine konkrete Frage: wie kann ich den Befehl z.B ESC [ D (d.h. setze Cursor 1 left) in C Code einsetzen ??? wenn ich die befehele in mein programm eingebe: lcd_data(0x1B); // ESC lcd_data(0x5B); // [ lcd_data(0x44); // D wird der kursor nicht nach links verschoben, ich bekomme einfach [D. Es geht um ein KS0070B kompatibles LCD mit Atmega32 angesteurt. Danke im vorraus
Woher kommt die Vorstellung, dass der KS0070 VT100-Sequenzen verstehen würde?
Das von Dir verwendete LC-Display versteht keine VT100-Escape-Sequenzen. Das tut übrigens auch kein anderes Display. Stattdessen wirst Du im Datenblatt/Programmierhandbuch des LC-Controllers (KS0070B resp. HD44780) nachsehen müssen, wie dort die Cursorsteuerung funktioniert. Kleiner Hinweis: Du wirst die DDRAM-Adresse verändern müssen.
Danke für die schnelle Antwort. ich habe auch vermutet, dass dies Display keine VT100-Befehle ünterstützt. an >> Rufus t. Firefly: ich habe einfach die Routinen von der Seite hier übernommen, ich denke da steht keine Spure von DDRAM-Adresse oder ? Wie wäre es mit ein anderem Tipp bitte :) Danke schön nochmal
> ich habe einfach die Routinen von der Seite hier übernommen, > ich denke da steht keine Spure von DDRAM-Adresse oder ? Das Wort Datenblatt hast Du in meinem Beitrag geflissentlich überlesen, wie?
Hallo Rufus t. Firefly, anbei ist das Datenblatt was ich habe : ich denke das hilft nicht viel oder ? Gruss
Es geht nicht um das Datenblatt des Displays, sondern um das des darauf verbauten Controllers, in Deinem Falle also des KS0070B. Schrieb ich ja auch schon. Wobei auch im von Dir geposteten Datenblatt auf Seite 4 der Befehl "Set DD RAM Address" auftaucht.
Ok! danke ! Ich habe jetzt das Datenblatt von KS0070B. Ich möchte jetzt einfach wissen ob diese Aufgabe "DDRAM ändern" kompliziert ist ? Soll ich viel in meinen programm ändern ? Ich muss nämlich andere ESC-Sequenzen umsetzen. Danke für deine Hilfe
>Soll ich viel in meinen programm ändern ? Nicht mehr als nötig. >Ich muss nämlich andere ESC-Sequenzen umsetzen. Am einfachsten: Du machst dir eine Nachbildung des Displays im uC-Speicher und bildest darauf die ESC-Sequenzen ab. Anschliessend schreibst du die Nachbildung auf das Display raus. Und: Datenblatt lesen. DDRAM enthält das, was das Display anzeigt. Zum Trost: es gibt noch wesentlich längere und unverständlichere Datenblätter
lkmiller wrote: >>Soll ich viel in meinen programm ändern ? > Nicht mehr als nötig. > >>Ich muss nämlich andere ESC-Sequenzen umsetzen. > Am einfachsten: > Du machst dir eine Nachbildung des Displays im uC-Speicher und bildest > darauf die ESC-Sequenzen ab. Anschliessend schreibst du die Nachbildung > auf das Display raus. Oder du parst die ESC-Sequenzen in deiner LCD-Schreibfunktion.
Für jemanden, der so etwas noch nie gemacht hat, ist das schon schwierig. Hier gibt es die Procyon AVRlib http://hubbard.engr.scu.edu/avr/avrlib/docs/html/index.html darin findest du auch Sourcen zur Ansteuerung deines LCDs. Oliver
>Oder du parst die ESC-Sequenzen in deiner LCD-Schreibfunktion.
Schenkelklopf: ich hatte paarst gelesen ;-)
Danke Oliver für die interessante Seite. Ich bin einfach zu faul für Programmierung :) Gruss
A propos LCD-Ansteuerung, das LCD funktonniert sehr gut, ich möchte jetzt einfach die Cursor Positionierung ansteuern, und andere Kleinigkeiten.
Hallo zusammen, ich finde immer noch keine Lösung um die ESC Sequenzen für mein LCD einzusetzen. Wenn keiner das weisst, er kann das ruhig sagen, aber bitte keine banale Antworten. Danke trotzdem
Du könntest Dir ja mal eines der --geschätzt-- 43 Milliarden Tutorials ansehen, die sich mit dem HD44780 beschäftigen. Hier mal eines aus diesem Forum http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD#Welche_Befehle_versteht_das_LCD.3F
ich weiss wie das Display funktionniert, und habe das display angesteurt. Ich kümmere mich jetzt um die Cursor Positionnierung durch ESC Sequenzen einzusetzen. ich kann z.b die 2. zeile des LCD löschen und den Cursor auf die 1.Stelle platzieren, etc Mit dem Cursor geht nicht. Die Frage jetzt wie kann ich z.B den Befehl "ESC [ D" (d.h Cursor nach links) in mein C- programm umsetzten. Danke
irgendwie blickt hier langsam glaub ich keiner mehr durch. was willst du denn genau?wenn du den cursor auf die zweite zeile, erstes zeichen setzen kannst, dann kannste doch auch nach links gehen, oder? musste doch nur von der aktuellen position eins abziehen. Ich seh dein Problem einfach nicht.
@Raphael Kannst du eigentlich auch lesen, oder nur schreiben? Rufus t. Firefly schrieb: >Du könntest Dir ja mal eines der --geschätzt-- 43 Milliarden Tutorials >ansehen, die sich mit dem HD44780 beschäftigen. >Hier mal eines aus diesem Forum >http://www.mikrocontroller.net/articles/AVR-Tutori... In diesem Tutorial steht der folgende Absatz: >[bearbeiten] Cursor/Scrollen: 0b0001srxx >Bewegt den Cursor oder scrollt das Display um eine Position entweder >nach rechts oder nach links. >s = 1, Display scrollen >s = 0, Cursor bewegen >r = 1, nach rechts >r = 0, nach links Fällt dir daran irgend eine Ähnlichkeit zu deiner Aufgabenstellung auf? Oliver
das habe ich auch gemacht, indem ich ein zähler jedes mal inkremntire, wenn ein zeichen an das lcd gesendet ist. Das pasiert aber nur einmal in main funktion, wie wäre es mit einem kleinen code. Aber mit ESC sequenzen kann man mehrere sachen auf dem lcd umsetzen, aber WIE ???
>wie wäre es mit einem kleinen code. Nö. >Ich bin einfach zu faul für Programmierung :) Ich auch. Oliver
Reda wrote: > Aber mit ESC sequenzen kann man mehrere sachen auf dem lcd umsetzen, > aber WIE ??? Indem du dir einen VT100-kompatiblen Terminalemulator schreibst. Das ist keine Aufwärmübung für einen Mittwochabend. Folglich liegen die Dinger auch nicht gerade auf der Straße rum, zumindest nicht in Implementierungsformen, die man auf einem Microcontroller einsetzen könnte. Für Unix-Maschinen gibt es deren mehrere im Quellcode, beispielsweise im bekannten Paket "screen". Diese setzen als Backend dann typischerweise auf curses auf, einer Bibliothek, die ungefähr das macht, was die direkte Ansteuerung deines LCDs auch macht (Positionieren des Cursors, Löschen einer Zeile oder des ganzen Bildschirms, etc.). [Der Unterschied ist dabei, dass curses eine Abstraktion bietet, die zur Laufzeit frei konfigurierbar für das jeweils tatsächlich vorhandene Terminal ist.]
Hallo Jörg Wunsch, danke erstmal für deine wichtige Antwort. Viele schreiben mir hier nur quatsch und bla bla und denken das ist so einfach, die ESC Sequenzen bei der LCD-Ansteuerung einzusetzen. Endlich hat jemand die Aufgabe richtig verstanden.-----> Respekt Ich bräuchte vielleicht einen keinen C-code, damit ich weiter arbeiten kann. Danke
>Endlich hat jemand die Aufgabe richtig verstanden. Klar. Du suchst immer noch einen Blödmann, der dir deine Hausaufgaben macht. >Ich bräuchte vielleicht einen keinen C-code, damit ich weiter arbeiten >kann. Wie ich schon mal schrieb - wenn du auch mal lesen, und nicht immer nur schreiben würdest, wärst du jetzt schon fertig. In der avrlib, die ich oben verlinkt hatte, ist sowohl ein VT100-Emulator mit ESC-Sequenzen, als auch ein LCD-Treiber für dein LCD drin, alles im Sourcecode. Faul sein ist ja ok, aber zu faul nervt. Oliver
Hallo Oliver, ich meinte dich nicht, deine antwort war ganz ok ! diese seite finde ich interessant : http://hubbard.engr.scu.edu/avr/avrlib/docs/html/index.html, ich habe die Datei für Pinkonfigration 'lcdconf.h' nicht gesehen :) Aber es bleibt trotzdem ein Problem, nämlich Bei mir ist die Pinbelgug so : Pin LCD Pin-µC 1 Vss GND 2 Vcc 5V 3 Vee GND 4 RS PD4 am AVR 5 RW GND 6 E PD5 am AVR 7 DB0 offen 8 DB1 offen 9 DB2 offen 10 DB3 offen 11 DB4 PD6 am AVR 12 DB5 PD7 am AVR 13 DB6 PD2 am AVR 14 DB7 PD3 am AVR Bei der 'lcdconf.h' steht nicht jeder Pin einzel definiert, damit ich die eigene Pinbelegung anpassen kann. Danke wirklcih für deine Antwort
Mit der Pinbelegung wirst du es schwer haben. Warum zum Geier[tm] hast du nicht auch die vier Datenpins hintereinander angeordnet? Es ist ja nicht, dass man nicht auch völlig zusammenhanglose Bits miteinander verknüpfen könnte, aber es ist halt dramatisch einfacher, wenn man vier hinteinanderliegende Bits hat, dann muss man nur noch maskieren und schieben.
Ich hatte am anfang die 4 Datenbits DB4 bis DB7 hintereinander mit der PD0 bis PD3 des AVR verbunden, nur ich musste nachher die beide Pins PD0 und PD1 extra frei für die UART Schnittstelle. deswegen. Gruss
Reda wrote: > Ich hatte am anfang die 4 Datenbits DB4 bis DB7 hintereinander mit der > PD0 bis > PD3 des AVR verbunden, nur ich musste nachher die beide Pins PD0 und PD1 > extra frei für die UART Schnittstelle. deswegen. Dann hättest du doch lieber alle nach oben schieben können. Ich habe selbst auch mal 'ne HD44780-Implementierung geschrieben, nein, freiwillig will man die Datenbits nicht noch zusätzlich alle einzeln behandeln. Ganz davon abgesehen, wird der Code dadurch uneffektiver.
Hallo Jörg, ich hatte nur 2 Pins frei am Port D deswegen ! Wenn ich die 4 Datenbits DB4 ... DB7 vom LCD NACHEINANDER an die Pins PC4... PC7 am PORTC verbinde, wird das funktionnieren oder ? Ich habe am Port C noch 6 Pins frei (PC2 ...PC7) Danke nochmal
Reda wrote: > Wenn ich die 4 Datenbits DB4 ... DB7 vom LCD NACHEINANDER an die Pins > PC4... > PC7 am PORTC verbinde, wird das funktionnieren oder ? Ich kenne die avrlib-Implementierung nicht, würde aber erwarten, dass das dann geht.
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.