Forum: Mikrocontroller und Digitale Elektronik Leidiges Thema: LCD - Problem am Port C


von Jakob B. (teddynator)


Angehängte Dateien:

Lesenswert?

Hallo Forum,

Ich weiß das Thema wird hier zum x ten mal behandelt aber ich hab 
wirklich keine Lösung zu meinem Problem gefunden.
Es ist nicht das erste mal, dass ich ein LCD verwende, bisher hat es 
auch immer problemlos geklappt. Ich benutze immer den Code vom GCC LCD 
Tutorial.

Diesmal habe ich allerdings versucht das LCD anstatt am PORT D am Port C 
zu verwenden, da ich gerne auch INT0/1 und RX/TX verwenden möchte. Die 
nötigen Anpassungen im lcd.h habe ich durchgeführt. lcd.c unverändert 
übernommen.

LCD init klappt scheinbar auch (Balken verschwindet nach den testweise 
eingefügten 2sec delay) Da die 2 Sekunden eingehalten werden, denke ich 
ist auch FCPU korrekt. In meiner Schaltung ist zwar ein quarz aber der 
Controller werkelt im moment noch mit den internen 1MHz

LCD Verdrahtung habe ich mit Durchgangsprüfer überprüft. - stimmt 
ebenfalls.

Mein Problem liegt hier:
1
lcd_clear();
2
set_cursor(0,1);
3
lcd_data( 'T' );
4
set_cursor(0,2);
5
lcd_string("test");

Das LCD zeigt nichts an. Es bleibt dunkel nachdem die Balken 
verschwunden sind. Erwarten würde ich ein "T" in zeile 1 und "test" in 
zeile 2.

Der Controller ist ein ATMEGA8 - also kein JTAG

Wo könnte mein Problem liegen?

kompletter Code und Schaltplanausschnitt sind angehängt.

Danke schonmal für eure Hilfe

von Andy A. (crusty)


Lesenswert?

Servus, hast du das Poti für den Kontrast überprüft?
Vielleicht einmal da rum drehen.

von Ich (Gast)


Lesenswert?

In Deinem "Schaltplan" kann man leider nicht allzuviel erkennen weil 
keine Labels gesetzt sind.

Das Problem erscheint mir zu sein, dass Du PORTC und PORTD gemischt 
hast.
Also E von PORTC kommt, RS aber von PORTD.
Der Code benutzt aber nur einen Port.

#define LCD_PORT      PORTC
#define LCD_DDR       DDRC
#define LCD_RS        PD4
#define LCD_EN        PC5

Schonmal überlegt, den LCD-Code selber zu schreiben?

von Andy A. (crusty)


Lesenswert?

in der header Datei hab ich auch noch zwei Sachen gefunden.

Sollte das nicht PC4 heißen?

#define LCD_RS        PD4
#define LCD_EN        PC5

von Andy A. (crusty)


Lesenswert?

Du warst schneller "Ich" :-)

von Ich (Gast)


Lesenswert?

Ob es PC4 oder PD4 heisst ist völlig egal, das ist nur eine Zahl. :-)
Viel interessanter ist, wo die Signale wirklich angeschlossen sind. :-)

von infest (Gast)


Lesenswert?

Der ganze Code wirkt wie zusammengewürfelt! :D

Das mit PD4 ist mir auch aufgefallen, außerdem wird der Code überhaupt 
so bei dir Compiliert? Normalerweise musst das nicht in deiner Main.c 
stehen: #include "lcd-routines.c"

von Andy A. (crusty)


Lesenswert?

Dies hier brauchst du in der main.c gar nicht.
#include "lcd-routines.c"

Und RS kann irgendwie auch nicht an PC4 sein denn da ist ja der 
Transistor für das Backlight dran.

Also schau doch erstmal wo RS dran ist und konfigurier das in der header 
Datei auch so.

von Ich (Gast)


Lesenswert?

@

Andy Andy schrieb:
> Also schau doch erstmal wo RS dran ist und konfigurier das in der header
> Datei auch so.

Siehe meinen Beitrag.

Genau das hat er doch versucht, das kann aber garnicht funktionieren,
nicht mit dem Code.

von Andy A. (crusty)


Lesenswert?

Der Code ist auch nur für einen Port geschrieben das wird also so gar 
nicht funktionieren.

Nur mal als Beispiel in der lcd_init Funktion:

   LCD_PORT &= ~(1<<LCD_RS);      // RS auf 0

LCD_PORT ist ja PORT C
LCD_RS liegt nicht auf PORT C also kann es auch nicht beeinflusst 
werden.

von Jakob B. (teddynator)


Lesenswert?

Andy Andy schrieb:
> Sollte das nicht PC4 heißen?

infest schrieb:
> Das mit PD4 ist mir auch aufgefallen,

Andy Andy schrieb:
> LCD_RS liegt nicht auf PORT C also kann es auch nicht beeinflusst
> werden.

Andy Andy schrieb:
> LCD_PORT ist ja PORT C
> LCD_RS liegt nicht auf PORT C also kann es auch nicht beeinflusst
> werden.

Ok danke für eure schnellen Antworten. Ich denke hier liegt das Problem. 
Dann werd ich das mal in meiner Schaltung entsprechend umbauen.


infest schrieb:
> Der ganze Code wirkt wie zusammengewürfelt! :D

richtig :) Hab das ganze leider nie wirklich gelernt und muss mir immer 
irgendwie anders behelfen.


Ich schrieb:
> Schonmal überlegt, den LCD-Code selber zu schreiben?

Nö bisher haben mir ja die fertig codes immer gereicht aber vielleicht 
mach ich mich in nächster Zeit mal dran

von Jakob B. (teddynator)


Lesenswert?

Danke für eure Hilfe, jetzt funktioniert alles korrekt.

von Andy A. (crusty)


Lesenswert?

Wenn du nicht so fitt im programmieren bist dann ist vielleicht das 
umverdrahten die beste Lösung.

Jedoch ist das umschreiben der Software etwas leichter :-) und geht auch 
schneller.

Viel Spaß und Glück noch.
Lass uns doch wissen ob dann alles geklappt hat.

von Jakob B. (teddynator)


Lesenswert?

Andy Andy schrieb:
> Lass uns doch wissen ob dann alles geklappt hat.

Jakob B. schrieb:
> Danke für eure Hilfe, jetzt funktioniert alles korrekt.

Ja, das umverdrahten hat geholfen. Vielleicht werd ich mich aber 
trotzdem noch mit dem umprogrammieren beschäftigen. Hab aber bis jetzt 
noch keine großen blicke in lcd.c gewagt :)

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.