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

Приглашаем на вебинар «Инновационные технологии Analog Devices в области управления питанием» (11.08.2021)

В программе вебинара технология Silent Switcher® - сочетание высокого КПД и сверхмалого уровня ЭМИ, технология uModule® - высокоинтегрированные решения для источников питания, микро- и нанопотребляющие DC/DC-преобразователи, решения для резервного питания, цифровое управление системой питания (PSM), безоптронные изолированные обратноходовые преобразователи. В практической части вебинара будут продемонстрированы примеры работы с инструментами Analog Devices для проектирования источников питания.
Подробнее

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

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

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


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

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

Share this post


Link to post
Share on other sites

Концевые микропереключатели KLS – простая и надежная коммутация по оптимальной цене

На складе Компэл широко представлены нажимные переключатели от KLS в стандартных и миниатюрных корпусах с различными типами актуаторов. Микропереключатели серий KLS7-KW10 и KLS7-KW4-3Z соответствуют строгим стандартам электрической безопасности и эффективности, что гарантирует надежную коммутацию цепей управления.

Подробнее

Датчики STMicroelectronics – новые возможности систем умного дома ST

Согласно прогнозам аналитиков, в ближайшие пару лет будет наблюдаться заметный рост рынка датчиков движения и положения для умного дома. Компания STMicroelectronics предлагает одну из самых широких линеек MEMS-датчиков, включая акселерометры, гироскопы, цифровые компасы, модули IMU, микрофоны и датчики параметров окружающей среды. Рассмотрим применение датчиков и тенденции их развития.
Подробнее

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...

  • Сообщения

    • Большое спасибо что хоть кто то отозвался! Ну уже вроде потихоньку сам  разбираюсь.
    • @Slavka насос работает даже при 140В, просто нагрузка на обмотки скорее всего большая, может сгореть. Я имею ввиду перепад, допустим он работает от 140В(в сети), потом мы отключаем одновременно контроллером два твердотельных реле от сети и включаем другими твердотельными реле уже к стабилизатору где 220В. По два твердотельных реле(всего 4) потому как фазу и ноль можно перепутать если допустим перевернуть вилку. Твердотельные реле выбраны потому как минимальная задержка и не будет рывка(может можно заменить и обычными реле, если десятки миллисекунд не критичны). Вопрос, будет ли в таком включении пусковой ток критичен для стабилизатора?
    • Здравствуйте, сломалась паяльная станция lukey 702, не включается, произошёл скачёк напряжения дома, разобрал из видимого: сгорел предохранитель, выгорела первичная обмотка трансформатора. Подскажите где купить такой трансформатор и какая маркировка у предохранителя? спасибо за понимание с уважением Василий.
    • Здравствуйте, сломалась паяльная станция lukey 702, не включается, произошёл скачёк напряжения дома, разобрал из видимого: сгорел предохранитель, выгорела первичная обмотка трансформатора. Подскажите где купить такой трансформатор и какая маркировка у предохранителя? спасибо за понимание с уважением Василий.
    • Ужас! Ему не для экспериментов, а чтобы срать не мешал. А если резистор, ватт на 7...10? Подбор тоже опытным путём. 1кОм, 2кОм - идёт?
    • Не каждый вентилятор регулируется напряжением.  Простыми способами может не получится.
    • Например  1 и 2 uF. И вообще "и опыт сын ошибок трудных и гений парадоксов друг". Для эксперимента что есть, с тем и попробовать.
×
×
  • Create New...