Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

Re: Таймер не работает

Пн дек 16, 2019 14:49:13

Да и уж пока Вы не спите, вывожу буквы функцией,(int х, int у, char 'текст', char RGB ), в char же только один символ влезет, значит надо безразмерный массив? А потом из чар доставать буквы их номером из таблицы, верно?
Вот спасибо! Сейчас ознакомлюсь

Добавлено after 5 minutes 48 seconds:
Получается пересылая 24 бита я как бы пересылал 18 бит, а 16 так и были 16, правильно?

Re: Таймер не работает

Пн дек 16, 2019 14:52:54

в char же только один символ влезет, значит надо безразмерный массив?
Есть такая вещь - строка. В K&R наверняка про это пишут...

Добавлено after 2 minutes 3 seconds:
Получается пересылая 24 бита я как бы пересылал 18 бит, а 16 так и были 16, правильно?
Я не знаю, проекта не видел. Тот код что ты случайно засветил конвертирует 24 бита в RGB565 и передаёт как 16 бит. Что будет, если на вход этого алгоритма подать 16 бит - ХЗ.

Блин, вечер перестаёт быть томным. Приходится объяснять автору кода что же он там напрограммировал :)

Re: Таймер не работает

Пн дек 16, 2019 15:04:25

Я попытался переделать код, чтобы получить 18 бит, но цвета поплыли(

Re: Таймер не работает

Пн дек 16, 2019 15:05:54

Получается пересылая 24 бита я как бы пересылал 18 бит, а 16 так и были 16, правильно?

Чтобы переслать 18 бит или дисплей должен быть подключен по 18-ти битному интерфейсу, а это не так, или нужно отправлять для каждого пикселя данные два(или три) раза, например, по 9 бит, естественно еще и переделав инит дисплея, чего у тебя тоже нет. Следовательно у тебя в обоих случаях 16 бит, но в одном случае данные преобразованы неправильно.
Последний раз редактировалось Reflector Пн дек 16, 2019 15:10:15, всего редактировалось 1 раз.

Re: Таймер не работает

Пн дек 16, 2019 15:09:04

Я понял, спасибо) Очень много ресурсов сжирает простецкая анимация, надо конвертировать файл сразу в 565, пойду займусь этим

Re: Таймер не работает

Пн дек 16, 2019 15:10:07

только с прогой могут быть проблемы
Всё украдено до нас. http://www.cyberforum.ru/beta-testing/thread2114715.html

Re: Таймер не работает

Пн дек 16, 2019 15:25:08

Вот конвертировал прогой в RGB565 сразу и вот в сравнении две фотки.


Добавлено after 4 minutes 33 seconds:
Кстати скорость обработки внешних процессов не изменилась у него. Там сердечки по очереди появляются, причем я не отрисовываю заново всю сцену, сделал функцию, ей передается координаты по которым она рисует мелкий полигон по размерам сердечка и высчитывает какие адреса цветов должны быть в этом месте, пол дня убил на нее)

Re: Таймер не работает

Пн дек 16, 2019 15:27:04

Покажи алгоритмы которыми ты выводишь RGB888 и RGB565.

Re: Таймер не работает

Пн дек 16, 2019 15:35:47

888 я вообще не вывожу, я так по быстрому попробовал, но не выходит, выше вон подсказали почему.
У меня массив в 24 бита содержит группы по три адреса

