Fehler LCD-Display im 8Bit-Modus

Gast #5269283
Lesenswert?

Guten Morgen,
ich finde meinen Fehler bei der Initialisierung eines LCD-Displays 
(16X2) im 8-Bit-Modus nicht.Hier mal kurz das kleine Programm:
1
$regfile = "ATtiny2313.dat"
2
$crystal = 1000000
3

4
Ddra = &B00000000
5
Ddrb = &B11111111          
6
Ddrd = &B01111111
7

8
Dim Wert As Byte
9

10
CONFIG LCDPIN = PIN , PORT=PORTB, E=Portd.6, RS=Portd.5
11
Config Lcd = 16x2           
12

13
PortD.4 =0       'RW am Display Off (nur schreiben)
14
           
15

16
'Hauptprogramm
17
'-------------
18
Waitms 200
19
Cls
20
Cursor Off
21

22
Locate 1 , 1
23
Lcd "Hallo"
24

25
Locate 2 , 1
26
Lcd "World"
27

28
Do
29
 wait 1
30
 lcd Wert
31
Loop
32
End

In der ersten Zeile wird korrekter weise "Hallo" ausgegeben und die 2. 
Zeile fehlt. Nach ca. 10 Sekunden wird die erste Zeile mit "0000.." 
überschrieben.
Ich denke ich habe das Display falsch initialisiert. Aber wo?

Danke und Gruß aus Magdeburg
H.-Jürgen
Beitrag #5269300 wurde von einem Moderator gelöscht.
Gast #5269388
Lesenswert?

Auch selber mal lesen:

If you do not connect the WR pin to ground but to a pin, and you do not 
specify the WR pin, but you set the logic level to 0 in your code, you 
have to use an INITLCD command after you have set the WR pin to 0.
Gast #5269582
Lesenswert?

Ich kann es Dir nochmal schreiben:

Dein "Locate" für die 2. Zeile ist falsch. Lies mal die Hilfe dazu.

Der "lcd Wert" schreibt einfach ab der aktuellen LCD-Cursor-Position den 
Initialwert von "Wert" (= 0) bis irgendwann ...
Gast #5269729
Lesenswert?

Nein Dieter F.! Die Anweisung mit Zeile und dann Spalte ist schon 
korrekt. Daran liegt es nicht. Und wenn dann hätte auf dem Display 
gestanden:
"HWorld". Also die erste Anweisung und dann überschrieben mit "World" in 
der ersten Zeile aber erst ab Spalte 2. Es ist aber nicht so!
Gast #5270057
Lesenswert?

Ja, hat auch nichts gebracht. Habe aber noch folgendes gefunden:
The CONFIG LCDPIN has an option to use the WR pin, and use the busy flag 
of the display. If you have enough pins, this is the best mode.
Bei mir liegt er nun fest auf Masse. Mal sehen aber heute nicht mehr.
Danke Jürgen
#5270104
Lesenswert?

Hi,
es gibt noch andere Beispiele für BASCOM LCD Initialisierungen.

https://avrhelp.mcselec.com/index.html?deflcdchar.htm

Also,
die meisten Probs. entstehen (wie man nachlesen kann) anscheinend durch:
1. Portzuordnung
2. Warteschleifen
3. Gebrauch des Busy-Flags
4. Erzeugung bzw. richtiges Setzen der oft vergessenen aber notwendigen 
"Enable-Impulse"

HJH-MD schrieb:
> and use the busy flag
> of the display. If you have enough pins, this is the best mode.

Das Busyflag kann während der allerersten Befehle nicht ausgelesen und 
entsprechend nicht benutzt werden. Man braucht die "Pausen" zwischen den 
Befehlen. Dazu sind die Warteschleifen drin.

Die Libraries berücksichtigen oft nicht die "timings".
Das wäre dann Punkt 5.

Wenn -  wie in dem Thread hier - irgendetwas verschluckt oder 
überschrieben wird, liegt das nicht selten an den sog. Timing-Problemen.

Noch ein Punkt (6) wäre die falsche Deklarierung oder Vergessen des 
Speicherns von Status- und Temporärregistern.(push pop...etc.)

In ASM wird so eine Initialisierung auch schon nicht mehr absolut 
"trivial".

Aber wir reden hier ja über BASCOM. Das macht's ja (hoffentlich) schon 
von alleine ohne überflüssigen Ballast. ;-)


ciao
gustav
Gast #5270666
Lesenswert?

Guten Morgen und danke.
Das Problem liegt immer noch daran, dass ich die 2. Zeile nicht sehe. 
Ich habe mal auf den 4Bit-Modus (den nehme ich schon die letzten Jahre 
ohne Probleme mit Bascom und versch. Controllern) umgelötet und es 
funktioniert.
Aber im 8Bit-Modus scheint das Programm korrekter weise nach der letzten 
Locate-Anweisung genau dahinter zu beginnen den "Wert" (hier = 0) 
auszugeben.
Und nach ca. 10 Sekunden durch den Wait 1 Befehl im Hauptprogramm wird 
die Zeile 1 mit den Nullen überschrieben. Ich sehe also nur die Zeile 2 
nicht.
Ich habe mich für dieses Layout entschieden, weil ich einen Code in ASM 
oder C für eine LCD-Anzeige selbst schreiben möchte ohne die Biblio von 
Bascom.
Mache dann mal weiter ...
Jürgen
#5271248
Lesenswert?

HJH-MD schrieb:
> Ich habe mich für dieses Layout entschieden, weil ich einen Code in ASM
> oder C für eine LCD-Anzeige selbst schreiben möchte ohne die Biblio von
> Bascom.
> Mache dann mal weiter ...

Hi @HJH,
hab'mal ein bisschen rumgebastelt.

Also, der Simulator macht's schon 'mal. (Die Zeitschleifenvariablen 
vorher anpassen.)

Viel Spaß
 Das scheint auf den ersten Blick unnötig "aufgeblasen".
Man sollte es sich zur guten Angewohnheit machen, die Interruptvektoren 
auszuformulieren, auch , wenn sie momentan garnicht gebraucht 
werden.(Das ist nämlich noch Fehlerquelle ääähm Punkt 7.)


ciao
gustav
Angehängte Dateien:

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