mit PIC 16F628A LC-Display ansteuern

OP #1786074
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
Angehängte Dateien:
#1786084
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.
OP #1786099
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.
Gast #1786410
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.
OP #1786442
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?
OP #1786881
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
#1787890
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
Gast #1787947
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
Gast #1788500
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.
OP #1791819
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
Gast #1791869
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
Gast #1791871
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

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