Es klappt leider nicht, ich weis nicht warum. Irgendwas muss an der Initialisierung noch nicht stimmen. Es wird kein einziges Zeichen auf dem LCD angezeigt, nur die Kontrastbeleuchtung ist zu sehen.
Das ist mein momentaner Code, er wurde leicht modifiziert - Ich habe vorhin auch noch vergessen die Pins des LCDs als Ausgänge zu setzen. Trotz dieser Änderung tut sich aber nichts. Auch habe ich dem LCD 100ms Sekunden zum initialisieren gegeben - Auch das änderte nichts.
Code:
'*****LCD*****
'PB3 - E
'PB4 - RS
'PD2 - PIN11 - D4
'PD3 - PIN12 - D5
'PD4 - PIN13 - D6
'PD5 - PIN14 - D7
'**************
$regfile = "m32def.dat" 'ATmega32
$crystal = 11059200 'Quarz: 11059200 Hz
Declare Sub Lcdwrite(byval Zeichen As Byte)
Ddrb = &B00011000
Ddrd = &B00111100
'Pins des LCD-Modules
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4 , Db7 = Portd.5 , E = Portb.3 , Rs = Portb.4
Waitms 100 'Zeit damit das LCD initialisieren kann
Initlcd
Cls 'LCD löschen
Config Lcd = 20 * 4a
'Config Lcdbus = 4
Call Lcdwrite(&B00101100)
Waitms 5
Call Lcdwrite(&B00001001)
Waitms 5
Call Lcdwrite(&B00101000)
Waitms 5
Call Lcdwrite(&B00000110)
Waitms 5
Call Lcdwrite(&B00001100)
Waitms 5
Do
Locate 1 , 1 'Spalte 1 und Zeile 1 des Displays
Waitms 50
Lcd "Hallo" 'Displayausgabe
Loop
'Schreibt die Initialisierungs - Bits zum LCD
Sub Lcdwrite(byval Zeichen As Byte)
' Höherwertiges Nibble setzen
If Zeichen.4 = 1 Then Portd.2 = 1 Else Portd.2 = 0
If Zeichen.5 = 1 Then Portd.3 = 1 Else Portd.3 = 0
If Zeichen.6 = 1 Then Portd.4 = 1 Else Portd.4 = 0
If Zeichen.7 = 1 Then Portd.5 = 1 Else Portd.5 = 0
' Höherwertiges Nibble übertragen
Portb.3 = 1
Waitms 1
Portb.3 = 0
Waitms 1
' Niederwertiges Nibble setzen
If Zeichen.0 = 1 Then Portd.2 = 1 Else Portd.2 = 0
If Zeichen.1 = 1 Then Portd.3 = 1 Else Portd.3 = 0
If Zeichen.2 = 1 Then Portd.4 = 1 Else Portd.4 = 0
If Zeichen.3 = 1 Then Portd.5 = 1 Else Portd.5 = 0
' Niederwertiges Nibble übertragen
Portb.3 = 1
Waitms 1
Portb.3 = 0
Waitms 1
End Sub
End
Lesezeichen