Таймер не работает
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Да и уж пока Вы не спите, вывожу буквы функцией,(int х, int у, char 'текст', char RGB ), в char же только один символ влезет, значит надо безразмерный массив? А потом из чар доставать буквы их номером из таблицы, верно?
Вот спасибо! Сейчас ознакомлюсь
Добавлено after 5 minutes 48 seconds:
Получается пересылая 24 бита я как бы пересылал 18 бит, а 16 так и были 16, правильно?
Вот спасибо! Сейчас ознакомлюсь
Добавлено after 5 minutes 48 seconds:
Получается пересылая 24 бита я как бы пересылал 18 бит, а 16 так и были 16, правильно?
- Реклама
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Таймер не работает
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756850#p3756850"]в char же только один символ влезет, значит надо безразмерный массив?[/uquote]Есть такая вещь - строка. В K&R наверняка про это пишут...
Добавлено after 2 minutes 3 seconds:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756850#p3756850"]Получается пересылая 24 бита я как бы пересылал 18 бит, а 16 так и были 16, правильно?[/uquote]Я не знаю, проекта не видел. Тот код что ты случайно засветил конвертирует 24 бита в RGB565 и передаёт как 16 бит. Что будет, если на вход этого алгоритма подать 16 бит - ХЗ.
Блин, вечер перестаёт быть томным. Приходится объяснять автору кода что же он там напрограммировал
Добавлено after 2 minutes 3 seconds:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756850#p3756850"]Получается пересылая 24 бита я как бы пересылал 18 бит, а 16 так и были 16, правильно?[/uquote]Я не знаю, проекта не видел. Тот код что ты случайно засветил конвертирует 24 бита в RGB565 и передаёт как 16 бит. Что будет, если на вход этого алгоритма подать 16 бит - ХЗ.
Блин, вечер перестаёт быть томным. Приходится объяснять автору кода что же он там напрограммировал
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Я попытался переделать код, чтобы получить 18 бит, но цвета поплыли(
Re: Таймер не работает
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756850#p3756850"]Получается пересылая 24 бита я как бы пересылал 18 бит, а 16 так и были 16, правильно?[/uquote]
Чтобы переслать 18 бит или дисплей должен быть подключен по 18-ти битному интерфейсу, а это не так, или нужно отправлять для каждого пикселя данные два(или три) раза, например, по 9 бит, естественно еще и переделав инит дисплея, чего у тебя тоже нет. Следовательно у тебя в обоих случаях 16 бит, но в одном случае данные преобразованы неправильно.
Чтобы переслать 18 бит или дисплей должен быть подключен по 18-ти битному интерфейсу, а это не так, или нужно отправлять для каждого пикселя данные два(или три) раза, например, по 9 бит, естественно еще и переделав инит дисплея, чего у тебя тоже нет. Следовательно у тебя в обоих случаях 16 бит, но в одном случае данные преобразованы неправильно.
Последний раз редактировалось Reflector Пн дек 16, 2019 15:10:15, всего редактировалось 1 раз.
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Я понял, спасибо) Очень много ресурсов сжирает простецкая анимация, надо конвертировать файл сразу в 565, пойду займусь этим
- Реклама
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Таймер не работает
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756790#p3756790"]только с прогой могут быть проблемы[/uquote]Всё украдено до нас. http://www.cyberforum.ru/beta-testing/thread2114715.html
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Вот конвертировал прогой в RGB565 сразу и вот в сравнении две фотки.
Добавлено after 4 minutes 33 seconds:
Кстати скорость обработки внешних процессов не изменилась у него. Там сердечки по очереди появляются, причем я не отрисовываю заново всю сцену, сделал функцию, ей передается координаты по которым она рисует мелкий полигон по размерам сердечка и высчитывает какие адреса цветов должны быть в этом месте, пол дня убил на нее)
Спойлер

