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
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.
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)
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
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.
>Ich benutze den Internen 4 Mhz Quarz.
Es gibt keinen internen 4 MHz Quarz.
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?
>Meine Pinbelegung hab ich fast so übernommen:
"fast" bedeutet du hast sie NICHT übernommen.
Wie sieht deine Pinbelegung aus?
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.
Es gibt einen internen RC-Oszillator. Und bitte an die SI-Einheiten halten, MHz nicht Mhz.
Werd ich dir mal zu schicken. Aber heute nicht mehr. Mache ich morgen.
@ 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
@ 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
Ja ok, das ist jetzt schon etwas verständlicher. Aber woher kommt der ASCII Code, bzw wo steht dieser. Wer legt ihn fest? MfG
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
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
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.
@ _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
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
Das hört sich aber irgendwie nicht nach assemler an. Oder irre ich mich da?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.