AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
23.03.2024, 12:33
|
#1
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 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
|
#2
|
Частый гость
Регистрация: 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
|
#3
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,653
Сказал спасибо: 117
Сказали Спасибо 815 раз(а) в 592 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сообщение от Devil Byte
|
Попробовал разные библиотеки
|
Позорище! А самому по даташиту нарисовать - сложно что ли?
У меня под STM32 работает.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
23.03.2024, 13:06
|
#4
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сообщение от eddy
|
Позорище! А самому по даташиту нарисовать - сложно что ли?
У меня под STM32 работает.
|
Спасибо за помощь новичку. Очень приятно. К Вам вопросов больше нет
|
|
|
|
23.03.2024, 13:09
|
#5
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
Сообщение от jsv010
|
А библиотеку для st7789 не пробовал?
|
Нет, еще не пробовал, но попробую
|
|
|
|
23.03.2024, 13:56
|
#6
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,221 раз(а) в 1,319 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
А зачем такой сложный дисплей? Выбирайте то, что по силам. Я же, насколько помню, раньше уже писал, какие есть простые дисплеи.
Если же непременно хотите сложный вариант, но не вникая в подробности, тогда просто перебирайте все подряд библиотеки, какая-нибудь да сработает. Метод научного тыка тоже может давать результаты, иногда даже за не слишком большое время.
Какие-нибудь мануалы читали? Ну хоть пару страниц то? Не хотите читать - просто перебирайте варианты.
С такими китайскими дисплеями есть еще проблема в том, что неизвестно, какой именно драйвер там стоит, и неизвестно, как именно подключен дисплей, через какие промежуточные компоненты.
|
|
|
|
23.03.2024, 14:04
|
#7
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 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
|
#8
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,653
Сказал спасибо: 117
Сказали Спасибо 815 раз(а) в 592 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
У всех SPI'ных драйверов дисплеев есть общий регистр, в котором содержится конкретная модель. Просто прочитай регистр - и поймешь, что у тебя там внутри.
Я сам несколько SPI'ных покупал. Пишут одно, а по факту внутри другое. А еще какие-то [censored] китайцы иногда вешают тачскрин на управляющие электроды, в итоге ничего не работает и приходится перепаивать (возможно, оно будет работать с пятивольтовым питанием, но кто в своем уме будет запитывать микроконтроллеры пятью вольтами, тут и 3.3-то - очень много).
Вот, в одной из последних железок был ili9341.
// ну и не пройду мимо и еще раз пристыжу: позорище-то какое! Ни документацию ТС не в состоянии почитать, ни код написать… Еще и, наверняка, под абдурину не как положено код пишет, а в абдурино-IDE с убогими абдуринобиблиотеками.
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
Последний раз редактировалось eddy; 23.03.2024 в 14:10.
|
|
|
|
23.03.2024, 14:38
|
#9
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,069
Сказал спасибо: 3,054
Сказали Спасибо 3,222 раз(а) в 2,187 сообщении(ях)
|
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
|
#10
|
Временная регистрация
Регистрация: 07.03.2019
Сообщений: 87
Сказал спасибо: 11
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Дисплей 3.5 на ILI9341 + atmega128
В общем оказалось что в этом дисплее стоит контроллер ILI 9488 http://www.lcdwiki.com/3.5inch_SPI_M...88_SKU:MSP3520
Но пока есть только примеры под ардуино и стм
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:42.
|
|