Forum: Mikrocontroller und Digitale Elektronik LCD ansteuerung mit PIC18F2525


von Tobias S. (supertsoll)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich bin an einem Projekt das ich schnellst möglich beenden muss und ich 
komm einfach nicht weiter!
Ich benutze den PIC 18F2525 um eine Displayansteuerung im 4-Bit Modus zu 
machen!
Meine Dateneingänge sind RB4 bis RB7 für D4 bis D7. Der Enable hängt am 
RB3, R/W an RB2 und RS an RB1.

Mein Code ist im Anhang!


Ich benutze das DIP162-DNLED Display
Kann mir jemand dringend helfen???

Danke im Voraus

von Tobias S. (supertsoll)


Lesenswert?

Ist denn echt keiner da der mir irgendwie helfen kann?

von Εrnst B. (ernst)


Lesenswert?

Checkliste hier
Beitrag "Wettaufruf "Probleme mit LCD""

mal durchschauen.

Ansonsten: Dein Code compiliert bei mir nicht, für welchen Compiler ist 
der?

von Tobias S. (supertsoll)


Lesenswert?

Ich benutze den mcc18 Compiler im MPLap!

von Analog (Gast)


Lesenswert?

Sieht aus wie eine Prüfungsaufgabe der FS-Elektrotechnik, Lörach. Da 
sind ja ausser der Initialsierung keine weiteren Routinen, die irgendwas 
aufs Display bringen sollen. Hast Du das überhaupt selbst geschrieben ??

von Andreas K. (a-k)


Lesenswert?

Mit den Delays stimmt was nicht. Bei
> Delay10KTCYx(10); //Verzoegerung 10mS
> Delay10KTCYx(5);  //Verzoegerung 50ms
ist mindestens eines falsch oder falsch kommentiert.

Bin auch grad nicht im Satz, ob das wirklich Millisekunden sind, oder 
vielleicht bloss Vielfaches von Prozessorzyklen, was ja nicht unbedingt 
auf's gleiche rausläuft.

von Tobias S. (supertsoll)


Lesenswert?

Ja, ich bin auf der TS in Lörrach und mach das als Abschlussarbeit!
Ich will lediglich die 2 Zeilen auf das Display bringen! Alles andere 
folgt dann noch! Mein Problem ist nur, das ich es bis Donnerstag haben 
muss und ich nun schon über ne Woche an der Init rumbastle und es 
einfach nicht will!!!

Gruß

von holger (Gast)


Lesenswert?

Immer wieder die gleichen Fehler:

>#define display LATB          //Ausgang fuer das Display
>#define rs_display LATBbits.LATB1    //Display "register select" - PIN2

>Meine Dateneingänge sind RB4 bis RB7 für D4 bis D7. Der Enable hängt am
>RB3, R/W an RB2 und RS an RB1.

Und dann machst du sowas:
 display = 0x02;

Schreibs doch einfach mal hin:

 LATB = 0x02;

Was machst du damit ? LATB1 setzen ? RS ?

von Analog (Gast)


Lesenswert?

Also erzähl doch mal was passiert. Kannst Du den Konstrast verstellen, 
was sieht man dann ? Schaltplan wäre auch gut.

von Tobias S. (supertsoll)


Angehängte Dateien:

Lesenswert?

>
> Was machst du damit ? LATB1 setzen ? RS ?

Ja, das ist für die Initialisierung daß das Display auf 4-Bit Modus 
geschalten wird! Anbei hänge ich noch das Datenblatt mit der 
Beispielinit dran.

von Tobias S. (supertsoll)


Angehängte Dateien:

Lesenswert?

Analog wrote:

> was sieht man dann ? Schaltplan wäre auch gut.

Wenn ich einschalte leuchtet die Hintergrundbeleuchtung und die Obere 
Zeile ist schwarz! Ja, die Kontrastverstellung funktioniert.

Schaltplan hänge ich an!

von holger (Gast)


Lesenswert?

>Ja, das ist für die Initialisierung daß das Display auf 4-Bit Modus
>geschalten wird!

Und dafür reicht es RS zu setzen ?
Hallo !! Jemand zu Hause ?
Die 0x02 soll auf die Datenleitungen.
Und das sind bei dir PB4 bis PB7.
Du schreibst aber eine 0 auf diese Leitungen
und setzt stattdessen RS.

von Tobias S. (supertsoll)


Angehängte Dateien:

Lesenswert?

Ich hab es jetzt umgeschrieben, jedoch hat sich an der situation nichts 
geändert! Ich weis bald echt nicht mehr woran es noch liegen könnte!!!

Ich hänge den geänderten code nochmal an, vielleicht findet ja jemand 
noch etwas!

Könnte es eventuell noch mit der Deklaration zusammenhängen?

Statt LATB z.B.:PORTB????

von Andreas K. (a-k)


Lesenswert?

Ein E-Puls von 1 Sekunde Dauer ist genauso falsch bei einer von 100ms 
Dauer. Ist aber nicht das Problem.

Es gibt beliebig viele funktionierende Beispiele für LCD-Anstduerung 
hier, meist zwar für AVR, aber am Prinzip ändert das nichts.

Lies doch mal was "holger" geschrieben hat. Wenn du schreibst
> display = 0x02;
dann setzt du vom Port die Pins 0,2-7 auf 0 und Pin 1 auf 1. Was meinst 
du bringt es, wenn du also immer nur Nullen (die an Bits 4-7) an den 
Display-Controller schreibst?

von Andreas K. (a-k)


Lesenswert?

NB: Bei dem Kenntnisstand wär's besser du fängt mit einzelnen LEDs an 
Portpins an. Auch wenn der Zeitdruck noch so gross ist - in völligem 
Blindflug ohne Verständnis was du da machst ist selbst etwas relativ 
einfaches wie eine LCD-Ansteuerung schwierig.

von holger (Gast)


Lesenswert?

//Zeilen ansprechen
void switch_z1 (void)
{
LATB = 0x08;  // Falsch
.....
}

void switch_z2 (void)
{
LATB = 0x0C;  //Falsch
....
}

void show_text (char *ptr)
{
 LATB = (*ptr/0x10) | 0x10; //Falsch
....
 LATB = (*ptr & 0x0f) | 0x10;//Falsch
....
}

Geh durch deinen kompletten Code und beseitige
die falschen Befehle zum ansteuern der Datenleitungen.

von Tunichgut (Gast)


Lesenswert?

>Ja, ich bin auf der TS in Lörrach und mach das als Abschlussarbeit!
Na, super. Abschluss als was? Pausenaufsicht?

von Master S. (snowman)


Lesenswert?

lies doch mal das hier durch, dann verstehste, warum hier so viele 
mekern (sich über deinen kenntnisstand und dementsprechend realisierte 
lcd-initialisierung nerven)
http://www.sprut.de/electronic/lcd/index.htm

viel glück

von Tobias S. (supertsoll)


Lesenswert?

Ich bin euch ja echt dankbar für alles! Jedoch bin ich der Meinung das 
kein Profi vom Himmel fällt und für was gibt es denn solche Foren, wenn 
man nicht nachfragen darf!

Ich habe alles in Ordnung gebracht, jedoch tut sich immer noch nichts!

Gruß

von Master S. (snowman)


Lesenswert?

und jetzt sollen wir raten was du alles geändert hast? (stichwort: 
glaswürfel in reperatur..) wieso nimmste nicht einfach einen fertigen 
und funktionierenden code (geschrieben in C18, GCC oder weiss ich nicht 
was) und änderst die syntaxe so ab, dass dein compiler sie versteht?!

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.