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.

Code:
'*******************************************************************************
'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