LCD 5110 некорректно работает при программном SPI

ruslanvas

✩✩✩✩✩✩✩
29 Ноя 2020
4
0
Всем привет! Я только начал изучение Ардуино, сорри если что-то пишу не грамотно.

Подключаю LCD 5110 к Arduino Uno. В интернете полно всяких примеров на разных библиотеках. Мне понравился вариант от Adafruit.

Согласно примеру из библиотеки есть два варианта подключения софтверный SPI (к пинам 3, 4, 5, 6, 7 UNO) и железный SPI с задействованием пинов 11 и 13.

Сначала подключил по первому варианту и поимел интересную проблему. Информация на дисплей выводится нормально только если не трогать самый правый столбец дисплея. Если попытаться вывести информацию которая его задействует то на дисплее пропадает вся информация.

Скетч для проверки такой использую:
#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>
#include <SPI.h>

//Adafruit_PCD8544 display = Adafruit_PCD8544(5, 4, 3);

Adafruit_PCD8544 display = Adafruit_PCD8544(7, 6, 5, 4, 3);

void setup() {
display.begin();
display.setContrast(60);
display.clearDisplay();
}

void loop() {
display.drawRect(0, 0, 84, 48, BLACK);
display.display();
}

Поясняю еще раз: прямоугольник 83х48 рисуется нормально, а 84х48 приводит к чистому экрану. Пример из библиотеки Adafruit как только анимация полосочек залезает на крайний столбец экрана - чистый экран. Если подключить дисплей к хардварному SPI то всё хорошо становится. Подскажите пожалуйста в чем может быть проблема?
 

ruslanvas

✩✩✩✩✩✩✩
29 Ноя 2020
4
0
Разрешение дисплея 84х48. Конструкция display.drawRect(0, 0, 84, 48, BLACK) - рисует прямоугольник из координат 0, 0 размером 84х48.
Если рисовать 83 видно, что есть еще не горящие пиксели на дисплее.
Проблема не в скетче, в нем все правильно, один и тот же скетч с Software SPI не работает, а с Hardware SPI работает.
Какой то конфликт в библиотеке.
Я же выше писал, что даже пример из библиотеки Adafruit как только залезает своей анимацией на крайний столбец дисплея - полностью гасит дисплей до перезагрузки (это при Software SPI, при Hardware SPI прекрасно работает).
 

ruslanvas

✩✩✩✩✩✩✩
29 Ноя 2020
4
0
Библиотека SPI стандартная, не думаю что в ней косяк, скорее что-то с дисплеем, какая то не совместимость с библиотекой Adafruit. В интернете миллион мануалов по подключению этого дисплея и у всех он работает на soft spi, а у меня прикольчик такой вылез, просто интересно разобраться. Кстати другая библиотека - LCD5110_Basic, запросто работает с крайним столбцом матрицы дисплея при подключении по soft SPI.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,265
944
58
Марий-Эл
Я таки и не понял. Вам шашечки или ехать?
Работает по SPI хардварному, таки пользуйтесь.
Не работает по софтварному, код разбирайте.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,159
1,267
Москва
Так он почти разобрал - локализовал точно, так что проверить где там собака порылась и можно исправленным хвастаться
 

Александр Симонов

★★★★✩✩✩
2 Авг 2018
727
207
Вот нагугливается похожая проблема, с адафрутовской либой, софт SPI работает, хард глючит, но с другим дисплеем: https://forum.developer.sony.com/to...ng-for-ili9340-9341-tft-display-sw-spi-does/5

Решение там предлагается поменять режим SPI в либе. Для твоего дисплея вот эта строчка: https://github.com/adafruit/Adafrui...library/blob/master/Adafruit_PCD8544.cpp#L277
режим менять на SPI_MODE3
 

ruslanvas

✩✩✩✩✩✩✩
29 Ноя 2020
4
0
У меня наоборот, была проблема с софтовым SPI.
На другой ардуинке (nano) при таком же подключении этот же скетч работает, проблем нет.