Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Похожие статьи:


Реклама ⓘ

Подключение монохромного дисплея на ST7565 к STM32

Попался мне в руки SafeTouch , вещь для меня бесполезная , но товарищ который притащил его , уверял что подрубил другой такой же к китайскому "Тестеру компонентов".

Только всё отображается зеркально.
Разобрав дисплей наткнулся на на 32 битный микроконтроллер atmel , мк для меня оказался бесполезным . т.к. построен он был не на cortex , а изучить 1 мк , который никогда больше не используешь , мне показалось глупостью. И тут я совершил фатальную ошибку , решил снять микроконтроллер используя паяльный фен. Дисплей был перегрет , и в некоторых местах появились пятна.
Сняв мк , и поняв что я тот ещё рукожоп . Принялся искать документацию на китайский "Тестер компонентов" , найдя нужную документацию и узнав что в дисплее стоит контроллер ST7565.

Я решил проверить не сдох ли дисплей . подрубил к ардуино нашёл библиотеку . Загрузил код , и на дисплее появилось .

Отлично, дисплей жив.
Т.к. дуни уже давно стали у меня только средством проверки разных модулей, то нужно перетащить дисплей на мк , которые я использую повсеместно , а именно STM32F103C8 .
Немного порывшись в интернете , конкретно под мой случай , я ни черта не нашёл. Вернее , даже под другие микроконтроллеры мало кто подрубает дисплеи ST7565 , возможно это связанно с ценой , т.к. на али они стоят зачастую дороже своих цветных собратьев.
Но всё же несколько примеров было . А т.к. "My English is very bad" , то как исходником я воспользовался статьей https://cxem.net/mc/mc162.php "Подключение LCD-дисплея ST7565 к микроконтроллеру MSP430" 

Я в глаза не видел микроконтроллеры MSP, но исходный код всё же глянул. Т.к. раньше я программировал avr , то было не трудно понять исходный код 

#define LCDPORT P1OUT
#define GND BIT0
#define VCC BIT1
#define A0    BIT2
#define CS   BIT3
#define SCK BIT4
#define SDA BIT5
#define RST BIT6
void main(void) {
   WDTCTL = WDTPW + WDTHOLD;   // Stop WDT
   P1DIR = 0xFF;
   LCDPORT &= ~GND;
   LCDPORT |= VCC;
   LCDPORT &= ~RST;
   __delay_cycles(1000);
   LCDPORT |= RST;
   LCDPORT &=~A0;
   LCDPORT &=~CS;
   doSPI(CMD_SET_BIAS_7);
   doSPI(CMD_SET_ADC_NORMAL);
   doSPI(CMD_SET_COM_NORMAL);
   doSPI(CMD_SET_DISP_START_LINE);
   doSPI(CMD_SET_POWER_CONTROL | 0x4 );
   __delay_cycles(1000);
   doSPI(CMD_SET_POWER_CONTROL | 0x7);
   __delay_cycles(1000);

немного изменив его я получил

 lcd_reset();
   lcd_dc(0);
   HAL_Delay(1);
   doSPI(CMD_SET_BIAS_9);
   doSPI(CMD_SET_ADC_REVERSE);
   doSPI(CMD_SET_COM_NORMAL);
   doSPI(CMD_SET_DISP_START_LINE);
   doSPI(CMD_SET_POWER_CONTROL | 0x4 );
   HAL_Delay(1);
   doSPI(CMD_SET_POWER_CONTROL | 0x7);
   HAL_Delay(1);

   doSPI(CMD_DISPLAY_ON);
   doSPI(CMD_SET_ALLPTS_NORMAL);

Как видите в принципе я ничего не изменил , только __delay_cycles(1000); на HAL_Delay(1); , и LCDPORT &= ~RST;  LCDPORT |= RST; на lcd_reset(); , и  LCDPORT &=~A0; на lcd_dc(0); . А LCDPORT &=~CS;  поставил на аппаратное передёргивание .
В целом , перекопировал всё из исходника в свой проект , немного изменил. 

Теперь время настроить сам проект. Открываем куб и настраиваем там нужный spi и выводы reset , dc , cs. У STM32F103C8 2SPI , я выбрал 1,  но заменить его на 2 не составит труда.

Частоту установил на 72МГц , но изначально проверял на 8. 

Я использую TrueStudio , спасибо компании ST , за то что выкупила её и модифицирует под свои камни.

Вот  изменённая функция передачи данных , благодаря библиотеке HAl , можно спокойно перенести на 2 SPI если предварительно настроить в кубе SPI2 , то в коде нужно будет заменить HAL_SPI_Transmit(&hspi1,(uint8_t*)aTxBuffer, 1, 5000); на HAL_SPI_Transmit(&hspi2,(uint8_t*)aTxBuffer, 1, 5000);

  1. void doSPI(uint8_t d)
    {
    
       aTxBuffer[0]=d;
    
       HAL_SPI_Transmit(&hspi1,(uint8_t*)aTxBuffer, 1, 5000);
    HAL_Delay(1);
       }

Собственно всё , загружаю код и вижу :

Зеркальность, ну хотя бы загрузился и прошёл инициализацию. Спасибо А.Касьянову , он в своём проекте всё предусмотрел.
замена строчки
doSPI(CMD_SET_ADC_NORMAL);

на
doSPI(CMD_SET_ADC_REVERSE);

Убрало зеркальное отображение.

Собственно и всё . На фото видно как я повредил дисплей перегревом. Неравномерная яркость пикселей . и пару белых пятен.
Исходный проект в CubeMX и TrueStudio прилагаю.

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (6) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
0
BARS_ #
HAL то тут на кой?.. Ну отправка по SPI - три строки кода. Настройка SPI еще 4 строки.
Ответить
0
andro #
А он будет работать с Attiny13?
Ответить
0
Максим #
Нет. У Атини13 , слишком мало памяти. Попросту не хватит, чтобы обстроить нормальную работу дисплея.
Ответить
0
Константин #
Похоже у Вас дисплей 131х65. Вероятно они заточены под китайцев для письма справа - налево. У меня дисплей 128х65, последние 3 столбца контроллером адресуются, но не отображаются, пикселей нет. При горизонтальном отражении командой SET_ADC_REVERSE вывод начинается слева, но первые 3 столбца (с 0 по 2) не видны, для них нет пикселей и вывод надо делать с 3-го столбца. Поэтому правильнее перевернуть дисплей (у меня тогда шлейф внизу) при инициализации вывод по горизонтали установить прямой SET_ADC_NORMAL, а по вертикали реверс вывода строк SET_COM_REVERSE. И при инициализации обязательно установить яркость 2-х байтной командой SET_VOLUME, а то видно совсем ничего, по крайней мере на моем экземпляре.
Ответить
0

[Автор]
Seriy_Voron #
По поводу пикселя вы правы, по поводу контрастности, тут уже не совсем. Дело в том, что модификации одного и того же контроллера дисплеев просто уйма, управляются все одинакового, вся разница заключается в контрастности и направлении вывода информации.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Бокс для хранения компонентов Осциллограф DSO138
вверх