Hi,
I'm having a problem trying to get an older (from about 1994) lcd display to work. It's a a nice 2x40 display with a cool looking stainless steel or chromed display opening . The problem is that I'm having no luck in getting it to work with picaxe.
The picaxe is connected to the lcd using hippy's lcd routines (picaxe 40x1), the information is found here: http://www.hippy.freeserve.co.uk/picaxelc.htm
Anyone who wants to skip reading that, it's just the normal 4-bit interfacing to the common LCD.
I tried the system with a modern lcd display, that had hd44780U controller chip installed, and it worked just as expected. But the older display with hd44780A00 doesn't work at all. I have 2 of those big displays, tried them both and they didn't work. I also tried another 2x16 character display also with hd44780A00, and same thing, no luck. All of these displays were taken from original packaging, so they're presumed to be unused and good.
Does anyone know any traps with the older chip that might cause the display not to work? Yesterday i tried searching for the datasheet of the A00 display version, but i didn't find one, so i have no clue if the old chipset even supports 4-bit interfacing etc.. Also, any help locating the datasheet for the older chip would help. I also tried modifying the code with longer delays between data transfers, it just made the new display work darn slowly, but didn't help with the case of the older lcd's.
test code attached below, just in case:
I'm having a problem trying to get an older (from about 1994) lcd display to work. It's a a nice 2x40 display with a cool looking stainless steel or chromed display opening . The problem is that I'm having no luck in getting it to work with picaxe.
The picaxe is connected to the lcd using hippy's lcd routines (picaxe 40x1), the information is found here: http://www.hippy.freeserve.co.uk/picaxelc.htm
Anyone who wants to skip reading that, it's just the normal 4-bit interfacing to the common LCD.
I tried the system with a modern lcd display, that had hd44780U controller chip installed, and it worked just as expected. But the older display with hd44780A00 doesn't work at all. I have 2 of those big displays, tried them both and they didn't work. I also tried another 2x16 character display also with hd44780A00, and same thing, no luck. All of these displays were taken from original packaging, so they're presumed to be unused and good.
Does anyone know any traps with the older chip that might cause the display not to work? Yesterday i tried searching for the datasheet of the A00 display version, but i didn't find one, so i have no clue if the old chipset even supports 4-bit interfacing etc.. Also, any help locating the datasheet for the older chip would help. I also tried modifying the code with longer delays between data transfers, it just made the new display work darn slowly, but didn't help with the case of the older lcd's.
test code attached below, just in case:
Code:
#PICAXE 40X1
'#NO_TABLE
'#NO_DATA
pause 500
'***********************************************************************
'OUTPUTS
SYMBOL ENABLE12V = 1
SYMBOL CS = 0
'LCD OUTPUTS
SYMBOL RS = 2 ; 0 = Command 1 = Data
SYMBOL E = 3 ; 0 = Idle 1 = Active
SYMBOL DB4 = 4 ; LCD Data Line 4
SYMBOL DB5 = 5 ; LCD Data Line 5
SYMBOL DB6 = 6 ; LCD Data Line 6
SYMBOL DB7 = 7 ; LCD Data Line 7
SYMBOL RSCMDmask = %00000000 ; Select Command register
SYMBOL RSDATmask = %00000100 ; Select Data register
SYMBOL i = b2 'loop variable
SYMBOL rsbit = b3
SYMBOL TEMP = b1 'SHORT TERM TEMP VARIABLE
SYMBOL TEMPW = W5 'TEMP WORD VARIABLE
SYMBOL DAC = W6 'DAC OUTPUT VALUE
SYMBOL TEMPWL = B10
SYMBOL TEMPWH = B11
SYMBOL S1 = B4
SYMBOL S10 = B5
SYMBOL S100 = B6
'***********************************************************************
PowerOnReset:
GOSUB InitialiseLcd 'RUN LCD DISPLAY INIT
EEPROM 6,("value")
FOR i = 6 TO 10
READ i,temp
GOSUB SendDatabyter
NEXT
temp = $C0 'move to start of the second line
GOSUB SendCmdbyter
hspisetup spimode00, spislow 'setup the hardware SPI port
high cs 'put DAC chip select to idle
high enable12v
main: 'MAIN PROGRAM LOOP
readadc10 1,DAC
DAC = DAC * 4 MAX 4095
pause 200
'bit 15; 1= write to DACb 0= write to DACa
'bit 14; 1= enable input buffer 0 = input buffer is disabled
'bit 13; 1= outputgain at 1x 0 = 2x output gain
'bit 12; 1= outputs enabled 0 = outputs are floating (high impedance)
'bits 11-0 Transferred data, MSb first.
TEMPW = DAC | %0011000000000000 'mask the 4 control bits --> writing to DACa, input buffer disabled, output at 1x gain, outputs enabled.
TEMPW = TEMPW & %0011111111111111
'sertxd (#var_out)
'*****spi transfer
low cs 'low chip select
HSPIOUT (TEMPWH,TEMPWL)
PAUSE 1
high cs 'cs back to idle, latches data to output
goto main
'********* LCD routines below **************
InitialiseLcd:
FOR i = 0 TO 5
READ i,temp
GOSUB SendInitCmdbyter
NEXT
' Nibble commands - To initialise 4-bit mode
EEPROM 0,( $33 ) ; %0011---- %0011---- 8-bit / 8-bit
EEPROM 1,( $32 ) ; %0011---- %0010---- 8-bit / 4-bit
' byter commands - To configure the LCD
EEPROM 2,( $28 ) ; %00101000 %001LNF00 Display Format
EEPROM 3,( $0C ) ; %00001100 %00001DCB Display On
EEPROM 4,( $06 ) ; %00000110 %000001IS Cursor Move
; L : 0 = 4-bit Mode 1 = 8-bit Mode
; N : 0 = 1 Line 1 = 2 Lines
; F : 0 = 5x7 Pixels 1 = N/A
; D : 0 = Display Off 1 = Display On
; C : 0 = Cursor Off 1 = Cursor On
; B : 0 = Cursor Steady 1 = Cursor Flash
; I : 0 = Dec Cursor 1 = Inc Cursor
; S : 0 = Cursor Move 1 = Display Shift
EEPROM 5,( $01 ) ; Clear Screen
RETURN
SendInitCmdbyter:
PAUSE 150 ; Delay 15mS
SendCmdbyter:
rsbit = RSCMDmask ; Send to Command register
SendDatabyter:
rsbit = rsbit | OUTPINS
rsbit = rsbit & %00000111
pins = temp & %11110000 | rsbit ; Put MSB out first
PULSOUT E,10
pause 100 ; Give a 10uS pulse on E
pins = temp * %00010000 | rsbit ; Put LSB out second
PULSOUT E,10 ; Give a 10uS pulse on E
pause 100
rsbit = RSDATmask ; Send to Data register next
RETURN