Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

LCD-driver PCF8655 (NXP) problems

Status
Not open for further replies.

mr_embedded

Junior Member level 2
Junior Member level 2
Joined
Nov 30, 2010
Messages
21
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,444
LCD-driver PCF8566 (NXP) problems

Hi there guys,
I've recently come across a PCF8655 LCD driver IC that I am trying to control my LCD with. It is not a cascaded application and the PCB-setup is a direct copy of Figure 4 on pg. 7 in the datasheet provided ( **broken link removed** )

VDD: 3.3V
VLCD: 0V (also tried VLCD 3.3V).

In the datasheet I read that on reset are all backplanes set to VDD. Should I see them oscillate here? (Since it is multiplexed 1:4 with 1/3 bias). I've used a multimeter and there is no voltage difference between any backplanes or voltage difference between a backplane and a segment output. Does this indicate that there is some kind of error on the PCB?

I am trying to control the PCF8566 with an Atmel AVR32 uC (uses TWI, similar to I2C). I do get ACK back to my microcontroller and when I change device select bits I do not get ACK, this makes me convinced that the communication works fine. However, do I need to always transmit device select? Since my LCD is 1:4 multiplexed with 1/3 bias the normal mode (power on reset) settings should work fine. So I only need to transmit data to the RAM and I should see some voltage differences between backplanes and segments?

Is there any sample code I could take a look at? I does not neccessary have to be code written to an Atmel Device.

Many thanks!

Regards,
mr_embedded
 
Last edited:

By the way you have the 5 and the 6s transposed in the discussion thread title.

I have not personally use the PCF8566 in a design and you appear to have the datasheets, so there's not much I can help you in that area.

However, I did find a some example code:

**broken link removed**

And here is a schematic:

**broken link removed**

The schematic and code are not related.

BigDog
 
  • Like
Reactions: FvM

    FvM

    Points: 2
    Helpful Answer Positive Rating
Thanks a lot BigDog. I did correct the typo!

The schedule was very helpful, the contrast feature is really cool!

Can't really read/understand assembler code though :/ My bad.

The datasheet is quite good, but would want NXP to maybe have some sample code, or maybe a flowchart. It is not that clear if you should use Device-command everytime you wanna change data in the RAM or whatever.

Well well, I will be looking for a solution.
Thanks again!

// Mr_Embedded
 

Assembly language is not the difficult to understand.

The majority of the initialization of the PCF8566 is handled by the following routine which has adequate descriptions.

The movlw instruction before the call to a subroutine is the value being sent to the PCF8566 I2C port. Also note you may need to allow the PCF8566 to full power cycle or boot with a delay before attempting to initialize it.


initialize
movlw 100
movwf del
call delay ; required for PCF8566 to settle
call start_I2C ; PCF8566 initialization
movlw b'01111100' ; slave address
movwf dataIO
call write_I2C
movlw b'11100000' ; select device at address 000
movwf dataIO
call write_I2C
movlw b'11001001' ; static drive mode
movwf dataIO
call write_I2C
clrf dataIO ; reset the address pointer
call write_I2C
clrw
call encode7segR ; display 0
movwf dataIO
call write_I2C
call stop_I2C ; end of initialization
return

BigDog
 

Once again thanks!

The assembly code did help some! I do use a delay of 1 second before I do anything with TWI/I2C on my microcontroller.

I am still confused about how to use the commands explained on page 24 of the datasheet. For example: Do you think I need to use a framework as: (START)(SLAVE ADDRESS)(RW) (ACK - from Device) (Device Select)(Load Data Pointer)(ACK)(Data). Or is it enough with (START)(SLAVE ADDRESS)(RW)(Load Data Pointer)(Data) ?

Well actually, I am even more confused from the fact that I do not see any oscillation or any voltage differences between my backplanes on startup (without any communication or initializations). The datasheet states that ON POWER RESET the device is automatically started up in Multiplexed 1:4 with a duty cycle/bias of 1/3. And on the block diagram of Page 3 I can see that there is no input to the Backplane-voltage-generator. Which means that it should be independent of settings through I2C/TWI. Only input to the Backplane-module is the VDD and VLCD.

cheers,
mr_embedded
 

The assembly code did help some! I do use a delay of 1 second before I do anything with TWI/I2C on my microcontroller.

That is good. Initialization is key with any LCD driver/controller.

I am still confused about how to use the commands explained on page 24 of the datasheet. For example: Do you think I need to use a framework as: (START)(SLAVE ADDRESS)(RW) (ACK - from Device) (Device Select)(Load Data Pointer)(ACK)(Data). Or is it enough with (START)(SLAVE ADDRESS)(RW)(Load Data Pointer)(Data) ?

Well actually, I am even more confused from the fact that I do not see any oscillation or any voltage differences between my backplanes on startup (without any communication or initializations). The datasheet states that ON POWER RESET the device is automatically started up in Multiplexed 1:4 with a duty cycle/bias of 1/3. And on the block diagram of Page 3 I can see that there is no input to the Backplane-voltage-generator. Which means that it should be independent of settings through I2C/TWI. Only input to the Backplane-module is the VDD and VLCD.

I've never used this particular LCD controller, so I will have to read the datasheet. I would examine the Assembly code again and mimic the inputs and delays done by the code.

BigDog
 
I will try to make my C-code to mimic the flow of the assembler code. Its a little but confusing about how the "functions" are being called and so on though. But guess it is good practice to try to learn some assembler as well. All in all, thank you BigDog!

// mr_embedded
 

If you need a tutorial on PIC Assembler to decipher PIC Assembly Code in the example I posted previously:

**broken link removed**

The first two or three lessons of the Midrange PIC Assembly Tutorials should give you a solid understanding of PIC Assembly Instructions/Commands. There are only 35 different Assembly Mnemonics in the PIC16 family, not a lot to learn or remember.

BigDog
 
BigDog,
I actually just got my display to work :) I do not know the exact change that made it work, but I did order the circuit in a breadboard-friendly package and I connected everything manually and WOOPS it worked! I will for another matter take a look at the tutorial. Thanks a lot BigDog!!!

For other people to learn from what I was asking:

When you start up the driver circuit, you do not see any voltage potential between segments and backplanes. However, if you do get TWI/I2C communication to work and you enable the device, then you (without setting segments high) see voltage difference between segments and backplanes. With an oscilloscope you will see a pattern like Figure 9 in the datasheet. REMEMBER to set your oscilloscope to AC-mode! Since an LCD cannot withstand DC-current for a long term, this is how the driver works.

Cheers,
mr_embedded
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top