Forum: Mikrocontroller und Digitale Elektronik PIC 18f2550 und LCD mittels Maestro


von PICSIM (Gast)


Angehängte Dateien:

Lesenswert?

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....

von DirkF (Gast)


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

Wie kommst du darauf das der mit
20 Mhz intern läuft ?

von Stefan (Gast)


Lesenswert?

Wie ist das LCD angeschloßen ?
Stimmt das überein, wie es in
der xlcd.h angegeben ist ?

von Martin S. (drunkenmunky)


Lesenswert?

Ich würd auch mal sagen, dass er höchstens mit 8MHz läuft. Hast du 
kontrolliert ob dein Oszillator überhaupt läuft? Wenn ja, wie?

von Tobi D. (fanti)


Lesenswert?

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.

von PICSIM (Gast)


Angehängte Dateien:

Lesenswert?

Habe die Displaybeleuchtung mit dran.

Blöde aber, wenn die LED leuchtet, sollte doch auch der Oszi laufen?

Meinst du das?
1
 /////////////////////////////////////////////////////////
2
// This file is generated by Configurable Library Manager
3
// Do Not Modify Manually                                
4
/////////////////////////////////////////////////////////
5
#define    CLOCK_FREQ    .20000000
6
#define    XLCD_4BIT 
7
#define    XLCD_2LINE 
8
#define    XLCD_FONT5x8    
9
#define    XLCD_UPPER
10
#define    XLCD_DATA_PORT    2
11
#define    XLCD_RS_PIN    0x15                             
12
#define    XLCD_EN_PIN    0x16                             
13
#define    XLCD_RW_PIN    0x17                             
14
#define    XLCD_BLOCK         
15
#define    XLCD_DELAYMODE         
16
#define    XLCD_DISPLAYON
17
#define    XLCD_CURSORON
18
#define    XLCD_BLINKON
19
#define    XLCD_CURSOR_INCREMENT
20
#define    XLCD_DISPLAY_NOSHIFT
21
//                                                       
22
/////////////////////////////////////////////////////////

das beieht die xlcd.h mit ein.

von Stefan (Gast)


Lesenswert?

Woher weist du denn wie das LCD
angeschloßen werden muß ?

von Tobi D. (fanti)


Lesenswert?

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

von PICSIM (Gast)


Lesenswert?

>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 ;)

von Stefan (Gast)


Lesenswert?

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.

von Martin S. (drunkenmunky)


Lesenswert?

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.

von Tobi D. (fanti)


Lesenswert?

jup seh ich auch so,
denn der PIC läuft bestimmt nicht mit 20 MHz^^

von Joachim (Gast)


Lesenswert?

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?

von PICSIM (Gast)


Angehängte Dateien:

Lesenswert?

>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?

von Martin S. (drunkenmunky)


Angehängte Dateien:

Lesenswert?

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.

von PICSIM (Gast)


Lesenswert?

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.

von Martin S. (drunkenmunky)


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

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.

von PICSIM (Gast)


Lesenswert?

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

von Tobi D. (fanti)


Lesenswert?

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

von Hans W. (stampede)


Lesenswert?

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

von Joachim .. (zinnkruemel)


Lesenswert?

>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.

von PICSIM (Gast)


Lesenswert?

>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.

von Stefan (Gast)


Lesenswert?

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 ?

von PICSIM (Gast)


Lesenswert?

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...

von Stefan (Gast)


Lesenswert?

> 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 ?

von PICSIM (Gast)


Lesenswert?

Ja, Ja, Ja

von Hans W. (stampede)


Lesenswert?

PICSIM,

du bist ne zaehe Wurst :)

