Цена:
Монохромный графический OLED-экран 2.4 дюйма с последовательным интерфейсом
Технические характеристики
Разработка собственных электронных проектов, причём совершенно не важно какой сложности они должны получится в завершённом виде, часто подразумевает использование в конструкции современного универсального инструмента общения между устройством и пользователем. К подобным средствам взаимодействия с окружающим миром относится любой графический или символьный экранный модуль, способный оповещать о любых запрограммированных событиях: вывод текстовой информации с внутренними процедурными данными или показателями, полученными от всевозможных измерительных датчиков, отображение графических фигур различной формы, построение разнообразных графиков и прочих визуально понятных элементов. Выбор подходящего дисплея напрямую зависит от потребностей проекта и конструктивных возможностей экранного модуля, начиная от высвечивания простых одноцветных символьных строк и заканчивая выводом на экран цветных изображений с поддержкой большого количества оттенков палитры RGB. Как правило, способности экранного модуля не ограничиваются лишь только графическим ядром контроллера, если в схемах плат присутствуют функционально дополняющие компоненты.
Наиболее популярные на сегодняшний день экраны производятся по технологии TFT TN LCD - недорогие жидкокристаллические матрицы с фоновой светодиодной подсветкой. Экраны TFT TN LCD имеют ряд ограничений, среди которых выделяются невысокие углы обзора и контрастность. Альтернативная технология производства OLED-экранов (органический светодиод, светящийся при прохождении через него электрического тока) практически избавлена от подобных недостатков, обладает увеличенными показателями цветопередачи, настоящим глубоким чёрным цветом, малым весом ЖК-панелей и значительно расширенными углами обзора, предоставляя возможность с любой стороны просматривать изображения с максимальной четкостью, без видимых цветовых искажений. В экранных матрицах OLED, свечение излучают сами диоды, и им не требуется дополнительное освещение. По этой причине, дисплеи OLED можно называть эффективными в задачах экономии энергопотребления, что порой совсем немаловажно в проектах с использованием автономных источников питания.
Назначение контактов модуля с OLED-дисплеем
Несущая плата модуля позволяет подключать экран к передающему устройству двумя разными способами. Плата оснащена десятью стандартными контактными площадками-отверстиями с расстоянием 2.54мм (0.1 дюйма) и разъёмом FPC, совместимым с 10-пиновым плоским гибким ленточным кабелем с шагом между проводниками 1.0мм.
№ | Символ | Описание |
1 | VCC3.3 | Питание логической схемы модуля 3.3 вольта. |
2 | VCC3.3 | Питание логической схемы модуля 3.3 вольта. |
3 | EN | Сигнал включения/отключения питания внутреннего OLED блока. |
4 | GND | Заземление логической схемы модуля. |
5 | CS | Сигнал выбора микросхемы Chip Select (SPI), активен на низком уровне. |
6 | RES | Сигнал сброса Power Reset, генерируется выводом IO внешнего контроллера, активен на низком уровне. |
7 | D/C | Сигнал данных/команд (Data/Command). Высокий уровень сигнала для данных и низкий уровень сигнала для команд. Генерируется выводом IO внешнего контроллера. |
8 | GND | Заземление логической схемы модуля. |
9 | SCLK | Сигнал тактирования Serial Clock (SPI). Генерируется выводом IO внешнего контроллера. |
10 | SDIN | Сигнал входящих последовательных данных Serial Data Input (SPI). Генерируется выводом IO внешнего контроллера. |
Схема подключения OLED-дисплея к Ардуино, примеры программирования
Схема соединения контроллера Arduino Due и модуля с OLED-экраном основана на стандартной 4-проводной последовательной шине SPI в периферийном режиме. В демонстрируемом примере, плата Due выбрана не случайно. Почти все её внутренние электрические цепи (кроме выводов питания +5В), включая контакты общего назначения GPIO, работают на номинальном рабочем напряжении 3,3 вольта. Именно на таком же логическом уровне функционирует и центральная микросхема SSD1309 со всеми компонентами модуля с жидкокристаллическим экраном. Плата экранного модуля имеет 10 выводов, каждый из которых промаркирован в соответствии с его непосредственным назначением.
Питание дисплея осуществляется через контакты VCC и GND, подключаемые к источнику постоянного напряжения 3,3 вольта. Вариантов запитать дисплейный модуль существует два: напрямую от платы контроллера, если общая нагрузка на последний не велика и не превышает в сумме 700мА, либо от произвольного внешнего стабилизированного блока питания. Например, удобно будет использовать понижающий преобразователь DC-DC, соединённый с общей линией питания платы контроллера Due.
Процесс передачи графической информации задействует 3 из 4 линий шины связи SPI: тактирование - SCLK (SPI_CLK), передача данных от Ардуино Due к дисплею - SDIN (SPI_MOSI) и выбор микросхемы - CS (SPI_CS). Контакты сигналов перезапуска экранного модуля RES и смены режимов передачи между командами и данными DC выбираются произвольно из группы выводов GPIO. Вывод EN по умолчанию подтянут к высокому уровню при включенном питании экрана. Входящий сигнал низкого уровня отключает встроенный блок OLED, тем самым дополнительно снижает энергопотребление и одновременно выключает изображение на экране.
В приведённом ниже скетче, инициализатором контроллера SSD1309 выступает подключаемая внешняя библиотека U8glib, доступная в репозитории совместимых загружаемых библиотек Arduino IDE и на сайте GitHub. Кроме графических процедур, программный код библиотеки U8glib располагает набором собственных интегрированных шрифтов с изменяемыми размерами. Текст скетча взят из раздела примеров библиотеки и наглядно демонстрирует основные функции работы с графикой.
#include "U8glib.h"
U8GLIB_NHD27OLED_BW u8g(13, 11, 10, 9, 8); // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9, RES = 8
void u8g_prepare(void) {
u8g.setFont(u8g_font_6x10);
u8g.setFontRefHeightExtendedText();
u8g.setDefaultForegroundColor();
u8g.setFontPosTop();
}
void u8g_box_frame(uint8_t a) {
u8g.drawStr( 0, 0, "drawBox");
u8g.drawBox(5,10,20,10);
u8g.drawBox(10+a,15,30,7);
u8g.drawStr( 0, 30, "drawFrame");
u8g.drawFrame(5,10+30,20,10);
u8g.drawFrame(10+a,15+30,30,7);
}
void u8g_disc_circle(uint8_t a) {
u8g.drawStr( 0, 0, "drawDisc");
u8g.drawDisc(10,18,9);
u8g.drawDisc(24+a,16,7);
u8g.drawStr( 0, 30, "drawCircle");
u8g.drawCircle(10,18+30,9);
u8g.drawCircle(24+a,16+30,7);
}
void u8g_r_frame(uint8_t a) {
u8g.drawStr( 0, 0, "drawRFrame/Box");
u8g.drawRFrame(5, 10,40,30, a+1);
u8g.drawRBox(50, 10,25,40, a+1);
}
void u8g_string(uint8_t a) {
u8g.drawStr(30+a,31, " 0");
u8g.drawStr90(30,31+a, " 90");
u8g.drawStr180(30-a,31, " 180");
u8g.drawStr270(30,31-a, " 270");
}
void u8g_line(uint8_t a) {
u8g.drawStr( 0, 0, "drawLine");
u8g.drawLine(7+a, 10, 40, 55);
u8g.drawLine(7+a*2, 10, 60, 55);
u8g.drawLine(7+a*3, 10, 80, 55);
u8g.drawLine(7+a*4, 10, 100, 55);
}
void u8g_triangle(uint8_t a) {
uint16_t offset = a;
u8g.drawStr( 0, 0, "drawTriangle");
u8g.drawTriangle(14,7, 45,30, 10,40);
u8g.drawTriangle(14+offset,7-offset, 45+offset,30-offset, 57+offset,10-offset);
u8g.drawTriangle(57+offset*2,10, 45+offset*2,30, 86+offset*2,53);
u8g.drawTriangle(10+offset,40+offset, 45+offset,30+offset, 86+offset,53+offset);
}
void u8g_ascii_1() {
char s[2] = " ";
uint8_t x, y;
u8g.drawStr( 0, 0, "ASCII page 1");
for( y = 0; y < 6; y++ ) {
for( x = 0; x < 16; x++ ) {
s[0] = y*16 + x + 32;
u8g.drawStr(x*7, y*10+10, s);
}
}
}
void u8g_ascii_2() {
char s[2] = " ";
uint8_t x, y;
u8g.drawStr( 0, 0, "ASCII page 2");
for( y = 0; y < 6; y++ ) {
for( x = 0; x < 16; x++ ) {
s[0] = y*16 + x + 160;
u8g.drawStr(x*7, y*10+10, s);
}
}
}
void u8g_extra_page(uint8_t a)
{
if ( u8g.getMode() == U8G_MODE_HICOLOR || u8g.getMode() == U8G_MODE_R3G3B2) {
/* draw background (area is 128x128) */
u8g_uint_t r, g, b;
b = a << 5;
for( g = 0; g < 64; g++ )
{
for( r = 0; r < 64; r++ )
{
u8g.setRGB(r<<2, g<<2, b );
u8g.drawPixel(g, r);
}
}
u8g.setRGB(255,255,255);
u8g.drawStr( 66, 0, "Color Page");
}
else if ( u8g.getMode() == U8G_MODE_GRAY2BIT )
{
u8g.drawStr( 66, 0, "Gray Level");
u8g.setColorIndex(1);
u8g.drawBox(0, 4, 64, 32);
u8g.drawBox(70, 20, 4, 12);
u8g.setColorIndex(2);
u8g.drawBox(0+1*a, 4+1*a, 64-2*a, 32-2*a);
u8g.drawBox(74, 20, 4, 12);
u8g.setColorIndex(3);
u8g.drawBox(0+2*a, 4+2*a, 64-4*a, 32-4*a);
u8g.drawBox(78, 20, 4, 12);
}
else
{
u8g.drawStr( 0, 12, "setScale2x2");
u8g.setScale2x2();
u8g.drawStr( 0, 6+a, "setScale2x2");
u8g.undoScale();
}
}
uint8_t draw_state = 0;
void draw(void) {
u8g_prepare();
switch(draw_state >> 3) {
case 0: u8g_box_frame(draw_state&7); break;
case 1: u8g_disc_circle(draw_state&7); break;
case 2: u8g_r_frame(draw_state&7); break;
case 3: u8g_string(draw_state&7); break;
case 4: u8g_line(draw_state&7); break;
case 5: u8g_triangle(draw_state&7); break;
case 6: u8g_ascii_1(); break;
case 7: u8g_ascii_2(); break;
case 8: u8g_extra_page(draw_state&7); break;
}
}
void setup(void) {
//flip screen, if required
//u8g.setRot180();
#if defined(ARDUINO)
pinMode(13, OUTPUT);
digitalWrite(13, HIGH);
#endif
}
void loop(void) {
// picture loop
u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );
// increase the state
draw_state++;
if ( draw_state >= 9*8 )
draw_state = 0;
//rebuild the picture after some delay
//delay(150);
}
Физические размеры OLED-модуля, мм
г. Москва, Пятницкое ш. д. 18, пав. 566
zakaz@compacttool.ru
8-495-752-55-22
Информация представленная на данном информационном ресурсе преследует исключительно рекламные цели и не является договором-офертой !
© Все права защищены 2015 - 2024г https://compacttool.ru