PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kontrast einstellen am DOGM



forty
04.12.2007, 16:42
Hi,

ich hab lange gesucht, aber ich checks nicht, wie ich bei nem DOGM den Kontrast einstellen kann. Mein Disp hängt an d4=PB.1 .... d7=PB.4, E = PB.5, RS = PB.6

Kann mir das irgendwer erklären?

Grüße

42

BlaueLed
04.12.2007, 21:40
Hi forty,

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



$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

stefan_Z
04.12.2007, 22:54
Läuft das mit den original Bascom Rooutinen? Dann gibts dafür ein Kommando: LCDCONTRAST und CONFIG LCD.
Ansonsten schau mal hier: http://www.lcd-module.de/eng/pdf/grafik/dogm128e.pdf

Accenter
19.04.2008, 11:48
Ich hab diesen Code getestet mit meinem DogM Display. Bis zu den ersten 10 Kontrastwerten wird die Darstellung zunehmend sichtbarer jedoch dann springt der Kontrast pro Schritt wild herum (mal besser mal schlechter lesbar). falls jemand einen besseren Code hätte wäre ich dankbar.

Man kann aber auch mit dem defaultwert leben.