Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Проблемы ssd1306

Сб дек 31, 2016 10:59:32

дисплей общается по SPI, разрешение 128 на 64
Подключен к arduino, использую adafruit библиотеки
при использовании примера и при написании своего кода, дисплей выводит через каждую 2 линию, растягивая изображение, как это исправить?
или хотя бы ткните носом где можно про это почитать
photo_2016-12-31_14-04-28.jpg
(88.8 KiB) Скачиваний: 1318

Re: Проблемы ssd1306

Сб дек 31, 2016 15:45:30

daaar писал(а):... хотя бы ткните носом где можно про это почитать.
Ткнуть носом - это мы всегда... :)
Здесь я выкладывал документацию на SSD1306.
Начните с проверки INIT-а SSD1306.
------
С Наступающим!

Re: Проблемы ssd1306

Сб дек 31, 2016 17:31:39

я не нашел инициализации, точнее, как я понял, он хранит настройки в энергонезависимой памяти
но из за чего может быть не правильная отрисовка я не понял, но возможно чип настроен на матрицу 32 на 128

Re: Проблемы ssd1306

Сб дек 31, 2016 18:24:55

При старте программы, должна быть инициализация SSD1306.
Один из вариантов INIT-а можете посмотреть на стр. 17-18 файла ER-OLED0.96-3_Manual.pdf (файл есть по ссылке в моём предыдущем посте).

Re: Проблемы ssd1306

Сб дек 31, 2016 23:27:29

проблема была с инициализацией, спасибо за помощь

Re: Проблемы ssd1306

Вс янв 01, 2017 01:31:47

daaar писал(а):...спасибо за помощь
Незачто.
С Новым Годом!
:beer:

Re: Проблемы ssd1306

Сб фев 18, 2017 22:51:09

прошу тоже помощи, не могу разобраться с инициализацией (наверно)
не пойму что делать надо, я только начинающий) изображение растянуто через строчку
Изображение

Re: Проблемы ssd1306

Вс фев 19, 2017 02:52:28

Слишком мало информации.
Выложите ваш вариант Init-а (последовательность данных) и, желательно, схему подключения дисплея.
Укажите по какому интерфейсу работаете.

Re: Проблемы ssd1306

Вс фев 19, 2017 21:15:18

подключаю к ардуино уно, по пинам думаю всё верно подключено, иначе бы не было изображения, проверял несколько раз. gnd-0 vdd-3.3v sck-10 sda-9 res-13 dc-11 cs-12
дисплей 0.96"White OLED 128X64 Ver.2 SPI
возможно нужно что то перепаять на нём, но не могу разобраться в написанной схеме. фото выложу дисплея.
Скетч заливаю стандартный <Adafruit_SSD1306.h>. Другие примеры тоже загружаются но пиксели так же через строчку.
Вот хочу признаться про Init мало знаю что это такое, как ни странно вчера потратил 2 часа на в интернете нет никакой информации, как его тестить или вводить коды. Коды нашёл а куда их писать? толи в монитор порта, толи как скетч заливать? непонятно... пробовал так и этак, монитор порта высвечивает данные х и у и ещё что то, как скетч не получается залить. :)
Код:
/*********************************************************************
This is an example for our Monochrome OLEDs based on SSD1306 drivers

  Pick one up today in the adafruit shop!
  ------> http://www.adafruit.com/category/63_98

This example is for a 128x64 size display using SPI to communicate
4 or 5 pins are required to interface

Adafruit invests time and resources providing this open source code,
please support Adafruit and open-source hardware by purchasing
products from Adafruit!

Written by Limor Fried/Ladyada  for Adafruit Industries. 
BSD license, check license.txt for more information
All text above, and the splash screen must be included in any redistribution
*********************************************************************/

#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

