Страница 1 из 1

Требуется помощь с OLED дисплеем!

Добавлено: Пн янв 26, 2015 15:40:40
shim666
Всем доброго времени суток!Недавно на Ebay приобрел данный девайс - http://www.ebay.com/itm/381007182913?_t ... EBIDX%3AIT
Несколько дней убил на поиск информации по его подключению к мк,даже даташит несколько раз пролистал!Но то ли я чего то не пойму,то ли просто инфы про него в инете мало!!Не получается его запустить!Кто работал с данной штуковиной?ну или кто знает как его запустить,помогите

Re: Требуется помощь с OLED дисплеем!

Добавлено: Пн янв 26, 2015 15:50:09
mas123
Знакомая игрушка. Уточни - у тебя SPI или I2C версия дисплея?
Впрочем, у меня и та и та, и обе запустились.
На чём запнулся? Вообще ничего не включается или что-то засветилось?
.........
С работы до домашнего компа неудобно тянуться.
Вот кусок запуска экрана, SPI-версия, мк - MSP430, питание 3.3В
Инициализация
Спойлер

Код: Выделить всё

#define SPI_CMD_OUT     P1OUT    // Write to Port
#define SPI_CMD_DIR     P1DIR    // Set Port Direction
#define SPI_CMD_SEL     P1SEL    // Alternative Port Fuctions
#define SPI_CMD_REN     P1REN   

#define SPI_CLK_OUT     P2OUT    // Write to Port
#define SPI_CLK_DIR     P2DIR    // Set Port Direction
#define SPI_CLK_SEL     P2SEL    // Alternative Port Fuctions
#define SPI_CLK_REN     P2REN   

#define LCD_DC      BIT5
#define LCD_RST     BIT6
#define LCD_SDA     BIT7

#define LCD_SCL     BIT0


//----------
void spi_Init()
{
    SPI_CMD_REN &= ~(LCD_DC | LCD_RST | LCD_SDA);
    SPI_CMD_SEL &= ~(LCD_DC | LCD_RST | LCD_SDA);
    SPI_CMD_DIR |= (LCD_DC | LCD_RST | LCD_SDA);
    SPI_CMD_OUT &= ~(LCD_DC | LCD_RST | LCD_SDA);

    SPI_CLK_REN &= ~LCD_SCL;
    SPI_CLK_SEL &= ~LCD_SCL;
    SPI_CLK_DIR |= LCD_SCL;
    SPI_CLK_OUT &= ~LCD_SCL;
   
    SPI_CMD_OUT |= LCD_RST;
}


//----------
void spi_Write(char a)
{
    for(char i = 0; i < 8; i++)
    {
        if (a & 0x80)
            SPI_CMD_OUT |= LCD_SDA;
        else         
            SPI_CMD_OUT &= ~LCD_SDA;

        SPI_CLK_OUT |= LCD_SCL;
        a <<= 1;
        SPI_CLK_OUT &= ~LCD_SCL;
    }
}

//****************************************************************


void LCDCommand(char command)
{
    SPI_CMD_OUT &= ~LCD_DC;
    spi_Write(command);
}

// передать команду в LCD
void LCDCommand_param(char command, char param)
{
    LCDCommand(command);
    spi_Write(param);
}
   
void LCDData(unsigned char val)
{
    SPI_CMD_OUT |= LCD_DC;
    spi_Write(val);
}
   
void LcdInit()
{
    g_lcdCharX = 0;
    g_lcdCharY = 0;

    spi_Init();
   
    LCDCommand(LCD_CMD_DISPLAY_OFF);//+ display off
 
    LCDCommand(LCD_CMD_SET_COL_L);
    LCDCommand(LCD_CMD_SET_COL_H);
    LCDCommand(LCD_CMD_START_LINE);//+ Set Page Start Address for Page Addressing Mode,0-7

    LCDCommand_param(LCD_CMD_CONTRAST, 0x00); ///~~~0xCF);
 
    LCDCommand(LCD_CMD_SEGMENT_MAP_1);
    LCDCommand(LCD_CMD_SCAN_DIR_MINUS);
    LCDCommand(LCD_CMD_NORMAL_DISPLAY);
 
//--set multiplex ratio(1 to 64) 
    LCDCommand_param(LCD_CMD_MULTIPLEX_RATIO, 63);
//-set display offset    (not offset)
    LCDCommand_param(LCD_CMD_DISPLAY_OFFSET, 0x00);
 
//--set display clock divide ratio/oscillator frequency 
//   set divide ratio 
    LCDCommand_param(LCD_CMD_SET_CLOCK_DIVIDE, 0x80);//
 
    LCDCommand_param(LCD_CMD_SET_PRE_CHARGE_PERIOD, 0xF1);
 
    LCDCommand_param(LCD_CMD_SET_PIN_CONF, 0x12);//--  0x02???
 
////~~~    LCDCommand_param(LCD_CMD_SET_VCOMH, 0x40);//--
///    LCDCommand_param(LCD_CMD_SET_VCOMH, 0x20);  // 0.77 * VCC
    LCDCommand_param(LCD_CMD_SET_VCOMH, 0x10);  // 0.77 * VCC
 
// Set Memory Addressing Mode 
    LCDCommand_param(LCD_CMD_ADDR_MODE, 0x02);
 
    LCDCommand_param(LCD_CMD_SET_CHARGE_BUMP, 0x14); // Enable Charge Pump
 
    LCDCommand(LCD_CMD_ALL_OFF);
    LCDCommand(LCD_CMD_NORMAL_DISPLAY);
 
    LCDCommand(LCD_CMD_DISPLAY_ON);//+ --turn on oled panel
   
    LcdClear();
}

