Jump to content
Kostyanskiy

ST7789 пишу библиотеку

Recommended Posts

Posted (edited)

Здравствуйте, пишу либу для ST7789 проблемы с инициализацией, помогите пожалуйста.

Вот код

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
#include <stdio.h>
#include <stdlib.h>
//==========================================================================================
#define RGB565(r, g, b)         (((r & 0xF8) << 8) | ((g & 0xFC) << 3) | ((b & 0xF8) >> 3))
#define RGB16(color) (unsigned int)(((color&0xF80000)>>8)|((color&0x00FC00)>>5)|((color&0x0000F8)>>3))
//==========================================================================================
#define DDR_DC	    DDRB	// Порт на котором будет DC
#define DDR_RES		DDRB	// Порт на котором будет RES
//==========================================================================================
#define PORT_DC     PORTB	// Порт на котором будет DC
#define PORT_RES	PORTB	// Порт на котором будет RES
//==========================================================================================
#define LCD_DC 1    //Command/Data
#define LCD_RESET 2 //LCD Reset
#define LCD_MISO 4
#define LCD_MOSI 3
#define LCD_SCK 5
//==========================================================================================
#define DC_HIGH        PORT_DC |=  (1<<DC);
#define DC_LOW         PORT_DC &=~ (1<<DC);
#define RESET_HIGH     PORT_RES |=  (1<<RES);
#define RESET_LOW      PORT_RES &=~ (1<<RES);
//==========================================================================================
void SPI_Init()
{
	DDRB |=  (1<<LCD_SCK)|(1<<LCD_MISO)|(1<<LCD_MOSI);
	DDR_DC |= (1<<LCD_DC);
	DDR_RES |= (1<<LCD_RESET);
	PORT_DC &=~(1<<LCD_DC);
	
	SPCR |= (1<<SPE)|(1<<MSTR);// 8MHz/2
	SPSR |= (1<<SPI2X);
}
//==========================================================================================
void ST7789_SendData(char Data)
{
	DC_HIGH;
	SPDR = Data;
	while (! (SPSR & ( 1 << SPIF)));
	
}
//==========================================================================================
void ST7789_SendCommand(char Data)
{
	DC_LOW;
	SPDR = Data;
	while (! (SPSR & ( 1 << SPIF)));
	
}
//==========================================================================================
void ST7789_Init()
{
		// Инициализация SPI
		SPI_Init();
		_delay_ms(100);
		RESET_HIGH;
		_delay_ms(100);
		RESET_LOW;
		_delay_ms(100);
		ST7789_SendCommand(0x01);
		_delay_ms(100);
		
		ST7789_SendCommand(0x3A);
		ST7789_SendData(0x50);
		ST7789_SendData(0x05);
		_delay_ms(10);
		ST7789_SendCommand(0x11);  
		_delay_ms(10);
		ST7789_SendCommand(0x36);
		ST7789_SendData(0x20);
		ST7789_SendData(0x08);
		ST7789_SendData(0x10);
		ST7789_SendData(0x04);
	    _delay_ms(10);
		ST7789_SendCommand(0x21);
		ST7789_SendCommand(0x29);
		_delay_ms(10);
}

 

Edited by Kostyanskiy

Share this post


Link to post
Share on other sites

Возьмите либу от ардуино на данное железо и посмотрите, что делаете не так

Share this post


Link to post
Share on other sites
14 минут назад, hasl сказал:

Возьмите либу от ардуино на данное железо и посмотрите, что делаете не так

В том то и проблема, что в либу под ардуино писали индусы, и там ничего не понятно.

Share this post


Link to post
Share on other sites

Оценка точности измерения тока интеллектуальными силовыми ключами PROFET

Интеллектуальные силовые ключи PFOFET производства Infineon могут измерять ток нагрузки с разной точностью, зависящей как от абсолютной величины потребляемого тока, так и от технологии производства конечной продукции, в частности – от наличия или отсутствия этапа калибровки. В статье подробно разбирается расчет коэффициента передачи тока на примере ключа BTS7004-1EPP.
Подробнее

15 часов назад, Kostyanskiy сказал:

либу под ардуино писали индусы, и там ничего не понятно.

на индусском языке, что ли?


Мудрость приходит вместе с импотенцией...

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

Share this post


Link to post
Share on other sites

Приглашаем на практический вебинар «Работа с внешней памятью в STM32H7» (16.09.2021)

Вебинар посвящен особенностям работы высокопроизводительных микроконтроллеров из линеек STM32H7. На вебинаре разберем ключевые особенности линеек STM32H72/3 и проведем практическую работу с оценкой производительности с использованием ускорителей и кэш-буфера при чтении инструкций из внутренней и из зашифрованной внешней памяти. Для отображения результатов будет использоваться программная среда STM32CubeMonitor.