Ich hab mal den Maestro angeworfen und PortB als Daten benutzt. Da kommt 
folgendes raus:
1
/////////////////////////////////////////////////////////
2
// This file is generated by Configurable Library Manager
3
// Do Not Modify Manually                                
4
/////////////////////////////////////////////////////////
5
#define    CLOCK_FREQ    .20000000
6
#define    XLCD_4BIT 
7
#define    XLCD_1LINE   
8
#define    XLCD_FONT5x8    
9
#define    XLCD_UPPER
10
#define    XLCD_DATA_PORT    1   <================== HIER
11
#define    XLCD_RS_PIN    0x10                             
12
#define    XLCD_EN_PIN    0x11                             
13
#define    XLCD_RW_PIN    0x12                             
14
#define    XLCD_BLOCK         
15
#define    XLCD_READBFMODE         
16
#define    XLCD_DISPLAYON
17
#define    XLCD_CURSORON
18
#define    XLCD_BLINKON
19
#define    XLCD_CURSOR_INCREMENT
20
#define    XLCD_DISPLAY_NOSHIFT
21
//                                                       
22
/////////////////////////////////////////////////////////
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

von PICSIM (Gast)


Lesenswert?

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.

von PICSIM (Gast)


Lesenswert?

Kommando zurück ;)

Hab ja alles auf RC4 bis RC7 und high nibble ;)

von Tobi D. (fanti)


Lesenswert?

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

von PICSIM (Gast)


Lesenswert?

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.

von Joachim .. (zinnkruemel)


Lesenswert?

>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

von PICSIM (Gast)


Lesenswert?

>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?

von Joachim .. (zinnkruemel)


Lesenswert?

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.

von Tobi D. (fanti)


Lesenswert?

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.

von Joachim .. (zinnkruemel)


Lesenswert?

>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... !

von PICSIM (Gast)


Angehängte Dateien:

Lesenswert?

@@@ 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
9
    { 
10
        while(XLCD_DATAPORT&=0x80);
11
        XLCD_ENPIN=0;
12
        XLCD_Delay500ns();
13
        XLCD_ENPIN=1;
14
        XLCD_Delay500ns();
15
        XLCD_ENPIN=0;
16
        XLCD_DATAPORT_TRIS&=0x0F;           //make upper port output
17
        return;
18
    }

von Joachim .. (joachim_01)


Lesenswert?

>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...

von Tobi D. (fanti)


Lesenswert?

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

von PICSIM (Gast)


Lesenswert?

>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

von Tobi D. (fanti)


Lesenswert?

ö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 :-/

von Joachim .. (joachim_01)


Lesenswert?

Und?

von PICSIM (Gast)


Lesenswert?

Sehe immernoch keine Schrift, dass mit der LED konnte ich noch nicht 
testen...

von Tobi D. (fanti)


Lesenswert?

kannst du die Anzeige "öööö" wiederholen, oder war das ein Zufall?

von PICSIM (Gast)


Lesenswert?

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!!!

von Joachim .. (joachim_01)


Lesenswert?

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?"

von PICSIM (Gast)


Lesenswert?

Ach so wie du das vorgemacht hast ;)

Ach komm ich freu mich halt, lass mich ;)

von holgerw (Gast)


Lesenswert?

Welche PINs von Port C lassen sich denn nicht als Ausgang definieren 
????
Holger

von Martin S. (drunkenmunky)


Lesenswert?

RE3 wegen MCLR
RC4, RC5 wegen USB

von PICSIM (Gast)


Lesenswert?

Seite 122 und S.128 im Datenblatt.

Mal zwei Frage am Rande:

1. Druckt ihr euch die Datenblätter aus? (ich lese eigentlich lieber vom 
Papier als vom Bildschirm)

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?

http://www.google.de/products/catalog?hl=de&biw=1899&bih=934&q=stiftleiste&um=1&ie=UTF-8&tbm=shop&cid=6393991971796126514&sa=X&ei=m4oeTuvYG9CYOqyUkK0D&ved=0CDcQ8wIwAg#

von Tobi D. (fanti)


Lesenswert?

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.

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
Noch kein Account? Hier anmelden.