// включить LCD
void LcdLedON()
{
//    LCDCommand_param(LCD_CMD_SET_CHARGE_BUMP, 0x14); // Enable Charge Pump
    LCDCommand(LCD_CMD_DISPLAY_ON);
}

// выключить LCD
void LcdLedOFF()
{
    LCDCommand(LCD_CMD_DISPLAY_OFF);
//    LCDCommand_param(LCD_CMD_SET_CHARGE_BUMP, 0x10); // Disable Charge Pump
}


//*********************************************************************

void LcdClear()
{
    LcdFill(0x00);
}


void LcdFill(unsigned char fill_Data)
{
    for(char m=0; m<8; m++)
    {
        LCDCommand(LCD_CMD_SET_PAGE + m);    // page0-page1
        LCDCommand(LCD_CMD_SET_COL_L);         // low column start address
        LCDCommand(LCD_CMD_SET_COL_H);        // high column start address

        for(char n=0; n<128; n++)
            LCDData(fill_Data);
    }
}

Хеадер с дефайнами
Спойлер

Код: Выделить всё

// Set Lower Column Start Address for Page Addressing Mode (00h~0Fh)
#define LCD_CMD_SET_COL_L               0x00
// Set Higher Column Start Address for Page Addressing Mode (10h~1Fh)
#define LCD_CMD_SET_COL_H               0x10

// Set Memory Addressing Mode (20h)
#define LCD_CMD_ADDR_MODE               0x20
// след байт:
//  0 - Horizontal Addressing Mode;
//  1 - Vertical Addressing Mode;
//  2 - Page Addressing Mode (RESET);
//  3 - Invalid

// Set Column Address (21h)

// Set Page Address (22h)


// Set Display Start Line (40h~7Fh)
#define LCD_CMD_START_LINE              0x40

// Set Contrast Control for BANK0 (81h)
#define LCD_CMD_CONTRAST                0x81
// след байт: контрастность



// Charge Bump Setting
#define LCD_CMD_SET_CHARGE_BUMP         0x8D
// след байт: значение


// Set Segment Re-map (A0h/A1h)
// column address 0 is mapped to SEG0 (RESET)
#define LCD_CMD_SEGMENT_MAP_0           0xA0
// column address 127 is mapped to SEG0
#define LCD_CMD_SEGMENT_MAP_1           0xA1


// Entire Display ON (A4h/A5h)
#define LCD_CMD_ALL_OFF                 0xA4
#define LCD_CMD_ALL_ON                  0xA5


// Set Normal/Inverse Display (A6h/A7h)
#define LCD_CMD_NORMAL_DISPLAY          0xA6
#define LCD_CMD_INVERSE_DISPLAY         0xA7


// Set Multiplex Ratio (A8h)
#define LCD_CMD_MULTIPLEX_RATIO         0xA8
// след байт: значение


// Set Display ON/OFF (AEh/AFh)
#define LCD_CMD_DISPLAY_ON              0xAF
#define LCD_CMD_DISPLAY_OFF             0xAE


// Set Page Start Address for Page Addressing Mode (B0h~B7h)
#define LCD_CMD_SET_PAGE                0xB0


// Set COM Output Scan Direction (C0h/C8h)
// C0h, X[3]=0b: normal mode (RESET) Scan from COM0 to COM[N –1]
#define LCD_CMD_SCAN_DIR_PLUS           0xC0
// C8h, X[3]=1b: remapped mode. Scan from COM[N-1] to COM0
#define LCD_CMD_SCAN_DIR_MINUS          0xC8


