Leidiges Thema: LCD - Problem am Port C

OP #2473879
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
Angehängte Dateien:
Gast #2473887
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?
Gast #2473898
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"
#2473917
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.
OP #2473929
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

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