PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit LCD



Ripper11
27.02.2008, 18:44
Hallo Bastler,
ich habe mir bei Pollin das LCD-Modul NAN YA LMK62R125A1 geholt.
Nun habe ich folgende Probleme:
1) Es "leuchtet" nur 1 von 2 Zeilen. Ich hab das ganze so angeschlossen wie hier: https://www.roboternetz.de/wissen/index.php/Bascom_und_LCD%27s beschrieben. Den Kontrast für die Zeile kann ich auch einstellen. Muss ich sonst noch irgendwelche Einstellungen vornehmen?

2) Die Textausgabe funktioniert auch nicht :(
Hab dafür den Code verwendet:


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32

Config PORTA.2 = Output
Config PORTA.4 = Output

PORTA.2 = 0
PORTA.4 = 1

Config Lcd = 16*2
Config Lcdpin = Pin, Db4 = Portb.0, Db5 = Portb.1, Db6 = Portb.2, Db7 = Portb.3, E = Portd.2, Rs = Portb.4
Config Lcdbus = 4

cls
Locate 1,1
Lcd "Hallo Welt"



Muss ich den Code noch ein bissche abändern?

Wie man sehen kann habe ich den Strom für das Display vom Controller geholt. Ich verwende den Atmega 32.

Danke schonmal.

Gruß Fabi

Jörn Arne
27.02.2008, 19:27
Hast du ein anderes LCD Modul, um deine Anschlüsse und dein Programm zu testen?

Da das Display über den Standart Controller gesteuert wird, denke ich nicht dass es eine Konfigurationssache ist
(Ausgenommen in BASCOM muss man noch irgendwas einstellen) - deswegen wäre ein Test mit einer anderen Komponente nicht schlecht.

Ich weiß zwar nicht, ob das eine Ente war, aber ich habe mal gehört, dass die Pollin Komponenten gebrauchte Teile sind - möglicherweise ist das Display beschädigt.

McJenso
27.02.2008, 19:38
Hallo,

muss in Bascom nicht auch die Taktfrequenz mit definiert werden? crystalirgendwas = Taktfrequenz. Wenn der reale Takt höher als der Bascomtakt ist, sind die Pausen zwischen den Befehlen mit Sicherheit zu kurz.
Das beschriebene Bild passt zu einer fehlerhaften Initalisierung.
Gruß

Jens

milkbubi
27.02.2008, 20:06
Ja den Takt sollte man schon angeben, sonst wird das nix. Wenn das nicht hilft versuch mal vor und hinter der Initialisierung ein wait. Wie McJenso bereits gesagt hat, sieht es nach Fehler bei der Init aus. Evtl. ist der µC einfach schneller als dein Display und dieses kann dann nicht reagieren, weils einfach nicht bereit ist.

mfg milkbubi

pongi
27.02.2008, 20:06
Wenn du ein LCD einschaltest, und nicht initialisierst, ist es normal, dass aus 2 Zeilen nur eine leuchtet.


Das meine ich:
http://www.modding-faq.de/moddingfaq/lcd/lcdloeten2/lcd_41_th.jpg

Gruß

pongi

Ripper11
27.02.2008, 21:06
Hallo zusammen,
Danke für Eure schnellen Antworten.

@ Jörn Arne
Ne, habe ich leider nich.

@ McJenso
Ich habe bei mir einen 16 Mhz Quarz verbaut. Aber ich kapier nich wie ich da die Fusebits einstellen muss.Also habe ich die Standardeinstellung gelassen. Habe bei meinem Code oben also noch $crystal = 1000000 hingeschrieben.

@pongi
Dann bin ich ja beruhigt das das so ist.

Was meint Ihr mit der Initialisierung?
Das:
Config Lcd = 16*2
..
..
Wenn ja, habe ich ein wait 2 vor config Lcd und ein wait 2 nach Config Lcdbus = 4 geschrieben.

Gruß Fabi

milkbubi
28.02.2008, 10:38
Gehts denn nu oder nicht???

T.J.
28.02.2008, 11:49
Ich habe bei mir einen 16 Mhz Quarz verbaut. Aber ich kapier nich wie ich da die Fusebits einstellen muss.

Soweit ich weiß laut Datenblatt 1111, aber vorsicht mit programmed und unprogrammed ;)



Was meint Ihr mit der Initialisierung?
Das:
Config Lcd = 16*2
..
..
Wenn ja, habe ich ein wait 2 vor config Lcd und ein wait 2 nach Config Lcdbus = 4 geschrieben.


gibt auch noch initLCD oder LCDinit

Ripper11
28.02.2008, 21:31
Hi,

@T.J.
Danke, die Fusebits hab ich jetzt eingstellt und $crystal geändert.
Ich hab jetzt noch initlcd unter 'config lcdbus' geschrieben.

@milkbubi
Sorry, hab ich total vergessen. Aber es geht leider nicht :(

milkbubi
28.02.2008, 23:31
hmm...
das InitLCD brauchst du bei Textdisplays zumindest nicht. Poste doch nochmal exakt den Code, den du jetzt benutzt. Ansonsten check nochmal alle Verbindungen gründlich durch und überprüf mit der Anschlussbelegung. Wenns alles nicht hilft dann poste vielleicht nochmal genau was du wie angeschlossen hast.

mfg milkbubi

Ripper11
29.02.2008, 18:50
hi
mein Code:



$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600

Config Porta.2 = Output
Config Porta.4 = Output

Porta.2 = 0
Porta.4 = 1

Wait 2
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portd.2 , Rs = Portb.4
Config Lcdbus = 4

Wait 2

Cls
Locate 1 , 1
Lcd "hallo welt"

End


Hab eben nochmal alle Anschlüsse überprüft aber hat auch nix gebracht.
Ich habe beim Compiler noch ein paar Einstellungen vorgenommen.Hab ein Bild gemacht(Siehe Anhang). Muss ich bei Lcd-Address und RS-address noch etwas Einstellen?Kann ich den PORTB schon als Ausgang benutzen?


Gruß Fabi

milkbubi
29.02.2008, 22:39
Die Einstellungen direkt im Compiler kenn ich gar nicht und braucht man auch nicht. So wie dein Programm aussieht müsste es eigentlich gehen. Ist R/W auf Masse gelegt? Hast die Verbindungen mal durchgepiept? Ansonsten kann ich nur sagen, dass ich schon des öfteren Anschlussdrähte vertauscht hab und dann ewig nach dem Fehler in der Software gesucht habe.
Warum liegt E in Port D und der Rest in Port B? kein Platz?

Ripper11
02.03.2008, 17:30
Hallo zusammen,

ja R/W hab ich auf Masse gelegt. Hab alles x-Mal durchgepiepst und keinen Fehler entdeckt. Ja, das E auf Portd liegt ist ein Platzproblem. Aber daran darf es ja normal nicht liegen.

Ich gibs jetzt einfach auf! Dann lass ich das Display halt weg.
Trotzdem vielen Dank für Eure Antworten!

Gruß Fabi