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

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

Пн дек 16, 2019 17:02:23

Чуток резвее заработало.
А если ещё послушаешь что Reflector говорит, то на 100 FPS выйдешь. :))

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

Пн дек 16, 2019 17:12:12

Я тоже так думаю, но не понимаю что он имеет в виду, вернее понимаю но не связанно с кодом. Много элементов я делаю там потому что без них не работает, а не потому что я знаю что это к сожалению.
Вот есть заливка
Код:
void beluidisplei(uint16_t RGBCode)
{
  uint8_t   parameter1[4],counter,counter1 ;
 
          parameter1[0] = 0x00;     
          parameter1[1] = 0x00;//Передаем Х
          parameter1[2] = 0x00;
          parameter1[3] = 0xEF;//Передаем Х
          WriteReg(0x2A, parameter1, 4);
          parameter1[2] = 0x00;
          parameter1[0] = 0x00;
   for(counter1 = 0; counter1 <240; counter1++)   
   {   
          parameter1[1] = 0x00 + counter1;// Передаем У
          parameter1[3] = 0xEF + counter1;// Передаем У
          WriteReg(0x2B, parameter1, 4);
          WriteReg(0x2C, (uint8_t*)NULL, 0);   
         for(counter = 0; counter <240; counter++)
            {FMC_BANK1->RAM = RGBCode;}     
   }
}


Вот начинается все с курсора (в примере SetPixel), зафига мы по два раза передаем х и два раза у, что за пустые строки идут с ними parameter1[2] = 0x00; parameter1[0] = 0x00;, остальное вроде интуитивно понятно. Я пытался подставлять вместо нулей цифры но ни чего хорошего не выхоило, метод тыка не удался

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

Пн дек 16, 2019 17:18:35

Reflector имел в виду, что если один раз задать параметры окна вывода, то потом можно просто вывести подряд все пиксели без всяких параметров. Подробнее только даташит на индикатор расскажет, мне, если честно, лень его читать - там 300+ страниц ненужной мне информации. Как-то так
Код:
for(counter = 0; counter <240*240; counter++) { FMC_BANK1->RAM = RGBCode; }
Последний раз редактировалось VladislavS Пн дек 16, 2019 17:29:14, всего редактировалось 2 раз(а).

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

Пн дек 16, 2019 17:30:52

Вы можете сказать что с моим массивом лисьем не так было?

Добавлено 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);
  }
}
Последний раз редактировалось TEPEM Пн дек 16, 2019 17:33:57, всего редактировалось 1 раз.

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

Пн дек 16, 2019 17:31:27

Это я ещё молчу про то что если данные не надо на лету преобразовывать, а просто переложить из Flash в идикатор, то можно натравить на это дело DMA.

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

Даже в примере это делается только в функции VLIne, HLine уже строиться через DrawPixel а тот так же через курсор и тд. Вот тут засада.
Читать даташит. Эмбеддерский опыт подсказывает, что не может индикатор не иметь режима автоинкремента позиции вывода.

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

Пн дек 16, 2019 17:36:08

Флеша не хватит на полноценный буфер экрана, только на заливку одним цветом(

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

Пн дек 16, 2019 17:38:21

Эти то уж знали как дисплей насиловать
Только не обижайся. На какой странице темы ты выложил свой код и сказал что "всё работает, кому надо можете забирать"?

И про "насиловать" ты прямо в точку ;)

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

Пн дек 16, 2019 17:45:45

У меня была цель чтобы без библиотек на экране хоть что то появилось)

Добавлено after 4 minutes 34 seconds:
Вот учусь читать даташит на контроллеры дисплея, вроде все понятно кроме...
0х2А передаем, это адрес столбца ок, а чуть ниже что за страшилки указаны (я их обвел красным)
Изображение

Это не инкриментация строки ? Tearing effect
line on

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

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

Это не инкриментация строки ?

Вот инкрементация адреса:
СпойлерИзображение

Меняешь направления как хочешь, хотя для рисования линий направление совершенно не важно, даже если в какой-то либе не смогли придумать ничего лучше рисования вертикальных линий по точкам.

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

Вт дек 17, 2019 04:46:18

Это варианты ориентации экрана( я их использую


Подскажите пожалуйста, если я засуну массив с картинкой в внешнюю флешку, по 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

И как можно посмотреть сколько реально весит моя программа?
В настройках линкера включить генерацию .map-файла. В нём в конце сводная информация по размеру прошивки.

но где на него взять памяти не понятно.
У тебя 256к RAM на борту. При желании даже два буфера можно уместить.

Ура! я разгрузил обратно камень! Анимацию из основного цикла в таймер убрал и все
Наивный чукотский юноша :)

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

Вт дек 17, 2019 08:12:37

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

Вот так у меня вывешена память
СпойлерИзображение

Сейчас буду излагать свои мысли по регистрам, поправляйте пожалуйста

Добавлено after 13 minutes 37 seconds:
Первым идет по рефу - QUADSPI_CR
Я так понимаю, там какие то свои часы, которые не надо тактировать и прочие, только задать вот этими регистрами режим работы.
Тут вообще черт ногу сломит, может не все регистры надо использовать, а только какую то маленькую группу?
Вложения
Регистры QSPI.pdf
В корявом переводе, хоть я и поправлял переводчик, но без фанатизма
(1.41 MiB) Скачиваний: 159

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

Вт дек 17, 2019 08:15:16

Я QSPI никогда не пользовался. Может кто другой подскажет.

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

Вт дек 17, 2019 08:35:20

Тогда попробую разграбить пример от куба

Добавлено after 14 minutes 48 seconds:
Буду все по порядку. Вот тут я включаю альтернативные функции, но в QSPI некоторые выводы работают на вывод и на ввод, я в этом случае не указываю направление, только то что там висит QSPI ?

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

Вт дек 17, 2019 08:40:17

В режиме альтернативной функции направлением ноги управляет периферийный модуль, функция которого выбрана.

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

Вт дек 17, 2019 08:47:44

Вот спасибо! А скорость тоже можно не указывать?
И я так включал АФ - GPIOD->AFR[0] = 0xC0CC00CC;
Правильно наверное GPIOD->AFR[0] |= 0xC0CC00CC; или не тут?

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

Вт дек 17, 2019 09:04:45

Скорость указывать нужно. А между операторами "=" и "|=" кроме эстетической вообще никакой разницы нет?

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

Вт дек 17, 2019 09:08:32

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

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

Вт дек 17, 2019 09:18:57

Смотри начальное состояние ног при включении питания. Оно же какое-то из разрешённых.

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

Вт дек 17, 2019 09:49:44

Владислав! Я долго избегал этого, но сейчас, когда мне надо разобраться с регистрами qspi & dma, боюсь это просто необходимо, скажите пожалуйста, где вы берете волшебные слова, которыми подменяете волшебные цифры для наглядности? Вот вы писали например RCC->CR = _VAL2FLD(RCC_CR_HSITRIM,16) | RCC_CR_HSION | RCC_CR_HSEON | RCC_CR_PLLON; //Включаем PLL
Ответить