Forum: Mikrocontroller und Digitale Elektronik Hab eine Frage zum Ansteuern einer LCD-Anzeige


von Sepp -. (sepp_o)


Lesenswert?

Salve

Da ich auf die Liieferung meiner ATtiny15 warte habe ich mir gedacht
dass es entlich mal Zeit wird die LCD-Displays anzusteuern.

Jetzt habe ich ein kleines Problem mit meinem 4 X 27 LCD
(WD-C2704M-1HNN).

Ich schaffe es nur die 1. Zeile anzusteuern.
Ich arbeite im 4-Bitmodus.
Alle nicht verwendeten Daten-Pins habe ich auf Masse gehängt.

Wenn ich den Kontrast ganz rauf drehe, werden nur die Kästchen der 1.
und 3. Zeile sichtbar.
(1. Zeile LCD= 1. Zeile 1. Steuer-Mikrocontroller, 3. Zeile LCD=
1.Zeile 2. Steuer-Mikrocontroller.)

Den 2. Steuer-Mikrocontroller habe ich aktuell deaktiviert indem ich
den Enable des 2. Steuer-Mikrocontroller auf Gnd gehängt habe.

Zum Ansprechen verwende ich die LCD-Bibleothek des Programms Codevision
AVR C.

Habe ich beim Anschließen einen Fehler gemacht, oder ist einfach die
Bibleothek nicht geeignet?

mfg Sepp.

von Hannes L. (hannes)


Lesenswert?


von Sepp -. (sepp_o)


Lesenswert?

Salve

Also heißt das dass die Timeing's in der Bibleothek die ich verwende
nicht ganz stimmen?

Ich werd mich also mal reinkniehen müssen und mir die Funktionsweise
der LCD-Ansteuerung mal ganz genau ansehen müssen.

Und ich hab mir schon gedacht dass ich so faul sein kann und  schon was
fertiges verwenden kann.

Mir ist übrigens aufgefallen dass wenn ich rein in die 2. Zeile
schreiben will, die letzten Buchstaben auf einmal am Anfang der 1.
Zeile auftauchen.

Kann es eventuell daran liegen dass ich 220Ohm Widerstände zum Schutz
seriell in die Daten-/Steuerleitungen gehängt habe?

Pegelmäßig dürften sich die Widerstände doch überhaupt nicht auswirken,
oder sehe ich dass falsch?

mfg Sepp

von Hannes L. (hannes)


Lesenswert?

Widerstände in Reihe bilden zusammen mit (den überall vorhandenen
parasitären) Kondensatoren einen Tiefpass, also eine Zeitverzögerung.
Dies hat Vorteile (Unterdrücken des Überschwingens) und Nachteile
(Signal kommt später an, wenn auch nur geringfügig). Wenn dein Timimg
an der Grenze ist, könnte das eine Rolle spielen.

...

von Sepp -. (sepp_o)


Lesenswert?

Danke für deine Information.

Da frag ich mich nur wieso ich dann die 1. Zeile ohne Probleme
ansteuern kann.

Ist dass normal dass wenn ich den Mikrokontroller lösche und das
gesammte System resette (abtrennen der Versorgungsspannung und
wiederanschließen nach ca. 30s) und den Kontrast voll aufdrehe nur die
1. und 3. Zeile schwarz werden?

Müssten da nicht alle Zeilen schwarz werden?
Oder werden die Zeilen 2 und 4 erst nach der korrekten initialisierung
aktiviert?

Oder habe ich da ein defektes Modul vor mir?

Laut Datenblatt habe ich das LCD richtig angeschlossen und den
angelöteten "Stecker" (Stiftleiste)  habe ich auch durchgecheckt.

Kannst du mir bitte sagen ob dass jetzt ein Hardware oder ein
Softwareproblem ist.

mfg Sepp

von Hannes L. (hannes)


Lesenswert?

Schließ doch mal die Betriebsspannung an das LCD an, ohne dass ein
Controller/Computer angeschlossen ist.
Dann wirst du sehen, dass die erste Zeile (jedes LCD-Controllers, das
Teil hat 2 Controller) schwarz wird. Dies ist der normale Reset ohne
Initialisierung von außen.

Nach der Initialisierung sollte das LCD nix mehr anzeigen. An der
Kontrastspannung schraubt man nicht grundlos herum, man stellt sie auf
gut ablesbaren Kontrast und lässt sie in Frieden.

Die LCD-Controller brauchen nach Anlegen der Betriebsspannung etwas
Zeit, bevor man sie ansprechen (initialisieren) kann. Nach der
Initialisierung (LCD-Clear) benötigen sie auch eine Wartezeit, ehe man
sie wieder ansprechen kann.

Inzwischen bin ich dazu übergegengen, LCD-Ausgaben über einen
Ringbuffer zu realisieren, und die Zeichen timersynchronisiert
auszugeben. Das Ausgabetempo ist dann als Kompromiss zwischen
verfügbarer Rechenleistung und menschlichem Lesetempo relativ langsam.
Für das 4x27 habe ich das aber noch nicht geändert, ich hantiere
derzeit meist mit einem 8x24-LCD mit Controller MS50530.

