Problem with interfacing LCD module

Status
Not open for further replies.

lukas.ballo

New Member
I tried to interface an LCD module (WD-C2401P-1GNN) with PIC16F886 (PICAXE 28X1) microcontroller however even after I send the ON command and apply 8-bit data to its 24 positions, nothing shows up. The display is driven by HD66717 which is one of those less common chips. Data sheet for this display is really poor and the information I found on-line did not help to solve the my problem.

Picture of the display:
**broken link removed**

Thank you very much for any ideas!!!

Connections:

[FONT=&quot]1. GND -------------------------- (-)
2. VCC -------------------------- (+5V)

[FONT=&quot]3. RESET ----------------------- (c0)[/FONT]

[/FONT] [FONT=&quot]4. REGISTER SELECT ------ (c1)
[/FONT] [FONT=&quot]5. READ/WRITE SEL ------- (c2)
[/FONT] [FONT=&quot]6. ENABLE -------------------- (c3)
[/FONT] [FONT=&quot]7. DATA BIT 0 --------------- (0)
[/FONT] [FONT=&quot] ...
[/FONT] [FONT=&quot]14.DATA BIT 7 -------------- (7)[/FONT]

Microcontroller program:

'====TURN INPUTS 0-3 INTO OUTPUTS=====
low portc 0
low portc 1
low portc 2
low portc 3
'=====================================

high portc 0 'make reset high

let b1 = 0 'variable to cout characters

'====COMMAND====
low portc 2 'r/w
low portc 1 'command sel
pause 1
high portc 3 'enable
pause 1
let outpins = 0x3 'apply command
pause 1
low portc 3 'disable
pause 1
let outpins = 0 'erase command
'===============

pause 1

'====COMMAND====
low portc 2 'r/w
low portc 1 'command sel
pause 1
high portc 3 'enable
pause 1
let outpins = 0x1 'apply command
pause 1
low portc 3 'disable
pause 1
let outpins = 0 'erase command
'===============

pause 1

'====DATA=======
start:
low portc 2 'r/w
high portc 1 'data sel
pause 1
high portc 3 'enable
pause 1
let outpins = 0xCC 'apply data
pause 1
low portc 3 'disable
pause 1
let outpins = 0 'erase data
'===============

pause 1

let b1 = b1 + 1 'count one character

if b1 = 24 then 'finish after 24th character
goto finish
else
goto start
endif
finish:

keep: 'keep running the program
goto keep
 
Last edited:
I use these displays and they work. When you post code use the # icon to put
Code:
tags around your code.

To initilize the the display you have to send it 5 command bytes.
Code:
rom const uByte LCD111_INIT[] = {
  0x1C,	// Turn on the lcd driver power
  0x14,	// Turn on the character display
  0x28,	// Set two display lines (The hd66717 considers 12 characters to be a line. Our 24 character display is actually two 12-character lines right next to each other).
  0x4F,	// Set to darkest contrast
  0xE0  // Set the data address to the first character
};

Data/command should be stable on the pins during the enable pulse.

Try looking at this page

I would post my driver but it is in c.
3v0
 
It works great! So far I can not display readable text (I was just sending random hexadecimal data) but this will be the next stage since I have to change the program.

**broken link removed**
 
Glad to see it works. I picked up 20 of these little displays for teaching breadboarding. I etched a PCB that converts the .05 inch pin header to .1 inch. The header pins are soldered flat to the PCB as if they were surface mount. On the .05 end I flood the pins with solder and the knock off the excess by tapping the PCB on the workbench. Solderwick would work too.

You can epoxy the bottom edge of the PCB to the black blob on the back side of the display for more strenght. The image shows the LCD inserted behind a processor module.





Here is a PDF of the PCB.
 

Attachments

  • LCD111_1X14_SMD.pdf
    8.1 KB · Views: 474
  • LCD111-ADPT.GIF
    7.7 KB · Views: 2,375
  • Humidity Proto 005Scale.JPG
    93.6 KB · Views: 2,222
Last edited:
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…