Например TDA7294

Форум РадиоКот • Просмотр темы - Вывод текста на дисплей ST7789
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Сб ноя 23, 2024 19:18:31

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 29 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: Вывод текста на дисплей ST7789
СообщениеДобавлено: Пт июн 28, 2024 10:25:07 
Встал на лапы

Зарегистрирован: Ср авг 31, 2022 12:10:34
Сообщений: 89
Рейтинг сообщения: 0
Есть дисплей 240 на 240 пикселей, на который вывожу текст.
Для этого взял один из примеров, в котором есть ряд шрифтов, максимальный 16 на 28 пикселей. Данные шрифты отображаются на дисплее нормально, но мне нужны более крупные шрифты, поэтому добавляю свои (вариант умножать уже имеющиеся шрифты не подходит, слишком пиксельно получается). В MatrixFont генерирую шрифт 32х48.

Далее пробую его выводить (умножая на 4) и наблюдается ряд проблем. Одна из которых это неполный вывод значения.
Для простоты оставил первый символ сгенерированного шрифта, а именно пробел - " ". Но заполнил его чередующимися 0 и 1. По сути на дисплей должен вывестись прямоугольник из полосок размером 32 на 48 пикселей (соотношение сторон 2 : 3).

Но на дисплее я получаю прямоугольник ровно в 2 раза уже, чем тот, что должен быть, соотношение сторон 1 : 3. Не могу найти причину данного поведения. Может у кого есть догадки?

Вывод символа:
Код:
ST7789_DrawChar( 10, 25, RGB565( 255, 255, 255 ) , RGB565( 0, 0, 0 ) , 0, &Font_32x48, 4, ' ');


Функция вывода:
Код:
void ST7789_DrawChar(uint16_t x, uint16_t y, uint16_t TextColor, uint16_t BgColor, uint8_t TransparentBg, FontDef_t* Font, uint8_t multiplier, unsigned char ch){
   
   uint32_t i, b, j;
   
   uint32_t X = x, Y = y;
   
   uint8_t xx, yy;
   
   if( multiplier < 1 ){
      multiplier = 1;
   }

   //Check available space in LCD
   if (ST7789_Width >= ( x + Font->FontWidth) || ST7789_Height >= ( y + Font->FontHeight)){

   
         //Go through font
         for (i = 0; i < Font->FontHeight; i++) {      
            
            if( ch < 127 ){         
               b = Font->data[(ch - 32) * Font->FontHeight + i];
            }
            
            else if( (uint8_t) ch > 191 ){
               // +96 это так как латинские символы и знаки в шрифтах занимают 96 позиций
               // и если в шрифте который содержит сперва латиницу и спец символы и потом
               // только кирилицу то нужно добавлять 95 если шрифт
               // содержит только кирилицу то +96 не нужно
               b = Font->data[((ch - 192) + 96) * Font->FontHeight + i];
            }
            
            else if( (uint8_t) ch == 168 ){   // 168 символ по ASCII - Ё
               // 160 эллемент ( символ Ё )
               b = Font->data[( 160 ) * Font->FontHeight + i];
            }
            
            else if( (uint8_t) ch == 184 ){   // 184 символ по ASCII - ё
               // 161 эллемент  ( символ ё )
               b = Font->data[( 161 ) * Font->FontHeight + i];
            }
            //----------
            
            //----  Украинская раскладка ----------
            else if( (uint8_t) ch == 170 ){   // 168 символ по ASCII - Є
               // 162 эллемент ( символ Є )
               b = Font->data[( 162 ) * Font->FontHeight + i];
            }
            else if( (uint8_t) ch == 175 ){   // 184 символ по ASCII - Ї
               // 163 эллемент  ( символ Ї )
               b = Font->data[( 163 ) * Font->FontHeight + i];
            }
            else if( (uint8_t) ch == 178 ){   // 168 символ по ASCII - І
               // 164 эллемент ( символ І )
               b = Font->data[( 164 ) * Font->FontHeight + i];
            }
            else if( (uint8_t) ch == 179 ){   // 184 символ по ASCII - і
               // 165 эллемент  ( символ і )
               b = Font->data[( 165 ) * Font->FontHeight + i];
            }
            else if( (uint8_t) ch == 186 ){   // 184 символ по ASCII - є
               // 166 эллемент  ( символ є )
               b = Font->data[( 166 ) * Font->FontHeight + i];
            }
            else if( (uint8_t) ch == 191 ){   // 168 символ по ASCII - ї
               // 167 эллемент ( символ ї )
               b = Font->data[( 167 ) * Font->FontHeight + i];
            }
            //----------
         
            for (j = 0; j < Font->FontWidth; j++) {
               
               if ((b << j) & 0x8000) {
                  
                  for (yy = 0; yy < multiplier; yy++){
                     for (xx = 0; xx < multiplier; xx++){
                           ST7789_DrawPixel(X+xx, Y+yy, TextColor);
                     }
                  }
                  
               }
               else if( TransparentBg ){
                  
                  for (yy = 0; yy < multiplier; yy++){
                     for (xx = 0; xx < multiplier; xx++){
                           ST7789_DrawPixel(X+xx, Y+yy, BgColor);
                     }
                  }
                  
               }
               X = X + multiplier;
            }
            X = x;
            Y = Y + multiplier;
         }
   }
}