Подробнее

Удалось ли сделать резервную копию? Обеспечение бесперебойного питания

Для работы портативных электронных устройств с постоянным или длительным включением необходим резервный источник питания. Микросхемы диспетчеров питания производства Analog Devices LTC4040 или LTC4041 позволяют легко подключить резервное питание в виде Li-Ion-аккумулятора или суперконденсатора соответственно в случае сбоя или потери основного питания. Рассмотрим решения по резервированию питания на основе этих микросхем.
Подробнее

15 часов назад, Kostyanskiy сказал:

В том то и проблема, что в либу под ардуино писали индусы, и там ничего не понятно.

Не страшно что индусы! Берете их поделие и строчка за строчкой приводите к человеческому виду. Потом рефакторинг чтобы выкинуть ту часть библиотеки, которая посвящена восхвалению Кришны (по желанию можно заменить на восхваление Ктулху или Омниссии), рисованию логотипа производителя или другие не относящиеся к делу куски.

Да, лучше всего делать это прямо на Ардуине, чтобы и исходный код запускался, и ваша интерпретация. Ну а когда доведете работу до конца (то есть разделите платформо-зависимую часть от логики), уже можно переносить и на другие контроллеры если надо.

 Я так делал для ili9341, e-ink'ов и какого-то дисплея от телефона.


Ругался на отсутствие форматирования исходного кода (включая отсутствие осмысленных комментариев и наличие неубранного после конфигуратора мусора) не менее 15 раз.

Часть моих наработок.

Share this post


Link to post
Share on other sites
17 часов назад, Kostyanskiy сказал:

писали индусы, и там ничего не понятно

И это говорит человек, который застрял уже на инициализации :) У них он хоть работает...
Покажите этот индусский код, который Вам непонятен. И скажите, что конкретно в нём не понятно.

Share this post


Link to post
Share on other sites
20 hours ago, Kostyanskiy said:

RESET_HIGH;

_delay_ms(100);

RESET_LOW;

Сброс обычно идет нулем. Поменяйте местами команды.

Share this post


Link to post
Share on other sites
20 часов назад, Kostyanskiy сказал:

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

И в чем проблема?

 

18 часов назад, Kostyanskiy сказал:

там ничего не понятно.

https://github.com/ananevilya/Arduino-ST7789-Library/blob/master/Arduino_ST7789.cpp чего тут непонятного? Весь инит свели в массив, причем каждая строка подписана. В чем проблема то? Не нравится ардуйня, вот либа под stm https://github.com/Floyd-Fish/ST7789-STM32/blob/master/ST7789/st7789.c Тут инит вообще красиво сделан, понятнее уже некуда.

Share this post


Link to post
Share on other sites

 

21.07.2021 в 14:53, Alex сказал:

Покажите этот индусский код, который Вам непонятен. И скажите, что конкретно в нём не понятно.

static const uint8_t PROGMEM
  cmd_240x240[] = {                 		// Initialization commands for 7789 screens
    10,                       				// 9 commands in list:
    ST7789_SWRESET,   ST_CMD_DELAY,  		// 1: Software reset, no args, w/delay
      150,                     				// 150 ms delay
    ST7789_SLPOUT ,   ST_CMD_DELAY,  		// 2: Out of sleep mode, no args, w/delay
      255,                    				// 255 = 500 ms delay
    ST7789_COLMOD , 1+ST_CMD_DELAY,  		// 3: Set color mode, 1 arg + delay:
      0x55,                   				// 16-bit color
      10,                     				// 10 ms delay
    ST7789_MADCTL , 1,  					// 4: Memory access ctrl (directions), 1 arg:
      0x00,                   				// Row addr/col addr, bottom to top refresh
    ST7789_CASET  , 4,  					// 5: Column addr set, 4 args, no delay:
      0x00, ST7789_240x240_XSTART,          // XSTART = 0
	  (ST7789_TFTWIDTH+ST7789_240x240_XSTART) >> 8,
	  (ST7789_TFTWIDTH+ST7789_240x240_XSTART) & 0xFF,   // XEND = 240
    ST7789_RASET  , 4,  					// 6: Row addr set, 4 args, no delay:
      0x00, ST7789_240x240_YSTART,          // YSTART = 0
      (ST7789_TFTHEIGHT+ST7789_240x240_YSTART) >> 8,
	  (ST7789_TFTHEIGHT+ST7789_240x240_YSTART) & 0xFF,	// YEND = 240
    ST7789_INVON ,   ST_CMD_DELAY,  		// 7: Inversion ON
      10,
    ST7789_NORON  ,   ST_CMD_DELAY,  		// 8: Normal display on, no args, w/delay
      10,                     				// 10 ms delay
    ST7789_DISPON ,   ST_CMD_DELAY,  		// 9: Main screen turn on, no args, w/delay
    255 };                  				// 255 = 500 ms delay

