16er LCD nur 8 Zeichen ?

dg2ygq

Neues Mitglied
23. Juli 2007
239
0
0
Bielefeld
Sprachen
Ich habe mir ein LCD Display mit 16 Zeichen (1 Zeile) bestellt.
Nun Zeigt das gute Ding aber nur die ersten 8 Zeichen an :confused:

Bascom:
$regfile = "m8def.dat"
$crystal = 1000000

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

Cls
Locate 1 , 1
Lcd "123456789abcdef0"

Display LCD161A :
http://www.reichelt.de/?;ACTION=7;L...wQASAAACHUGE827386ae89db51658d5544d937baa6f3a

Angeschlossen (4Bit) nach :
Display Am AVR
1 Vss GND
2 Vcc 5V
3 Vee Poti (siehe oben)
4 RS PD4 am AVR
5 RW GND
6 E PD5 am AVR
7 DB0 GND
8 DB1 GND
9 DB2 GND
10 DB3 GND
11 DB4 PD0 am AVR
12 DB5 PD1 am AVR
13 DB6 PD2 am AVR
14 DB7 PD3 am AVR
15 Beleu. frei
16 Beleu. frei

Was hab ich falsch gemacht ???


Hmmm, hab im Code getüftelt : Config Lcd = 16 * 2 und Locate 2 , 1 schon zeigt das Display "12345678" auf der rechten Hälfte an.
Allerdings "pulsiert" die Anzeige recht merkwürdig ?!
 
Hallo Thomas,
bei 16 * 1a macht das Display noch komischere Dinge :

"1234" erscheint durchgehend im Display,
dann erscheint dahinter "5678", schaltet um, erscheint auf der rechten Hälfte "56789abc" (wobei ganz links "1234" weiterhin stehen bleibt)!
Die Anzeige blinkt, wechselt so ca 2Mal pro Sec.

Leitungen habe ich nachgemessen, auch statt dem Mega8 einen 8515 versucht, mit dem gleichen Ergebnis
:confused:
 
hallo,

schonmal versucht eine zeit einzubauen, damit man mal lokalisieren könnte wo das flackern herkommt.

ist nur ne idee

bin selber noch anfänger..


Gruss Alex :rolleyes:
 
Hallo Michael,

irgendwo scheint mir da schon in Deiner Initialisierung der Wurm drin zu sein :D
Ich bin mir nicht sicher ob das Init richtig funktioniert und die Reihenfolgenden Deiner Initialisierung richtig sind.:cool:

Weiter finde ich den Vorschlag von Thomas nicht schlecht. Mit dem Parameter 1a könnte das ein ganz guter Ansatz sein zumal dieser auch in BASCOM so beschrieben ist. :rolleyes:

Schauen wir uns aber erst mal zunächste Deine Initialisierung an. Die würde ich wie folgt gestallten:

Code:
' ----- Konfiguration LCD Display -----
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcd = 16 * 1
'Config Lcdbus = 4                                           ' nicht zwingend erforderlich
Initlcd
Waitms 100
Cursor Off Noblink
Cls

Anmerkungen:
- Der Befehl "Config Lcdbus = 4" ist nicht zweingend erforderlich und kann weggelassen werden.
- Du solltest die Reihenfolge wie oben geschrieben einhalten und nach dem InitLcd dem LCD auch noch etwas Zeit lassen.
- Wichtig für die Initialisierung ist auch das erste CLS
- Unter Umständen solltest Du die von Thomas beschriebene Ergänzung "Config Lcd = 16 * 1a" verwenden.
- In BASCOM gibt es die Möglichkeit beim "Config Lcd" den ChipSet des Displays mit anzugeben.

Beispiel für ein DOG-M Display:
Config Lcd = 16 * 3 , Chipset = Dogm163v5

- Du solltest Dir das Datenblatt vom Display genauer anschauen und klären ob Du mit den BASCOM Standardeinstellungen arbeiten kannst oder ob Du für Dein Display ein eigenes Chipset angeben musst.


