| AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
Дисплей 3.5 на ILI9341 + atmega128
23.03.2024, 12:33
|
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 91
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Дисплей 3.5 на ILI9341 + atmega128
Здравствуйте!
Прислали дисплей https://aliexpress.ru/item/400044419...00035349880052
Он на ili9488. Подключил его к atmega128 по следующей схеме
atmega displey
VCC ----------VCC
GND ----------GND
PB4 ----------CS
PB5 ----------RESET
PB6 ----------DC/RS
PB2 ----------SDI(MOSI)
PB1 ----------SCK
VCC ----------LED
PB3 ----------SDO(MISO)
Попробовал разные библиотеки, но так и не смог запустить дисплей.
Помогите пожалуйста разобраться, где взять проверенную библиотеку и как правильно начать работать с дисплеем.
Как я понимаю надо инициализировать spi?
Нажмите, чтобы открыть спойлер
|
PHP код:
|
#define F_CPU 8000000UL
#include ‹avr/io.h›
#include ‹util/delay.h›
#define SPI_DDR DDRB
#define SPI_PORT PORTB
#define CS PB0
#define RESET PB1
#define DC PB2
#define MOSI PB3
#define SCK PB5
// Инициализация SPI интерфейса
void SPI_init()
{
// Установим MOSI, SCK, CS и DC как выходные пины
SPI_DDR |= (1 ‹‹ MOSI) | (1 ‹‹ SCK) | (1 ‹‹ CS) | (1 ‹‹ DC);
// Включим SPI, установим мастер-режим и установим частоту SCK
SPCR = (1 ‹‹ SPE) | (1 ‹‹ MSTR) | (1 ‹‹ SPR0);
}
// Функция для отправки байта данных через SPI
void SPI_send_byte(uint8_t data)
{
// Запускаем передачу данных
SPDR = data;
// Ждем окончания передачи
while (!(SPSR & (1 ‹‹ SPIF)));
}
// Функция для отправки команды на дисплей
void ILI9488_send_command(uint8_t command)
{
// Переводим линию DC в низкое состояние для отправки команды
SPI_PORT &= ~(1 ‹‹ DC);
// Переводим линию CS в низкое состояние для начала передачи
SPI_PORT &= ~(1 ‹‹ CS);
// Отправляем команду
SPI_send_byte(command);
// Переводим линию CS в высокое состояние для окончания передачи
SPI_PORT |= (1 ‹‹ CS);
}
// Функция для отправки данных на дисплей
void ILI9488_send_data(uint8_t data)
{
// Переводим линию DC в высокое состояние для отправки данных
SPI_PORT |= (1 ‹‹ DC);
// Переводим линию CS в низкое состояние для начала передачи
SPI_PORT &= ~(1 ‹‹ CS);
// Отправляем данные
SPI_send_byte(data);
// Переводим линию CS в высокое состояние для окончания передачи
SPI_PORT |= (1 ‹‹ CS);
}
// Функция для инициализации дисплея
void ILI9488_init()
{
// Сброс дисплея
SPI_PORT &= ~(1 ‹‹ RESET);
_delay_ms(100);
SPI_PORT |= (1 ‹‹ RESET);
_delay_ms(100);
// возможно тут вызовы функций ILI9488_send_command() и ILI9488_send_data()
// конфигурации дисплея согласно его техническому описанию.
}
int main()
{
// Инициализация SPI
SPI_init();
// Инициализация дисплея
ILI9488_init();
// код для работы с дисплеем (рисование, обновление и т.д.)
while (1)
{
// Основной цикл программы
}
}
|
Последний раз редактировалось Devil Byte; 23.03.2024 в 18:08.
|
|
|
|
23.03.2024, 12:56
|
|
|
Частый гость
Регистрация: 13.10.2022
Сообщений: 18
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
А библиотеку для st7789 не пробовал?
У меня похожий с диагональю 2.4 так завелся
Последний раз редактировалось jsv010; 23.03.2024 в 12:58.
|
|
|
|
23.03.2024, 12:59
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сообщение от Devil Byte
|
|
Попробовал разные библиотеки
|
Позорище! А самому по даташиту нарисовать - сложно что ли?
У меня под STM32 работает.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
23.03.2024, 13:06
|
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 91
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сообщение от eddy
|
Позорище! А самому по даташиту нарисовать - сложно что ли?
У меня под STM32 работает.
|
Спасибо за помощь новичку. Очень приятно. К Вам вопросов больше нет
|
|
|
|
23.03.2024, 13:09
|
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 91
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сообщение от jsv010
|
|
А библиотеку для st7789 не пробовал?
|
Нет, еще не пробовал, но попробую
|
|
|
|
23.03.2024, 13:56
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,481
Сказал спасибо: 396
Сказали Спасибо 2,222 раз(а) в 1,317 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
А зачем такой сложный дисплей? Выбирайте то, что по силам. Я же, насколько помню, раньше уже писал, какие есть простые дисплеи.
Если же непременно хотите сложный вариант, но не вникая в подробности, тогда просто перебирайте все подряд библиотеки, какая-нибудь да сработает. Метод научного тыка тоже может давать результаты, иногда даже за не слишком большое время.
Какие-нибудь мануалы читали? Ну хоть пару страниц то? Не хотите читать - просто перебирайте варианты.
С такими китайскими дисплеями есть еще проблема в том, что неизвестно, какой именно драйвер там стоит, и неизвестно, как именно подключен дисплей, через какие промежуточные компоненты.
|
|
|
|
23.03.2024, 14:04
|
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 91
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
NewWriter, Добрый день. Да я помню о том что вы писали., но именно этот дисплей пришел первее, остальные я не успел получить, так как улетел на работу.
я начал читать как раз даташит по ili9341, но не уверен что начал писать правильно.
Нажмите, чтобы открыть спойлер
|
PHP код:
|
void ILI9341_Init() {
// Инициализация SPI
SPI_MasterInit();
// Инициализация линий управления
DDRC |= (1 ‹‹ LCD_RST) | (1 ‹‹ LCD_DC);
// Сброс дисплея
PORTC &= ~(1 ‹‹ LCD_RST);
_delay_ms(100);
PORTC |= (1 ‹‹ LCD_RST);
_delay_ms(100);
// Конфигурация дисплея
ILI9341_WriteCommand(ILI9341_SWRESET);
_delay_ms(150);
ILI9341_WriteCommand(ILI9341_SLPOUT);
_delay_ms(150);
ILI9341_WriteCommand(ILI9341_DISPON);
_delay_ms(100);
// Настройка области записи
ILI9341_WriteCommand(ILI9341_CASET);
ILI9341_WriteData(0x00);
ILI9341_WriteData(0x00);
ILI9341_WriteData(0x00);
ILI9341_WriteData(0xEF);
ILI9341_WriteCommand(ILI9341_PASET);
ILI9341_WriteData(0x00);
ILI9341_WriteData(0x00);
ILI9341_WriteData(0x01);
ILI9341_WriteData(0x3F);
}
void ILI9341_DrawChar(uint16_t x, uint16_t y, char ch) {
// TODO: Реализация вывода символа на дисплей
}
void ILI9341_DrawString(uint16_t x, uint16_t y, const char* str) {
// TODO: Реализация вывода строки на дисплей
}
|
На счет драйвера написал китайцу, но он пока молчит(
|
|
|
|
23.03.2024, 14:07
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,684
Сказал спасибо: 116
Сказали Спасибо 823 раз(а) в 597 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
У всех SPI'ных драйверов дисплеев есть общий регистр, в котором содержится конкретная модель. Просто прочитай регистр - и поймешь, что у тебя там внутри.
Я сам несколько SPI'ных покупал. Пишут одно, а по факту внутри другое. А еще какие-то [censored] китайцы иногда вешают тачскрин на управляющие электроды, в итоге ничего не работает и приходится перепаивать (возможно, оно будет работать с пятивольтовым питанием, но кто в своем уме будет запитывать микроконтроллеры пятью вольтами, тут и 3.3-то - очень много).
Вот, в одной из последних железок был ili9341.
// ну и не пройду мимо и еще раз пристыжу: позорище-то какое! Ни документацию ТС не в состоянии почитать, ни код написать… Еще и, наверняка, под абдурину не как положено код пишет, а в абдурино-IDE с убогими абдуринобиблиотеками.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
Последний раз редактировалось eddy; 23.03.2024 в 14:10.
|
|
|
|
23.03.2024, 14:38
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,459
Сказал спасибо: 3,227
Сказали Спасибо 3,513 раз(а) в 2,394 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сообщение от Devil Byte
|
|
Попробовал разные библиотеки, но так и не смог запустить дисплей.
|
А конкретнее? Что не так?
Сообщение от Devil Byte
|
Подключил его к atmega128 по следующей схеме
.....
PB6 ----------DC/RS
.....
.....
.....
#define LCD_DC PC6
.....
|
Но это, конечно, досадная мелочь. Работе может не помешать.
А вот отсутствие настройки на выход вывода LCD_DC - настораживает. До кучи - не видно настройки и LCD_RST.
__________________
Экзорцист 40-го уровня.
|
|
|
|
23.03.2024, 15:55
|
|
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 91
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
В общем оказалось что в этом дисплее стоит контроллер ILI 9488 http://www.lcdwiki.com/3.5inch_SPI_M...88_SKU:MSP3520
Но пока есть только примеры под ардуино и стм
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 10:10.
|
|