Кстати скорость обработки внешних процессов не изменилась у него. Там сердечки по очереди появляются, причем я не отрисовываю заново всю сцену, сделал функцию, ей передается координаты по которым она рисует мелкий полигон по размерам сердечка и высчитывает какие адреса цветов должны быть в этом месте, пол дня убил на нее)
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Таймер не работает
Покажи алгоритмы которыми ты выводишь RGB888 и RGB565.
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
888 я вообще не вывожу, я так по быстрому попробовал, но не выходит, выше вон подсказали почему.
У меня массив в 24 бита содержит группы по три адреса
const unsigned short picture1[] =
{
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF и т.д.
Рисую так
А в 565 файл сразу дает адрес на цвет
const unsigned short picture[] =
{
0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF и т.д.
и рисую так же только без умножения адреса и конвертации.
Полигон в конце закрывает надпись "демо" заботливо подставленную программой
Добавлено after 3 minutes 18 seconds:
У меня джостик позволяет инкрименировать/дикриминировать переменную и выводить ее на экран, чтобы можно было что то подрегулировать в процессе. Вот до анимации оно быстро работало, а теперь инкриминант занимает пару секунд
А вот сама анимашка
{
uint8_t parameter1[4], counter1, r, g, b, r8,g8,b8, i1, xr, yr;
xr = xk - xn;
yr = yk - yn;
int ih, i;
uint16_t RGBCode;
parameter1[0] = 0x00;
parameter1[1] = 0x00 + xn;//+Xpos
parameter1[2] = 0x00;
parameter1[3] = 0xEF + xn;//+Xpos
WriteReg(0x2A, parameter1, 4);
parameter1[2] = 0x00;
parameter1[0] = 0x00;
ih=0;
for(counter1 = 0; counter1 <yr; counter1++)
{
parameter1[1] = 0x00 + counter1 + yn;// +y +Ypos
parameter1[3] = 0xEF + counter1 + yn;// +y+Ypos
WriteReg(0x2B, parameter1, 4);
WriteReg(0x2C, (uint8_t*)NULL, 0);
i = ((239 - (yn + counter1)) * 240 )+ (240 - xn);//номер точки i=57600;
for(i1 = 0; i1 < xr; 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 = ((uint16_t)(r) << 11) + ((uint16_t)(g) << 5) + ((uint16_t)(b) << 0);
i--;
FMC_BANK1->RAM = RGBCode;
}
}
}
{
if((GPIOF->IDR & 32768)==32768) // джостик up
{ i++; poligon (167, 219, 239, 239, 0xFFFF); Ciferki(165, 220, i, 0x0000); delay(10); } //xn, yn, xk, yk, rgb
if((GPIOA->IDR & 1)==1) //нажатие джостик
{ WP(0, 0); delay(1500);}
if((GPIOF->IDR & 16384)==16384) //down джостик
{ i--; poligon (167, 219, 239, 239, 0xFFFF); Ciferki(165, 220, i, 0x0000); delay(10); }
kysbWP(172, 118, 198, 150);
delay(2000);
poligon (172, 118, 198, 150, 0xFFFF); //niz serd
kysbWP(180, 153, 211, 189);
delay(3000);
poligon (180, 153, 211, 189, 0xFFFF); //verh serd
kysbWP(220, 153, 239, 175);
delay(2000);
poligon (220, 153, 239, 175, 0xFFFF); //lev serd
// Bykovko(50, 50, 29, 0xF00F);
}
У меня массив в 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
}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:
У меня джостик позволяет инкрименировать/дикриминировать переменную и выводить ее на экран, чтобы можно было что то подрегулировать в процессе. Вот до анимации оно быстро работало, а теперь инкриминант занимает пару секунд
А вот сама анимашка
Спойлер
void kysbWP(uint16_t xn, uint16_t yn, uint16_t xk, uint16_t yk){
uint8_t parameter1[4], counter1, r, g, b, r8,g8,b8, i1, xr, yr;
xr = xk - xn;
yr = yk - yn;
int ih, i;
uint16_t RGBCode;
parameter1[0] = 0x00;
parameter1[1] = 0x00 + xn;//+Xpos
parameter1[2] = 0x00;
parameter1[3] = 0xEF + xn;//+Xpos
WriteReg(0x2A, parameter1, 4);
parameter1[2] = 0x00;
parameter1[0] = 0x00;
ih=0;
for(counter1 = 0; counter1 <yr; counter1++)
{
parameter1[1] = 0x00 + counter1 + yn;// +y +Ypos
parameter1[3] = 0xEF + counter1 + yn;// +y+Ypos
WriteReg(0x2B, parameter1, 4);
WriteReg(0x2C, (uint8_t*)NULL, 0);
i = ((239 - (yn + counter1)) * 240 )+ (240 - xn);//номер точки i=57600;
for(i1 = 0; i1 < xr; 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 = ((uint16_t)(r) << 11) + ((uint16_t)(g) << 5) + ((uint16_t)(b) << 0);
i--;
FMC_BANK1->RAM = RGBCode;
}
}
}
Спойлер
while (1){
if((GPIOF->IDR & 32768)==32768) // джостик up
{ i++; poligon (167, 219, 239, 239, 0xFFFF); Ciferki(165, 220, i, 0x0000); delay(10); } //xn, yn, xk, yk, rgb
if((GPIOA->IDR & 1)==1) //нажатие джостик
{ WP(0, 0); delay(1500);}
if((GPIOF->IDR & 16384)==16384) //down джостик
{ i--; poligon (167, 219, 239, 239, 0xFFFF); Ciferki(165, 220, i, 0x0000); delay(10); }
kysbWP(172, 118, 198, 150);
delay(2000);
poligon (172, 118, 198, 150, 0xFFFF); //niz serd
kysbWP(180, 153, 211, 189);
delay(3000);
poligon (180, 153, 211, 189, 0xFFFF); //verh serd
kysbWP(220, 153, 239, 175);
delay(2000);
poligon (220, 153, 239, 175, 0xFFFF); //lev serd
// Bykovko(50, 50, 29, 0xF00F);
}
Последний раз редактировалось TEPEM Пн дек 16, 2019 15:52:39, всего редактировалось 1 раз.
Re: Таймер не работает
Пока еще много лишнего, функция отрисовки должна выглядеть так:
Если все правильно настроено, то не нужно в конце каждой строки задавать координаты для следующей.
ps. Скинь гифку, попробую с ней поиграться...
Код: Выделить всё
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. Скинь гифку, попробую с ней поиграться...
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
https://yadi.sk/i/X5MkhQGYO_BtuA гиф и жпег режут качество
https://yadi.sk/i/OxLZ0Jrl9u9p6g размер 240х240 как у меня, что характерно в виде файла С она весит как 600х600 бмп
Там такое дело, чтобы вывести точку, надо сначала установить курсор а это 2 WriteReg как минимум. потом еще один, сказать что это будет точка, а только потом цвет и все.
С Линиями проще но только по оси х, там один курсор + wreg выбора линии и потом до конца строки только цвет кидаешь.
https://yadi.sk/i/OxLZ0Jrl9u9p6g размер 240х240 как у меня, что характерно в виде файла С она весит как 600х600 бмп
Там такое дело, чтобы вывести точку, надо сначала установить курсор а это 2 WriteReg как минимум. потом еще один, сказать что это будет точка, а только потом цвет и все.
С Линиями проще но только по оси х, там один курсор + wreg выбора линии и потом до конца строки только цвет кидаешь.
Последний раз редактировалось TEPEM Пн дек 16, 2019 15:56:23, всего редактировалось 1 раз.
Re: Таймер не работает
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756889#p3756889"]https://yadi.sk/i/X5MkhQGYO_BtuA гиф и жпег режут качество[/uquote]
Только это не анимация, а статичная картинка 600x600. По крайней мере понятно откуда взялся 1 МБ
Добавлено after 4 minutes 31 second:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756889#p3756889"]Там такое дело, чтобы вывести точку, надо сначала установить курсор а это 2 WriteReg как минимум. потом еще один, сказать что это будет точка, а только потом цвет и все.[/uquote]
Да, так придется делать когда нужно нарисовать одиночную точку, но насколько часто в этом есть необходимость? Очень редко, обычно вся работа идет с прямоугольными областями.
Только это не анимация, а статичная картинка 600x600. По крайней мере понятно откуда взялся 1 МБ
Добавлено after 4 minutes 31 second:
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756889#p3756889"]Там такое дело, чтобы вывести точку, надо сначала установить курсор а это 2 WriteReg как минимум. потом еще один, сказать что это будет точка, а только потом цвет и все.[/uquote]
Да, так придется делать когда нужно нарисовать одиночную точку, но насколько часто в этом есть необходимость? Очень редко, обычно вся работа идет с прямоугольными областями.
Без разницы какая ось, если задать окно шириной 1 пиксель, то можно нарисовать вертикальную линию точно так же, как и горизонтальную.С Линиями проще но только по оси х, там один курсор + wreg выбора линии и потом до конца строки только цвет кидаешь.
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Не, анимация у меня уже работает на камне, метр взялся не от туда, совпадение
А где про команды почитать? Я бездумно передаю, отталкиваясь от точки и линии, их подглядел в примере
А где про команды почитать? Я бездумно передаю, отталкиваясь от точки и линии, их подглядел в примере
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Таймер не работает
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756893#p3756893"]А где про команды почитать?[/uquote]Даташит на индикатор, не?
Попробуй вот этот массив на весь экран просто как 240x240 RGB565 без преобразований 16-битными словами вывести. Не должно быть разницы с оригиналом.
Попробуй вот этот массив на весь экран просто как 240x240 RGB565 без преобразований 16-битными словами вывести. Не должно быть разницы с оригиналом.
- Вложения
-
- lis.zip
- (31.66 КБ) 283 скачивания
Последний раз редактировалось VladislavS Пн дек 16, 2019 16:10:28, всего редактировалось 1 раз.
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Отсутствие сна сказывается, пардон(
Re: Таймер не работает
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756893#p3756893"]А где про команды почитать? Я бездумно передаю, отталкиваясь от точки и линии, их подглядел в примере[/uquote]
Какие команды? У тебя все необходимое уже есть, единственное я не уверен, что при текущих настройках в конце строки автоматически выполнится переход на строку ниже, а не выше. А в остальном все элементарно, задал окно и заполнил данными, если окно высотой или шириной 1 пиксель, то получится линия, хотя формально это тот же прямоугольник...
Какие команды? У тебя все необходимое уже есть, единственное я не уверен, что при текущих настройках в конце строки автоматически выполнится переход на строку ниже, а не выше. А в остальном все элементарно, задал окно и заполнил данными, если окно высотой или шириной 1 пиксель, то получится линия, хотя формально это тот же прямоугольник...
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Таймер не работает
Между нами девочками, вот эти две строки делают одно и то же (r и r8 определены как uint8_t )
Код: Выделить всё
r = ((r8 & 0xF8) >> 3);
r = r8 >> 3;- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
[uquote="VladislavS",url="/forum/viewtopic.php?p=3756901#p3756901"]Попробуй вот этот массив на весь экран просто как 240x240 RGB565 без преобразований 16-битными словами вывести. Не должно быть разницы с оригиналом.[/uquote]
Да! Но есть интрига! Какого??? Ведь это тоже самое что и я загружал как минимум 2 раза
[uquote="VladislavS",url="/forum/viewtopic.php?p=3756916#p3756916"]Между нами девочками, вот эти две строки делают одно и то же (r и r8 определены как uint8_t )[/uquote]
А тут еще оператор "и", он что то выбивает наверное?
Да! Но есть интрига! Какого??? Ведь это тоже самое что и я загружал как минимум 2 раза
[uquote="VladislavS",url="/forum/viewtopic.php?p=3756916#p3756916"]Между нами девочками, вот эти две строки делают одно и то же (r и r8 определены как uint8_t )
Код: Выделить всё
r = ((r8 & 0xF8) >> 3);
r = r8 >> 3;А тут еще оператор "и", он что то выбивает наверное?
- VladislavS
- Собутыльник Кота
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Re: Таймер не работает
Выбивала моя бабушка узоры на белье. Те биты, которые обнуляются наложением маски, ты тут же сдвигая выкидываешь. Зачем, спрашивается, их было обнулять?
- TEPEM
- Нашел транзистор. Понюхал.
- Сообщения: 153
- Зарегистрирован: Чт дек 05, 2019 16:28:11
- Откуда: Самара
Re: Таймер не работает
Чуток резвее заработало. У меня джостик просто в цикле основном опрашивается, я его если на внешние прерывания посажу, по нажатию лагать будет построение картинки да?
Этот код я честно позаимствовал из примера, там есть проблемы с конвертацией РГБ, поэтому не стал свое городить. Вот с маской интересная штука, возьму на вооружение
Т.е. там написано, что все биты не совпадающие с битами маски обнуляться правильно?
Этот код я честно позаимствовал из примера, там есть проблемы с конвертацией РГБ, поэтому не стал свое городить. Вот с маской интересная штука, возьму на вооружение
Т.е. там написано, что все биты не совпадающие с битами маски обнуляться правильно?