Сам выводимый символ (48 значений):
Код:
const uint16_t Font32x48 [] = {
      0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   //   номер в Acii - 32   < >
};


Вложения:
2024-06-28_14-22-55.png [168.06 KiB]
Скачиваний: 68
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Пт июн 28, 2024 13:44:30 
Прорезались зубы
Аватар пользователя

Карма: 1
Рейтинг сообщений: 20
Зарегистрирован: Ср мар 09, 2016 08:07:41
Сообщений: 224
Рейтинг сообщения: 0
Цитата:
ST7789_DrawPixel(X+xx, Y+yy, BgColor);

он попиксельно собирается литеры отрисовывать на IPS дисплей :(


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Пт июн 28, 2024 13:57:06 
Друг Кота
Аватар пользователя

Карма: 70
Рейтинг сообщений: 1899
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12718
Рейтинг сообщения: 0
Да, начинающим так удобнее

https://www.rhydolabz.com/documents/33/ST7789.pdf
https://github.com/Matiasus/ST7789/blob ... c/st7789.c


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 08:26:53 
Электрический кот
Аватар пользователя

Карма: 4
Рейтинг сообщений: 135
Зарегистрирован: Сб мар 09, 2013 11:29:22
Сообщений: 1022
Откуда: 40RUS, Жуков
Рейтинг сообщения: 0
Потом научится области заполнять.

_________________
IVL ex UA6PJ


Вернуться наверх
 
Приглашаем на вебинар «Решения SUNCO для силовой электроники. Выбираем идеальный силовой модуль»

Приглашаем 3 декабря 2024 на вебинар, посвященный силовым модулям ведущего китайского производителя SUNCO - одного из мировых лидеров по производству дискретных полупроводниковых компонентов. На вебинаре вы узнаете о новинках, включая модули 17 класса в корпусе E3, и контроле качества на всех этапах производства. Вы также узнаете о новейших продуктах – IGBT-, SiC-, диодных и тиристорных модулях, погрузитесь в современные топологии, сравните характеристики IGBT-чипов разных поколений.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 12:19:23 
Встал на лапы

Зарегистрирован: Ср авг 31, 2022 12:10:34
Сообщений: 89
Рейтинг сообщения: 0
Да, начинающим так удобнее


С Вашим примером возникли трудности.
Других примеров особо нет. По-моему они все попиксельные


Вернуться наверх
 
Решения SUNCO для надежной защиты сигнальных цепей интерфейсов от электростатических разрядов

Всплески перенапряжения являются серьезной угрозой надежности работы радиоэлектронных устройств. Причины их появления различны, это могут быть коммутационные переходные процессы в системе электропитания устройств, разряды молний, электростатические разряды. Для создания эффективной и современной системы защиты от ЭСР компания SUNCO разработала надежные и качественные супрессоры, представляющие собой TVS- и ESD-диоды, а также сборки на их основе. Компоненты SUNCO не только не уступают, но часто превосходят по характеристикам аналогичную продукцию других брендов.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 13:39:06 
Друг Кота
Аватар пользователя

Карма: 70
Рейтинг сообщений: 1899
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12718
Рейтинг сообщения: 0
Ок.
Ну, во-первых, на будущее: выбрасывайте из кода всё, что не относится к проблеме. В Вашем случае он станет таким:
Код:
void ST7789_DrawChar(uint16_t x, uint16_t y, uint16_t TextColor, uint16_t BgColor, uint8_t TransparentBg, FontDef_t* Font, uint8_t multiplier, unsigned char ch)
{
   uint32_t i, b = Font->data[160], j;   
   uint32_t X = x, Y = y;
   uint8_t xx, yy;
   
   for (i = 0; i < Font->FontHeight; i++)
   {     
      for (j = 0; j < Font->FontWidth; j++)
      {
         if (((uint32_t)(b << j)) & 0x8000)
         {
            for (yy = 0; yy < multiplier; yy++)
            {
               for (xx = 0; xx < multiplier; xx++)
               {
                  ST7789_DrawPixel(X+xx, Y+yy, TextColor);
               }
            }
         }
         X += multiplier;
      }
      X = x;
      Y += multiplier;
   }
}

Согласитесь, гораздо легче видеть? Да и тестировать тоже.
Да и вообще можно её так и оставить, а все прочие обработки с кодировкой вынести во что-то другое - они не имеют отношения к отрисовке


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 14:16:59 
Встал на лапы

Зарегистрирован: Ср авг 31, 2022 12:10:34
Сообщений: 89
Рейтинг сообщения: 0
Согласитесь, гораздо легче видеть? Да и тестировать тоже.

Мне кажется Вы выкинули много. Код так перестает что-либо выводить.
Так работает
Код:
void ST7789_DrawChar(uint16_t x, uint16_t y, uint16_t TextColor, uint16_t BgColor, uint8_t TransparentBg, FontDef_t* Font, uint8_t multiplier, unsigned char ch){

   uint32_t i, b, j;

   uint32_t X = x, Y = y;

   uint8_t xx, yy;

   //Go through font
   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) {

            for (yy = 0; yy < multiplier; yy++){
               for (xx = 0; xx < multiplier; xx++){
                  ST7789_DrawPixel(X+xx, Y+yy, TextColor);
               }
            }

         }
         else if( TransparentBg ){

            for (yy = 0; yy < multiplier; yy++){
               for (xx = 0; xx < multiplier; xx++){
                  ST7789_DrawPixel(X+xx, Y+yy, BgColor);
               }
            }

         }
         X = X + multiplier;
      }
      X = x;
      Y = Y + multiplier;
   }
}