// If using software SPI (the default case):
#define OLED_MOSI   9
#define OLED_CLK   10
#define OLED_DC    11
#define OLED_CS    12
#define OLED_RESET 13
Adafruit_SSD1306 display(OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

/* Uncomment this block to use hardware SPI
#define OLED_DC     6
#define OLED_CS     7
#define OLED_RESET  8
Adafruit_SSD1306 display(OLED_DC, OLED_RESET, OLED_CS);
*/

#define NUMFLAKES 10
#define XPOS 0
#define YPOS 1
#define DELTAY 2

#define LOGO16_GLCD_HEIGHT 16
#define LOGO16_GLCD_WIDTH  16
static const unsigned char PROGMEM logo16_glcd_bmp[] =
{ B00000000, B11000000,
  B00000001, B11000000,
  B00000001, B11000000,
  B00000011, B11100000,
  B11110011, B11100000,
  B11111110, B11111000,
  B01111110, B11111111,
  B00110011, B10011111,
  B00011111, B11111100,
  B00001101, B01110000,
  B00011011, B10100000,
  B00111111, B11100000,
  B00111111, B11110000,
  B01111100, B11110000,
  B01110000, B01110000,
  B00000000, B00110000 };

#if (SSD1306_LCDHEIGHT != 64)
#error("Height incorrect, please fix Adafruit_SSD1306.h!");
#endif

void setup()   {               
  Serial.begin(9600);

  // by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
  display.begin(SSD1306_SWITCHCAPVCC);
  // init done
 
  // Show image buffer on the display hardware.
  // Since the buffer is intialized with an Adafruit splashscreen
  // internally, this will display the splashscreen.
  display.display();
  delay(2000);

  // Clear the buffer.
  display.clearDisplay();

  // draw a single pixel
  display.drawPixel(10, 10, WHITE);
  // Show the display buffer on the hardware.
  // NOTE: You _must_ call display after making any drawing commands
  // to make them visible on the display hardware!
  display.display();
  delay(2000);
  display.clearDisplay();

}

весь не буду заливать чтоб место не засорять...
[img][img]http://img.radiokot.ru/files/122047/thumbnail/17a1jqsidx.jpg[/img][/img]

Re: Проблемы ssd1306

Пн фев 20, 2017 03:56:01

В тексте вашей программы я не увидел последовательность данных для Init-а SSD1306.
По неким скетчам я не могу ничего сказать, т.ч. проверьте, в первую очередь, в пошаговом режиме, какие данные вы шлёте в SSD1306 при Init-е и как работаете с линиями D/C и CS.
Так же, проверьте настройки вашего порта SPI.
Свериться можете с документацией от производителя (ссылки на pdf во втором посте).
Если с настройкой порта и в Init-е всё правильно - ищите ошибку в подпрограмме вывода картинки.
---
* Предположу, что нет ожидания (по факту) окончания передачи байта в SPI.

Re: Проблемы ssd1306

Пн фев 20, 2017 16:40:35

Проблема в Adafruit_SSD1306.h, там нужно найти правильный define(или не define), по дефолту стоит ssd1306 128 на 32
Нужно просто исправить это в самом header'е

Re: Проблемы ssd1306

Вт фев 21, 2017 01:52:46

daaar писал(а):Проблема в Adafruit_SSD1306.h, там нужно найти правильный define(или не define), по дефолту стоит ssd1306 128 на 32
Нужно просто исправить это в самом header'е

захожу в библиотеку, выбираю Adafruit_SSD1306.h, изменить, пытаюсь поменять на #define SSD1306_128_64 // #define SSD1306_128_32 но не могу сохранить. нет доступа.. как? :)

Добавлено after 4 minutes 17 seconds:
Albert_V писал(а):В тексте вашей программы я не увидел последовательность данных для Init-а SSD1306.
По неким скетчам я не могу ничего сказать, т.ч. проверьте, в первую очередь, в пошаговом режиме, какие данные вы шлёте в SSD1306 при Init-е и как работаете с линиями D/C и CS.
Так же, проверьте настройки вашего порта SPI.
Свериться можете с документацией от производителя (ссылки на pdf во втором посте).
Если с настройкой порта и в Init-е всё правильно - ищите ошибку в подпрограмме вывода картинки.
---
* Предположу, что нет ожидания (по факту) окончания передачи байта в SPI.

подскажите где я могу научиться проверять настройки порта в init-e? немогу найти уроки или примеры. То что нахожу, там только список кодов, а куда и как вводить ничего не пишут.. как буд то это все и так знают )

п.с. может мне перепоять резисторы на i2c? может так заработает?

Re: Проблемы ssd1306

Вт фев 21, 2017 03:30:44

vadimg, daaar, похоже, правильно указал на проблему и способ её решения.
Что касается "проверять настройки порта в init-e" - документация на контроллеры не секретна.
Да, читать pdf-ы долго, но надо.
У вас есть три варианта:
1. Втупую скачиваете нечто из сети и прошиваете.
2. Самостоятельно пишите программу читая pdf-ы на всё, что закладываете на плату (или уже запаяно).
3. Скачав нечто из сети, пытаетесь понять что и почему именно так сделал автор программы/изделия.
На мой взгляд, третий вариант наиболее трудоёмкий.
Что касается "может мне перепоять резисторы на i2c?" - есть же документация на дисплей.
Подключение должно быть по рекомендованной производителем схеме.

Re: Проблемы ssd1306

Вс окт 18, 2020 09:57:14

Уважаемые! Экран сдвинут на один пиксель вверх и вправо. Как это исправляется через терминал выбором дисплея? Заранее спасибо! :beer:

Re: Проблемы ssd1306

Чт фев 25, 2021 02:39:38

Покупал как 128х64. В примерах от Адского Фрукта написано - адрес 64-строчного - 0х3D, 32-строчного - 0х3С. Отзывается только на 0х3С. Прописал в скетче число строк (32). Все заработало, в том числе русификатор. Изображение полосило (то есть выводилось через строчку), считал это нормально, Продавец однако убедил, что это именно 64-строчный. Задал в скетче 64 строки, при том же адресе 0х3С и, о чудо, - получил 64-строчный экран. Полосить перестало, НО - исчез русскоязычный текст. Сейчас в программе идет вывод только на три строки текста в верху экрана. В нижней части экрана мигают кракозябры, хотя скетч туда ничего не посылает. Прошу подсказать куда копать. С уважением.

Не исполняется команда
display.print(utf8rus("** ДАТА *-* ВРЕМЯ **"));
или
display.print(utf8rus("** DATE *--* TIME **"));
как будто их совсем нет в программе.

Команда
display.print("** DATE *-* TIME **");
работает нормально.
Команда
display.print("** ДАТА *-* ВРЕМЯ **");
тоже работает, но выводит естественно кракозябры

ПС. В 32-строчном режиме - все команды работают зашибись.
Ответить