PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : 16x2 LCD mit Bascom



Dunuin
19.09.2010, 03:48
Moin,

Ich habe wieder mal ein Problem.
Ich habe das 16x2 LCD "W162B-N3LW" (Datenblatt (http://www.qscomp.cz/Pdf/blueline-w.pdf)) an einen ATmega32L angeschlossen, aber ich bekomme da keinen Text drauf.

Bild vom Schaltplan (http://img268.imageshack.us/img268/2128/eierlaufgert6.png)
Es ist noch nicht alles angeschlossen, was auf dem Schaltplan zu sehen ist.
An meinem Testaufbau ist erst die Grundschaltung mit 5V Wandler, die LED und das Display dran.
Taster, Beschleunigungssensor und IR-Empfänger fehlen noch.
Anstatt der Batterie gebe ich 7V mit einem Netzteil und weil ich kein 1k Poti hatte, habe ich testweise eine Widerstandssonne drangehängt, wo ich dann für den Kontrast zwischen den Widerständen von 10-1000Ohm wechsle.

Mein Programm sieht so aus:


'########################### uC Infos setzen ###################################
$regfile = "m32def.dat" ' specify the used micro
$crystal = 8000000 ' used crystal frequency
$baud = 19200 ' use baud rate
$hwstack = 100 ' default use 32 for the hardware stack
$swstack = 100 ' default use 10 for the SW stack
$framesize = 100 ' default use 40 for the frame space


'########################## Ports deklarieren ##################################
'PD7 -> LED0 zum zeigen das uC an ist
Led0 Alias Portd.7
Config Led0 = Output
Config Portd.0 = Output
Portd.0 = 1
Config Portd.1 = Output
Portd.1 = 1
Config Portd.2 = Output
Portd.2 = 1
Config Portd.4 = Output
Portd.4 = 1
Config Portd.5 = Output
Portd.5 = 1
Config Portd.6 = Output
Portd.6 = 1

Led0 = 1
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.2 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.5 , Rs = Portd.6
Config Lcdbus = 4
Config Lcdmode = Port
Config Lcd = 16 * 2
'CURSOR OFF
INITLCD
Waitms 1000
Do
Initlcd
Waitms 500
Locate 1 , 1
Lcd "Test1"
Locate 2 , 1
Lcd "Test2"
Toggle Led0
Wait 3
Cls
Loop

End


Wenn ich die Schaltung nun mit Strom versorge, dann leuchtet die Hintergrundbeleuchtung des Displays, die obere Zeile ist weiß, die untere Zeile schwarz und die LED blinkt im ca. 3 Sekunden Takt.

D5 ist übrigens auf 0V, die anderen Datenleitungen auf 5V, falls das was zu sagen hat.

Laut Datenblatt ist es HD44780 kompatibel und ich bin auch schon auf Forenbeiträge gestoßen, wo Leute dieses Modell mit Bascom verwendet haben.

Weiß da jemand weiter?

Jaecko
19.09.2010, 09:39
Wenn die "untere" Zeile bei dir schwarz ist, sind die Anschlüsse dann zufällig auf der Unterseite? Bei nem uninitialisierten LCD sind normalerweise die ungeraden Zeilen "schwarz", d.h. Display liegt kopfüber da.

Ansonsten versuch mal, die Wartezeit VOR die LCD-Initialisierung zu stellen. Wenn beide gleichzeitig bestromt werden, fängt der AVR sonst mit dem Initialisieren an, wenn das LCD noch garnicht richtig hochgefahren ist.

"die anderen Datenleitungen auf 5V": aber nur D4, D6 und D7 oder?
Wenn das bei D0-D3 auch noch der Fall wäre, stimmt was gewaltig nicht.

Und die 7V liegen hoffentlich weder direkt am AVR noch am LCD an sondern nur am Spannungsregler.

werner21
19.09.2010, 11:24
Du hast Dir eine kleine Falle eingebaut.
Das Display ist an D0/D1 am AVR angeschlossen.
Im Programm hast du den UART aktiviert,dadurch sind diese beiden
Pins jetzt RXT/TXT :-s .Damit hast du keinen Zugriff mehr auf die IO-Pins
>falsche Ansteuerung des Displays[/b]

kalle_bmw
19.09.2010, 16:30
... Im Programm hast du den UART aktiviert...

Mit welcher Zeile wird denn der UART im Programm aktiviert?

Dunuin
19.09.2010, 16:59
Wenn die "untere" Zeile bei dir schwarz ist, sind die Anschlüsse dann zufällig auf der Unterseite? Bei nem uninitialisierten LCD sind normalerweise die ungeraden Zeilen "schwarz", d.h. Display liegt kopfüber da.
Ich glaube die Schrift soll später weiß auf blauem Hintergrund sein.


Ansonsten versuch mal, die Wartezeit VOR die LCD-Initialisierung zu stellen. Wenn beide gleichzeitig bestromt werden, fängt der AVR sonst mit dem Initialisieren an, wenn das LCD noch garnicht richtig hochgefahren ist.
Ok, teste ich gleich mal.


"die anderen Datenleitungen auf 5V": aber nur D4, D6 und D7 oder?
Wenn das bei D0-D3 auch noch der Fall wäre, stimmt was gewaltig nicht.
D4,D5,D7 sind High, D5 ist Low und natürlich auch D0-D3. Die ersten 4 habe ich ja an GND gelegt.


Und die 7V liegen hoffentlich weder direkt am AVR noch am LCD an sondern nur am Spannungsregler.
Ja, die 7V liegen am Spannungsregler. Der gibt konstante 4,95V aus.


Du hast Dir eine kleine Falle eingebaut.
Das Display ist an D0/D1 am AVR angeschlossen.
Im Programm hast du den UART aktiviert,dadurch sind diese beiden
Pins jetzt RXT/TXT Eh? .Damit hast du keinen Zugriff mehr auf die IO-Pins
>falsche Ansteuerung des Displays[/b]
RS232 wollte ich eigentlich nicht nutzen, daher dachte ich, dass ich TXD und RXD als normalen I/O-Pin nutzen könnte. Könnte natürlich sein, dass der Atmega das automatisch aktiviert. Kann man das denn irgendwie deaktivieren, falls es wirklich an sein sollte?

Jaecko
19.09.2010, 17:27
Ok, das mit blau/weiss hab ich übersehen; dachte es wäre ein klassisches grün/schwarz. Dann stimmt die Zeilenanordnung schon.

Zum Deaktivieren der UART einfach die Zeile mit $Baud rauswerfen.
Dann dürfte Bascom den UART nicht mehr initialisieren. Falls doch, kann man den UART nachträglich wieder deaktivieren, in dem man die Register UBRRH, UBRRL, UCSRA, UCSRB und UCSRC auf 0 setzt.

Dunuin
19.09.2010, 17:39
Ich habe jetzt einfach mal andere Pins, anstatt den TXD-, RXD-Pins genommen, ein "Wait 1" vor das "LCDINIT" gesetzt und es funktioniert nun.
Das mit dem deaktivieren des UART werde ich gleich mal testen. Wäre schon schöner, da es die Platine kleiner macht.

Vielen Dank! :-)

funkheld
20.09.2010, 16:11
Also das ist unsinn und ist nicht der fehler ""Wait 1".
Was soll das Ding in der "Loop"....?

gruss.