19.07.2016, 10:41
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: ili9341 SPI
А в какой кодировке у вас представлен шрифт? В любом случае, его можно перекодировать.
Вообще, для unsigned char кодировка ASCII, в которой кириллица начинается со 192 ('А'). 'Б' - 193 ... 'Я' - 223. 'а' - 224, 'б' - 225 ... 'я' - 255.
таблица кодировки:
Нажмите, чтобы открыть спойлер
Именно поэтому на алфавитно-цифровых дисплеях с контроллером типа HD44780 невозможно напрямую выводить текст кириллицей. Перекодировать программно не имеет смысла, поэтому для набора текста пользуюсь конвертерами.
Последний раз редактировалось NewWriter; 19.07.2016 в 10:54.
|
|
|
|
19.07.2016, 12:05
|
|
Частый гость
Регистрация: 13.06.2016
Сообщений: 37
Сказал спасибо: 6
Сказали Спасибо 2 раз(а) в 1 сообщении
|
Re: ili9341 SPI
Латиница в ASCII, а вот кириллицу приладить никак нормально не могу, я ее пихал и под коды со 192 и со 128 (по таблицам кодировки, которые рожал гугл), но внятно не работает. Вместо строки "Привет" пишет ""П!иве!" - часть символов просто неправильно определяется под какие бы коды не пихать алфавит (в данном случае восклицательные знаки показывают, что коды символов за пределами кодов алфавита) - где-то больше, где-то меньше ошибок, с латиницей при этом все хорошо. И при записи FONT_OUT('т', 130, 205, 2, 0xFFFF, 0x05BF); выдает варнинг character too large for enclosing character literal type
|
|
|
|
19.07.2016, 12:42
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: ili9341 SPI
Проблему надо искать в самой функции FONT_OUT
|
|
|
|
19.07.2016, 13:08
|
|
Частый гость
Регистрация: 13.06.2016
Сообщений: 37
Сказал спасибо: 6
Сказали Спасибо 2 раз(а) в 1 сообщении
|
Re: ili9341 SPI
Нажмите, чтобы открыть спойлер
void FONT_OUT(unsigned char ascii, unsigned int x0, unsigned int y0, unsigned int size, unsigned int fgcolor, unsigned int bgcolor)
{
unsigned int n, i, j, h, k;
i = fgcolor ›› 8;
j = fgcolor & 0xFF;
h = bgcolor ›› 8;
k = bgcolor & 0xFF;
int INDEX = 0;
LCD_SetCursorPosition(x0, y0, (uint16_t) (x0+23), (uint16_t) (y0+22));
LCD_SendCommand(LCD_GRAM);
HAL_GPIO_WritePin(TFT_DC_PORT, TFT_DC_PIN, GPIO_PIN_SET);
HAL_GPIO_WritePin(TFT_CS_PORT, TFT_CS_PIN, GPIO_PIN_RESET);
for (n =0; n‹69; n++ )
{
//unsigned char temp = dSDigital_72ptBitmaps[((ascii-4 *305)+n]; //
unsigned char temp = arialNarrow_18ptBitmaps[arialNarrow_18ptDescriptors[ascii-33][2]+n]; // отнимаем количество первых символов, не присутствующих в шрифте
unsigned char f=0;
for(f=0;f‹8;f++)
{
if((temp››f)&0x01)
{buf[INDEX] = i;
buf[INDEX+=1] = j;
INDEX+=1;}
else {buf[INDEX] = h;
buf[INDEX+=1] = k;
INDEX+=1;}
}
}
HAL_SPI_Transmit_DMA(&hspi1, buf, 1104);
HAL_GPIO_WritePin(TFT_CS_PORT, TFT_CS_PIN, GPIO_PIN_SET);
}
функция под конкретный шрифт пока с моно шириной - выбираем область расположения шрифта (квадрат), определяем область массива шрифта с необходимым символом (расположение соответствует коду символа с поправкой на отсутствующие символы в начале), перегоняем в буфер и пихаем в DMA, заполняется область квадрата символом. Шрифт содержит сам массив с буквами и массив с информацией о них. Генерил шрифты прогой Dot Factory.
Я не сильно догоняю как определить в какой кодировке определяются символы, но что-то мне подсказывает, что UTF-8 используется (в keil установлена такая кодировка)
но даже просто приравняв
unsigned int yyy = 'Б'
дает ошибку character too large for enclosing character literal type
проблема то по сути именно в том как получить коды из русских знаков (как понял, это проблема самого keil'а)
крякнул keil Rus_font_dll и все нормально заработало
Последний раз редактировалось dimdidim; 20.07.2016 в 14:24.
|
|
|
|
01.12.2018, 20:43
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: ili9341 SPI
Добрый день. Подключил 9341 по SPI. 320х240 точек. Заливает цветом примерно за 1-1,5 сек. Это нормальная скорость? Почитал форумы. Шлют команду записи в память и потом шлют цвет по 8 бит в цикле. У меня так шлет в одну точку всё. Надо только вручную увеличивать координаты и рисовать точку. Всё аналогично как с SSD1306. Подскажите правильно ли это?
|
|
|
|
01.12.2018, 20:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: ili9341 SPI
блин заколдованный форум... ))) Сижу разбираюсь, не получается... Только напишу вопрос так сразу получается. Нашел ошибку у себя при задании границ вывода. Тупо нули стояли... Сам провтыкал...
|
|
|
|
01.12.2018, 21:05
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: ili9341 SPI
Сообщение от miwutka
|
Заливает цветом примерно за 1-1,5 сек. Это нормальная скорость?
|
Нет, это не нормальная. Скорость можно увеличить в десятки раз. Т Делается это через DMA.
Количество байт для полного кадра 240х320х3 байта цвета = 230400. При SPI 18 МГц кадр заполнится за 10 мс.
Почитайте первую страницу этой темы.
ЗЫ. Наиболее выгодно этот дисплей будет работать в режиме параллельного ввода.
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
01.12.2018, 21:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 05.07.2009
Адрес: Запорожье
Сообщений: 1,531
Сказал спасибо: 309
Сказали Спасибо 53 раз(а) в 48 сообщении(ях)
|
Re: ili9341 SPI
Пока без ДМА за 1 секунду заливает 7-8 раз дисплей цветом.... Проц stm32f030F4t6 - 64 МГц тактирование. SPI получается 32 МГц. Цвет у меня из двух 8 битных значений. Сейчас сяду сделаю вывод текста хоть...
|
|
|
|
02.12.2018, 11:51
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: ili9341 SPI
Фигасе, чеж так издеваться то с частотами...
Для вывода шрифта на мелком МК нужен другой подход. Вывод - в окне размером в один символ шрифта. Устанавливаем координаты окна дисплея, передавая команды. Затем начинаем заполнять это окно попиксельно. Для следующего символа - повторить - установка координат окна, заполнение окна.
|
|
|
Сказали "Спасибо" NewWriter
|
|
|
02.12.2018, 12:20
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: ili9341 SPI
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 02:57.
|
|