VT100 ESC Sequenzen + LCD

Gast #918619
Lesenswert?

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
Gast #918649
Lesenswert?

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
Gast #918732
Lesenswert?

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
Gast #918767
Lesenswert?

>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
Persönliche Seite #918954
Lesenswert?

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.
Gast #921071
Lesenswert?

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
Gast #921102
Lesenswert?

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
Gast #921128
Lesenswert?

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.
Gast #921136
Lesenswert?

@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
Gast #921145
Lesenswert?

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 ???
Moderator Persönliche Seite #921521
Lesenswert?

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.]
Gast #921608
Lesenswert?

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
Gast #921656
Lesenswert?

>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
Gast #921699
Lesenswert?

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
Moderator Persönliche Seite #921704
Lesenswert?

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.
Moderator Persönliche Seite #921856
Lesenswert?

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.
Gast #922586
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren