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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
shim666
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

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

Сообщение shim666 »

Всем доброго времени суток!Недавно на Ebay приобрел данный девайс - http://www.ebay.com/itm/381007182913?_t ... EBIDX%3AIT
Несколько дней убил на поиск информации по его подключению к мк,даже даташит несколько раз пролистал!Но то ли я чего то не пойму,то ли просто инфы про него в инете мало!!Не получается его запустить!Кто работал с данной штуковиной?ну или кто знает как его запустить,помогите
mas123
Потрогал лапой паяльник
Сообщения: 312
Зарегистрирован: Вс июл 29, 2012 16:25:39

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

Сообщение 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
// след байт: значение
 
srg320
Встал на лапы
Сообщения: 85
Зарегистрирован: Пт фев 01, 2013 17:47:26
Откуда: Украина, Луганская область

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

Сообщение srg320 »

Вот мой код для аналогичного дисплея под STM8
Вложения
lcd.zip
(4.64 КБ) 450 скачиваний
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

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

Сообщение Albert_V »

shim666 писал(а):...то ли я чего то не пойму,то ли просто инфы про него в инете мало!!...

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

ER-OLED0.96-3_Manual.pdf
(1.7 МБ) 370 скачиваний
С Уважением, Альберт (Albert_V).
shim666
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

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

Сообщение shim666 »

Всем конечно спасибо что откликнулись)Но я недавно начал авры изучать и пока только более менее баском освоил!Может кто нибудь на бэйсике кинуть рукопись??)) P.S Цепляется по SPI
ferio
Прорезались зубы
Сообщения: 204
Зарегистрирован: Вт мар 31, 2009 09:14:47

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

Сообщение ferio »

нет ли у кого готовой библиотеки для такого дисплея на SSD1306 0.96", версия I2C. планирую подключить к mega88.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Для чего ? Вам же выложили всю документацию, всё разжёвано, осталось только "в рот положить".
Как Вы собрались с такой ленью писать программы ? :dont_know:
Morroc
Друг Кота
Сообщения: 19494
Зарегистрирован: Чт фев 20, 2014 18:57:55

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

Сообщение Morroc »

для ардуины ( AVR же :)) ), i2c, работает
мне вот тоже жалко времени на изучении даташита дисплеев, есть чем заняться и без этого

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

а инфы в инете по ssd1306 полно :dont_know: у меня есть похожие дисплеи на ssd1306 и на sh1106 (в этом 132 x 64)
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
shim666
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

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

Сообщение shim666 »

Тему можно закрывать
Аватара пользователя
BigallS
Опытный кот
Сообщения: 752
Зарегистрирован: Пт апр 15, 2011 21:11:22
Откуда: Россия

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

Сообщение BigallS »

ferio писал(а):нет ли у кого готовой библиотеки для такого дисплея на SSD1306 0.96", версия I2C. ...

Увидел вот здесь http://arduino-project.net/russkie-ukra ... -oled-i2c/
и раздел библиотеки http://arduino-project.net/biblioteki-arduino/
shim666
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

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

Сообщение shim666 »

Спасибо конечно за библиотеки,но нет ли у кого готовых исходников на баскоме!?
binarick
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт фев 27, 2015 17:48:39

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

Сообщение binarick »

а для протеус модель есть под него ?
Morroc
Друг Кота
Сообщения: 19494
Зарегистрирован: Чт фев 20, 2014 18:57:55

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

Сообщение Morroc »

А вприсядку не сплясать ? :))

Там библиотека то... которая MicroLCD. Если очень надо можно и переписать на чем угодно, я туда цифры огромные запихивал (в половину экранчика) -код несложный и не особо длинный. (Ну а лучше слезть с баскома, неужели он чем то лучше "ардуинского" ?)
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
shim666
Первый раз сказал Мяу!
Сообщения: 36
Зарегистрирован: Пт сен 12, 2014 06:56:00

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

Сообщение shim666 »

Morroc писал(а):А вприсядку не сплясать ? :))

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

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

Вернуться в «Периферия»