Hallo zusammen,
heute sollte eigentlich der große ich hab nen LCD angesteuert Tag
werden. Aber leider war das nicht der Fall :(
Deswegen mach ich mich jetzt auf die Fehlersuche, bräuchte dazu aber nen
Tipp.
Ausgangslage:
PIC 18f2550
Funktionen mittels Maestro erstellt
2 Zeilen LCD mit dem Wald und Wiesentreiber HD... (hab gerade die
Bezeichnung nicht)
Ich hab mir als meine Funktionen mittels Maestro gebaut und dann die
Hoffnung gehabt, dass mein LCD was anzeigt...
Wenn ich nach sprut gehe, müsste meine 2te Zeile aktiv sein, ich bin mir
aber nicht sicher ob ich das war, hatte vorher den Kontrast nicht
richtig eingestellt.
Mein PICKit3 hat gemeckert, dass die Schaltung zuviel Strom zieht, also
hab ich dem LCD ne externe Spannungsversorgung verpasst, PIC läuft über
das PICKit.
Was sollte ich mir am besten anschauen, bzw. wie kann ich den Fehler
eingrenzen? Ich müsste doch irgendwie schauen können, ob mein LCD
überhaupt mit dem PIC kommuniziert. Ich weiß halt nicht wie ich da dran
gehen soll. 2tens würd ich den Code nochmal neu mit Maestro machen,
evtl. hab ich mich da ja irgendwie vertan?
Hängt es mit dem internen Oszi zusammen? Läuft der evtl. nicht auf 20
Mhz wie angegeben. Mit dem internen hab ich vorher noch nie gespielt.
Aber für mein externes Quarz läuft gerade noch die Bestellung für meine
Kondensatoren.
Wie sieht denn ein Minimumcode aus, damit ich eigentlich was sehen
könnte?
Bitte, bitte helft mir....
Hi, also die Kontrastspannung ist sehr wichtig bei den Displays.
Stell den Poti mal so ein, dass Du schwarze Kästchen siehts.
Wenn da nix kommt, kann es sein, das Display zeigt an, aber die Zeichen
sind halt nur nicht sichtbar.
Habe an meinem PIC18F4620 das EA-DIP206 am laufen.
Gruß Dirk
Der PIC läuft mit Sicherheit nicht mit 20Mhz,
Der interne Quarz des 18f2550 läuft maximal mit 8Mhz, sollte aber für
ein LCD kein Problem darstellen.
Wieso wird zu viel Strom gezogen, ein Display braucht nicht viel, außer
zu hast die hintergrundbeleuchtung an, falls nicht würde ich da mit der
Fehlersuche anfangen.
edit
Im Code fällt mir direkt auf, dass du die PORT Einstellungen nicht
gemacht hast, sind die in der xlcd drin, oder hast du die vergessen?
Außerdem, wenn du einen internen Quarz benutzt musst du die
Geschwindigkeit festlegen, seh ich auch nirgendwo.
ich kenne mich bei maestro zwar nicht aus, aber ich vermisse die fuses
z.b.:
#pragma config FOSC = INTOSC_HS // Taktbereich auswählen
#pragma config PWRT = ON // Power On Timer an
#pragma config WDT = OFF // Watch dog Timer aus
#pragma config BOR = OFF // Brown Out Reset aus
#pragma config LVP = OFF // Low Voltage Programming Disable
#pragma config PBADEN = OFF
#pragma config VREGEN = OFF
#pragma config MCLRE = ON // Master Clear Reset aus
>Woher weist du denn wie das LCD>angeschloßen werden muß ?
Hab ich von sprut.de
>ich kenne mich bei maestro zwar nicht aus, aber ich vermisse die fuses
die stehen in main.c
Man das nervt ;)
Du kannst doch nicht einfach irgendeine
Belegung für das Display nehmen.
Die mußt du auch in deinem Programm definieren.
Ich sehe nirgendwo, wo du z.B. die Datenleitung
vom LCD in deinem Programm zu den Ports definiert
hast.
Wenn PICKIT meckert ist was faul. Selbst mein uraltes 20x2 braucht ohne
Beleuchtung nur ca 1mA. Wenn die LED an sind ist allerdings der Ofen
aus.
Die zugehörigen C-Datei(en) zu xlcd.h haben irgendwo nen Bug, mindestens
der 4-Bit geht nicht. Die Routine hat wohl irgendwann mal einer
geschrieben der das Display in der Konstellation noch nie laufen hatte.
Du sagst die LED ist an. Besser wäre, ein Blinken, dann weiß man das der
Taktgenerator auch wirklich geht. Nicht das der Watchdog läuft...
Mit Maestro kenn ich mich ned aus. Ist das so n grafisches
Codeerzeuger-Dingens?
>Du sagst die LED ist an. Besser wäre, ein Blinken, dann weiß man das der>Taktgenerator auch wirklich geht. Nicht das der Watchdog läuft...
Also die LED blinkt schon die ganze zeit, hätt ich ja auch mal schreiben
können.
>Ich sehe nirgendwo, wo du z.B. die Datenleitung>vom LCD in deinem Programm zu den Ports definiert>hast.
Du meintest du siehst NUR das nicht, ist mir gerade auch mal
aufgefallen, hab mal xlcd.h und xlcd.c durchgeforstet, da hat er die
Definition nicht mitgenommen.
>Schau doch erst mal dass dein Controller läuft und steuer mal ein>Ausgang an. Wenn du das geschafft hast, kannst du ja weiter machen.
Naja wie sollte sonst die LED leuchten?
>Die zugehörigen C-Datei(en) zu xlcd.h haben irgendwo nen Bug, mindestens>der 4-Bit geht nicht. Die Routine hat wohl irgendwann mal einer>geschrieben der das Display in der Konstellation noch nie laufen hatte.
Danke für den Hinweis, hätte eigentlich gedacht, dass die Software von
microchip läuft ;)
>Mit Maestro kenn ich mich ned aus. Ist das so n grafisches>Codeerzeuger-Dingens?
siehe Bild
Hat sich denn sonst wer ne Libary für LCDs gebastelt? Damit ich mal was
anderes ausprobiere?
PICSIM schrieb:> Danke für den Hinweis, hätte eigentlich gedacht, dass die Software von> microchip läuft ;)
Die Lib funktioniert schon. Du musst halt zumindest die richtige
Oszillatorfrequenz einstellen und die Anschlussbelegung. Aber dass du
die falsche Oszillatorfrequenz definiert hast, hast du ja bis jetzt
gekonnt ignoriert.
Danke Martin für deine hilfreiche Antwort,
ich werde microchip vorschlagen,
beim nächsten Mal ihre Standardeinstellung auf meine Bedürfnisse
umzustellen.
Manchmal ist der angeschlagene Ton hier im Forum zum kotzen.
Dass du ein Problem mit dem Oszillator hast, steht schon im 3. Post...
Wenn man helfen soll:
- poste den kompletten Code
- poste wie du das Display angeschlossen hast
- und auch am besten die maestro Einstellungen
Hier kommt alles so scheibchenweise, an
Informationen rüber. Und jetzt erzähl uns mal
wie du das LCD angeschloßen hast. An welchem Port ist welcher
Pin des LCD angeschloßen.
So langsam glaube ich, dass es am LCD liegt.
http://pic-projekte.de/phpBB3/viewtopic.php?f=36&t=103
Ich werde mir erstmal ein anderes kaufen und schauen was dann ist.
Mit den Anschlüssen hab ich mehreres probiert, hatte u.a. was von einer
RB5 Problematik gehört, also ist das außen vor.
Ich hab im Netz das gefunden:
http://www.enmcu.com/guides/2x16characterlcdwithc18
Hab es 1 zu 1 nachgebaut, auch wenn ich nicht genau weiß was hier
passiert
1
OSCCON=0x70;
2
while(!OSCCONbits.IOFS);
wieder das gleiche...
Nun eine Verständnisfrage meinerseits, da ja anscheinend kaum wer
Maestro verwendet, was nutzt ihr dann?
Selbstgebastelt oder liegt das irgendwo vor?
Eine xlcd.h hab ich im C18-Ordner auch gefunden.
Eine nette Beschreibung gibt es ja hier als Artikel
http://www.mikrocontroller.net/articles/HD44780
ich benutze das MPLAB und den C18 Compiler.
Mit dem gleichen Display und PIC habe ich auch gerade experimentiert,
allerdings habe ich nicht die vorgegebene Library benutzt sondern mir
die nötigen Funktionen mit Sprut selbst geschrieben
Hallo,
ich habe den Maestro benutzt und kann dir garantieren, das Programm fuer
das LCD laeuft einwandfrei. Auf Anhieb!
Die EN, RW, sollten klar ein, die Frequenz auch. Wichtig ist die Port
Einstellung: Stellst du z.B PORTA ein und LOW NIBBLE, so MUESSEN die
Datenleitungen an RA0 bis RA3 liegen, bei HIGH NIBBLE an RB4 bis RB7.
Fuer den Mode empfehle ich das BUSY abzufragen, dann muss aber RW nicht
auf GND sondern an einen PORTPIN.
Die PORT Pins muessen natuerlich aus digitaler Ausgang definiert sein,
die CONFIG sollte dazu auch stimmen.
Sonst bei PIC Fragen auch gerne www.fernando-heitor.de reinschauen.
Gruss
Stefan
>So langsam glaube ich, dass es am LCD liegt.
Schnickschnack. Daran liegt es nicht. Warum soll es kaputt sein, wenn
die Wahrscheinlichkeit so groß ist (daß du noch nicht mal sicher
bist...), daß das Display richtig initialisiert ist?
Beispielsweise fragt dich Martin S: Im Code fällt mir direkt auf, dass
du die PORT Einstellungen nicht gemacht hast, [...]. Poste mal den
kompletten Code.
Und du antwortes darauf - anstatt den Code (inkl ALLER Dateien, zb.
XLCD.h) zu Posten mit den Defines für das LCD.
SO KANN DAS NICHTS WERDEN. Nada. Null. Niente.
Du hast im Moment noch solche eklatanten Lücken, daß du die
elementarsten Dinge nicht recht verstanden hast.
Grundsätzlich gilt: Lesen, lesen, lesen. Lies beide Datenblätter sowie
den Code den du benutzt.
Zum Beispiel sagt das Datenblatt zu dem was du wissen willst:
OSCCON = 0x70;
OSCCON: OSCILLATOR CONTROL REGISTER
bit 7
0 = Device enters Sleep mode on SLEEP instruction
*** Das trifft bei dir zu ***
Da du keine Sleep-Anweisung verwendest, ist das Bit nicht wirklich
wichtig.
Aber jetzt:
bit 6-4 IRCF2:IRCF0: Internal Oscillator Frequency Select bits
111 = 8 MHz (INTOSC drives clock directly)
*** Das trifft bei dir zu ***
Aha, dein Pic läuft also mit dem internen Taktgeber. Jetzt wissen wir
ein bisschen mehr.
bit 3-0 sind nicht gesetzt. Das Datenblatt flüstert uns:
000 = 31 kHz (from either INTOSC/256 or INTRC directly)
Aha! Dein PIC läuft mit 31kHz!
Da dauert jeder Befehlszyxklus in der Warteschleife eine kleine
Ewigkeit. Schade zwar nichts, ist aber eigentlich bis auf absolute
Low-Power Anwendungen und Sonderfälle Nonsens.
Weiterhin:
while(!OSCCONbits.IOFS);
Hier: Der Programmzähler bleibt so lange in der while-Schleife wie das
Bit IOFS im Byte OSCCONbits auf Null bleibt. Wird das bit gesetzt,
geht's auch brav weiter.
Die OSCCONbits sind in der Datei p18f2550.h definiert. Die Datei zu
finden überlasse ich dir; komm ja nicht und sag', du findest sie nicht.
So; jetzt geht's wieder weiter im Datenblatt. Dort steht:
OSCCON: OSCILLATOR CONTROL REGISTER
IOFS: INTOSC Frequency Stable bit
1 = INTOSC frequency is stable
0 = INTOSC frequency is not stable
D.h. der Controller wartet so lange auf den internen Taktgenerator bis
dieser stabil läuft.
Ich hoffe du hast meine strukturierte Vorgehensweise verstanden und
kannst sie isgesamt nachvollziehen. µC-programmieren ist wie
Wildwasser-Kajak fahren. Es hat überall scharfe Ecken und Kanten, jedes
einzelne Bit kann deine Anwendung zum Kentern bringen - man sollte
vorbereitet sein. Deshalb: Viel Lesen, viel Wissen sammeln.
>SO KANN DAS NICHTS WERDEN. Nada. Null. Niente.>Du hast im Moment noch solche eklatanten Lücken, daß du die>elementarsten Dinge nicht recht verstanden hast.
Ah, Ferndiagnose
Ich verstehe halt nicht, warum ich die xlcd.h und xlcd.c verschicken
soll, wenn die bei jedem (auch auf deinem Rechner) gleich aussehen.
Deswegen ja mein Bezug zu Maestro. Ich wollte vermeiden, dass ich zuviel
Infos mitschicke und das dem Helfer nur unnötige Arbeit macht.
>Zum Beispiel sagt das Datenblatt zu dem was du wissen willst:>OSCCON = 0x70;
Dies war ja nur das Beispiel aus dem Inet, welches ich Ersatzweise
probieren wollte, aber wie man dieht machen auch die Fehler, da er
explizit von 4 Mhz spricht (siehe Website).
>ich habe den Maestro benutzt und kann dir garantieren, das Programm fuer>das LCD laeuft einwandfrei. Auf Anhieb!
Hi ,Hans oder Stefan ;)
also du meintest dieses billige blau-weiße Display?
Ich löte heute Abend mal nen 20 Mhz Oszi dran und schreib mir dann den
Code nochmal neu, auch mit den Delays.
Und dann, wenn es nicht klappt, poste ich den gesamten Code.
Schick den gesamten Code, die Anschlußbelegung
wie du dein LCD angeschloßen hast und wie du im Programm
die Ports fürs LCD eingestell hast.
Ist das so schwer ? So wird dir keiner helfen wollen,
wenn du nicht mit arbeitest und alles nur stückschenweise
rüberschiebst.
Da du keine Ahnung von Programmierung hast, ist es wichtig
das alle Informationen vorliegen, damit man dir helfen
kann. Aber das wurde dir schon öffters geschrieben
das du alle Informationen zu kommen lassen sollst.
Anscheinend interessiert dich das alles nicht oder warum
ignorierst du diese Anfrage ?
Ich habe doch soeben mitgeteilt, dass ich den gesamten Code schicken
werde ;)
>Da du keine Ahnung von Programmierung hast, ist es wichtig>das alle Informationen vorliegen, damit man dir helfen>kann.
Noch ein Ferndiagnostiker
Für mich ist es halt nicht verständlich, welchen Mehrwert das hat.
In der Define stehen die Zuordnungen drin, auch die Portzuweisung, wenn
man mit Maestro arbeitet, sollte man das schonmal gesehen haben.
Vom interne Oszi hab ich wirklich keine Ahnung, da ich sonst immer nur
nen externen genommen hab. Hat meiner Meinung nach aber nichts mit
grundsätzlichen Programmierkünsten zu tun.
Wenn mir keiner helfen würde, würde ich nicht so viele nette Agro-Posts
bekommen.
Ich muss ganz ehrlich sagen, ich verstehe auch nicht die Frage nach der
Pinbelegung.
Was gewinnt man dadurch? In der Define steht die Zuordnung auf der
Softwareseite und in sprut steht die PINbelegung, an die ich mich
gehalten habe. Was fehlt da noch? Ich weiß es ganz ehrlich nicht!
Vllt. sollte man den Thread löschen und von vorne anfangen...
> Ich muss ganz ehrlich sagen, ich verstehe auch nicht die Frage nach der> Pinbelegung.
Stimmt weil du keine Ahnung von Programmierung hast.
Hast du die Belegung des LCDs die du von der Homepage,
von Sprut.de hast, in deinem Programm angepasst ?
Oder in deinem Compiler eingestellt so wie es sein soll ?
> In der Define stehen die Zuordnungen drin, auch die Portzuweisung,
Hast du so das LCD angeschloßen, wie es da drin steht ?
Die Controllpins hab ich mal willkuerlich auf RB0 bis RB2 gelegt. Du
hast offensichlich nicht den PortB ausgewaehlt, so wie du das im Code
(main) vorhattest. DATA_PORT 2 ist PORTC, wenn du mal in die LCD.h
guckst.
Gruss
Stefan
Ok, ich gucks mir nochmal an und poste dann wie gesagt heute Abend
alles.
Hatte das extra nochmal geprüft, weil ich mir schon dachte da stimmt was
nicht. Obwohl es ja sinnlos klingt, PortB mit 1 zu belegen, wenn es nach
Menschenverstand mit PortA=1 losgehen würde.
moin,
auch wenn hier immer wieder geschrieben wird "du kannst nix" was auch
nicht wirklich hilfreich ist... so ist es doch Fakt, dass wir dir helfen
wollen, du uns aber auch entgegen kommen musst.
Möchte nun ein Helfer die Portdefinitionen haben, dann poste sie doch
einfach, auch wenn es für dich keinen sinn macht. Wir können nicht
hellsehen und wissen nicht, wo überall Änderungen vorgenommen wurden,
deshalb vermuten wir den Fehler überall und wollen es selbst
kontrollieren.
Also ich habe eben wieder versucht deine Pinbelgegung rauszufinden, es
kommt immer mal vor, dass man ein Pin veretauscht, verwechselt, dann
sucht man den Fehler obwohl das Programm in ordnung ist.
Allerdings stimmt die Pinbelegung von Sprut ( du hast vor paar posts
geschrieben die verwendest du) nicht mit der Pinbelegung von dem Link
weiter oben ENMCU überein.
Was macht das Display denn? Siehst du nach dem Einschalten einen
schwarzen Balken in der oberen Zeile (das wäre schon mal gut).
Verschwindet der Balken später (wäre auch gut zwecks Initialisierung).
Joachim ... schrieb:> bit 3-0 sind nicht gesetzt. Das Datenblatt flüstert uns:> 000 = 31 kHz (from either INTOSC/256 or INTRC directly)>> Aha! Dein PIC läuft mit 31kHz!
bist du da in der Zeile verrutscht? bei mir steht da was anderes, ich
würde sagen er läuft mit 8Mhz, aber spielt wohl sowieso keine Rolle, da
das problem ein anderes ist
Ich hoffe du hast recht mit den 8 Mhz Tobi, dann bin ich wenigstens
nicht der Einzige der die elementaren Dinge nicht verstanden hat ;)
Was macht mein Display:
1. zu beginn ein schwarzer Balken in der 2ten Zeile
2. Display geht aus und wieder an
3. Balken verschindet
Bin leider @ work sonst könnte ich direkt alles zusammen schicken.
>bist du da in der Zeile verrutscht? bei mir steht da was anderes,
Hast recht. bit 6-4=111, also 8MHz. Mea culpa.
1. zu beginn ein schwarzer Balken in der 2ten Zeile
Na das ist doch schon mal was.
>2. Display geht aus und wieder an
Was heiß "geht wieder an"? Willenlose Buchstaben? Cursor blinkt?
>Obwohl es ja sinnlos klingt, PortB mit 1 zu belegen, wenn es nach>Menschenverstand mit PortA=1 losgehen würde.
Port B und Port A haben nicht nur datentechnisch sondern auch elektrisch
völlig unterschiedliche Eigenschaften. Port B kann 20..25mA liefern, A
nicht. In diesem Fall wär das zwar jetzt egal jedoch ist auch Port A
häufig nicht auf volle 8 Bit vom Substrat nach außen geführt. Es ist
allgemein üblich für digitale IO-Funktionen als erste Wahl Port B zu
nehmen.
in deiner main.c steht:
XLCDInit();
while(1)
{
LATB = 1;
Delay10KTCYx(10);
LATB = 0;
XLCDL2home();
XLCDPut("Hallo");
Delay10KTCYx(100);
}//end while
}//end main
Besser ist:
XLCDInit();
LATB = 1; // Wozu? Wieso nur eine Portleitung?
// oder ist damit bit1 gemeint?
Delay10KTCYx(10);
LATB = 0;
XLCDL2home();
XLCDPut("Hallo");
Delay10KTCYx(100); // Wozu?
while (1); // <==== Programmzähler bleibt definiert stehen.
}//end main
>LATB = 1; // Wozu? Wieso nur eine Portleitung?
> // oder ist damit bit1 gemeint?
Das ist ne LED an RB0, damit ich sehe ob überhaupt was passiert.
>Delay10KTCYx(100); // Wozu?
In deinem Zusammenhang vollkommen sinnlos. Ich hatte es in der While
Schleife in der Hoffnung das ich, falls ein Hallo angezeigt wird, dieses
zumindest eine Zeit lang sehen kann...
>Was heiß "geht wieder an"? Willenlose Buchstaben? Cursor blinkt?
Nein nichts, wieder Balken an der zweiten Zeile.
Ich interpretiere die Veränderungen so:
vor dem Programmieren: zweite Zeile aktiv
Programmieren läuft
Dann lasse ich das Programm laufen wieder zweite Zeile aktiv.
1
XLCDInit();
->Display geht komplett aus (auch Hintergrundbeleuchtung) und wieder an
wieder zweite Zeile aktiv
1
XLCDL2home();
die Kästchen in der zweiten Zeile verschwinden
1
XLCDPut("Hallo");
es passiert nichts, sollte aber
Ist meine Zuordnung richtig?
In xlcd.h sind mind. folgende Diskrepanzen zum orig. 44780 Datenblatt
vorhanden:
/* Cursor or Display Shift defines */
#define SHIFT_CUR_LEFT 0b00000100 /* Cursor shifts to the left */
Fehler, es muß bit4 (Schiebebefehl) gesetzt sein, bit2 muß 0 sein
(falsche Richtung).
#define SHIFT_CUR_RIGHT 0b00000101 /* Cursor shifts to the right */
bit0=1 ? Nonsens! auch hier: bit4=1, bit2 ist ok
#define SHIFT_DISP_LEFT 0b00000110 /* Display shifts to the left */
Auch das ist falsch. Bit3, display shift/cursor move muß log 1 sein,
ebenso bit4, weil Schiebebefehl.
#define SHIFT_DISP_RIGHT 0b00000111 /* Display shifts to the right */
// dito
Kann sein, daß die falschen Bits maßgeblich Einfluß auf die
Set-Functions haben(4/8-bit Mode), dann stimmt natürlich gar nichts
mehr... hab das jetzt aber nicht geprüft.
PICSIM schrieb:>>LATB = 1; // Wozu? Wieso nur eine Portleitung?> > // oder ist damit bit1 gemeint?> Das ist ne LED an RB0, damit ich sehe ob überhaupt was passiert.
sehr guter Anfang
PICSIM schrieb:>>Delay10KTCYx(100); // Wozu?>> In deinem Zusammenhang vollkommen sinnlos. Ich hatte es in der While> Schleife in der Hoffnung das ich, falls ein Hallo angezeigt wird, dieses> zumindest eine Zeit lang sehen kann...
zwar sinnlos, aber für das Debugging sehr sinnvoll und da es nicht
zeitkritisch ist eine gute Wahl
PICSIM schrieb:> ->Display geht komplett aus (auch Hintergrundbeleuchtung) und wieder an> wieder zweite Zeile aktiv
die Hintergrundbeleuchtung geht aus? Die hängt doch hoffentlich nicht
direkt an einem Portpin? Normalerweise hängt sie doch über ein
Vorwiderstand direkt an 5V und MUSS somit immer leuchten, das sollte man
sich genauer anschauen.
>Display geht komplett aus (auch Hintergrundbeleuchtung) und wieder an
Displaybeleuchtung hat nichts mit dem LCD-Modul zu tun.
Wieso geht sie aus...? Das sind einfach nur n paar Leds die enorm viel
Strom fressen (bei mir bis zu 200(!)mA an nem alten Modul. Hängt das
Modul nebst Beleuchtung am ICD3 oder am USB-Bus und wird von dort aus
versorgt? Oder wie müssen wir uns das vorstellen? Wenn das Ding über den
Bus versorgt wird... !
@@@ Bekomme das obere main.c nicht raus, da sind die Delay-Schleifen
auskommentiert.
Hallo zusammen,
das mit dem Display aus, war mein Fehler, das ist das PICKit3 kurz vorm
Programmiernen.
Was passiert:
Aus/Ein durch PICKit3-Programmierung
eine Zeile mit Blöcken
beide Zeilen frei
nix mehr.
Er bekommt die Daten mit XLCDPut nicht rüber.
Kleines Erfolgserlebnis, ich hatte heute viele öööööö als ich versucht
habe mit dem Debugger die Problemstelle zu finden.
Die Portdefinitionen hab ich alle wieder rausgeschmissen, da sie in
xlcd.c drinnstehen.
Kann es sein, das er in dieser while-Schleife hängt?
1
#ifdef XLCD_4BIT
2
3
#ifdef XLCD_UPPER
4
XLCD_DATAPORT_TRIS|=0xF0;//make upper port input
5
XLCD_DATAPORT&=0x0F;
6
XLCD_ENPIN=1;
7
XLCD_Delay500ns();
8
if(_vXLCDreg==1)// will execute only if called from XLCDInit
>Kann es sein, das er in dieser while-Schleife hängt?
while(XLCD_DATAPORT&=0x80);
Der PIC erwartet, daß das bit7 vom Display gesetzt wird, vermutlich ist
es das "Schreibvorgang-ist-zu-Ende" Bit.
Ich teste so was immer in dem ich hinter das 'while' oder 'if' eine Led
einmal aufblinken lasse. Ein Hardware-Breakpoint quasi.
An meinen Displays ist:
LCD 5 die Schreib-Leseleitung
LCD 6 die Enable Freigabe
Laut deinem Excel-File ist verbunden:
LCD 5 RB6
LCD 6 RB7
Das bedeutet, bei dir hängt zusätzlich hier noch der Pickit drauf weil
er über RB7 PGD und RB6 PGC die Programmierdaten schiebt.
Keine Ahnung ob das erlaubt ist, ich würde sowas gar nicht erst
riskieren. Oder ziehst du vor jedem Programmieren mit dem Pickit die
Drähte aus dem Steckbrett? Wohl kaum.
>öööööö
Vielleicht würde das auch die ööös erklären.
Ich hab aktuell nen 18F4550 auf dem Steckbrett, ist fast der gleiche wie
dein 2550. Wenn ich Zeit hab, steck ich mal deine Konstellation
zusammen, ich brauch das Display für nen Drehgeber sowieso...
ok,
also der Code sieht eigentlich ganz gut aus
PICSIM schrieb:> XLCD_ENPIN=1;> XLCD_Delay500ns();> if(_vXLCDreg==1) // will execute only if called from
XLCDInit
> {> while(XLCD_DATAPORT&=0x80);
In der while-schleife wird überprüft ob das 7. Bit gesetzt ist, dieses
Bit entspricht bei deiner Zuordnung dem EN_PIN und dieser wurde 3
Codezeilen vorher gesetzt. Der PIC müsste also direkt drüber springen,
wobei mir der Nutzen das Display darauffolgend immer mal ein und
auszuschalten nicht so ganz klar ist.
Die "öööö" ist doch ein Erfolg! Also funktioniert die Hardware, wenn
auch wahrscheinlich durch den Debugger des PICkit angesteuert, da die
Daten über die selben Portpins laufen
>In der while-schleife wird überprüft ob das 7. Bit gesetzt ist, dieses>Bit entspricht bei deiner Zuordnung dem EN_PIN und dieser wurde 3>Codezeilen vorher gesetzt.
Die Aussage versteh ich nicht
> XLCD_ENPIN=1;
ist doch RB7
> XLCD_DATAPORT&=0x80
ist RC7
öhm sry, natürlich hast du Recht
vergiss meinen Post, hab das mit meinen Anschlüssen verwechelt, kommt
davon wenn man selbst gleichzeitig ein ähnliches Projekt bearbeitet :-/
PROBLEM GELÖST - TAG GERETTET.
Warum hat mich denn keiner nach der Standardfrage gefragt ;)
"Hast du ins Datenblatt geschaut?"
Nein, hab ich nicht, dann hätte ich nämlich gewusst, das nicht alle Pins
vom PortC als Ausgänge definiert werden können.
Oh man...
Vielen vielen Dank für eure Mühe!!!
Etwa 20 Posts weiter oben schrieb jemand:
>Grundsätzlich gilt: Lesen, lesen, lesen. Lies beide Datenblätter sowie>den Code den du benutzt.
Und du:
>Warum hat mich denn keiner nach der Standardfrage gefragt ;)>"Hast du ins Datenblatt geschaut?"
Glückwunsch, da hat sich die Mühe doch gelohnt.
So viele Experten und keiner findet den Fehler, das ist übel...
PICSIM schrieb:> 1. Druckt ihr euch die Datenblätter aus? (ich lese eigentlich lieber vom> Papier als vom Bildschirm)
200 Seiten ausdrucken, nee, ich hab das Datenblatt am PC offen, da kann
ich schneller blättern und zum PRogrammieren sitze ich sowieso schon
vorm PC.
PICSIM schrieb:> 2. Die Verbindung Platine-Steckbrett mache ich jetzt mit Stiftleisten,> wobei ich mir dann ja Stecker selber "löten" muss. Macht ihr das> ähnlich oder gibt es fertige Steckerchen?
Für einen Testaufbau löte ich mir die Stecker selbst zusammen, da man
immer nochmal zwischendrin einen Pin umlegt, aber eine dauerhafte Lösung
ist das nicht.