NHD 2.7 Screen Image Streaking

Comments

16 comments

  • Michael_L

    Is it probably something to do with your initialization.  Try using these values:

    comm_out(0xAE);
     
      comm_out(0xB3);
      comm_out(0x01);
      comm_out(0x90);
     
      comm_out(0xA8);
      comm_out(0x3F);
     
      comm_out(0xA2);
      comm_out(0x4C);
     
      comm_out(0xA1);
      comm_out(0x00);
     
      comm_out(0xAD);
      comm_out(0x00);
     
      comm_out(0xA0);
      comm_out(0x50);
     
      comm_out(0x84);
     
      comm_out(0xB8);
      comm_out(0x01);
      comm_out(0x11);
      comm_out(0x22);
      comm_out(0x32);
      comm_out(0x43);
      comm_out(0x54);
      comm_out(0x65);
      comm_out(0x76);
     
      comm_out(0x81);
      comm_out(0x7F);
     
      comm_out(0xB2);
      comm_out(0x51);
     
      comm_out(0xB1);
      comm_out(0x55);
     
      comm_out(0xBC);
      comm_out(0x10);
     
      comm_out(0xB4);
      comm_out(0x02);
      comm_out(0xB0);
      comm_out(0x28);
     
      comm_out(0xBE);
      comm_out(0x1C);
     
      comm_out(0xBF);
      comm_out(0x0C);
     
      comm_out(0xA4);
     
      comm_out(0xAF);
    0
  • cherry8wild

    Alright, Thanks. I'll try those values out.

    0
  • cherry8wild

    OK,

    The values I was using for the Initialization were slightly different, but the same streaking occurs with the new values as well. Here is the initialization function I am using, if there is still anything wrong.

    void OLED_12864_Init_test()
    {
        TRIS_RS =   0;
        TRIS_SCLK = 0;
        TRIS_CS =   0;
        TRIS_SDIN = 0;

        SSPCON1bits.SSPEN = 0;
        SSPSTATbits.SMP = 1; // SPI Master Mode
        SSPSTATbits.CKE = 1;
        SSPCON1bits.SSPM3 = 0;
        SSPCON1bits.SSPM2 = 0;
        SSPCON1bits.SSPM1 = 0;
        SSPCON1bits.SSPM0 = 0;

        SSPCON1bits.SSPEN = 1;

        LAT_CS = 1;

        LAT_RS = 0;
        mDelay(40);
        LAT_RS = 1;

        SPI_Write1(0xAE); // Set display OFF

        SPI_Write1(0xB3); // Set Display Clock
        SPI_Write1(0x01);
        SPI_Write1(0x90);

        SPI_Write1(0xA8); // Set Multiplex Ratio
        SPI_Write1(0x3F);

        SPI_Write1(0xA2); // Set Display Offset
        SPI_Write1(0x4C);

        SPI_Write1(0xA1); // Start Line
        SPI_Write1(0x00);

        SPI_Write1(0xAD); // Set Master Configuration
        SPI_Write1(0x00);

        SPI_Write1(0xA0); // Set Remap Format
        SPI_Write1(0x50);

        SPI_Write1(0x84); // Set Current Range (1/4)

        SPI_Write1(0xB8); // Set Greyscale Table
        SPI_Write1(0x01);
        SPI_Write1(0x11);
        SPI_Write1(0x22);
        SPI_Write1(0x32);
        SPI_Write1(0x43);
        SPI_Write1(0x54);
        SPI_Write1(0x65);
        SPI_Write1(0x76);

        SPI_Write1(0x81); // Set Contranst Current
        SPI_Write1(0x7F);

        SPI_Write1(0xB2); // Set Row Period (Frame Frequency)
        SPI_Write1(0x51);

        SPI_Write1(0xB1); // Set Phase Length
        SPI_Write1(0x55);

        SPI_Write1(0xBC); // Set Precharge Voltage
        SPI_Write1(0x10);

        SPI_Write1(0xB4); // Set Precharge Compensation
        SPI_Write1(0x02);

        SPI_Write1(0xB0); // Set Precharge Enable
        SPI_Write1(0x28);

        SPI_Write1(0xBE); // Set V_com_H Voltage level
        SPI_Write1(0x1C);

        SPI_Write1(0xBF); // Set Segment Low voltage
        SPI_Write1(0x0C);

        SPI_Write1(0xA4); //Set Display Mode Normal

        SPI_Write1(0xAF); // Set Display On
    Also, the wiring diagram and the hardware setup. I have a very basic setup, pretty much taken straight from the NHD data sheet. Any suggestions appreciated! Screen is very clear and easy to read, but the streaking lines are not acceptable for my application.

     
    « Last Edit: July 21, 2014, 11:57:54 AM by cherry8wild »
    0
  • Michael_L

    You are calling command 0xBE twice in your initialization.  The second one should be 0xBF.

    0
  • cherry8wild

    Good catch, you are correct. Unfortunately, no change in the display. :/

    (Updated the code for future users)

    0
  • Michael_L

    What voltage are you supplying the display with?  Do you have another you can try?

    0
  • cherry8wild

    Measured, the display is getting 3.295V, and unfortunately we do not have another display to try.

    0
  • Michael_L

    To my knowledge, the only cause of this would be your initialization.  The values I have given you have been confirm to work great, with no streaking (by myself and our customers).  If you are certain you are initializing the display correctly, you may either email nhtech@newhavendisplay.com to set up an RMA and return the display to us for analysis, or you may purchase another sample of the display and try it with your micro.

    0
  • cherry8wild

    We are going to order another display to test, but for now since it works other than the streaking, we are going to continue using it for development. Have you seen this behavior before?

    We analyzed the signals going to the display yesterday using a logic analyzer and the display is getting the correct initialization.

    0
  • Michael_L

    The only time I have seen it before was because of the initialization.  Keep us posted on how the second display works, but in the mean time you can try different values for various commands such as commands 0x81, 0xB4, 0xBC, 0xBE, and 0xBF, just to see if you see any visual changes on the display.


    For details on these commands, please refer to the SSD1325 datasheet, here: https://newhavendisplay.com/content/app_notes/SSD1325.pdf 

    0
  • SLTom992

    I know that if you initialize the controller with a Display Offset you can get smearing though I don't know why. Make sure that your offset is zero.

    0
  • cherry8wild

    Hello again,

    Here is an update on what I have tried and the results of those attempts.

    1. Changing Display

    I got another identical display, but it did the same thing.

    2. Changing the controller

    I also have used an Arduino Mega 2560 to run the display. This was running completely different code than the Microchip controller, but the same initialization sequence. Same results.

    3. Different values for Initalization.

    I have programmed the displays to cycle through various initialization parameters, specifically the contrast current, contrast current range, precharge compensation, precharge voltage, and the VcomH voltage. I was able to observe the changes in the display but none of them ever removed the lines completely.

    The best Screen image has been when I use :

    Current Range: 0x86
    Contrast Current: 0x3F
    Precharge Compensation: 0x02
    Precharge Voltage: 0x10

    this is seen in the image "Menu Navigation". However, the same settings with a display screen which is not as full yields the same streaking lines. The displays also look best when the majority of the screen is on. When there are only a few pixels on, it becomes worse.

    4. As for the Display offset, I actually need to use that functionality of this display, but even when it is zero, the streaks occur.


    Any more thoughts?

    0
  • Michael_L

    Hmm, I am not sure what in your setup or program is causing this.  I have posted some images below, one with our logo and the other with one of your screens that I replicated.  You can see in both photos there is no streaking on the display.  I have also included the code running for this below.

    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    //  Instruction Setting
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    void Set_Column_Address_12864(unsigned char a, unsigned char b)
    {
    oled_Command(0x15); // Set Column Address
    oled_Command(a); //   Default => 0x00
    oled_Command(b); //   Default => 0x3F (Total Columns Devided by 2)
    }


    void Set_Row_Address_12864(unsigned char a, unsigned char b)
    {
    oled_Command(0x75); // Set Row Address
    oled_Command(a); //   Default => 0x00
    oled_Command(b); //   Default => 0x4F
    }


    void Set_Contrast_Current_12864(unsigned char d)
    {
    oled_Command(0x81); // Set Contrast Value
    oled_Command(d); //   Default => 0x40
    }


    void Set_Current_Range_12864(unsigned char d)
    {
    oled_Command(0x84|d); // Set Current Range
    //   Default => 0x84
    //     0x84 (0x00) => Quarter Current Range
    //     0x85 (0x01) => Half Current Range
    //     0x86 (0x02) => Full Current Range
    }


    void Set_Remap_Format_12864(unsigned char d)
    {
    oled_Command(0xA0); // Set Re-Map & Data Format
    oled_Command(d); //   Default => 0x00
    //     Column Address 0 Mapped to SEG0
    //     Disable Nibble Re-Map
    //     Horizontal Address Increment
    //     Scan from COM0 to COM[N-1]
    //     Disable COM Split Odd Even
    }


    void Set_Start_Line_12864(unsigned char d)
    {
    oled_Command(0xA1); // Set Display Start Line
    oled_Command(d); //   Default => 0x00
    }


    void Set_Display_Offset_12864(unsigned char d)
    {
    oled_Command(0xA2); // Set Display Offset
    oled_Command(d); //   Default => 0x00
    }


    void Set_Display_Mode_12864(unsigned char d)
    {
    oled_Command(0xA4|d); // Set Display Mode
    //   Default => 0xA4
    //     0xA4 (0x00) => Normal Display
    //     0xA5 (0x01) => Entire Display On, All Pixels Turn On at GS Level 15
    //     0xA6 (0x02) => Entire Display Off, All Pixels Turn Off
    //     0xA7 (0x03) => Inverse Display
    }


    void Set_Multiplex_Ratio_12864(unsigned char d)
    {
    oled_Command(0xA8); // Set Multiplex Ratio
    oled_Command(d); //   Default => 0x5F
    }


    void Set_Master_Config_12864(unsigned char d)
    {
    oled_Command(0xAD); // Set Master Configuration
    oled_Command(0x02|d); //   Default => 0x03
    //     0x02 (0x00) => Select External VCC Supply
    //     0x03 (0x01) => Select Internal DC/DC Voltage Converter
    }


    void Set_Display_On_Off_12864(unsigned char d)
    {
    oled_Command(0xAE|d); // Set Display On/Off
    //   Default => 0xAE
    //     0xAE (0x00) => Display Off
    //     0xAF (0x01) => Display On
    }


    void Set_Phase_Length_12864(unsigned char d)
    {
    oled_Command(0xB1); // Phase 1 & 2 Period Adjustment
    oled_Command(d); //   Default => 0x53 (5 Display Clocks [Phase 2] / 3 Display Clocks [Phase 1])
    //     D[3:0] => Phase 1 Period in 1~15 Display Clocks
    //     D[7:4] => Phase 2 Period in 1~15 Display Clocks
    }


    void Set_Frame_Frequency_12864(unsigned char d)
    {
    oled_Command(0xB2); // Set Frame Frequency (Row Period)
    oled_Command(d); //   Default => 0x25 (37 Display Clocks)
    }


    void Set_Display_Clock_12864(unsigned char d)
    {
    oled_Command(0xB3); // Display Clock Divider/Osciallator Frequency
    oled_Command(d); //   Default => 0x41
    //     D[3:0] => Display Clock Divider
    //     D[7:4] => Oscillator Frequency
    }


    void Set_Precharge_Compensation_12864(unsigned char a, unsigned char b)
    {
    oled_Command(0xB4); // Set Pre-Charge Compensation Level
    oled_Command(b); //   Default => 0x00 (No Compensation)

    if(a == 0x20)
    {
    oled_Command(0xB0); // Set Pre-Charge Compensation Enable
    oled_Command(0x08|a); //   Default => 0x08
    //     0x08 (0x00) => Disable Pre-Charge Compensation
    //     0x28 (0x20) => Enable Pre-Charge Compensation
    }
    }


    void Set_Precharge_Voltage_12864(unsigned char d)
    {
    oled_Command(0xBC); // Set Pre-Charge Voltage Level
    oled_Command(d); //   Default => 0x10 (Connect to VCOMH)
    }


    void Set_VCOMH_12864(unsigned char d)
    {
    oled_Command(0xBE); // Set Output Level High Voltage for COM Signal
    oled_Command(d); //   Default => 0x1D (0.81*VREF)
    }


    void Set_VSL_12864(unsigned char d)
    {
    oled_Command(0xBF); // Set Segment Low Voltage Level
    oled_Command(0x02|d); //   Default => 0x0E
    //     0x02 (0x00) => Keep VSL Pin Floating
    //     0x0E (0x0C) => Connect a Capacitor between VSL Pin & VSS
    }


    void GA_Option_12864(unsigned char d)
    {
    oled_Command(0x23); // Graphic Acceleration Command Options
    oled_Command(d); //   Default => 0x01
    //     Enable Fill Rectangle
    //     Disable Wrap around in Horizontal Direction During Copying & Scrolling
    //     Disable Reverse Copy
    }


    void Draw_Rectangle_12864(unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e)
    {
    oled_Command(0x24); // Draw Rectangle
    oled_Command(a); //   Column Address of Start
    oled_Command(c); //   Row Address of Start
    oled_Command(b); //   Column Address of End (Total Columns Devided by 2)
    oled_Command(d); //   Row Address of End
    oled_Command(e); //   Gray Scale Level
    OLED_uDelay(200);
    }


    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    //  Show Regular Pattern (Full Screen)
    //
    //    a: Two Pixels Data
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    void Fill_RAM_12864(unsigned char a)
    {
    GA_Option_12864(0x01);
    Draw_Rectangle_12864(0x00,0x3F,0x00,0x5F,a);
    }


    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    //  Show Regular Pattern (Partial or Full Screen)
    //
    //    a: Column Address of Start
    //    b: Column Address of End (Total Columns Devided by 2)
    //    c: Row Address of Start
    //    d: Row Address of End
    //    e: Two Pixels Data
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    void Fill_Block_12864(unsigned char a, unsigned char b, unsigned char c, unsigned char d, unsigned char e)
    {
    GA_Option_12864(0x01);
    Draw_Rectangle_12864(a,b,c,d,e);
    }


    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    //  Show Checkboard (Full Screen)
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    void Checkerboard_12864()
    {
    unsigned char i,j;

    Set_Column_Address_12864(0x00,0x3F);
    Set_Row_Address_12864(0x00,0x5F);

    for(i=0;i<40;i++)
    {
    for(j=0;j<64;j++)
    {
    oled_Data(0xF0);
    }
    for(j=0;j<64;j++)
    {
    oled_Data(0x0F);
    }
    }
    }


    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    //  Show Gray Scale Bar (Full Screen)
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    void Grayscale_12864()
    {
    //   Level 16 => Column 1~8
    Fill_Block_12864(0x00,0x03,0x00,0x3F,0xFF);

    //   Level 15 => Column 9~16
    Fill_Block_12864(0x04,0x07,0x00,0x3F,0xEE);

    //   Level 14 => Column 17~24
    Fill_Block_12864(0x08,0x0B,0x00,0x3F,0xDD);

    //   Level 13 => Column 25~32
    Fill_Block_12864(0x0C,0x0F,0x00,0x3F,0xCC);

    //   Level 12 => Column 33~40
    Fill_Block_12864(0x10,0x13,0x00,0x3F,0xBB);

    //   Level 11 => Column 41~48
    Fill_Block_12864(0x14,0x17,0x00,0x3F,0xAA);

    //   Level 10 => Column 49~56
    Fill_Block_12864(0x18,0x1B,0x00,0x3F,0x99);

    //   Level 9 => Column 57~64
    Fill_Block_12864(0x1C,0x1F,0x00,0x3F,0x88);

    //   Level 8 => Column 65~72
    Fill_Block_12864(0x20,0x23,0x00,0x3F,0x77);

    //   Level 7 => Column 73~80
    Fill_Block_12864(0x24,0x27,0x00,0x3F,0x66);

    //   Level 6 => Column 81~88
    Fill_Block_12864(0x28,0x2B,0x00,0x3F,0x55);

    //   Level 5 => Column 89~96
    Fill_Block_12864(0x2C,0x2F,0x00,0x3F,0x44);

    //   Level 4 => Column 97~104
    Fill_Block_12864(0x30,0x33,0x00,0x3F,0x33);

    //   Level 3 => Column 105~112
    Fill_Block_12864(0x34,0x37,0x00,0x3F,0x22);

    //   Level 2 => Column 113~120
    Fill_Block_12864(0x38,0x3B,0x00,0x3F,0x11);

    //   Level 1 => Column 121~128
    Fill_Block_12864(0x3C,0x3F,0x00,0x3F,0x00);
    }


    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    //  Show Character (5x7)
    //
    //    a: Database
    //    b: Ascii
    //    c: Start X Address
    //    d: Start Y Address
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    void Show_Font57_12864(unsigned char a, unsigned char b, unsigned char c, unsigned char d)
    {
    unsigned char *Src_Pointer=0;
    unsigned char i,Font,MSB,LSB;

    switch(a)
    {
    case 1:
    Src_Pointer=&Ascii_1[(b-1)][0];
    break;
    case 2:
    //Src_Pointer=&Ascii_2[(b-1)][0];
    break;
    }

    Set_Remap_Format_12864(0x54);
    for(i=0;i<=4;i+=2)
    {
    LSB=*Src_Pointer;
    Src_Pointer++;
    if(i == 4)
    {
    MSB=0x00;
    }
    else
    {
    MSB=*Src_Pointer;
    Src_Pointer++;
    }
      Set_Column_Address_12864(c,c);
    Set_Row_Address_12864(d,d+7);

    Font=((MSB&0x01)<<4)|(LSB&0x01);
    Font=Font|(Font<<1)|(Font<<2)|(Font<<3);
    oled_Data(Font);

    Font=((MSB&0x02)<<3)|((LSB&0x02)>>1);
    Font=Font|(Font<<1)|(Font<<2)|(Font<<3);
    oled_Data(Font);

    Font=((MSB&0x04)<<2)|((LSB&0x04)>>2);
    Font=Font|(Font<<1)|(Font<<2)|(Font<<3);
    oled_Data(Font);

    Font=((MSB&0x08)<<1)|((LSB&0x08)>>3);
    Font=Font|(Font<<1)|(Font<<2)|(Font<<3);
    oled_Data(Font);

    Font=((MSB&0x10)<<3)|((LSB&0x10)>>1);
    Font=Font|(Font>>1)|(Font>>2)|(Font>>3);
    oled_Data(Font);

    Font=((MSB&0x20)<<2)|((LSB&0x20)>>2);
    Font=Font|(Font>>1)|(Font>>2)|(Font>>3);
    oled_Data(Font);

    Font=((MSB&0x40)<<1)|((LSB&0x40)>>3);
    Font=Font|(Font>>1)|(Font>>2)|(Font>>3);
    oled_Data(Font);

    Font=(MSB&0x80)|((LSB&0x80)>>4);
    Font=Font|(Font>>1)|(Font>>2)|(Font>>3);
    oled_Data(Font);
    c++;
    }
    Set_Remap_Format_12864(0x50);
    }


    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    //  Show String
    //
    //    a: Database
    //    b: Start X Address
    //    c: Start Y Address
    //    * Must write "0" in the end...
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    void Show_String_12864(unsigned char a, unsigned char *Data_Pointer, unsigned char b, unsigned char c)
    {
    unsigned char *Src_Pointer;

    Src_Pointer=Data_Pointer;
    Show_Font57_12864(1,96,b,c); // No-Break Space
    //   Must be written first before the string start...

    while(1)
    {
    Show_Font57_12864(a,*Src_Pointer,b,c);
    Src_Pointer++;
    b+=3;
    if(*Src_Pointer == 0) break;
    }
    }


    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    //  Show Pattern (Partial or Full Screen)
    //
    //    a: Column Address of Start
    //    b: Column Address of End (Total Columns Divided by 2)
    //    c: Row Address of Start
    //    d: Row Address of End
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    void Show_Pattern_12864(unsigned char *Data_Pointer, unsigned char a, unsigned char b, unsigned char c, unsigned char d)
    {
    unsigned char *Src_Pointer;
    unsigned char i,j;

    Src_Pointer=Data_Pointer;
    Set_Column_Address_12864(a,b);
    Set_Row_Address_12864(c,d);

    for(i=0;i<(d-c+1);i++)
    {
    for(j=0;j<(b-a+1);j++)
    {
    oled_Data(*Src_Pointer);
    Src_Pointer++;
    }
    }
    }


    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    //  Vertical Scrolling (Full Screen)
    //
    //    a: Scrolling Direction
    //       "0x00" (Upward)
    //       "0x01" (Downward)
    //    b: Set Numbers of Row Scroll per Step
    //    c: Set Time Interval between Each Scroll Step
    //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    void Set_Gray_Scale_Table_12864()
    {
    oled_Command(0xB8); // Set Gray Scale Table
    oled_Command(0x01); //   Gray Scale Level 1
    oled_Command(0x11); //   Gray Scale Level 3 & 2
    oled_Command(0x22); //   Gray Scale Level 5 & 4
    oled_Command(0x32); //   Gray Scale Level 7 & 6
    oled_Command(0x43); //   Gray Scale Level 9 & 8
    oled_Command(0x54); //   Gray Scale Level 11 & 10
    oled_Command(0x65); //   Gray Scale Level 13 & 12
    oled_Command(0x76); //   Gray Scale Level 15 & 14
    }

    //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    //  Initialization
    //=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    void OLED_12864_Init()
    {
    unsigned char i;
    Max_Column = 0x3F; // 128/2-1 (Total Columns Devided by 2)
    Max_Row = 0x3F; // 64-1
    Brightness = 0x7F;
    GPIO_ResetBits(GPIOC, RES);
    for(i=0;i<200;i++)
    {
    OLED_uDelay(200);
    }
    GPIO_SetBits(GPIOC, RES); 

    Set_Display_On_Off_12864(0x00); // Display Off (0x00/0x01)
    Set_Display_Clock_12864(0x91); // Set Clock as 135 Frames/Sec
    Set_Multiplex_Ratio_12864(0x3F); // 1/64 Duty (0x0F~0x5F)
    Set_Display_Offset_12864(0x4C); // Shift Mapping RAM Counter (0x00~0x5F)
    Set_Start_Line_12864(0x00); // Set Mapping RAM Display Start Line (0x00~0x5F)
    Set_Master_Config_12864(0x00); // Disable Embedded DC/DC Converter (0x00/0x01)
    Set_Remap_Format_12864(0x50); // Set Column Address 0 Mapped to SEG0
    //     Disable Nibble Remap
    //     Horizontal Address Increment
    //     Scan from COM[N-1] to COM0
    //     Enable COM Split Odd Even
    Set_Current_Range_12864(0x02); // Set Full Current Range
    Set_Gray_Scale_Table_12864(); // Set Pulse Width for Gray Scale Table
    Set_Contrast_Current_12864(Brightness); // Set Scale Factor of Segment Output Current Control
    Set_Frame_Frequency_12864(0x51); // Set Frame Frequency
    Set_Phase_Length_12864(0x55); // Set Phase 1 as 5 Clocks & Phase 2 as 5 Clocks
    Set_Precharge_Voltage_12864(0x10); // Set Pre-Charge Voltage Level
    Set_Precharge_Compensation_12864(0x20,0x02); // Set Pre-Charge Compensation
    Set_VCOMH_12864(0x1C); // Set High Voltage Level of COM Pin
    Set_VSL_12864(0x0D); // Set Low Voltage Level of SEG Pin
    Set_Display_Mode_12864(0x00); // Normal Display Mode (0x00/0x01/0x02/0x03)

    Fill_RAM_12864(0x00); // Clear Screen

    Set_Display_On_Off_12864(0x01); // Display On (0x00/0x01)
    }
    Please make sure your code matches, and also double check your connections and voltage levels.  Make certain that there are no voltages being supplied to any pin on the OLED over the 3.5V max, and that you voltages are clean (with little to no noise).  You may also try putting a large capacitor across VDD and Ground, altough this is not present in the below images.

    (The slightly darker diagonal bands you see are a result of the camera/refresh of the OLED, and are not seen in person.)


    « Last Edit: August 07, 2014, 11:31:08 AM by Michael_L »
    0
  • cherry8wild

    Yea, taking pictures of the screens isn't easy. I'll go through the code and see if I see anywhere I am missing something. Thanks again, and hopefully my screen will look like that soon!

    0
  • Michael_L

    You're welcome!  I'm sorry you are having issues with the display, but if you end up getting the display to look good like in the images I have shown you, please share your solution here so others that potentially run into a similar issue can benefit!  ;) Thanks!

    0
  • dotmatrix

    try making your refresh rate faster....

    0

Please sign in to leave a comment.