www.mikrocontroller.net

Forum: Compiler & IDEs VT100 ESC Sequenzen + LCD


Autor: Reda (Gast)
Datum:

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

Autor: Andreas K. (a-k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woher kommt die Vorstellung, dass der KS0070 VT100-Sequenzen verstehen 
würde?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Reda (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Reda (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Rufus t. Firefly,
anbei ist das Datenblatt was ich habe :
ich denke das hilft nicht viel oder ?
Gruss

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Reda (Gast)
Datum:

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

Autor: lkmiller (Gast)
Datum:

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

Autor: Simon K. (simon) Benutzerseite
Datum:

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

Autor: Oliver (Gast)
Datum:

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

Autor: lkmiller (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Oder du parst die ESC-Sequenzen in deiner LCD-Schreibfunktion.
Schenkelklopf: ich hatte paarst gelesen ;-)

Autor: Reda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Oliver für die interessante Seite.

Ich bin einfach zu faul für Programmierung :)

Gruss

Autor: Reda (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A propos LCD-Ansteuerung, das LCD funktonniert sehr gut, ich möchte 
jetzt einfach die Cursor Positionierung ansteuern, und andere 
Kleinigkeiten.

Autor: Raphael (Gast)
Datum:

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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: Raphael (Gast)
Datum:

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

Autor: swedisch (Gast)
Datum:

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

Autor: Oliver (Gast)
Datum:

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

Autor: Reda (Gast)
Datum:

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

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wie wäre es mit einem kleinen code.

Nö.

>Ich bin einfach zu faul für Programmierung :)

Ich auch.

Oliver

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Reda (Gast)
Datum:

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

Autor: Oliver (Gast)
Datum:

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

Autor: Reda (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Reda (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

Autor: Reda (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

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

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.