// Set Display Offset (D3h)
#define LCD_CMD_DISPLAY_OFFSET          0xD3
// след байт: значение


// Set Display Clock Divide Ratio/ Oscillator Frequency (D5h)
#define LCD_CMD_SET_CLOCK_DIVIDE        0xD5
// след байт:   Display Clock Divide Ratio + Oscillator Frequency


// Set Pre-charge Period (D9h)
#define LCD_CMD_SET_PRE_CHARGE_PERIOD   0xD9
// след байт: значение


// Set COM Pins Hardware Configuration (DAh)
#define LCD_CMD_SET_PIN_CONF            0xDA
// след байт: значение


// Set VCOMH Deselect Level (DBh)
#define LCD_CMD_SET_VCOMH               0xDB
// след байт: значение
 

Re: Требуется помощь с OLED дисплеем!

Добавлено: Пн янв 26, 2015 21:07:09
srg320
Вот мой код для аналогичного дисплея под STM8

Re: Требуется помощь с OLED дисплеем!

Добавлено: Вт янв 27, 2015 01:09:33
Albert_V
shim666 писал(а):...то ли я чего то не пойму,то ли просто инфы про него в инете мало!!...

Держите документацию на сам индикатор и контроллер SSD1306.
Спойлер
SSD1306.pdf
(1.79 МБ) 385 скачиваний

ER-OLED0.96-3_Manual.pdf
(1.7 МБ) 370 скачиваний

Re: Требуется помощь с OLED дисплеем!

Добавлено: Вт янв 27, 2015 13:37:40
shim666
Всем конечно спасибо что откликнулись)Но я недавно начал авры изучать и пока только более менее баском освоил!Может кто нибудь на бэйсике кинуть рукопись??)) P.S Цепляется по SPI

Re: Требуется помощь с OLED дисплеем!

Добавлено: Вт фев 24, 2015 21:59:02
ferio
нет ли у кого готовой библиотеки для такого дисплея на SSD1306 0.96", версия I2C. планирую подключить к mega88.

Re: Требуется помощь с OLED дисплеем!

Добавлено: Ср фев 25, 2015 11:29:22
Аlex
Для чего ? Вам же выложили всю документацию, всё разжёвано, осталось только "в рот положить".
Как Вы собрались с такой ленью писать программы ? :dont_know:

Re: Требуется помощь с OLED дисплеем!

Добавлено: Ср фев 25, 2015 11:39:37
Morroc
для ардуины ( AVR же :)) ), i2c, работает
мне вот тоже жалко времени на изучении даташита дисплеев, есть чем заняться и без этого

https://github.com/stanleyhuangyc/MultiLCD/tree/master/MicroLCD

а инфы в инете по ssd1306 полно :dont_know: у меня есть похожие дисплеи на ssd1306 и на sh1106 (в этом 132 x 64)

Re: Требуется помощь с OLED дисплеем!

Добавлено: Чт апр 02, 2015 16:24:03
shim666
Тему можно закрывать

Re: Требуется помощь с OLED дисплеем!

Добавлено: Пт апр 03, 2015 23:44:48
BigallS
ferio писал(а):нет ли у кого готовой библиотеки для такого дисплея на SSD1306 0.96", версия I2C. ...

Увидел вот здесь http://arduino-project.net/russkie-ukra ... -oled-i2c/
и раздел библиотеки http://arduino-project.net/biblioteki-arduino/

Re: Требуется помощь с OLED дисплеем!

Добавлено: Вт апр 07, 2015 07:30:40
shim666
Спасибо конечно за библиотеки,но нет ли у кого готовых исходников на баскоме!?

Re: Требуется помощь с OLED дисплеем!

Добавлено: Чт апр 09, 2015 15:48:12
binarick
а для протеус модель есть под него ?

Re: Требуется помощь с OLED дисплеем!

Добавлено: Чт апр 09, 2015 17:26:33
Morroc
А вприсядку не сплясать ? :))

Там библиотека то... которая MicroLCD. Если очень надо можно и переписать на чем угодно, я туда цифры огромные запихивал (в половину экранчика) -код несложный и не особо длинный. (Ну а лучше слезть с баскома, неужели он чем то лучше "ардуинского" ?)

Re: Требуется помощь с OLED дисплеем!

Добавлено: Пн апр 13, 2015 06:56:13
shim666
Morroc писал(а):А вприсядку не сплясать ? :))

Там библиотека то... которая MicroLCD. Если очень надо можно и переписать на чем угодно, я туда цифры огромные запихивал (в половину экранчика) -код несложный и не особо длинный. (Ну а лучше слезть с баскома, неужели он чем то лучше "ардуинского" ?)

Да как то уже привык к нему!