Подключение LED дисплея 128x64 1.3 SPI

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#1 Дим » 18 декабря 2017, 18:49

Заказал в интернете LED дисплей 128x64 1.3" SPI, и стал его подключать, но не захотел он "заводиться". Какие бы библиотеки не устанавливал, итог один и тот же - рябь на экране.

Спойлер
рябь на экране LED дисплея 128x64 1.3 SPI.png
рябь на экране LED дисплея 128x64 1.3 SPI
рябь на экране LED дисплея 128x64 1.3 SPI.png (290.6 КБ) 2019 просмотров

Решив что дисплей не рабочий, хотел уже открывать спор с продавцом товара. Но попалась мне статья, где рассказывалось как можно победить эту рябь. Оказалось что эти дисплеи работают только с одной библиотекой u8glib, только её нужно немного подправить. В конце статьи будет архив с уже исправленными файлами, а кому интересно сделать самому читаем дальше.
Скачиваем архив библиотеки и разархивировав в папку libraries, открываем в ней папку U8glib -> utility. Находим в ней файл u8g_dev_ssd1306_128x64 их там будет два. Один из них больше размером, вот в нём и будем делать изменения.

u8g_dev_ssd1306_128x64.png
u8g_dev_ssd1306_128x64
u8g_dev_ssd1306_128x64.png (6 КБ) 2019 просмотров


Примерно в строке 183 вы увидите это:

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

0x000,        /* set lower 4 bit of the col adr to 4  */ 


0x002.png
0x002
0x002.png (8.17 КБ) 2019 просмотров


Заменим 0x000 на 0x002

С редактированием библиотеки закончено. Теперь откройте Arduino, выбираем файл -> примеры -> u8glib -> GraphicsTest.

В начале скетча, есть много закомментированного кода, который позволяет пользователю выбрать дисплей. Добавим в новую строку такую запись.

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

//===========================================================
U8GLIB_SSD1306_128X64 u8g(6, 5, 2 , 3, 4); // наш дисплей  ||
//===========================================================      


Подключаем дисплей:
GND - -
VDD - 5V
SCK - 6
SDA - 5
RES - 4
DC - 3
CS - 2

Компилируем скетчь и любуемся результатом.

phpBB [media]


U8glib.zip
(1 МБ) 249 скачиваний
[center]i love you [s]mxIni[/s] Mysql[/center]


Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#2 Дим » 19 декабря 2017, 0:32

Оказалось что дисплей работает ещё и с библиотекой HCuOLED. Пока ещё не разобрался что к чему, но факт на лицо - работает. :grin:

phpBB [media]
[center]i love you [s]mxIni[/s] Mysql[/center]

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#3 Дим » 17 февраля 2018, 22:21

Спойлер
Через некоторое время дисплей перестал заводиться. Удалось запустить лишь с библиотекой HCuOLED. Теперь помучившись, выкладываю схему подключения. И буду разбираться почему не хочет с U8glib
P.S Разобрался и и справил первое сообщение. Было не правильно указано подключение.
Схема подключения дисплея с библиотекой HCuOLED.png
Схема подключения дисплея с библиотекой HCuOLED
Схема подключения дисплея с библиотекой HCuOLED.png (201.33 КБ) 1951 просмотр

U8glib для данной схемы подключения.

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

U8GLIB_SSD1306_128X64 u8g(12, 11, 8 , 9, 10); // наш дисплей  ||   

Скетч HCuOLED для данной схемы подключения.
Скетч

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

/*Чтобы использовать этот пример, подключите дисплей uOLED к следующим контактам вашего
Arduino:
MODULE..........ARDUINO
GND.............GND
VCC.............3.3V
D0 (CLK)........D13
D1 (DATA).......D11
RST (RESET).....D9
DC..............D9
CS (SS).........D8 */

#include "HCuOLED.h"
#include "SPI.h"

/* Пример растрового изображения */
const PROGMEM byte Tiny_Logo_Resistor[] =
{
  0xC0, 0xE0, 0x30, 0x30, 0xF0, 0xE0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x38, 0x0E, 0x07, 0x1E, 0x78, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x70, 0x1C, 0x07, 0x0F, 0x3C, 0xF0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x80, 0xF0, 0x3C, 0x0F, 0x07, 0x1C, 0x70, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x80, 0xE0, 0x78, 0x1E, 0x07, 0x0E, 0x38, 0xE0, 0x80, 0x00, 0x00, 0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xC0, 0xE0, 0xF0, 0x30, 0x30, 0xE0, 0xC0,
  0x00, 0x01, 0x03, 0x03, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0F, 0x3C, 0x38, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1E, 0x38, 0x1C, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x38, 0x38, 0x0E, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x07, 0x1C, 0x38, 0x1E, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0E, 0x38, 0x3C, 0x0F, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x03, 0x01, 0x00,
};


/* Цифровой контактный номер (пин)  для вывода микросхемы дисплея */
#define CS_DI 8
/* Цифровой контактный номер (пин)  для вывода данных / вывод команды */
#define DC_DI 9
/* Цифровой контактный номер (пин) для вывода сброса дисплея */
#define RST_DI 10

/* Индексы массивов для координат X и Y */
#define X1 0
#define Y1 1
#define X2 2
#define Y2 3