const unsigned short picture1[] =
{
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF и т.д.

Рисую так
Код:
void WP(uint16_t Xpos, uint16_t Ypos)
{
  uint8_t parameter1[4], counter1, r, g, b, r8,g8,b8, i1;
  int ih, i;
  uint32_t RGBCode;
          parameter1[0] = 0x00;     
          parameter1[1] = 0x00+Xpos;
          parameter1[2] = 0x00;
          parameter1[3] = 0xEF+Xpos;
          WriteReg(0x2A, parameter1, 4);
          parameter1[2] = 0x00;
          parameter1[0] = 0x00;
       
         
    i=57600; ih=0;
   for(counter1 = 0; counter1 <240; counter1++)   
   {             
          parameter1[1] = 0x00 + counter1+Ypos;// +y
          parameter1[3] = 0xEF + counter1+Ypos;// +y
          WriteReg(0x2B, parameter1, 4);
         
          WriteReg(0x2C, (uint8_t*)NULL, 0);   
         
          for(i1 = 0; i1 <240; i1++)
          {
            if (i>0)ih = i*3;else ih=3;//i*3;
            r8 =  picture1[ih-1]; g8 = picture1[ih-2]; b8 = picture1[ih];     
            r = ((r8 & 0xF8) >> 3);
            g = ((g8 & 0xFC) >> 2);
            b = ((b8 & 0xF8) >> 3);
            RGBCode = ((uint32_t)(r) << 11) + ((uint32_t)(g) << 5) + ((uint32_t)(b) << 0);
            i--;
            FMC_BANK1->RAM = RGBCode;
             
          }
         
   }     
   poligon (0, 0, 45, 15, 0xFFFF);//demo of
}


А в 565 файл сразу дает адрес на цвет

const unsigned short picture[] =
{
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF и т.д.

и рисую так же только без умножения адреса и конвертации.
Код:
void WP(uint16_t Xpos, uint16_t Ypos)
{
  uint8_t parameter1[4], counter1, r, g, b, r8,g8,b8, i1;
  int ih, i;
  uint32_t RGBCode;
          parameter1[0] = 0x00;     
          parameter1[1] = 0x00+Xpos;
          parameter1[2] = 0x00;
          parameter1[3] = 0xEF+Xpos;
          WriteReg(0x2A, parameter1, 4);
          parameter1[2] = 0x00;
          parameter1[0] = 0x00;
       
         
    i=57600; ih=0;
   for(counter1 = 0; counter1 <240; counter1++)   
   {             
          parameter1[1] = 0x00 + counter1+Ypos;// +y
          parameter1[3] = 0xEF + counter1+Ypos;// +y
          WriteReg(0x2B, parameter1, 4);
         
          WriteReg(0x2C, (uint8_t*)NULL, 0);   
         
          for(i1 = 0; i1 <240; i1++)
          {

            i--;
            FMC_BANK1->RAM = picture[i];
             
          }
         
   }     
   poligon (0, 0, 45, 15, 0xFFFF);//demo of
}


Полигон в конце закрывает надпись "демо" заботливо подставленную программой

Добавлено after 3 minutes 18 seconds:
У меня джостик позволяет инкрименировать/дикриминировать переменную и выводить ее на экран, чтобы можно было что то подрегулировать в процессе. Вот до анимации оно быстро работало, а теперь инкриминант занимает пару секунд

А вот сама анимашка



Последний раз редактировалось TEPEM Пн дек 16, 2019 15:52:39, всего редактировалось 1 раз.

Re: Таймер не работает

Пн дек 16, 2019 15:42:23

Пока еще много лишнего, функция отрисовки должна выглядеть так:
Код:
void drawBitmap(const uint16_t* arr, uint32_t x, uint32_t y, uint32_t width, uint32_t height)
{
    setWindow(x, y, width, height);

    for (uint32_t i = 0; i < width * height; i++)
        FMC_BANK1->RAM = *arr++;
}

Если все правильно настроено, то не нужно в конце каждой строки задавать координаты для следующей.

ps. Скинь гифку, попробую с ней поиграться...

Re: Таймер не работает

Пн дек 16, 2019 15:48:26

https://yadi.sk/i/X5MkhQGYO_BtuA гиф и жпег режут качество
https://yadi.sk/i/OxLZ0Jrl9u9p6g размер 240х240 как у меня, что характерно в виде файла С она весит как 600х600 бмп
Там такое дело, чтобы вывести точку, надо сначала установить курсор а это 2 WriteReg как минимум. потом еще один, сказать что это будет точка, а только потом цвет и все.

С Линиями проще но только по оси х, там один курсор + wreg выбора линии и потом до конца строки только цвет кидаешь.
Последний раз редактировалось TEPEM Пн дек 16, 2019 15:56:23, всего редактировалось 1 раз.

Re: Таймер не работает

Пн дек 16, 2019 15:57:13

https://yadi.sk/i/X5MkhQGYO_BtuA гиф и жпег режут качество

Только это не анимация, а статичная картинка 600x600. По крайней мере понятно откуда взялся 1 МБ :)

Добавлено after 4 minutes 31 second:
Там такое дело, чтобы вывести точку, надо сначала установить курсор а это 2 WriteReg как минимум. потом еще один, сказать что это будет точка, а только потом цвет и все.

Да, так придется делать когда нужно нарисовать одиночную точку, но насколько часто в этом есть необходимость? Очень редко, обычно вся работа идет с прямоугольными областями.

С Линиями проще но только по оси х, там один курсор + wreg выбора линии и потом до конца строки только цвет кидаешь.

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

Re: Таймер не работает

Пн дек 16, 2019 15:57:18

Не, анимация у меня уже работает на камне, метр взялся не от туда, совпадение
А где про команды почитать? Я бездумно передаю, отталкиваясь от точки и линии, их подглядел в примере

Re: Таймер не работает

Пн дек 16, 2019 16:07:48

А где про команды почитать?
Даташит на индикатор, не?

Попробуй вот этот массив на весь экран просто как 240x240 RGB565 без преобразований 16-битными словами вывести. Не должно быть разницы с оригиналом.
Вложения
lis.zip
(31.66 KiB) Скачиваний: 217
Последний раз редактировалось VladislavS Пн дек 16, 2019 16:10:28, всего редактировалось 1 раз.

Re: Таймер не работает

Пн дек 16, 2019 16:08:42

Отсутствие сна сказывается, пардон(

Re: Таймер не работает

Пн дек 16, 2019 16:09:35

А где про команды почитать? Я бездумно передаю, отталкиваясь от точки и линии, их подглядел в примере

Какие команды? У тебя все необходимое уже есть, единственное я не уверен, что при текущих настройках в конце строки автоматически выполнится переход на строку ниже, а не выше. А в остальном все элементарно, задал окно и заполнил данными, если окно высотой или шириной 1 пиксель, то получится линия, хотя формально это тот же прямоугольник...

Re: Таймер не работает

Пн дек 16, 2019 16:30:46

Между нами девочками, вот эти две строки делают одно и то же (r и r8 определены как uint8_t )
Код:
r = ((r8 & 0xF8) >> 3);
r = r8 >> 3;

Re: Таймер не работает

Пн дек 16, 2019 16:38:35

Попробуй вот этот массив на весь экран просто как 240x240 RGB565 без преобразований 16-битными словами вывести. Не должно быть разницы с оригиналом.


Да! Но есть интрига! Какого??? Ведь это тоже самое что и я загружал как минимум 2 раза

Между нами девочками, вот эти две строки делают одно и то же (r и r8 определены как uint8_t )
Код:
r = ((r8 & 0xF8) >> 3);
r = r8 >> 3;


А тут еще оператор "и", он что то выбивает наверное?

Re: Таймер не работает

Пн дек 16, 2019 16:52:13

Выбивала моя бабушка узоры на белье. Те биты, которые обнуляются наложением маски, ты тут же сдвигая выкидываешь. Зачем, спрашивается, их было обнулять?

Re: Таймер не работает

Пн дек 16, 2019 16:53:24

Чуток резвее заработало. У меня джостик просто в цикле основном опрашивается, я его если на внешние прерывания посажу, по нажатию лагать будет построение картинки да?

Этот код я честно позаимствовал из примера, там есть проблемы с конвертацией РГБ, поэтому не стал свое городить. Вот с маской интересная штука, возьму на вооружение

Т.е. там написано, что все биты не совпадающие с битами маски обнуляться правильно?
Ответить