So, jetzt hast Du wieder genug "Stoff" zum ausprobieren.

Viel Glück,
Markus
 
Ok, ich habe die Reihenfolge verändert und auch die Wartezeit eingebracht.
Geändert hat sich garnichts :confused:

Wenn ich allerdings die Locate-Anweisung weg lasse, zeigt er mir die Reihe komplett an ( bei Config Lcd = 16 * 1a).
Verändere ich allerdings den Text, so dass ich keine 16Zeichen ausnutze, werden alle Felder nur schwarz....

Der Controler ist wohl ein KS0066u ?!
Woher würde ich denn den Chipset-File dafür herbekommen?
 
Hallo,

probier mal folgendes aus :

Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcd = 16 * 4
Initlcd
Waitms 100
Cls

Offensichtlich wird der KS0066 für 4-zeilige Displays verwendet. Kann gut möglich sein das er da nur für ein einzeiliges Display mißbraucht wurde.

Mit lowerline, upperline, locate & Co kannst Du bei einzeiligen Displays eh nichts anfangen. Da würde ich einfach immer nur mit cls löschen und mit Blanks den Text an die richtige Stelle setzen.

Beispiel :
lcd "......Test......" (Die Punkte sollen Blanks darstellen)

Thomas
 
Hi @,

jetzt hab ich nochmal ne Nacht drüber geschlafen und mir sind noch ein paar Dinge eingefallen welche Du prüfen / kontrollieren solltest:

[1] JTAG Fuses:
Beim Betrieb des Displays am Port C eines ATMEGA 16 oder 32 sollte man normaler Weise die JTAGEN Fuse zurücksetzen. Du verwendest einen Mega8, dann kannst Du Dir mal das Thema im Hinterkopf behalten.

[2] Architektur des LCD-Display:
Soweit ich verstanden habe kann man nur die Zeichen 1 - 8 mit "Locate 1,1" ansprechen. Versucht man jedoch mit "Locate 1,9" die Zeichen ab 9 anzusprechen scheitert dieses. Den Zeichen ab 9 sind die Werte 40 - 47 zugeordnet. Das Locate muß also "Locate 1,40" lauten. Probiers aus!
Ich glaube das hat mit der Speicherstruktur des LCD-Chip und mit Paging zu tun, wie der Controller die Daten im Speicher mapped.

[3] ChipSet
Im Datenblatt habe ich etwas gefunden über den Chipsatz KS076b. Da kannst Du mal folgenden Code Probieren:

Code:
$regfile = "m8def.dat"
$crystal = 1000000

Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcd = 16 * 1a , CHIPSET=KS077
Do 
     Display On 
     Cls 
     Lcd "Hello world..." 
     Wait 2 
     Cls 
     Lcd "Hello me..." 
     Wait 2 
     Display Off 
Loop


Grüße und schönes Wochenende,
Markus
 
Klasse, Danke Markus :)

Einfach nur
Config Lcd = 16 * 1a , CHIPSET=KS077
und schon läuft das Display mit allen 16 Zeichen :eek:

Allerdings bleibt der Cursor an, trotz "Cursor Off Noblink" , was aber (noch) nicht weiter schlimm ist.

Locate 1.40 macht das Display übrigens auch (ab der 9. STelle dann) !

Danke auch an Knickohr und foley für eure Ideen und Vorschläge!
 
Ja Super, da bin ich aber froh :p

Mit dem Cursor & NOBlink musst Du mal sehen, wie das entsprechende Kommando in der Spec zuM Display aussieht. Es kann sein, dass Du driekt auf ein Register schreiben must und der BASCOM-Befehl hier nicht sauber funktioniert.

Wie man prinzipiell auf Register von LCDs zugreift, kannst Du Dir in meinem Beispiel zur LCD-Ansteuerung ansehen. Dort habe ich - dank Hilfe von Knickohr Thomas - eine Kontraststeuerung realisiert.

Link:
http://www.avr-praxis.de/forum/showthread.php?t=51

Grüße,
Markus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)