/* Массивы для хранения координат и направления для линии, прямоугольника и растрового изображения */
byte Box[4] = {1,1,20,20};
byte BoxDir[4] = {1,1,1,1};
byte Line[4] = {100,25,120,55};
byte LineDir[4] = {-1,-1,-1,-1};
byte Bitmap[2] = {40,40};
byte BitmapDir[2] = {-1,-1};

/* Создайте экземпляр библиотеки (раскомментируйте одну из строк ниже) */
//HCuOLED HCuOLED(SSD1307, SS_DI, DC_DI, RST_DI); //Для дисплеев SSD1307 (HCMODU0050 & HCMODU0052)
HCuOLED HCuOLED(SH1106, CS_DI, DC_DI, RST_DI); // Для дисплеев SH1106 (HCMODU0058 & HCMODU0059)

void setup()
{
  /*Сбросить отображение */
  HCuOLED.Reset();
}

void loop()
{
  /* Отображение некоторого текста с использованием небольшого шрифта с фиксированной шириной 8x8 */
  HCuOLED.SetFont(Terminal_8pt);
  HCuOLED.Cursor(44,0);
  HCuOLED.Print("HOBBY");
  HCuOLED.Cursor(20,10);
  HCuOLED.Print("COMPONENTS");
  /* Отображение номера с использованием большого 4-строчного шрифта для ЖК-дисплея */
  HCuOLED.Cursor(20,24);
  HCuOLED.SetFont(LCDLarge_24pt);
  HCuOLED.Print("HCuOLED");
  /* Измените режим рисования с NORMAL на INVERT */
  HCuOLED.DrawMode(INVERT);
  while(1)
  {
    /* Переместить позиции трех объектов */
    MoveRect();
    MoveLine();
    MoveBitmap();  
    
/* Нарисуйте объекты в буфер отображения */
    HCuOLED.Rect(Box[X1],Box[Y1],Box[X2],Box[Y2], SOLID);
    HCuOLED.Line(Line[X1],Line[Y1],Line[X2],Line[Y2]);
   
    HCuOLED
.Cursor(Bitmap[X1],Bitmap[Y1]);
    HCuOLED.Bitmap(84, 2, Tiny_Logo_Resistor);
    /* Записать буфер отображения на экран */
    HCuOLED.Refresh();
    /* Нарисуйте объекты еще раз. Поскольку мы находимся в режиме INVERT, это удалит их */
    HCuOLED.Rect(Box[X1],Box[Y1],Box[X2],Box[Y2], SOLID);
    HCuOLED.Line(Line[X1],Line[Y1],Line[X2],Line[Y2]);
   
    HCuOLED
.Cursor(Bitmap[X1],Bitmap[Y1]);
    HCuOLED.Bitmap(84, 2, Tiny_Logo_Resistor);
  }
}

/* Обновите координаты X и Y для окна */
void MoveRect(void)
{
  if(Box[X1] == 0 || Box[X1] == 127)
    BoxDir[X1] *= -1;
  Box[X1] += BoxDir[X1];
 
  if
(Box[Y1] == 0 || Box[Y1] == 63)
    BoxDir[Y1] *= -1;
  Box[Y1] += BoxDir[Y1];
 
  if
(Box[X2] == 0 || Box[X2] == 127)
    BoxDir[X2] *= -1;
  Box[X2] += BoxDir[X2];
 
  if
(Box[Y2] == 0 || Box[Y2] == 63)
    BoxDir[Y2] *= -1;
  Box[Y2] += BoxDir[Y2];   
}

/* Обновите координаты X и Y для линии */
void MoveLine(void)
{
  if(Line[X1] == 0 || Line[X1] == 127)
    LineDir[X1] *= -1;
  Line[X1] += LineDir[X1];
 
  if
(Line[Y1] == 0 || Line[Y1] == 63)
    LineDir[Y1] *= -1;
  Line[Y1] += LineDir[Y1];
 
  if
(Line[X2] == 0 || Line[X2] == 127)
    LineDir[X2] *= -1;
  Line[X2] += LineDir[X2];
 
  if
(Line[Y2] == 0 || Line[Y2] == 63)
    LineDir[Y2] *= -1;
  Line[Y2] += LineDir[Y2];   
}

/* Обновите координаты X и Y для растрового изображения */
void MoveBitmap(void)
{
  if(Bitmap[X1] == 0 || Bitmap[X1] == 43)
    BitmapDir[X1] *= -1;
  Bitmap[X1] += BitmapDir[X1];
 
  if
(Bitmap[Y1] == 0 || Bitmap[Y1] == 47)
    BitmapDir[Y1] *= -1;
  Bitmap[Y1] += BitmapDir[Y1];
}
[center]i love you [s]mxIni[/s] Mysql[/center]

Дим M
Автор темы, Администратор
Администратор
Аватара
Дим M
Автор темы, Администратор
Администратор
Сообщения: 1608
Зарегистрирован: 5 апреля 2013
С нами: 10 лет 11 месяцев

#4 Дим » 28 февраля 2018, 23:46

Так же дисплей поддерживает библиотеку u8g2

Я подключал к аналоговым выходам

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

U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI u8g2(U8G2_R0/* clock=*/ A4/* data=*/ A3/* cs=*/ A0/* dc=*/ A1/* reset=*/ A2); 


Подключаем дисплей:
GND - -
VDD - 5V
SCK - A4
SDA - A3
RES - A2
DC - A1
CS - A0
[center]i love you [s]mxIni[/s] Mysql[/center]


  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Программирование»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 3 гостя