Требуется помощь с OLED дисплеем!
Требуется помощь с OLED дисплеем!
Всем доброго времени суток!Недавно на Ebay приобрел данный девайс - http://www.ebay.com/itm/381007182913?_t ... EBIDX%3AIT
Несколько дней убил на поиск информации по его подключению к мк,даже даташит несколько раз пролистал!Но то ли я чего то не пойму,то ли просто инфы про него в инете мало!!Не получается его запустить!Кто работал с данной штуковиной?ну или кто знает как его запустить,помогите
Несколько дней убил на поиск информации по его подключению к мк,даже даташит несколько раз пролистал!Но то ли я чего то не пойму,то ли просто инфы про него в инете мало!!Не получается его запустить!Кто работал с данной штуковиной?ну или кто знает как его запустить,помогите
Re: Требуется помощь с OLED дисплеем!
Знакомая игрушка. Уточни - у тебя SPI или I2C версия дисплея?
Впрочем, у меня и та и та, и обе запустились.
На чём запнулся? Вообще ничего не включается или что-то засветилось?
.........
С работы до домашнего компа неудобно тянуться.
Вот кусок запуска экрана, SPI-версия, мк - MSP430, питание 3.3В
Инициализация
Хеадер с дефайнами
Впрочем, у меня и та и та, и обе запустились.
На чём запнулся? Вообще ничего не включается или что-то засветилось?
.........
С работы до домашнего компа неудобно тянуться.
Вот кусок запуска экрана, 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 дисплеем!
Вот мой код для аналогичного дисплея под STM8
- Вложения
-
- lcd.zip
- (4.64 КБ) 450 скачиваний
- Albert_V
- Друг Кота
- Сообщения: 4119
- Зарегистрирован: Чт сен 12, 2013 00:54:12
- Откуда: ЗаМКАДье. Там, где ЦУП
Re: Требуется помощь с OLED дисплеем!
shim666 писал(а):...то ли я чего то не пойму,то ли просто инфы про него в инете мало!!...
Держите документацию на сам индикатор и контроллер SSD1306.
Спойлер
С Уважением, Альберт (Albert_V).
Re: Требуется помощь с OLED дисплеем!
Всем конечно спасибо что откликнулись)Но я недавно начал авры изучать и пока только более менее баском освоил!Может кто нибудь на бэйсике кинуть рукопись??)) P.S Цепляется по SPI
Re: Требуется помощь с OLED дисплеем!
нет ли у кого готовой библиотеки для такого дисплея на SSD1306 0.96", версия I2C. планирую подключить к mega88.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Требуется помощь с OLED дисплеем!
Для чего ? Вам же выложили всю документацию, всё разжёвано, осталось только "в рот положить".
Как Вы собрались с такой ленью писать программы ?
Как Вы собрались с такой ленью писать программы ?

Re: Требуется помощь с OLED дисплеем!
для ардуины ( AVR же
), i2c, работает
мне вот тоже жалко времени на изучении даташита дисплеев, есть чем заняться и без этого
https://github.com/stanleyhuangyc/MultiLCD/tree/master/MicroLCD
а инфы в инете по ssd1306 полно
у меня есть похожие дисплеи на ssd1306 и на sh1106 (в этом 132 x 64)
мне вот тоже жалко времени на изучении даташита дисплеев, есть чем заняться и без этого
https://github.com/stanleyhuangyc/MultiLCD/tree/master/MicroLCD
а инфы в инете по ssd1306 полно
у меня есть похожие дисплеи на ssd1306 и на sh1106 (в этом 132 x 64)"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Re: Требуется помощь с OLED дисплеем!
Тему можно закрывать
Re: Требуется помощь с OLED дисплеем!
ferio писал(а):нет ли у кого готовой библиотеки для такого дисплея на SSD1306 0.96", версия I2C. ...
Увидел вот здесь http://arduino-project.net/russkie-ukra ... -oled-i2c/
и раздел библиотеки http://arduino-project.net/biblioteki-arduino/
Re: Требуется помощь с OLED дисплеем!
Спасибо конечно за библиотеки,но нет ли у кого готовых исходников на баскоме!?
Re: Требуется помощь с OLED дисплеем!
а для протеус модель есть под него ?
Re: Требуется помощь с OLED дисплеем!
А вприсядку не сплясать ?
Там библиотека то... которая MicroLCD. Если очень надо можно и переписать на чем угодно, я туда цифры огромные запихивал (в половину экранчика) -код несложный и не особо длинный. (Ну а лучше слезть с баскома, неужели он чем то лучше "ардуинского" ?)
Там библиотека то... которая MicroLCD. Если очень надо можно и переписать на чем угодно, я туда цифры огромные запихивал (в половину экранчика) -код несложный и не особо длинный. (Ну а лучше слезть с баскома, неужели он чем то лучше "ардуинского" ?)
"Вся военная пропаганда, все крики, ложь и ненависть исходят от людей, которые на эту войну не пойдут !" / Джордж Оруэлл /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
"Война - это,когда за интересы других,гибнут совершенно безвинные люди." / Уинстон Черчилль /
Re: Требуется помощь с OLED дисплеем!
Morroc писал(а):А вприсядку не сплясать ?![]()
Там библиотека то... которая MicroLCD. Если очень надо можно и переписать на чем угодно, я туда цифры огромные запихивал (в половину экранчика) -код несложный и не особо длинный. (Ну а лучше слезть с баскома, неужели он чем то лучше "ардуинского" ?)
Да как то уже привык к нему!