NHD-C0216CZ-NSW-BBW-3V3 does not show anything
Hi,
I just installed a NHD-C0216CZ-NSW-BBW-3V3 on my circuit board. An ARM Cortex-M3 processor is being used to control this LCD. The processors' SSP0 port has been configured to SPI mode with CPOL = 0, CPHA = 0, Bit frequency = 104 KHz.
My program follow the LCD's datasheet example to initialize the LCD, then repeatedly send character 'A'. But the LCD keeps blank (the back light is ON).
The codes are below:
int main( )
{
sys_config();
sys_set_lcd_RST(!0); // reset LCD, i.e. RST = 0
delay(2); // delay 2ms
sys_set_lcd_RST(0); // release RST. i.e. RST = 1
delay(20);
sys_sel_lcd_Reg(0); // select Instruction Register, i.e. RS = 0
sys_SSP0_send(0x30); // wake up
while (sys_SSP0_busy());
delay(2);
sys_SSP0_send(0x30); // wake up
while (sys_SSP0_busy());
sys_SSP0_send(0x30); // wake up
while (sys_SSP0_busy());
sys_SSP0_send(0x39); // function set
while (sys_SSP0_busy());
sys_SSP0_send(0x14); // osc frequency
while (sys_SSP0_busy());
sys_SSP0_send(0x56); // power control
while (sys_SSP0_busy());
sys_SSP0_send(0x56); // follower control
while (sys_SSP0_busy());
sys_SSP0_send(0x70); // contrast
while (sys_SSP0_busy());
sys_SSP0_send(0x0C); // display on
while (sys_SSP0_busy());
sys_SSP0_send(0x06); // entry mode
while (sys_SSP0_busy());
sys_SSP0_send(0x01); // clear
while (sys_SSP0_busy());
sys_sel_lcd_Reg(!0); // select Data Register
delay(10);
while (1)
{
sys_SSP0_send('A');
while (sys_SSP0_busy());
};
}
I checked the wave forms on RST, RS, CSB, SCL, SI, all look good. Bu the display simply keeps blank.
Is there any other way I can make the display to show some thing?
Thanks!
-
First thing that jumps out is that the Follower Control value should be 0x6D if you are following the example on our website.
Also verify that the voltage on pin 7 is near 5.5 volts.
EDIT: Display is now working.0 -
I have a very similar situation, but I'm using I2C on a cortex M0. I copied the code idea from this post (with your correction to follower control) and I have never seen an icon, backlight, cursor or anything.
I've verified most of the pins are correct except, I get 3.3 volts on pin 7 not 5 with the above set up.
All the I2C commands respond with Ack on each byte.
Have I interpreted the I2C instructions correctly, to match the sequence from this thread:
0x7C 0x00 0x30 is wakeup - second byte being 0 for single command
0x7C 0x00 0x39 function set
0x7C 0x00 0x14 osc freq
0x7C 0x00 0x56 power control
0x7C 0x00 0x6d follower control
0x7C 0x00 0x70 contrast
0x7C 0x00 0x0c display on
0x7C 0x00 0x06 entry mode
0x7C 0x00 0x01 clear
0x7C 0x40 0x41 is send character 'A' - second byte being 0x40 for RS bit0 -
Please check the VLCD contrast voltage at pin 8 to see if it is near 5.5V.
Also, a delay should be added after the clear command before sending the character data.
Best Regards,0 -
Pin 8 - after the command 0x56 (power control) goes to a 3.3 volt square wave, period is about 122 us. Looks like it's 8196 Hz.
Pin 7 at that point is 3.3V.
Stays that way until the end of the sequence.
There's more than enough delays as required by the spec after each command.
I'm also making sure reset and backlight happens, I've tested the lines and timing. It's the same whether I run it at full speed or single step in debugger.
Nothing has ever shown any life on the display. I've also done this on a predecessor board with another sample of this display. Same result. I'm beginning to wonder if Digikey has a bad batch. But it does reply properly - clearly the controller is alive.
Is there any registers I can read for any further debugging? Why would pin 7 stay at 3.3 - it's supposed to go to 5 with an internal amplifier I gather(?)0 -
The capacitors on pin 8 VOUT and pins 9 and 10 for C1 will provide the voltage boost to provide 5.5V VLCD.
Please check that the 1uf capacitor on Vout is connected to ground.
You may also try changing the value of the C1 capacitor to see if that helps, the range is 0.47uf to 2.2uf
Without the 5.5 volts VLCD voltage, nothing will show on the display.Best Regards,
0 -
Ah, NHD-C0216CiZ-FSW-FBW-3V3 is what we have. VOUT goes via 1uF to 3V3 in this case, not to ground, but that matches the spec. For kicks I tried to ground though, no change.
I'll try different caps but requires a trip to work...
we're in the middle of that range and pin 7 (C1+) isn't even slightly off of VDD.
I think we might have broken parts, or else there's something about the i2c that isn't causing the controller to refuse, but isn't being set up right.0 -
Resolved:
So here's a couple points for NHD-C0216CiZ-FSW-FBW-3V3 (and presumably the non I2C variant):
When input voltage is near 3.3 volts, 1 uF between C1+ and C1- does not work. 0.47uF does. Why not change the data sheet so that it specifies that and not a range. And for VOUT might as well say 1uF not a range.
If someone can't get any characters to display, there's no point playing with example code if the display doesn't come on (all pixels solid) as soon as you power the part on. If all the signals are there, it does that. I didn't know that - and didn't have that - and spent days trying different example code.
- chris0 -
Hi Chris,
Thanks for posting this solution! This is good feedback and it will help us to improve our documentation.
Best Regards,0
Please sign in to leave a comment.
Comments
8 comments