Forum: Mikrocontroller und Digitale Elektronik Probleme ST7066 LCD- Ansteuerung in 4 Bit-Modus PIC18F2220


von Marcel (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,
Ich versuche nun schon seit 3 Tagen das LCD Display mithilfe des PICs 
anzusteuern jedoch funktioniert einfach nichts und ich weiß nicht warum.
Das Display hat immer nur die Hintergrundbeleuchtung eingeschaltet und 
sonst regt sich nichts egal was ich für Befehle oder Daten auch 
rausschicke.
Das Display soll im 4-Bit Modus angesteuert werden.
Ich habe mir auch schon diverse Tutorials hierzu durchgelesen und die 
Initialisierung genau so gemacht wie es dort beschrieben ist, aber es 
will einfach nicht.
Im Anhang habe ich mein bisheriges Programm.

Und hier ist mal das Datenblatt:
http://www.lcd-module.de/pdf/doma/dips082.pdf
Vielleich weiß ja wer von euch warum das nicht funktioniert.
Es würde mir ja schon reichen wenn es überhaupt irgendwas tun würde 
sodass ich sehe, dass ich was erreiche mit meiner Programmierung. Aber 
nein, es ist einfach nur die Hintergrundbeleuchtung an.

Was ich bis jetzt verstanden habe:

Wenn ich das richtig verstanden habe was ich bis jetzt gelesen habe ist 
der RS PIN dazu da um zu sagen ob es sich um Daten oder Befehle handelt.
Der RW PIN ob gelesen oder geschrieben wird und der EN um die Befehle zu 
übernehmen. Hierzu muss man diesen togglen.
Da es im 4 Bit Modus betrieben wird muss das Datenbyte in 2 Nibble 
aufgeteilt werden wobei zuerst das höhere Nibble übertragen wird.

Die Initialisierung selber muss jedoch im 8 Bit Modus erfolgen da dieser 
standardmäßig eingestellt wird. Jedoch kann man hier die unteren 4 Bits 
ignorieren da diese für die Umstellung auf 4 Bit nicht benötigt werden 
weshalb es theoretisch funktionieren sollte.

MfG
Marcel

von Stefan (Gast)


Lesenswert?

Hast du da einen 31KHz Quarz drin ?
Vielleicht mal RW auf Masse legen.

von LCD (Gast)


Lesenswert?

Marcel schrieb:
> Das Display hat immer nur die Hintergrundbeleuchtung eingeschaltet und
> sonst regt sich nichts egal was ich für Befehle oder Daten auch
> rausschicke.

Kontrast-Pin ist richtig beschaltet? Kontrast richtig eingestellt?

von Marcel (Gast)


Lesenswert?

Hallo erstmal danke für eure Antworten.

Nein ich habe kein 31KHz Quarz drin.
Ich schalte den internen oszillator und dieser ist standardmäßig laut 
Datenblatt auf 31 Khz.
Habe um dies zu testen mit der delayfunktion eine LED eine Sekunde an 
und wieder ausgeschaltet.

Der Kontrastpin ist überhaupt gar nicht angeschlossen. Ich bekam die 
Platine fertig gelötet mit den Datenblättern.

Hab eben mal den Kontrastpin auf Low angeschlossen aber dann ist der 
Bildschirm komplett schwarz daher hab ich dies wieder rückgängig 
gemacht.

Laut dem Datenblatt welches ich bekommen habe muss dieser auch gar nicht 
angeschlossen werden.

Kann ja sein das derjenige der gelötet hat da was falsch gemacht hat 
also muss der Kontrastpin angeschlossen werden?

MfG
Marcel Vollmer

von spess53 (Gast)


Lesenswert?

HI

>Laut dem Datenblatt welches ich bekommen habe muss dieser auch gar nicht
>angeschlossen werden.

Kannst du keine Datenbätter lesen? Das sind 2 Beschaltungen für VEE bei 
verschiedenen Betriebsspannungen drin.

>Der Kontrastpin ist überhaupt gar nicht angeschlossen. Ich bekam die
>Platine fertig gelötet mit den Datenblättern.

Welcher Keksperte verzapft denn so etwas?

MfG Spess

von Marcel (Gast)


Lesenswert?

spess53 schrieb:
> Kannst du keine Datenbätter lesen? Das sind 2 Beschaltungen für VEE bei
> verschiedenen Betriebsspannungen drin.

Doch kann ich schon^^ Datenblatt war vll. das falsche Wort. In dem oben 
verlinkten Datenblatt steht das ja aber in dem Schaltplan den ich von 
der gelöteten Platine bekommen habe ist dieser PIN nicht angelötet.

Vermutlich reicht es nicht wenn man den PIN auf Masse legt da der 
Kontrast dann zu stark ist oder?

Also 4,7K Drehpoti bestellen und dann hat sich das Problem erledigt?

MfG
Marcel

von spess53 (Gast)


Lesenswert?

HI

>Vermutlich reicht es nicht wenn man den PIN auf Masse legt da der
>Kontrast dann zu stark ist oder?

In der Tabelle steht bei VEE: Kontrastspg. (ca. 0,3V / 1,2V). Allerdings 
ist das eine etwas missverständliche Angabe. Normaler weise wird als 
Kontrastspannung die Spannung zwischen VDD und VEE angegeben. Das wären 
dann also 3,8...4,7V.

MfG Spess

von holger (Gast)


Lesenswert?

>In der Tabelle steht bei VEE: Kontrastspg. (ca. 0,3V / 1,2V). Allerdings
>ist das eine etwas missverständliche Angabe.

Das stimmt. Da ich mit dem Display schon zu tun hatte
kann ich aber sagen das das gegen GND gemessen bedeutet.

von spess53 (Gast)


Lesenswert?

Hi

>Das stimmt. Da ich mit dem Display schon zu tun hatte
>kann ich aber sagen das das gegen GND gemessen bedeutet.

Ja, davon bin ich ausgegangen (bei VDD=5V). Bei VDD=2,7..3,3 wurde das 
aber einen falscher Wert. Deswegen habe ich das umgerechnet. Dann passt 
das für den ganzen VDD-Bereich des Displaycontrollers.

MfG Spess

von Marcel (Gast)


Lesenswert?

Hi Leute,
Nun ist der Kontrastpin angeschlossen und regelbar über einen Poti aber 
das Programm funktioniert immer noch nicht.. Kann vielleicht wer von 
euch der son ähnliches Display hat mal gucken ob mein Programm bei ihm 
funktioniert damit ich einen Defekt des Displays ausschließen kann?

MfG
Marcel

von Stefan (Gast)


Lesenswert?

Ich dachte du arbeitest mit dem internen
Quarz ?
Warum setzt du dann den externen Quarz ?

von Marcel (Gast)


Lesenswert?

Stefan schrieb:
> Ich dachte du arbeitest mit dem internen
> Quarz ?
> Warum setzt du dann den externen Quarz ?

Hast recht das macht keinen Sinn. Ich habe hinterher in meiner 
Verzweiflung geguckt was ist im Tutorial anders und die Zeile ist halt 
noch stehen geblieben. Aber daran lag es nicht. Ich habe ja auch vorher 
schon geguckt ob der Timer vernünftig funktioniert also eine LED kann 
ich für genau eine Sekunde an und abschalten also geh ich mal davon aus 
das es auch für kleinere Wartezeiten funktionieren muss.

MfG
Marcel

von Stefan (Gast)


Lesenswert?

OSCCON ist auch nirgendwo gesetzt.
Da fehlt die ganze Setzung des internen
Oscillator.

von Marcel (Gast)


Lesenswert?

Das stimmt wohl. Ich gehe davon aus das wenn die LED blinkt der Timer 
richtig ist. Also er mit dem Standardmäßigem Takt von 31 KHz arbeitet 
warum muss ich da was umstellen?
Ich bin folgendermaßen vorgegangen. Ich habe mir die Delayfunktion 
angeguckt. Diese will eine Konstante Namens XTAL_FREQ mit dem Wert habe 
ich gespielt bis ich die gewünschte 1 Sekunde Delay hatte. Das war bei 
etwa 32 KHZ. Dann hab ich im Datenblatt nachgeguckt und standardmäßig 
läuft der PIC18F2220 mit 31 KHZ. Nun bin ich davon ausgegangen das wenn 
die 1 Sek Delay funktioniert der Wert für XTAL_FREQ stimmen muss und ich 
somit auch geringere Delays benutzen kann.
Die Frage ist ob das Display mit einer so geringen Taktrate überhaupt 
zurecht kommt weil in allen anderen Beispielen sieht man immer 4 MHz 
etc. Habe nun gerade mal die Initialiserungsroutine umgeschrieben und 
habe mich auf das Datenblatt des Kontrollers bezogen aber will immer 
noch nicht..
https://www.sparkfun.com/datasheets/LCD/st7066.pdf

von Ale (Gast)


Lesenswert?

Stefan schrieb:
> Ich dachte du arbeitest mit dem internen
> Quarz ?
Wie kommst du auf so einen Blödsinn? Es gibt gar keinen internen Quarz

von Stefan (Gast)


Lesenswert?

Ja die Displays laufen mit der geringen Taktrate.

von Stefan (Gast)


Lesenswert?

Habe den µC nicht.
Wenn du noch einen anderen hast, kann man mal schauen
ob man dafür ein Programm schreiben kann.

von Marcel (Gast)


Lesenswert?

Es würde mir reichen wenn mir wer nen Testprogramm geben könnte so zum 
Beispiel in der Form "Gibt eine 1 aus" oder sowas.
Anpassen an meinen Controller könnte ich das dann auch selber.
Ich möchte halt nur nen Hardwaredefekt ausschließen können da ich mich 
mittlerweile nicht mehr auf den "Experten" verlassen möchte der das Ding 
zusammen gelötet hat denn ich trete seit nun mehr als 6 Tagen auf der 
Stelle diesbezüglich..

MfG
Marcel

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Ohne jede Garantie. Da ich den µC nicht habe,
kann ich es nicht testen, ob es läuft.
RW Pin muß auf Masse liegen. Alle anderen Pins
vom Display können bleiben.
Hier das Programm:

von Marcel (Gast)


Angehängte Dateien:

Lesenswert?

Hier mal ein Bild was das Display anzeigt.
Man liest immer überall das es eigentlich entweder komplett aus sein 
sollte oder links nen Cursor blinken sollte im Ursprungszustand weshalb 
mich das auch schon wundert.
Und egal was ich auch programmiere es verändert sich überhaupt nix das 
Display geht nur jedes mal aus und wieder an was daran liegt das das 
PicKit die Stromversorgung beim Programmiervorgang trennt.

MfG
Marcel

von Marcel (Gast)


Lesenswert?

Danke aber da kann ich ja auch nichts dran anpassen haste das auch als 
C-Programm?

von Stefan (Gast)


Lesenswert?

Sollst auch nichts dran anpassen.
Sollte so laufen, nach deinen Angaben im
C-Code.

von Marcel (Gast)


Lesenswert?

Womit schreib ich das File auf den Controller gibts da ne spezielle 
Software für?
Hab es mit dem PicKit2 Brenner probiert und dieser sagt unsupported 
Device. Ich programmiere normalerweise mit der MPLABX IDE in C kann ich 
das dort vielleicht irgendwo einstellen?

von Marcel (Gast)


Lesenswert?

OK konnte das in MPLABX importieren aber es zeigt immer noch nichts an 
was sollte es denn theoretisch anzeigen?

von Marcel (Gast)


Angehängte Dateien:

Lesenswert?

Ach sry. Aufgrund es ist mir aufgefallen das oben in dem Quellcode die 
Defines falsch waren d.h. die PINS sind oben falsch belegt. Hab das 
mittlerweile korrigiert. Im Anhang der aktuelle Quellcode

von Stefan (Gast)


Angehängte Dateien:

Lesenswert?

Dann versuch es mit dem File.
Wie gesagt, RW Pin auf Masse legen sonst geht es nicht.

von Marcel (Gast)


Lesenswert?

Ok Display funktioniert. Er gibt Hallo Aus.
Hast du auch mit 31 KHz gearbeitet ?
Danke dir :-)

