Forum: Mikrocontroller und Digitale Elektronik mit PIC 16F628A LC-Display ansteuern


von T. P. (brukernavn)


Angehängte Dateien:

Lesenswert?

Hallo,

Ich bin jetzt schon seit bestimmt 3 Wochen total am Verzweifeln. Und 
zwar versuche ich dieses Display von Pollin anzusteuern: 
http://www.pollin.de/shop/dt/NzczOTc4OTk-/Bauelemente/Aktiv/Displays/LCD_Modul_C0802_04.html

Das Display besitzt einen standart HD44780 kompatiblen controller.

Zum Programmieren benutze ich das Pickit 2 Debug express und die 
Programmiersprache Assembler.

Meine Erfahrungen des Programmierens sind bis jetzt nur sehr beschränkt 
und auch nur auf die kleineren PICs zurückzuführen. Das ist jetzt 
eigentlich meine erste Aufgabe mit einem 16Fxxx Pic.
Desshalb habe ich auch die Lernbeispiel Aufgabe von Sprut kopiert und 
lediglich auf den 16F628 angepasst. Also kann es eigentlich nur an der 
Configuration oder an der Initialisierung liegen. Aber ich habe schon 
alles durchprobiert und brauche jetzt echt eure Hilfe bevor ich noch 
völlig Ausraste. Was nach über 3 Wochen ohne jegliches Erfolgserlebnis 
ja kein Wunder währ xD.

Also ich bedanke mich schon mal bei euch

mfg

brukernavn

von Master S. (snowman)


Lesenswert?

ich kann leider (noch) nicht assembleren. wenn du sprut.de kennst, 
kannst du doch eben aus seinen beispielen die inizialisierung eine LCDs 
angucken und siehst den unterschied zu deiner inizialisierung. hier 
würde man dir auch nur die unterschiede aufzählen können - was hoffst du 
anderes zu erwarten?
ps: meistens liegt's daran, dass die zeiten nicht eingehalten werden.

von T. P. (brukernavn)


Lesenswert?

Ich habe das Programm ja von sprut.
Ich habe es lediglich auf den 16F628a angepasst.
Dann habe ich noch hier im Forum gelesen, dass über der Initialisierung 
noch org 0x000 stehen muss, aber sonnst habe ich eigentlich nichts 
geändert.

Ich erhoffe mir, dass einer sich meine asm datei anguckt und mir vllt 
sagt was an der configuration falsch sein kann. oder irgendwo anders 
falsch sein kann.

Achja, ich habe ja noch gar nicht geschrieben was das Display überhaupt 
macht: es zeigt lediglich 8 Balken in der ersten Zeile. mehr nicht.

von Oliver J. (skriptkiddy)


Lesenswert?

T. P. schrieb:
>
> Achja, ich habe ja noch gar nicht geschrieben was das Display überhaupt
> macht: es zeigt lediglich 8 Balken in der ersten Zeile. mehr nicht.

Das heißt, dass der Display-Controller noch nicht initialisiert ist.

Hast du alles richtig angeschlossen?

Was hast du für einen Quarz dran? (WAIT ist auf 4MHz ausgelegt)

von T. P. (brukernavn)


Lesenswert?

ja, es ist alles richtig angschlossen. Ich habe gerade nochmal zum 100. 
mal die Schaltung überprüft, die ist ok.

Ich benutze den Internen 4 Mhz Quarz.

gruß

brukernavn

von Stefan (Gast)


Lesenswert?

Einzigste möglichkeit wäre noch das ich dir ein Hex-File
schicke und du schaust mal ob es damit läuft. Wenn nicht haste
was falsch angeschlossen.
Dafür bräuchte ich aber die Belegung des LCDs an den µC.

von Kasperle (Gast)


Lesenswert?

>Ich benutze den Internen 4 Mhz Quarz.
Es gibt keinen internen 4 MHz Quarz.

von T. P. (brukernavn)


Lesenswert?

ja, das währ echt super!

Meine Pinbelegung hab ich fast so übernommen:
http://sprut.de/electronic/pic/programm/lcd.gif

Ich benutze nur den Internen Oszylator und keinen Reset.



Ich wüsste jetzt auch nicht, wie ich nur das hex file mit MBLAP in den 
PIC bekomme, aber das finde ich bestimmt auch noch irgendwo geschrieben.





Es gibt keinen Internen 4 Mhz Quarz? Da sagt das Datenblatt aber etwas 
anderes, wenn ich mich nicht ganz irre. Wie kommst du darauf?

von holger (Gast)


Lesenswert?

>Meine Pinbelegung hab ich fast so übernommen:

"fast" bedeutet du hast sie NICHT übernommen.
Wie sieht deine Pinbelegung aus?

von T. P. (brukernavn)


Lesenswert?

Ja doch, in meinem Fall bedeutet Fast = ist. Sry, hab mich nicht richtig 
ausgedrückt. Also die Pinbelegung LCD - PIC ist gleich. Lediglich fehlt 
bei mir der Reset und der Ext. Quarz am PIC.

von Kasperle (Gast)


Lesenswert?

Es gibt einen internen RC-Oszillator.
Und bitte an die SI-Einheiten halten, MHz nicht Mhz.

von Stefan (Gast)


Lesenswert?

Werd ich dir mal zu schicken. Aber heute nicht mehr.
Mache ich morgen.

