Jaecko
30.03.2007, 08: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
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