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
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?
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.
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
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 ???
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.