02.12.2018, 13:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: ili9341 SPI
NewWriter, да, я вчера так и сделал вывод. Сейчас вот думаю как большой шрифт выводить... Я переделывал код от SSD1351(RGB 1.5").
PHP код:
|
void ILI9341_WriteChar(uint16_t x, uint16_t y, char ch, FontDef_t* font, uint16_t color, uint16_t bgcolor)
{
uint32_t i, b, j;
CS_ON;
ILI9341_SetAddressWindow(x, y, x+font-›FontWidth-1, y+font-›FontHeight-1);
SSD1351_send_command(ILI9341_GRAM);
wr_Data;
for(i = 0; i ‹ font-›FontHeight; i++) //высота символа
{
b = font-›data[(ch - 32) * font-›FontHeight + i];
for(j = 0; j ‹ font-›FontWidth; j++) //ширина символа
{
if((b ‹‹ j) & 0x8000)
{
// data[] = { color ›› 8, color & 0xFF };
SPI1_SendByte(color ›› 8);
SPI1_SendByte(color & 0xFF);
// SSD1351_send_data(data, sizeof(data));
} else
{
SPI1_SendByte(bgcolor ›› 8);
SPI1_SendByte(bgcolor & 0xFF);
// data[] = { bgcolor ›› 8, bgcolor & 0xFF };
// SSD1351_send_data(data, sizeof(data));
}
}
}
CS_OFF;
}
а это кусочек шрифта, цифра 0
0x0000, 0x1E00, 0x3F00, 0x3300, 0x6180, 0x6180, 0x6180, 0x6D80, 0x6D80, 0x6180, 0x6180, 0x6180, 0x3300, 0x3F00, 0x1E00, 0x0000, 0x0000, 0x0000, // 0
|
получается тут if((b ‹‹ j) & 0x8000) я проверяю выводить точку или нет, и если нет то вывожу фон. Маска 32 бита, а символы которые больше надо вывести попадают под маску 64 бита. Вот не получается додуматься как это условие заменить другим. Шрифты генерирую в программе The Dot Factory. Там она генерит по 8 бит. У Easyrider83 шрифт тоже сделан вроде через эту прогу. Но у него в примере 8 на 8 шрифт.
Сейчас чай допью и сяду думать как изменить мои условия.
|
|
|
|
02.12.2018, 19:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: ili9341 SPI
Сделал для шрифтов выгрузку. Переделал свои функции...
Теперь дошел до того, что конечно для большого шрифта не хватает памяти )) Для этого внешнюю флешь можно использовать. Подскажите как во внешнюю флеш записать шрифт? Сторонним программатором? Или сделать платку чтоб с компа послать файл через ком-порта МК всё что принимает сразу пишет во внешнюю флешь...? Как обычно такое делают?
Ну вот у меня 16 кб флеша. Хватает для шрифта 48х79 примерно 11 символов
|
|
|
|
02.12.2018, 19:17
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: ili9341 SPI
Keil умеет загружать во внешнюю память.
Свойства проекта -› Target -› off-chip flash: сюда добавляете регион флеши (не случайно у армов область памяти начиная с нуля не занята).
Потом идем в Debug -› Settings -› Flash Download. Здесь выбираем алгоритм для работы с этой памятью и задаете ту же область, что и в Target. Если нужного алгоритма нет в списке, придется писать самому. Я писал под SPI FLASH x25. Ничего сложного. При сборке проекта данные загружаются и в память контроллера, и во внешнюю флеш автоматически.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
02.12.2018, 19:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,483
Сказал спасибо: 401
Сказали Спасибо 2,212 раз(а) в 1,311 сообщении(ях)
|
Re: ili9341 SPI
А может перестать мучить себя и МК такими извратами? Додумались - взять самый мелкий МК и прицепить к нему цветной дисплей 240х320 точек, да еще захерачить в него шрифт сразу аж 79х48 точек. Это сразу чтоб обосраться, наверно. Вы либо делайте шрифт не более 16х8, либо возьмите другой МК, хотябы на 64 кБ флеша.
Внешний флеш для F030 - ерунда. Учитывая отсутствие интерфейса NOR или NAND и маленькую ОЗУ, скорость работы будет вообще никакой.
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
02.12.2018, 19:53
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: ili9341 SPI
самый маленький Мк взял так как он был уже распаян на платке. Да и интересно было часы сделать на нем на весь экран. С маленьким шрифтом то всё норм, а большой не влез ))
Сейчас пойду смотреть то что Easyrider83 мне написал. Буду изучать...
|
|
|
|
02.12.2018, 20:29
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,483
Сказал спасибо: 401
Сказали Спасибо 2,212 раз(а) в 1,311 сообщении(ях)
|
Re: ili9341 SPI
У F030F4 всего один SPI. Поэтому, придется из внешней флеши по SPI1 сначала читать данные одного символа шрифта в ОЗУ, затем получать цвет пикселя и каждый пиксель передавать по тому же SPI1 в дисплей. Ноги CS будут разные для микросхемы флеша и дисплея.
Запрогать внешнюю флеш можно и простым программатором отдельно, залив в нее массив шрифта в виде байтов. Все равно же эта флеш сидит на SPI и внутренняя адресация у нее не равна общей адресации ARM.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:19.
|
|