[uquote="TEPEM",url="/forum/viewtopic.php?p=3756934#p3756934"]Чуток резвее заработало.[/uquote]А если ещё послушаешь что Reflector говорит, то на 100 FPS выйдешь.
Re: Таймер не работает
Добавлено: Пн дек 16, 2019 17:12:12
TEPEM
Я тоже так думаю, но не понимаю что он имеет в виду, вернее понимаю но не связанно с кодом. Много элементов я делаю там потому что без них не работает, а не потому что я знаю что это к сожалению.
Вот есть заливка
Вот начинается все с курсора (в примере SetPixel), зафига мы по два раза передаем х и два раза у, что за пустые строки идут с ними parameter1[2] = 0x00; parameter1[0] = 0x00;, остальное вроде интуитивно понятно. Я пытался подставлять вместо нулей цифры но ни чего хорошего не выхоило, метод тыка не удался
Re: Таймер не работает
Добавлено: Пн дек 16, 2019 17:18:35
VladislavS
Reflector имел в виду, что если один раз задать параметры окна вывода, то потом можно просто вывести подряд все пиксели без всяких параметров. Подробнее только даташит на индикатор расскажет, мне, если честно, лень его читать - там 300+ страниц ненужной мне информации. Как-то так
Вы можете сказать что с моим массивом лисьем не так было?
Добавлено after 6 minutes 12 seconds:
Да как заделать туда массив я представляю, тут в другом беда, вот так передавать точки только цветом, можно только в строку. Даже в примере это делается только в функции VLIne, HLine уже строиться через DrawPixel а тот так же через курсор и тд. Вот тут засада.
void ST7789H2_DrawHLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length)
{
uint16_t counter = 0;
/* Set Cursor */
ST7789H2_SetCursor(Xpos, Ypos);
/* Prepare to write to LCD RAM */
ST7789H2_WriteReg(ST7789H2_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */
/* Sent a complete line */
for(counter = 0; counter < Length; counter++)
{
LCD_IO_WriteData(RGBCode);
}
}
/**
* @brief Draw vertical line.
* @param RGBCode: Specifies the RGB color
* @param Xpos: specifies the X position.
* @param Ypos: specifies the Y position.
* @param Length: specifies the Line length.
* @retval None
*/
void ST7789H2_DrawVLine(uint16_t RGBCode, uint16_t Xpos, uint16_t Ypos, uint16_t Length)
{
uint16_t counter = 0;
/* Set Cursor */
ST7789H2_SetCursor(Xpos, Ypos);
/* Prepare to write to LCD RAM */
ST7789H2_WriteReg(ST7789H2_WRITE_RAM, (uint8_t*)NULL, 0); /* RAM write data command */
/* Fill a complete vertical line */
for(counter = 0; counter < Length; counter++)
{
ST7789H2_WritePixel(Xpos, Ypos + counter, RGBCode);
}
}
Re: Таймер не работает
Добавлено: Пн дек 16, 2019 17:31:27
VladislavS
Это я ещё молчу про то что если данные не надо на лету преобразовывать, а просто переложить из Flash в идикатор, то можно натравить на это дело DMA.
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756965#p3756965"]Вы можете сказать что с моим массивом лисьем не так было?[/uquote]Я его не видел. Как я могу сказать что с ним не так было? Свой я святой водой окропил тупо сделал программой, ссылку на которую чуть выше давал.
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756965#p3756965"]Даже в примере это делается только в функции VLIne, HLine уже строиться через DrawPixel а тот так же через курсор и тд. Вот тут засада.[/uquote]Читать даташит. Эмбеддерский опыт подсказывает, что не может индикатор не иметь режима автоинкремента позиции вывода.
Re: Таймер не работает
Добавлено: Пн дек 16, 2019 17:36:08
TEPEM
Флеша не хватит на полноценный буфер экрана, только на заливку одним цветом(
Re: Таймер не работает
Добавлено: Пн дек 16, 2019 17:38:21
VladislavS
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756965#p3756965"]Эти то уж знали как дисплей насиловать[/uquote]Только не обижайся. На какой странице темы ты выложил свой код и сказал что "всё работает, кому надо можете забирать"?
И про "насиловать" ты прямо в точку
Re: Таймер не работает
Добавлено: Пн дек 16, 2019 17:45:45
TEPEM
У меня была цель чтобы без библиотек на экране хоть что то появилось)
Добавлено after 4 minutes 34 seconds:
Вот учусь читать даташит на контроллеры дисплея, вроде все понятно кроме...
0х2А передаем, это адрес столбца ок, а чуть ниже что за страшилки указаны (я их обвел красным)
Это не инкриментация строки ? Tearing effect
line on
Re: Таймер не работает
Добавлено: Пн дек 16, 2019 18:18:13
Reflector
[uquote="TEPEM",url="/forum/viewtopic.php?p=3756981#p3756981"]Это не инкриментация строки ?[/uquote]
Вот инкрементация адреса:
Спойлер
Меняешь направления как хочешь, хотя для рисования линий направление совершенно не важно, даже если в какой-то либе не смогли придумать ничего лучше рисования вертикальных линий по точкам.
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 04:46:18
TEPEM
Это варианты ориентации экрана( я их использую
Подскажите пожалуйста, если я засуну массив с картинкой в внешнюю флешку, по quardSPI, а потом буду от туда его читать, это заметно затормозит отрисовку? И как можно посмотреть сколько реально весит моя программа?
Добавлено after 43 minutes 26 seconds:
Ура! я разгрузил обратно камень! Анимацию из основного цикла в таймер убрал и все)
Добавлено after 22 minutes 34 seconds:
Очень интересную особенность заметил, вот перерисоввываю я какой то полигон, долго и часто, и в какой то момент бульк, пробегает по нему волна и опять все нормально идет, от чего такое происходит не знаете?
Добавлено after 11 minutes 57 seconds:
Думал полигон под циферками уменьшить чтобы такого не было, убрал его, добавил переменную со старым числом, тоесть вывожу старое значение переменной белым цветом, потом новую черным. Один фиг в какой то момент волна пробегает и не реже чем с полигоном.
Добавлено after 2 minutes 11 seconds:
Думается мне надо буфер использовать чтобы такого не было, но где на него взять памяти не понятно.
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 06:47:12
VladislavS
И как можно посмотреть сколько реально весит моя программа?
В настройках линкера включить генерацию .map-файла. В нём в конце сводная информация по размеру прошивки.
но где на него взять памяти не понятно.
У тебя 256к RAM на борту. При желании даже два буфера можно уместить.
Ура! я разгрузил обратно камень! Анимацию из основного цикла в таймер убрал и все
Наивный чукотский юноша
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 08:12:37
TEPEM
Тогда попробую ночью сделать буфер кадра.
А пока Вы не спите, попробую с Вашего позволения разобраться с КватроСпи, я почитал про него, вроде интересная штука.
Полтора часа переводил регистры, их очень много, положу в виде пдф.
Вот так у меня вывешена память
Спойлер
Сейчас буду излагать свои мысли по регистрам, поправляйте пожалуйста
Добавлено after 13 minutes 37 seconds:
Первым идет по рефу - QUADSPI_CR
Я так понимаю, там какие то свои часы, которые не надо тактировать и прочие, только задать вот этими регистрами режим работы.
Тут вообще черт ногу сломит, может не все регистры надо использовать, а только какую то маленькую группу?
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 08:15:16
VladislavS
Я QSPI никогда не пользовался. Может кто другой подскажет.
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 08:35:20
TEPEM
Тогда попробую разграбить пример от куба
Добавлено after 14 minutes 48 seconds:
Буду все по порядку. Вот тут я включаю альтернативные функции, но в QSPI некоторые выводы работают на вывод и на ввод, я в этом случае не указываю направление, только то что там висит QSPI ?
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 08:40:17
VladislavS
В режиме альтернативной функции направлением ноги управляет периферийный модуль, функция которого выбрана.
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 08:47:44
TEPEM
Вот спасибо! А скорость тоже можно не указывать?
И я так включал АФ - GPIOD->AFR[0] = 0xC0CC00CC;
Правильно наверное GPIOD->AFR[0] |= 0xC0CC00CC; или не тут?
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 09:04:45
VladislavS
Скорость указывать нужно. А между операторами "=" и "|=" кроме эстетической вообще никакой разницы нет?
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 09:08:32
TEPEM
= Вроде перезапишет остальные биты если они до этого были?
У меня на джостике пины не заданны не как, только протактированны, но опрашиваются исправно, я так понимаю как вход их в таком случае не обязательно задавать?
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 09:18:57
VladislavS
Смотри начальное состояние ног при включении питания. Оно же какое-то из разрешённых.
Re: Таймер не работает
Добавлено: Вт дек 17, 2019 09:49:44
TEPEM
Владислав! Я долго избегал этого, но сейчас, когда мне надо разобраться с регистрами qspi & dma, боюсь это просто необходимо, скажите пожалуйста, где вы берете волшебные слова, которыми подменяете волшебные цифры для наглядности? Вот вы писали например RCC->CR = _VAL2FLD(RCC_CR_HSITRIM,16) | RCC_CR_HSION | RCC_CR_HSEON | RCC_CR_PLLON; //Включаем PLL