Вот это можете мне пояснить, может я чего то не понимаю, ну, я и поэтому пришел сюда.

21.07.2021 в 13:26, COKPOWEHEU сказал:

Не страшно что индусы! Берете их поделие и строчка за строчкой приводите к человеческому виду. Потом рефакторинг чтобы выкинуть ту часть библиотеки, которая посвящена восхвалению Кришны (по желанию можно заменить на восхваление Ктулху или Омниссии), рисованию логотипа производителя или другие не относящиеся к делу куски.

Да, лучше всего делать это прямо на Ардуине, чтобы и исходный код запускался, и ваша интерпретация. Ну а когда доведете работу до конца (то есть разделите платформо-зависимую часть от логики), уже можно переносить и на другие контроллеры если надо.

Хаха, спасибо за совет, этим уже занимаюсь 

Share this post


Link to post
Share on other sites
Posted (edited)
21.07.2021 в 13:26, COKPOWEHEU сказал:

Не страшно что индусы! Берете их поделие и строчка за строчкой приводите к человеческому виду. Потом рефакторинг чтобы выкинуть ту часть библиотеки, которая посвящена восхвалению Кришны (по желанию можно заменить на восхваление Ктулху или Омниссии), рисованию логотипа производителя или другие не относящиеся к делу куски.

Да, лучше всего делать это прямо на Ардуине, чтобы и исходный код запускался, и ваша интерпретация. Ну а когда доведете работу до конца (то есть разделите платформо-зависимую часть от логики), уже можно переносить и на другие контроллеры если надо.

Хаха, спасибо за совет, уже получилось, вот результат

void ST7789_Init()
{
		SPI_Init();		
		
		RESET_HIGH;
		_delay_ms(200);
		RESET_LOW;
		_delay_ms(200);
		RESET_HIGH;
		
		ST7789_SendCommand(0x01);//Software Reset
		_delay_ms(1000);
        ST7789_SendCommand(0x11);
        ST7789_SendCommand(0x3A);
		ST7789_SendData(0x05);
		ST7789_SendCommand(0x36);
        ST7789_SendData(0x20);
        ST7789_SendData(0x10);
		ST7789_SendData(0x04);
		ST7789_SendData(0x08);
		ST7789_SendCommand(0x21);
		ST7789_SendCommand(0x29);
		ST7789_SendCommand(0x2C);
		
   LCD_Fill(BLACK);
}

Проблема была  еще и в контактах, а когда припаял провода - все заработало

Edited by Kostyanskiy

Share this post


Link to post
Share on other sites
12 часов назад, Kostyanskiy сказал:

Вот это можете мне пояснить

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Ну, тут такое... Не может и не обязан каждый гражданин поголовно быть техническим специалистом, чтобы сходу распознать обман в "суперприборе". Так же, как и не может быть специалистом в области финансов, чтобы распознавать финансовые пирамиды и кабальные кредитные договоры. Не может быть профессором медицыны, чтобы отличить фуфломицин в аптеке от нормального лекарства. И так далее. Это должно быть заботой государственных надзорных органов, которые, между прочим, существуют за счёт этого гражданина. А им пофиг.
    • Как бы там ни было, руководству магазина, конечно, большой минус за то, что допустили явно нездорового человека к контактной работе с клиентами. А не прогнали домой или хоть куда - нибудь в подсобку, подальше от людей.
    • Есть хорошая фраза: "Чем лучше знаете химию и физику - тем меньше волшебного имагического творится вокруг." Все эти разводы - это просто налог на отсутствие знаний школьной программы. И вообще, если к описанию ЛЮБОЙ продукции добавить "без кандибобриков", то цену смело можно увеличить втрое - купят охотно. А если написать "с кандибобриками" - то и в пять раз можно увеличить.
    • Проблема в том, что если даже кто-то из пострадавших окажется достаточно упорным, проведёт техническую экспертизу устройства, докажет факт мошенничества в суде и вернёт свои деньги, то завтра эти же люди будут продавать то же самое фуфло в соседнем офисе под другой вывеской. Большинству проще махнуть рукой и смириться с потерей денег. На том этот бизнес и держится.
    • Ну, если искать контроллер по фотографии колонки, то, конечно ничего не найдёшь.
    • Есть на всю страну реклама ионизаторов воды с ценником повыше чем 21р. И people хавает.  
    • Угу, иначе затраты на "обгейд" могут оказаться совсем не такими, как планировалось. БП - самая ненадёжная составляющая системы. И самая опасная для других компонентов в случае ненормальной работы. А уж пытаться ремонтировать его, нихрена в этом не соображая, тем более не стОит.
×
×
  • Create New...