mikrocontroller.net

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


Autor: T. P. (brukernavn)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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-/Baueleme...

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

Autor: Master Snowman (snowman)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: T. P. (brukernavn)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: T. P. (brukernavn)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kasperle (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich benutze den Internen 4 Mhz Quarz.
Es gibt keinen internen 4 MHz Quarz.

Autor: T. P. (brukernavn)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Meine Pinbelegung hab ich fast so übernommen:

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

Autor: T. P. (brukernavn)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Kasperle (Gast)
Datum:

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

Autor: Stefan (Gast)
Datum:

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

Autor: Pascal K. (zerb)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lehrmann Michael (ubimbo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaltplan !
Hast du MCLR beachtet?

Autor: T. P. (brukernavn)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: John Bauer (johnbauer)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: brukernavn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: John Bauer (johnbauer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
http://de.wikipedia.org/wiki/American_Standard_Cod...

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

Autor: _Gast-XIV (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: T. P. (brukernavn)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: brukernavn (Gast)
Datum:

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

Autor: zipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.