Но выводит так же, обрезано в 1/2.
Этот пример еще попробовал. https://github.com/Floyd-Fish/ST7789-ST ... /README.md
Тут, вроде, вывод не попиксельно. Но ситуация 1 в 1. Выводит 1/2. Если быть точным не выводит 1/2, а отображает. Например если вывести 2 области (Полностью закрашенные 0xFFFF) друг за другом, то будет как на рисунке. Т.е. область под элемент 32х48 он "выделяет", но отображает только 1/2


Вложения:
123.png [18.55 KiB]
Скачиваний: 54
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 14:33:58 
Друг Кота
Аватар пользователя

Карма: 70
Рейтинг сообщений: 1899
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12718
Рейтинг сообщения: 0
просто попиксельно можете залить весь экран? без умножения и прочего, просто от нуля до ширины и от нуля до высоты экрана прогнать ST7789_DrawPixel(x, y, Color);


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 15:39:25 
Встал на лапы

Зарегистрирован: Ср авг 31, 2022 12:10:34
Сообщений: 89
Рейтинг сообщения: 0
просто попиксельно можете залить весь экран? без умножения и прочего, просто от нуля до ширины и от нуля до высоты экрана прогнать ST7789_DrawPixel(x, y, Color);

Да, все отлично залилось
Код:
  for(uint8_t y = 0; y < 240; y++)
  {
    for(uint8_t x = 0; x < 240; x++)
    {
       ST7789_DrawPixel(x, y, color);
    }
  }