von Stefan (Gast)


Lesenswert?

Ja müßte so eingestellt sein. Aber wie gesagt,
kann es selber nicht testen, da ich den µC nicht habe.

von Marcel (Gast)


Lesenswert?

Mmh jetzt ist natürlich die Frage warum das bei dir funktioniert? Hast 
du meinen Code 1 zu 1 nach Assembler übersetzt oder andere Delays 
genommen ? Wie sieht die Initialiserungsroutine aus?
Muss ich eigentlich irgendwo sagen an welche Adresse er das 
Ascciizeichen schreiben soll oder fängt der bei Null an und zählt dann 
hoch?
Ich verwende zum Beispiel die Befehle CGRAM Adress Set und DD RAM Adress 
Set überhaupt nicht da ich gelesen habe das man dies nur braucht um 
eigene Zeichen zu definieren. Brauch ich diese Befehle oder nicht?
Du siehst ich bin gerade nen biskn baff^^

MfG
Marcel

von Stefan (Gast)


Lesenswert?

Nein ist nicht 1:1 übersetzt. Habe schnell ein eigenes
Programm erstellt. Ist nicht in C geschrieben.
Kenne mich auch nicht in C aus. Mir fällt halt nur auf
das du nirgendwo den internen Oscillator setzt.
Weis nicht ob das so geht.
Sind ja noch andere da, die sich mit C auskennen.
Sonst bekommst du auch hier gute Hilfe:

http://pic-projekte.de/phpBB3/index.php?sid=e1590847e4c141d4019f79781dc4abb4

von Marcel (Gast)


Lesenswert?

Alles klar da werd ich mal vorbeischauen die Seite kannte ich noch 
nicht. vielen Dank hast mir schonmal sehr geholfen.

MfG
Marcel

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.