Hi forty,

in einem anderen Forum hatten welche das gleiche problem. Hier mal ein Code der funktionieren sollte.

Code:
$regfile = "m8def.dat"
$crystal = 1000000 ' 1MHz (You can use any clock).

$hwstack = 32
$swstack = 16
$framesize = 40

Declare Sub SetContrast5V4bit(Byval Contrast_value As Byte)
Dim Lcd_contrast As Byte

Config Lcdpin = Pin , Db4 = PortC.0 , Db5 = PortC.1 , Db6 = PortC.2 , Db7 = PortC.3 , E = PortC.4 , Rs = PortC.5
Config Lcd = 16 * 2 , Chipset = Dogm162v5
Cursor Off Noblink
Cls

LCD "Contrast 0-63"
Waitms 2000

For Lcd_contrast = 0 to 63

   Call SetContrast5V4bit(Lcd_contrast)
   ' You can also use a constant, example, Call SetContrast5V4bit(10)

   Cls
   LCD "Contrast: " ; Lcd_contrast
   Waitms 2000

Next Lcd_contrast

Do
   !nop
Loop

End

' =============================================

Sub SetContrast5V4bit(Byval Contrast_value As Byte)

   ' This subroutine will set the contrast of an LCD module EA DOGM162.
   ' The LCD module MUST be connected to 5V and use the 4-bit mode.
   ' This code works with the pins specified in "Config Lcdpin". If you
   ' change the pins in "Config Lcdpin", this code will still work because
   ' we use the Bascom internal routine to send the command to the LCD.
   ' The LCD contrast is a value between 0 and 63. The value passed to
   ' this subroutine is a byte. If the passed value is greater than 63,
   ' the passed value will be limited to 63. Note also that it is very
   ' likely that only a limited range of the 64 possible values will
   ' produce a valid contrast setting on the LCD, so your main program
   ' will have to limit the used minimum and maximum values.
   '
   ' Do not use this subroutine if the LCD is connected to 3.3V!
   ' This code disables the internal voltage booster which must be used
   ' when the LCD is connected to 3.3V.

   Local Ins_P_I_Contr_set As Byte
   Local Ins_Contr_Set As Byte

   If Contrast_value > 63 Then
      Contrast_value = 63       ' We limit the value to 63
   Endif

   ' The 6 bits of the contrast value are sent to the Sitronix
   ' ST7036 controller chip with two distinct instructions.
   ' First the passed contrast value will be mapped into two bytes.
   ' The upper nibble of the byte is used to define the instruction.
   ' The lower nibble of the byte is used for the parameters of the
   ' instruction. The contrast value will be mapped into the lower
   ' nibble of these two bytes.
   '==========================================

   ' Map C3, C2, C1, C0 into the instruction "Contrast Set".

   Ins_Contr_Set = Contrast_value
   ' Clear the upper nibble, keep C3, C2, C1 and C0 into the lower nibble.
   Ins_Contr_Set = Ins_Contr_Set AND &B00001111 'Clear upper nibble
   ' Add the value C3, C2, C1 and C0 to the instruction value.
   Ins_Contr_Set = Ins_Contr_Set + &B01110000

   '==========================================

   ' Map C5 and C4 into the instruction "Power/ICON control/Contrast Set".

   Ins_P_I_Contr_set = Contrast_value
   'Shift Right four times, so that C5 C4 will go in position Bit1 and Bit0.
   'Bit7, Bit6, Bit5, Bit4, Bit3, Bit2 will be 0 after the shift operations.
   Shift Ins_P_I_Contr_set , Right , 4
   ' Add the value C5 and C4 to the instruction value.
   Ins_P_I_Contr_set = Ins_P_I_Contr_set + &B01010000
   '                                             ^---- 0=ICON Off
   '                                              ^--- 0=Booster Off (5V)!
   '==========================================

   ' Now we send 4 instructions to the LCD

   '==========================================
   _temp1 = &B00101001 'Instruction "Function Set" select instruction table 1
   '-------------^------------ = DL (Interface 8/4 bits). 0=4-bit interface.
   '--------------^----------- = N (Number of lines). 1=two lines. Must be 1
   '---------------^---------- = DH (Double height font). 1=DH. Must be 0
   '----------------^--------- = IS2 (Instruction table select). Must be 0
   '-----------------^-------- = IS1 (Instruction table select). Must be 1
   !rCall _Lcd_control ' Send the instruction to the LCD
   '==========================================
   _temp1 = Ins_Contr_Set  ' Instruction "Contrast Set"
   !rCall _Lcd_control ' Send the instruction to the LCD
   '==========================================
   _temp1 = Ins_P_I_Contr_set ' Instruction "Power/ICON/Contrast Set"
   !rCall _Lcd_control ' Send the instruction to the LCD
   '==========================================
   _temp1 = &B00101000 'Instruction "Function Set" select instruction table 0
   '-------------^------------ = DL (Interface 8/4 bits). 0=4-bit interface.
   '--------------^----------- = N (Number of lines). 1=two lines. Must be 1
   '---------------^---------- = DH (Double height font). 1=DH. Must be 0
   '----------------^--------- = IS2 (Instruction table select). Must be 0
   '-----------------^-------- = IS1 (Instruction table select). Must be 0
   !rCall _Lcd_control ' Send the instruction to the LCD
   '==========================================

End Sub
' -------
mfg Kay