По всей видимости косяк где-то в массиве шрифта, но не знаю, там вроде все нормально. 16 битные данные, 0xFFFF и тд
Размер шрифта задаю тоже
Код:
#ifdef   FONT_32x48
FontDef_t Font_32x48 = {
   32,
   48,
   Font32x48
};
#endif


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 15:55:42 
Друг Кота
Аватар пользователя

Карма: 70
Рейтинг сообщений: 1899
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12718
Рейтинг сообщения: 0
16-битные? а сдвигаете не 32 раза, случаем?

Добавлено after 7 minutes 17 seconds:
Вот здесь:

Код:
 for (j = 0; j < Font->FontWidth; j++) {

         if ((b << j) & 0x8000) {


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 16:24:06 
Встал на лапы

Зарегистрирован: Ср авг 31, 2022 12:10:34
Сообщений: 89
Рейтинг сообщения: 0
16-битные? а сдвигаете не 32 раза, случаем?


Базовые шрифты он выводит, они тоже заданы как 16 ьитные

Код:
const uint16_t Font6x8 [] = {
   
// --  English font with symbols  ----------
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,  // sp
0x2000, 0x2000, 0x2000, 0x2000, 0x2000, 0x0000, 0x2000, 0x0000,  // !
....
};


Если его умножить в несколько раз, то он выведет одно число на весь экран, т.е. больше диапазоном, чем я сейчас пытаюсь


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 16:36:42 
Друг Кота
Аватар пользователя

Карма: 70
Рейтинг сообщений: 1899
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12718
Рейтинг сообщения: 0
Шрифты, ширина которых 16 и менее пикселей будут сдвигаться корректно, так как сдвиг равен или меньше ширины данных.
Но если ширина шрифта 32, то как эта ширина укладывается в 16-битные данные?
Конечно, тогда выведется лишь половина - для второй половины данных просто не существует

Добавлено after 3 minutes 35 seconds:
У Вас вот так выходит:
Код:
for (j = 0; j < 32; j++)
{
      if ((b << j) & 0x8000) // b = 16 бит

а должно быть так:
Код:
for (j = 0; j < 32; j++)
{
      if ((b << j) & 0x80000000) // b = 32 бит


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 16:44:38 
Встал на лапы

Зарегистрирован: Ср авг 31, 2022 12:10:34
Сообщений: 89
Рейтинг сообщения: 0
Добавлено after 3 minutes 35 seconds:
if ((b << j) & 0x80000000) // b = 32 бит[/code]


Стала выводиться 2я половина, а первая перестала)))

Может там в других функция проблема...


Вложения:
LCD.rar [26.54 KiB]
Скачиваний: 150


Последний раз редактировалось DmitryR Сб июн 29, 2024 16:47:38, всего редактировалось 1 раз.
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 16:47:20 
Друг Кота
Аватар пользователя

Карма: 70
Рейтинг сообщений: 1899
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12718
Рейтинг сообщения: 0
и ещё я бы явно приводил сдвиги к целочисленному типу.

Шрифт же остался 16-битным?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 16:48:26 
Встал на лапы

Зарегистрирован: Ср авг 31, 2022 12:10:34
Сообщений: 89
Рейтинг сообщения: 0
Шрифт же остался 16-битным?

Да, конечно


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 16:51:06 
Друг Кота
Аватар пользователя

Карма: 70
Рейтинг сообщений: 1899
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12718
Рейтинг сообщения: 0
ну и? ))
Смотрите, 16-бит - это как массив из 16 элементов. Как можно в массиве, размером 16 получить данные элементов, позиции которых 15...31 ? Их просто нет


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 17:03:51 
Встал на лапы