Ein Beispiel könntest du hier im Forum finden, wenn du nach "8x24"
suchst. Jedenfalls habe ich hier mal einen Code reingestellt.

...

von Sepp -. (sepp_o)


Lesenswert?

Genau das wollte ich wissen.

Mir kam es etwas komisch vor dass jeder der beiden Controller nur
jeweils die 1. Zeile aktivierte.

Am Kontrast hab ich nur rumgefummelt um zu sehen welche Zeile
angesteuert wird.

Aber wenn das Ganze normal ist binn ich wieder beruhigt.


Ich werd mal schaun ob es an den Wartezeiten liegt.

Das mit dem Ringbuffer werde ich mal schön bleiben lassen bis ich es
überhaut geschafft habe das LCD ordentlich anzusteuern.

Nur 2 Zeilen von 4 verfügbahren ist ja nicht umbedingt das Ziel der
Übung. ;o)

Jetzt noch eine andere Frage bezüglich deinem Ringbuffer.

Werden die angezeigten Daten nicht durch die Mikrokontroller auf dem
LCD verwaltet?

Ist es denn nicht möglich nur bestimmte Zeichen zu verändern wodurch
sich der Rechenzeitverbrauch drastisch senkt?

mfg Sepp

von Hannes L. (hannes)


Lesenswert?

> Werden die angezeigten Daten nicht durch die Mikrokontroller auf dem
> LCD verwaltet?

Der (die) LCD-Controller auf dem LCD haben genug damit zu tun, den
Inhalt des RAM (deinen Text) in Pixel umzuwandeln und multiplex an die
Elektroden des Flüssigkristalls anzulegen. Daher kann das LCD immer nur
1 Zeichen vom Controller empfangen und in das RAM legen. Du kannst also
nicht "mal schnell" eine ganze Zeichenkette an das LCD schicken,
sondern immer nur ein einzelnes Byte.

> Ist es denn nicht möglich nur bestimmte Zeichen zu verändern wodurch
> sich der Rechenzeitverbrauch drastisch senkt?

Richtig, man kann (ich mache es auch) mittels Kommando den Rampointer
auf eine bestimmte Position setzen (kostet einen Command-Zugriff), dann
werden die danach gesendeten Bytes (Data-Zugriff) an die korrekte
Position geschrieben. Das macht in meinen Beispielen das Macro
"locate".

Du solltest dir auch mal ansehen, wie die Zuordnung von RAM und
Anzeigezeilen ist. Eine Zeile hat nämlich mehr als 27 Bytes RAM. Man
kann das "Zeilenfenster" sogar über den RAM-Bereich verschieben
(horizontal scrollen), das benutze ich aber nicht.

Das LCD kann viel mehr, als wir üblicherweise nutzen. Aber es kann (aus
Sicht des schnellen Mikrocontrollers) nur sehr langsam angesteuert
werden.

...

von Sepp -. (sepp_o)


Lesenswert?

Danke kür deine Erklährngen.

Ich hab den Fehler gefunden.

Der Fehler hat an der angeblich ach so tollen LCD-Bibleothek gelegen.

Mit reinem Assembler kann ich die Anzeige inzwischen ansteuern.

Jetzt muß ich mir nur mehr überlegen wie ich das Ganze in meinen C-Code
ordentlich einbinden kann.

Ich habe nämlich inzwischen durch das AWL- Programieren an SPS'en
irgendwie die Lust an ASM verlohren.
(AWL ist die ASM-Version bei SPSen)

Außerdem behalte ich beim C-Code besser die Übersicht bei etwas
größeren Programmen.

mfg Sepp

von Hannes L. (hannes)


Lesenswert?

Was AWL ist, ist mir klar. Hatte mal beiläufig damit zu tun. Und zwar
AEG (AKF12), Siemens (Step5) und Klöckner-Möller. Wobei ich AWL
garnicht mal so schlecht finde, ist schön eindeutig. FUP ist nunmal die
Klickibunti-Lösung und KOP liegt mir persönlich nicht so richtig.

Vielleicht ist das ja die Ursache dafür, dass ich beim AVR das
eindeutige ASM bevorzuge.

...

von Sepp -. (sepp_o)


Lesenswert?

Ja, FUP ist ein wenich klicki bunti.

Aber wenn man sich diverse Bauelemente zurechtgezimmert hat, ist das
Ganze als ob man sich auf einem Steckbrett mit elektronischen
Bauelementen arbeitet.

Und wenn man diverse Änderungen vornehmen muß ist man wesentlich
schneller wie mit AWL oder ST.
(ST = structured Text. Das ist sowas ähnliches wie Basic)

Wenn die SPS nur einmal programiert werden muß ist AWL toll um einen
laufzeitoptimierten Code zu erstellen.

Aber wehe wenn man diverse Teile ändern muß.

Da braucht man mit AWL errheblich länger.

Und KOP ist sowiso nur ein Witz.
Damit bekommt man nichtmal eine simple Motordrehrichtungs umschaltung
mit Relaise auf einem Schaltbild  ordentlich hin.
(Jedenfalls war's bei der fast 20 Jahre alten B&R-SPS so.)

mfg Sepp

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
Noch kein Account? Hier anmelden.