PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD ver***t mich...



Jaecko
30.03.2007, 07:00
Moin.

Nachdem ich ja vor einiger Zeit mal ein Problem mit einem LCD hatte, hab ich gestern mal da wieder weitergemacht.

Nochmal kurz was war:
Ein altes Display (HD44780, 40x2) soll an einem AVR betrieben werden. Angesteckt, LCD-Befehle von Bascom verwendet: Display bleibt "Aus" (also eigene LCD-Initialisierung, nur die erste Zeile ist aktiv). Ein anderes, max. 2 Jahre altes Display angesteckt: Funktioniert fehlerfrei.
Beide Displays an der USB-Ansteuerung ULA200 (ELV) angeschlossen: Beide funktionieren fehlerfrei.

Nun hab ich mir gestern mal mit einem Logik-Analyzer die Init-Sequenz der USB-Ansteuerung angeschaut und 1:1 auf den AVR übertragen, d.h. die Datenpins & Enable werden genau so und auf 5 µs genau ein/ausgeschaltet... Trotzdem bleibt das Display im 1-Zeilen-Modus.

Also wenn der AVR das gleiche Signal liefert, sollte das Display doch dann mal initialisieren oder nicht?

Der folgende Code bildet das Signal der USB-Ansteuerung nach. Nach dieser Signalfolge ist das Display an der Ansteuerung korrekt im 2-Zeilen-Modus. Am AVR jedoch nicht.



'************************************************* ******************************
'Header
'************************************************* ******************************

$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32 'default 32
$swstack = 10 'default 10
$framesize = 40 'default 40
$baud = 19200

'************************************************* ******************************
'Ports
'************************************************* ******************************
Config Pinb.0 = Output : DB0 Alias Portb.0
Config Pinb.1 = Output : DB1 Alias Portb.1
Config Pinb.2 = Output : DB2 Alias Portb.2
Config Pinb.3 = Output : DB3 Alias Portb.3
Config Pinb.4 = Output : DB4 Alias Portb.4
Config Pinb.5 = Output : DB5 Alias Portb.5
Config Pinb.6 = Output : DB6 Alias Portb.6
Config Pinb.7 = Output : DB7 Alias Portb.7
Config Pind.2 = Output : EN Alias Portd.2
Config Pind.3 = Output : RegS Alias Portd.3

DB0 = 0 : DB1 = 0 : DB2 = 0 : DB3 = 0 : DB4 = 0 : DB5 = 0 : DB6 = 0 : DB7 = 0 : RegS = 0

Waitms 10

EN = 1 : Waitus 630 : EN = 0 : Waitus 770
DB0 = 0 : DB1 = 1 : DB2 = 1 : DB3 = 0 : DB4 = 0 : DB5 = 0 : DB6 = 0 : DB7 = 0 : RegS = 0
Waitus 260
EN = 1 : Waitus 630 : EN = 0 : Waitus 770
DB0 = 0 : DB1 = 0 : DB2 = 1 : DB3 = 1 : DB4 = 0 : DB5 = 0 : DB6 = 0 : DB7 = 0 : RegS = 0
Waitus 260
EN = 1 : Waitus 630 : EN = 0 : Waitus 770
DB0 = 0 : DB1 = 0 : DB2 = 0 : DB3 = 0 : DB4 = 1 : DB5 = 0 : DB6 = 0 : DB7 = 0 : RegS = 0
Waitus 260
EN = 1 : Waitus 630 : EN = 0 : Waitus 770
DB0 = 0 : DB1 = 0 : DB2 = 0 : DB3 = 1 : DB4 = 1 : DB5 = 1 : DB6 = 0 : DB7 = 0 : RegS = 0
Waitus 260
EN = 1 : Waitus 630 : EN = 0 : Waitus 770
DB0 = 1 : DB1 = 0 : DB2 = 0 : DB3 = 0 : DB4 = 0 : DB5 = 0 : DB6 = 0 : DB7 = 0 : RegS = 0
Waitus 260
EN = 1 : Waitus 630 : EN = 0 : Waitus 770
DB0 = 1 : DB1 = 0 : DB2 = 0 : DB3 = 0 : DB4 = 0 : DB5 = 0 : DB6 = 0 : DB7 = 0 : RegS = 0
Waitus 260

Do:Loop

End
Powerdown

Hubert.G
30.03.2007, 10:40
So wie du es beschreibst sollte es nur ein Timing-problem sein. Vergrössere die Wartezeiten.
Hubert

Jaecko
30.03.2007, 11:42
Hab ich auch schon probiert... also mal um den Faktor 8 (AVR von 8 auf 1 MHz runtergesetzt), dann auch mal die waitus durch waitms ersetzt, versch. werte dazwischen... nix...

Und ich hab das Timing ja 1:1 von der USB-Ansteuerung kopiert; an dieser geht das Display ja dann auch mit den angegebenen Werten im µs-Bereich.

Also 2 "identische" Signale, nur bei einem gehts aber...