mit PIC 16F628A LC-Display ansteuern

OP #1786074
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:
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
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.
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)
Gast
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
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?
@ 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
OP
@ 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
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
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
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
@ _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
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
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

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.