von Pascal K. (zerb)


Lesenswert?

@ brukernavn

Hast du auch den INTRC-Mode ausgewählt ? Zwecks internem 4 MHz RC-Glied.

Weil nach deinem Schaltplan zufolge müsste da _XT_OSC eingestellt sein 
was aber bei dir _INTRC_OSC_CLKOUT in den Configuration Bits lauten 
muss.

MfG

von Lehrmann M. (ubimbo)


Lesenswert?

Schaltplan !
Hast du MCLR beachtet?

von T. P. (brukernavn)


Lesenswert?

@ zerb: den INTRC-Mode habe ich in der Config geändert.

@ ubimbo: Es stimmt, du hast recht. Ich habe in der Config gar nicht den 
MCLRE_OFF geschaltet.

Ich danke euch! Vielen vielen Dank.


Jetzt hab ich nur noch eine Frage, die ich mir schon länger gestellt 
habe: woher weiss der controller welche Portpins bei einem z.B. "a" 
gesetzt werden müssen?


mfg

von John B. (johnbauer)


Lesenswert?

T. P. schrieb:
> woher weiss der controller welche Portpins bei einem z.B. "a"
> gesetzt werden müssen?

Der Controller weiß es nicht. Er macht nur das was du ihm sagst 
(programmierst).

So wie im von Dir angehängten Code:

1.  movlw 'a'
2.  movwf LcdDaten
3.  call  OutLcdDaten

1. Der ASCII-Code von 'a' wird in den Akku geladen (entspricht: movlw 
0x61)
2. Der Wert wird in die Variable LcdDaten geschrieben
3. Das Unterprogramm OutLcdDaten wird aufgerufen. In diesem 
Unterprogramm werden die Portpins entsprechend dem Wert in LcdDaten 
gesetzt

Das Sprut-Programm ist aber nicht sehr sauber programmiert: das 
Unterprogramm schreibt die Daten vom Akku nochmals in die Variable 
LcdDaten. Das heißt, dass das Unterprogramm nicht den in LcdDaten 
gespeicherten Wert ausgibt, sondern den Wert der sich beim Aufruf im 
Akku befindet. Da aber beide Werte gleich sind funktioniert es trotzdem.

Gruß
John

von brukernavn (Gast)


Lesenswert?

Ja ok, das ist jetzt schon etwas verständlicher. Aber woher kommt der 
ASCII Code, bzw wo steht dieser. Wer legt ihn fest?

MfG

von spess53 (Gast)


Lesenswert?

Hi

Einfach mal nach ASCII-Tabelle suchen. LCD-Displays haben aber noch mehr 
Zeichen. Findest du im Datenblatt des Displaycontrollers. Ausserdem 
kannst du bei den meisten auch (meist 8) eigene Zeichen definieren.

MfG Spess

von John B. (johnbauer)


Angehängte Dateien:

Lesenswert?

http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange

Den HD44780U gibt es z. B. in verschiedenen Versionen (siehe Bild).
Die kompatiblen Controller sind oft nicht 100% gleich.
Wenn man kein ausführliches Datenblatt hat, kann man das auch einfach 
probieren.

Gruß
John

von _Gast-XIV (Gast)


Lesenswert?

T. P. schrieb:
> Ich bin jetzt schon seit bestimmt 3 Wochen total am Verzweifeln. Und
> zwar versuche ich dieses Display von Pollin anzusteuern:

Woher hast du die Belegung und stimmt Sie auch?

Die Controller haben einen Ready/Busy Ausgang den man evtl. auslesen 
kann

aber als erstes schauen ob der Kontrast richtig eingestellt ist.

von T. P. (brukernavn)


Lesenswert?

@ _Gast-XIV: danke, aber hat sich schon erledigt, problem gelöst.

@ rest: Ja ok, der ASCII Code ist ja echt ne sehr verständliche 
Geschichte. so langsam macht es klick.
Ich weiss jetzt nur nicht wie ich in die zweite zeile gelange ohne alle 
40 zeilen voll zu schreiben. Da gibt es doch bestimmt einen Trick.
Der HD44780 hat ja die DDRAM Adressen von 00 bis 0F und von 40 bis 4F. 
Wie kann ich denn zu den 4X Adressen gelangen?

mfg

von spess53 (Gast)


Lesenswert?

Hi

>Wie kann ich denn zu den 4X Adressen gelangen?

Es gibt einen Befehl: 'SET DD RAM ADDRESS'. $40 einsetzen und schon bist 
du dort.

MfG Spess

von brukernavn (Gast)


Lesenswert?

Das hört sich aber irgendwie nicht nach assemler an. Oder irre ich mich 
da?

von zipp (Gast)


Lesenswert?

hi

wenn du die schaltung von sprut so genau übernommen hast , fällt mir 
eins auf:
V0 wird für den kontrast benötigt. sprut macht das über einen 
spannungsteiler. nimm dafür mal ein poti...

hat meiner tischkante schon einige kerben eingebracht.

cu zipp

von spess53 (Gast)


Lesenswert?

Hi

>Das hört sich aber irgendwie nicht nach assemler an. Oder irre ich mich
>da?

Nein das ist ein Befehl, den du mit 'OutLcdControl' an das Display 
sendest.
Sieh dir die Liste der Befehle deines Displaycontrollers an.

MfG Spess

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.