Hi, also es funktioniert leider immer noch nicht.
Ich habe jetzt nochmal mein Programm überarbeitet. Das sieht nun so Aus:
Ich glaube aber inzwischen das ich ein Hardwareproblem habe. Wenn ich an Pin23 des Displays messe, dann messe ich lediglich 2,7V.Code:$regfile = "M1284pdef.dat" $crystal = 14745600 ' #PortC ' PINC.0 = LCD / DB7 Lcd_db7 Alias Portc.0 Config Lcd_db7 = Output Lcd_db7 = 0 ' PINC.1 = LCD / DB6 Lcd_db6 Alias Portc.1 Config Lcd_db6 = Output Lcd_db6 = 0 ' PINC.2 = LCD / DB5 Lcd_db5 Alias Portc.2 Config Lcd_db5 = Output Lcd_db5 = 0 ' PINC.3 = LCD / DB4 Lcd_db4 Alias Portc.3 Config Lcd_db4 = Output Lcd_db4 = 0 ' PINC.4 = LCD / E Lcd_e Alias Portc.4 Config Lcd_e = Output Lcd_e = 0 ' PINC.5 = LCD / R/W Lcd_rw Alias Portc.5 Config Lcd_rw = Output Lcd_rw = 0 ' PINC.6 = LCD / RS Lcd_rs Alias Portc.6 Config Lcd_rs = Output Lcd_rs = 0 ' PINC.7 = LCD / Reset Lcd_reset Alias Portc.7 Config Lcd_reset = Output Lcd_reset = 0 ' Reset ausschalten dim init as bit do if init = 0 then init = 1 call lcd_initialisieren end if Loop Sub Lcd_initialisieren ' Reset: Lcd_reset = 1 Waitms 200 Lcd_reset = 0 Waitms 200 Lcd_reset = 1 Waitms 200 ' Synchronize1: Call Lcd_befehl(&H30) Waitus 1 ' Synchronize1: Call Lcd_befehl(&H30) Waitus 1 ' Synchronize1: Call Lcd_befehl(&H30) Waitus 1 ' Synchronize2: Call Lcd_befehl(&H20) Wait 1 ' Function Set: 4 bit data length extension Call Lcd_befehl(&H2a) ' Extended function: 4 line display Call Lcd_befehl(&H09) ' Entire mode set: Bottom View Call Lcd_befehl(&H06) ' Bias setting: BS1=1 Call Lcd_befehl(&H1e) ' Function Set: 4-Bit data length extension Bit RE=0; IS=1 Call Lcd_befehl(&H29) ' Internal OSC: BS0=1 -> Bias=1/6 Call Lcd_befehl(&H1b) ' Follower control: Devider on and set value Call Lcd_befehl(&H6e) ' Power control: Booster on and set contrast (BB1=C5, DB0=C4) Call Lcd_befehl(&H57) ' Contrast set: (DB3-DB0=C3-C0) Call Lcd_befehl(&H72) ' Function set: 4-Bit data length extension Bit RE=0; IS=0 Call Lcd_befehl(&H28) ' Clear display: Call Lcd_befehl(&H01) ' Set Cursor Position: Call Lcd_befehl(&H80) ' Display on, cursor on, blink on: Call Lcd_befehl(&H0f) End Sub Sub Lcd_bits_setzen(byval Datenbyte As Byte) ' Datenbyte Bitmaske: 7=0 , 6=0 , 5=0 , 4=0 , 3=DB7, 2=DB6 , 1=DB5 , 0=DB4 ' Db4 Lcd_db4 = Datenbyte.0 ' Db5 Lcd_db5 = Datenbyte.1 ' Db6 Lcd_db6 = Datenbyte.2 ' Db7 Lcd_db7 = Datenbyte.3 Call Lcd_enable End Sub Sub Lcd_befehl(byval Datenbyte As Byte) Dim Highnibble As Byte Dim Lownibble As Byte Lownibble = Datenbyte And &B00001111 ' mask out upper nibble Highnibble = Datenbyte ' 1. copy original Value to Highnibble Shift Highnibble , Right , 4 ' 2. Shift upper 4 bits to lower 4 bits ' R/W Lcd_rw = 0 ' Rs Lcd_rs = 0 Call Lcd_bits_setzen(highnibble ) Call Lcd_bits_setzen(lownibble ) End Sub Sub Lcd_text(byval Datenbyte As Byte) Dim Highnibble2 As Byte Dim Lownibble2 As Byte Lownibble2 = Datenbyte And &B00001111 ' mask out upper nibble Highnibble2 = Datenbyte ' 1. copy original Value to Highnibble Shift Highnibble2 , Right , 4 ' 2. Shift upper 4 bits to lower 4 bits ' R/W Lcd_rw = 0 ' Rs Lcd_rs = 1 Call Lcd_bits_setzen(highnibble2 ) Call Lcd_bits_setzen(lownibble2 ) End Sub Sub Lcd_enable Lcd_e = 1 Waitms 2 Lcd_e = 0 Waitms 2 End Sub
Laut Datenblatt des Display Controllers müssten da aber zwischen 8V und 10V anliegen.
Irgendwie wird wohl der Displaybooster nicht richtig gestartet. Warscheinlich wird deshalb das Display nicht richtig initialisiert.
Hat das schon mal jemand gehabt das Problem, oder kann mir da weiterhelfen?
Hier ist noch der Schaltplan der Displayplatine:
![]()







Zitieren

Lesezeichen