LCD - Ansteuerung

#550738
Lesenswert?

Hi Leute. Anbei ein kleines Progi um ein LCD anzusteuern. Das Programm 
hab ich ausführlich dokumentiert so dass es leicht verständlich ist.

Ein kleines Bsp. (main.c) welches zeigt wie das LCD angesprochen wird 
ist auch dabei.

lg CriGri
Angehängte Dateien:
#550804
Lesenswert?

Sorry ,hab nicht daran gedacht.
Es handelt sich um ein Programm welches für LCD's mit KS0066 / HD44780 - 
Contollern geeignet ist. Das Programm hab ich für einen 8051er 
geschrieben. Folgende Funktionen sind im Progi enthalten:
-> Initialisierung
-> Ausgabe eines Strings  einzelner Zeichen  eigene Zeichen
-> Funktion zum erstellen eigener Zeichen

Ich habe das Progi so geschrieben, dass der 8051er Bytewise Operationen 
ausführt da ihm das besser "liegt" als das Bit für Bit ansprechen.
Die Funktionen set_address und set_data() hab ich aus 
vereinfachungsgründen mit eingebunden. Ich hoffe das das nun genug 
Erklärung war.

lg CriGri
#551043
Lesenswert?

Dein Programm enthält mehrere gravierende Fehler:

1.
Die Init-Sequenz entspricht nicht dem Datenblatt. Es kann funktionieren, 
wenn das LCD sauber resettet (schnell und monoton ansteigende VCC), muß 
aber nicht.

2.
Beim Busy-Lesen werden D0..D6 kurzgeschlossen (P1=  0x80;), das führt zu 
erhöhter Stromaufnahme und kann die Lebensdauer des LCD drastisch 
verkürzen.

3.
Die Bus-Timings werden nicht eingehalten.
Laut Datenblatt müssen RS und RW vor E=1 gesetzt werden (>40ns) und nach 
E=0 gehalten werden (>10ns).


Wundere Dich also nicht, wenn es mit anderen Displays, MCs, Spannungen, 
Temperaturen, Frequenzen Probleme gibt.


Peter

P.S.:
Ich benutze beim AT89C2051 immer den 4Bit-Modus (6 Portpins), denn mit 
nur 4 freien Portpins (15-11) kann man ja nicht mehr viel anfangen.
#551243
Lesenswert?

Hallo Peter.
Erstmals vielen Dank für deine Ausbesserungen.

Habe das Progi mal abgeändert. kannst du nochmal drüber schauen und mir
sagen was ich vielleicht noch verbessern könnte (außer dem 8-Bit Modus.
den werd ich später ändern) ?!

Bezüglich den Timings: Ich benutze einen 11.059MHz Quarz. Damit geht 
sich das mit RS & R/W >40ns mit einem Taktzyklus aus oder?

Lg CriGri
Angehängte Dateien:
#551771
Lesenswert?

Cri Gri wrote:
> das hab ich vorher auch entdeckt und schon geändert und getestet aber es
> funzt net.

1
#include <AT892051.h>
2
#include "lcd.h"   
3
#include "Func.h"    // wait()
4
#include "MyTypes.h"

Ja, mit Deinem Code kann keiner was anfangen.

Es fehlen 4 Includes (AT892051.h, Func.h, func.h, MyTypes.h).

Warscheinlich ist Dein wait() zu kurz.


Peter
#553905
Lesenswert?

Steven Wetzel wrote:
> Schreib doch mal die while-Funktion (busy-check) in eine
> ANSI-C-leserlichen Schreibweise und nicht im Perl-Dialekt. Die
> Schreibweise mag zwar cool sein und in der Schule gut ankommen, sie ist
> aber unnötig und verleitet zu Fehlern.

wieso cool? das hat doch nichts mit "cool" zu tun. Und was ist überhaupt 
ein Pearl - Dialekt?

Sorry aber ich weiß echt nicht was du meinst. Ich find die Funktion net 
sonderlich "cool" aber Fehler sehe ich auch nicht unbedingt.
P1 wird auf Eingabe gesetzt. R/W auf 1,DB7 ausgelesen,High-Low Flanke an 
EN und P3 löschen.
#554587
Lesenswert?

