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

Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1069
Репутация: 66
С нами: 4 года 10 месяцев

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

Сообщение #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 КБ) 87 просмотров

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

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


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

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

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


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


Заменим 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 МБ) 11 скачиваний
i love you mxIni Mysql
Изображение

! ! !


Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1069
Репутация: 66
С нами: 4 года 10 месяцев

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

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

phpBB [media]
i love you mxIni Mysql
Изображение

Аватара
Автор темы
Дим M
Администратор
Администратор
Сообщения: 1069
Репутация: 66
С нами: 4 года 10 месяцев

Сообщение #3 Дим » 17 февраля 2018, 22:21

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

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];
}
i love you mxIni Mysql
Изображение


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

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