Зарегистрирован: Ср авг 31, 2022 12:10:34
Сообщений: 89
Рейтинг сообщения: 0
ну и? ))
Смотрите, 16-бит - это как массив из 16 элементов. Как можно в массиве, размером 16 получить данные элементов, позиции которых 15...31 ? Их просто нет

Ну в Ваших словах есть логика, но если сделать массив 32 битным, то результат тот же, но расстояние между полосками (в массиве чередуются 0х0000 и 0хFFFF) увеличивается. Но область массива та же.
Есть ощущение, что где-то переполняется какая-то переменная, это не дает вывести область 32 на 48....


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 17:08:57 
Друг Кота
Аватар пользователя

Карма: 70
Рейтинг сообщений: 1899
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12718
Рейтинг сообщения: 0
угу, логика...
вот математика:
Код:
const uint16_t Font32x48 [] = {
      0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   //   номер в Acii - 32   < >
};

сколько здесь бит всего? 16х48=768? а сколько должно быть в шрифте 32х48? 1536? Ни на что не намекает? Массив в 2 раза меньше, в ту самую невыводящуюся половину.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 17:42:12 
Встал на лапы

Зарегистрирован: Ср авг 31, 2022 12:10:34
Сообщений: 89
Рейтинг сообщения: 0
сколько здесь бит всего? 16х48=768? а сколько должно быть в шрифте 32х48? 1536? Ни на что не намекает? В 2 раза меньше, в ту самую невыводящуюся половину.


Не, я первым же делом увеличил массив в несколько раз
Код:
      0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   //   32   < >
      0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,
      0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,   0xFFFF,   0x0000,
...

Я заметил, что выводит он первые 48 элементов. Как раз это одна строка массива. Т.е. увеличение разрядности с 16 до 32 бит по сути должно было дать недостающую ширину, но происходит другой эффект:
- увеличиваю разрядность до 32х бит
0xFFFF увеличиваю до 0xFFFFFFFF
- на дисплее он одно значение 0xFFFFFFFF выводит в 2 строки. Т.е. если сделать разрядность в 2 раза больше, то я не получаю удлинение строки изображения, а получаю запись одного элемента в 2 строки. Т.е. теперь каждый элемент массива это 2 строки, а не одна, как должно быть


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вывод текста на дисплей ST7789
СообщениеДобавлено: Сб июн 29, 2024 18:01:50 
Друг Кота
Аватар пользователя

Карма: 70
Рейтинг сообщений: 1899
Зарегистрирован: Сб дек 18, 2021 19:25:32
Сообщений: 12718
Рейтинг сообщения: 0
Это увеличение массива ничего не даёт, так как его не учитывает алгоритм вывода, который считает, что строка в символе равна 16 битам.

Просто сопоставьте, как строка символа хранится в массиве, и как она выводится. Если она теперь хранится двумя элементами массива, то здесь
Код:
 for (j = 0; j < Font->FontWidth; j++) {

         if ((b << j) & 0x8000) {

этого нет, b содержит только один элемент. Более того, здесь Вы 16-битную переменную сдвигаете 32 раза.
Либо делайте каждый элемент 32-битным и, соответственно, изменяйте проверку бита на 32-битную, либо каждые 16 бит b должно быть равно содержимому элемента n+1
"Я всё сказал" (с) угнот Куиил


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y