Hi Semmel !!!
Freu mich wieder mal was von dir zu hören. Wie gehts dir denn?

Wie meinst du
>Insgesamt kann man das Programm durchaus ein bischen mehr strukturieren.

das? Deine Tipps waren in der Vergangenheit schon sehr hilfreich!!  :)

@Steven
>Ob wir jemals wieder etwas von ihm hören?

Ja "er" meldet sich wieder zurück ;)
Beim Busy-Check hast du dich wohl auf das High-Setzen des EN-Pins 
bezogen , oder täusch ich mich ?

@Peter
>Ich denke schon, daß es wichtig ist, den richtigen Typ einzustellen.

Ich versteh nicht was du meinst. Ich wiederhole 3mal die 0x30(laut 
Datenblatt) und dann setz ich 0x38 -> 2Zeilen, und 5*8Font !
Ab zwei Zeilen muss das "Bit F" nicht gesetzt werden da das LCD bei 2 
Zeilen nur 5*8 kann.

lg cri
#554590
Lesenswert?

Anbei das C-File

@Steven
>Perl-Dialekt, eine Dialekt, in dem man Funktionen in möglichst
>komplizierter und unleserlicher Form darstellt.

Nichts für ungut aber mein Progi is doch net so "verschlüsselt". Da hab 
ich hier im Forum schon einiges gesehen wo der Perl-Dialekt bis ins 
letzt ausgereizt wurde.
Angehängte Dateien:
Gast #554637
Lesenswert?

Hi Christian,

damit die Verwirrung nicht zu groß wird, Semmel = Joe, Joe = Semmel ;-))

Was ist gemeint mit Struktur ? Schau dir mal folgenden Thread an:

Beitrag "Wie mache ich eine Textausgabe 8Bit auf Display?"

hier habe ich mal einen Displaycode mit einem anderen Forumteilnehmer 
erarbeitet (für nen AVR und im 4 BIT mode). Wie dem auch sei, eine 
Struktur ist hoffentlich zu erkennen. Am Ende des Threads habe ich dann 
meinen Code mal reingestellt, schaus dir mal an.

Im Prinzip verwende ich nie einen 8 BIT LCD Bus, reine Verschwendung. 4 
BIT ist mir schon zuviel. In der Regel verwende ich dann lieber noch nen 
Schieberegister und brauch dann noch 3 Leitungen. Im Anhang mal nen 
"quick & dirty" fürs Schieberegister. Ich hab mal bewußt C & H File in 
eine Tüte gesteckt, hoffe dann kommt rüber was ich mit Struktur meine. 
Der Code ist diesmal für nen 8x51.

Zu deinem Code, 3x 0x38 reicht für die Initialisierung, schaus dir an.

Gruß,

Joe Semmel alias Bernd ;-))
Angehängte Dateien:
#554732
Lesenswert?

jipi :)

Es geht nu. Ich häng mal mein "unstrukturiertes" ;) Progi an. Vielleicht
hast ja Zeit es dir mal anzusehen Semmel = Joe = Bernd :D
Aber ich weiß noch immer nicht warum 3*0x38 genügt :)

Vielen Dank für die Hilfe. Auf dich ist Verlass :)

@Peter
...auch der Stromverbrauch ist gesunken!

@Steven
Dir auch vielen Dank. Das mit dem Busy hab ich völlig übersehen.
lg Cri
Angehängte Dateien:
Gast #554830
Lesenswert?

>> so. ich habs nu mal umgeschrieben. ich gehe es später testen und geb dir
>> dann beschied über jenes was nun nicht geht

;-)) kein Kommentar ;-))

Nun, warum geht 0x38, weils so im Datenblatt steht, ich weiß nicht wie 
ich es einfacher erklären soll. Lese dir das DB noch einmal in Ruhe 
durch und mach dir eine Tabelle für die BIT Kombinationen, vielleicht 
kommst du selbst drauf.

Die 4 BIT Variante gefällt mir, gut gemacht.

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