LCD ansteuerung mit PIC18F2525

OP #898970
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
Angehängte Dateien:
Gast #899158
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 ??
#899162
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.
OP #899174
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ß
Gast #899177
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 ?
Gast #899208
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.
OP #899329
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????
Angehängte Dateien:
#899348
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?
Gast #899359
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.
#900013
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?!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren