This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430F5438A Experimenter Board --LCD Interface

Other Parts Discussed in Thread: MSP430F5438A

Hi,

It says in the MSP430F5438A Experimenter Board User guide that the LCD used on the board is 138 x 110 Hitachi HD66753. When I checked the code given in UserExperience example, it is using the SPI protocol for the LCD interface.  So I googled and found datasheets for HD66753.

  1. I was unable to find one which supports 138 x 110 resolution.
  2. All the data-sheets showed an I2C interface as opposed to an SPI.

Can someone at TI help me in getting the correct LCD data-sheet? I wanted to understand the lcd interface for which the HAL's were written and provided.

Thanks in advance

  • Genie,

    at some point in time [I think] we used to have that pdf as part of the MSP-EXP430F5438 support package.

    Here it is again, attached.

    5415.51933ace.pdf

    Regards,

    Dung

     

  • genie said:
    All the data-sheets showed an I2C interface as opposed to an SPI.

    Are you sure? LCD datasheets are usually a big mess. It seems to be more important to state which signs of defect of the device are not to be considered a defect (by lenngthily declaring the test conditions) but the really important information is kept so short that it is almost nonexistent.

    The datasheet you have been pointed to just tells 'data connection: serial' whcih can be anything. And hte naming of SDA and SCL indeed seems to indicate I2C, yet there is no sign of a programmable I2C address, only a chip select. And my experience form other LCD datasheets is that most of them implement either parallel, or serialized parallel interface, meanign that the usually used 8 bit parallel bus is optionally replaced by a serial shift (which is mostly SPI compliant) but neither a real SPI (you still need additional signals) nor a full-featured I2C (which will be too slow in most cases anyway).

    The timing diagrams for the interface in this datasheet are even more confusing. There are two SDA lines (usually, the serial interface is unidirectional even if the parallel interface would be bidirectional) and there seem to be two clock cycles per data bit. Strange. Since the pin list only shows one SDA, it seems to be a bi-directional data line (which is not SPI compliant) but uses a CS-signal (which isn't I2C compliant).

    VERY confusing.

    From this datasheet I wouldn't touch the device with pincers.

    But since it is on the experimenters board, there must be some code to address it. Look there and try to understand how the TI engineers did it.

     

  • Jens,

    Our nickname for this LCD communication protocol is SPI2C :). 

    Essentially it is SPI with MISO & MOSI lines muxed together, the '430 MISO & MOSI pins are tied together and the '430 has to handle the switching between input/output. 

    @Genie,

    I believe you are already using/reading the hal_lcd.* files [latest version of the SW package], which we have optimized the communication for the LCD. The LCD datasheet is indeed a bit confusing, but the hal should shed some light on what we did in the code and why we did so.

    ~Dung

  • Thanks a lot Dung!

    Dung Dang said:
    Essentially it is SPI with MISO & MOSI lines muxed together,

      That's what I thought you did :) . Yes I looked at the hal_lcd.* files. I am not sure if I have the latest one - I will download again and check.

    --Edited--

  • Dung Dang said:
    Our nickname for this LCD communication protocol is SPI2C :)

    That explains it :)

    I wonder why almost none of the LCDs out there (and I checked a LOT datasheets lately) implements an industry standard interface.

    They may have an 80xx or 69xx processor interface (for the peripheral bus), alternatively an SPI that requires additional control lines for command/data and are write only. Others do weird things like this 'SPI2C'.

    And the datasheet explains on 30 pages what is not to be considered a failty display, but spares only one page or sometimes only one line for the interface.

    OLEDs, however, usually come with a real SPI or I2C and simply work.

  • Hello Dung, I just bought the 5438 experimenter board and would like help programming my own logo. Could you explain why HAL_Lcd code uses 14 columns and not 138? I don't understand the addressing. Could you also explain how you took a bitmap and converted it to 16 bit data in 14 columns? Any help on the LCD is greatly appreciated.

    Thanks.

    Nick

  • Nick,

    The LCD has 110x138 resolution and it is in 2-bit gray-scale. Essentially each pixel requires 2 bits, and the LCD's on-chip display driver simply groups two consecutive bits in the  data byte/word together to store the pixel's value. The pixels are grouped by 8 together horizontally; their values are stored into a single 16-bit word. Hence, instead of having 138 individual single-bit columns, you'd end up with ~17 8-pixel-wide columns. 

    Graphic processing and manipulation do become a bit tricky, and hopefully the hal_lcd.* APIs alleviate some of that low-level pain. I do realize there are some small gaps in the explanation of how the low-level driver works, but hopefully the documentation will help clarify some of those details. Better yet, we also provide an image converter tool that can convert any image types on PC into a c structure compatible for the LCD data structure. Aforementioned info as well as the image tool can be found in the latest software package for the board. If you'd like, you can digest the LCD-specific data from the LCD datasheet, which is also included in the SW package. All of this info can be found on the MSP-EXP430F5438 Product Folder: http://www.ti.com/tool/msp-exp430f5438

    Some of the direct links from the page:

    - Latest Software Package: http://ti.com/lit/zip/slac227
    - Board HW & SW User's Guide: http://www.ti.com/lit/pdf/slau263

    Hope that helps!

    ~Dung

  • Thanks, Dung. That was a big help.

    regards,

    Nick

  • Hi Dung Dang,

         Is the LCD data sheet the same as http://www.optrex.com/SiteImages/PartList/CONTROLLER/HD66753e.pdf . Is there any documentation other than this?

    Thanks,

    Gautam.

  • Gautam,

    the official datasheet for the LCD is provided in the board package, the link is available in my previous post. I'd recommend using that as the official document.

    I only took a quick glance at the sheet that you have, but it doesn't look the same. For starter the resolution is different.

    Regards,

    Dung

  • Dung,

       After unzipping it I don't see any pdf's in there. Has the package changed? I have gone through all the other packages and I am not finding it anywhere. The initialization procedures etc are not explained in the pdf that you have linked. The user guide just mentions it in the references without any link to the datasheet or the userguide. Also in the pdf that you linked there is no instruction list or the device ID for initialization procedure or the register list. Could you please point to that pdf.

    Thanks,

    Gautam.

  • Gautam,

    you are right, I couldn't find the datasheet either. We will add that back into the package or provide a link. Here's the file attached. 4431.FamilyLCD.pdf and 6428.LCD Module Spec 51933AC.pdf

    Regards,

    Dung

  • Isn't the resolution different in this data sheet too (4431.FamilyLCD.pdf)?

  • Gautam,

    you are right. I checked the DS again, and confirmed that this is the DS used for the controller that can support up to the 168x132 resolution. The LCD used in our case, the MSP-EXP430F5438, happens to have the 110x132 resolution. You can use the attached pdf for your reference, along with the LCD driver provided in our software package.

    Regards,

    Dung

  • Thanks a lot Dung.  :)

  • sir im doing capture interrupt program but im not able to take forward it due to some problems

    and the program goes like this

    #include "msp430x54xA.h"
    int a;
    int main(void)
    {
      WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
      P1DIR |= 0x03;                            // P1.0 output
      P8DIR |= 0x00;
     TA1CCTL0 = CCIE + CM_1+ CAP + CCIS1 ;                          // CCR0 interrupt enabled
     // TA1CCTL0 ^= CCIS0;
      //TA1R=0;
      P1OUT=0x00;
      TA1CTL = TASSEL_2 + MC_2 +TACLR;         // SMCLK, contmode, clear TAR
    //  while(1)
    //  {
    //if(P8IN == 0x00)
    //    {
    //  P1OUT ^= 0x01;                            // Toggle P1.0
    //    }  
    //  }
     __bis_SR_register(GIE);       // Enter LPM0, enable interrupts
      __no_operation();                         // For debugger
    }

    // Timer A0 interrupt service routine
    #pragma vector=TIMER1_A0_VECTOR
    __interrupt void TIMER1_A0_ISR(void)
    {
        
      P1OUT ^= 0x01;                            // Toggle P1.0
              
      if(P8IN == 0x00)
        {
      P1OUT ^= 0x02;
      a=TA1R;                            //Toggle P1.0
        }                // Add Offset to CCR0
    }

    i want to capture the timer value when the pin8.5 goes high (rising edge) but when  i am giving 3.3 volts externally to pin8.5 its not entering the interrupt

    can u please give the appropriate solution so that i can proceed further

**Attention** This is a public forum