Это видео недоступно.
Сожалеем об этом.

STM32 AVI video player with OSD menu. jpeg decoder optimization in assembler

Поделиться
HTML-код
  • Опубликовано: 12 апр 2023
  • STM32 AVI video player with OSD menu. Optimization of jpeg decoder in assembler.
    The video shows animated films (under a Creative Commons license):
    "Elephants Dream": © Сopyright 2006, Blender Foundation / www.orange.blender.org
    "Big Buck Bunny": © Copyright 2008, Blender Foundation / www.bigbuckbunny.org
    "Sintel": © Copyright 2010, Blender Foundation / www.sintel.org
    The Blender Foundation is a non-profit organization dedicated to the development of an open source 3D modeling software package called Blender (www.blender.org).
    AVI format requirements:
    - mjpeg (motion jpeg) video stream, i.e. video frames must be encoded with the jpeg codec;
    - mp3 audio stream i.e. sound must be encoded with mp3 codec.
    To convert a video file to a format supported by the player, it is recommended to use the ffmpeg library. For example, the following command line converts an mp4 video to a player-supported avi format with a frame size of 320x240, a frame rate of 25 frames per second, and an encoding quality of 15:
    ffmpeg -i video.mp4 -c:a mp3 -c:v mjpeg -s 320x240 -r 25 -q 15 video.avi
    Where:
    -i video.mp4 - an indication of the source file that you want to convert to the avi format supported by the player;
    video.avi - output file with avi extension, where the conversion result will be saved;
    -c:a mp3 - an indication that the "audio track" (audio stream) in the output file must be in the mp3 codec format;
    -c:v mjpeg - an indication that the "video track" (video stream) in the output file must be in the mjpeg codec format (a set of pictures encoded with the jpeg codec, the so-called motion jpeg);
    -s 320x240 - indication of the video frame size in the output avi file (width, height);
    -r 25 - indication of the frequency of video frames in the output avi file (frames per second);
    -q 15 indicates the encoding quality of the avi file (from 1 (best) to 31 (worst)). The sound quality can be set with the -b switch, which means bitrate (stream speed in bits / s). For example, a key such as -b:a 128k will set the audio stream to 128 kbps, which is considered the entry level for the mp3 codec when encoding music data (32-96 kbps is enough for speech encoding, and from 96 kbps or more - low quality music). A stream of 256 kbps is enough for high quality music when encoding mp3. 320 kbps is the limit for the mp3 codec.
    When converting video, keep the aspect ratio of the source video frame in mind. For example, if the source video had a frame aspect ratio of 16:9, then when using a display with a width of 320 pixels, the height of the output frame should be 180 pixels. Those. the parameter s for the given example should be set to 320x180. If the aspect ratio of the source frame is 4:3, then when using a display with a width of 320 pixels, the height of the output frame should be 240 pixels. Those. the s parameter for this example should be set to 320x240. The q parameter determines the encoding quality and can take values from 1 to 31. As q increases, the quality decreases, and as q decreases, it increases. This setting naturally affects the performance of the software jpeg decoder.
    List of components:
    - development board stm32f401ccu6 alii.pub/6fdumy
    - 3.2" touchscreen display ILI9341 spi alii.pub/6fdvcf
    - pcm5102a audio DAC alii.pub/6fdurf
    - micro SD card module alii.pub/6o72eb
    - breadboard alii.pub/6fduuq
    - wires for breadboard alii.pub/6fduwo
    - encoder with button alii.pub/6o72l4
    - ceramic capacitors 0.01-0.1 uF - 2 pcs.
    Project link (github):
    github.com/vad...
    Contacts:
    / @vadrov
    dzen.ru/vadrov
    t.me/vadrov_ch...
    stm32, jpeg stm32, avi stm32, mp3 stm32, video stm32, audio stm32, video stm32, audio stm32
    #stm32 #jpeg #video

Комментарии • 124

  • @VadRov
    @VadRov  Год назад +3

    👉 *В видео демонстрируются анимационные фильмы (на правах лицензии Creative Commons):*
    "Elephants Dream": (C) Сopyright 2006, Blender Foundation / www.orange.blender.org
    "Big Buck Bunny": (C) Сopyright 2008, Blender Foundation / www.bigbuckbunny.org
    "Sintel": (C) Copyright 2010, Blender Foundation / www.sintel.org
    Blender Foundation - некоммерческая организация, занимающаяся разработкой программного пакета трёхмерного моделирования с открытым исходным кодом под названием Blender (www.blender.org).
    👉 *Ссылка на проект (гитхаб):* github.com/vadrov/stm32f4_fast_optimized_avi_player_osd
    👉 *Перечень компонентов:*
    - плата разработки stm32f401ccu6 alii.pub/6fdumy
    - дисплей на контроллерах ILI9341 или ST7789 с разрешением 320x240 или 240x240 с SPI интерфейсом (конфигурация дисплейного модуля определяется в файле display_config.h в папке Display) alii.pub/6fdvcf
    - аудио-ЦАП pcm5102a alii.pub/6fdurf
    - модуль микро SD-карты alii.pub/6o72eb
    - макетная плата alii.pub/6fduuq
    - провода для макетной платы alii.pub/6fduwo
    - энкодер с кнопкой alii.pub/6o72l4
    - конденсаторы керамические 0.01-0.1 мкФ - 2 шт.
    👉 *Контакты:*
    youtube.com/@VadRov
    dzen.ru/vadrov
    t.me/vadrov_channel

  • @kokotmkokot4926
    @kokotmkokot4926 Год назад +3

    Вот до чего безответная любовь к мультикам может довести человека ) В неравной борьбе с компилятором победил Человек. Великий труд!

  • @victorn1199
    @victorn1199 Год назад +4

    Асм жив! И будет жив всегда. Лайк и комментарий в поддержку канала.

  • @marinchiriac1341
    @marinchiriac1341 Год назад +1

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

  • @ivanivanov6559
    @ivanivanov6559 Год назад +3

    Отличный проект, спасибо что делитесь с нами проектами.

  • @openFrimeTv
    @openFrimeTv Год назад +1

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

    • @VadRov
      @VadRov  Год назад

      Приветствую. 🙂 Желание и труд всё перетрут. 🙂

  • @DIY-hv2hv
    @DIY-hv2hv Год назад +1

    Спасибо, что делитесь наработками. Пора делать уроки по ассемблеру

    • @VadRov
      @VadRov  Год назад +4

      Мне делать уроки "компетенция" не позволяет, как написал в одном из комментариев некий блогер-"любитель котов", скрывающийся под "левыми" аккаунтами. Видео автора с "никакой компетенцией" нельзя называть уроками, так как это вредит зрителям и ничему не может их научить. Хотя, справедливости ради, ни одно свое видео уроком не называю и об уроках даже не заикаюсь. 🙂А видео по ассемблеру, конечно, будет.

    • @MSaidu-sj6vx
      @MSaidu-sj6vx Год назад +1

      @@VadRov бьюсь об заклад что у Достоевского не было никакого удостоверения и, тем не менее, он писатель! Возьмите любые две программы и вы поймете кто есть кто!😊😊😊 Проект 👍👍👍

  • @sergatmel8242
    @sergatmel8242 Год назад +1

    С ассемблерными вставками и с макросом формирования смещения круто получилось 👍

  • @marsikovsergey
    @marsikovsergey Год назад +1

    Отличная работа! Снимаю шляпу. Для обработки энкодера можно иcпользовать аппаратные возможности таймеров в режиме ENCODER MODE. Там и защита от дребезга, и счетчик угла, и прерывания реже.

    • @VadRov
      @VadRov  Год назад

      Можно, но тут ещё кнопка и комбинация событий. Хотя, всё реализуемо.

  • @allallall2321
    @allallall2321 Год назад +3

    Ого го Топчик!

  • @alexshu1609
    @alexshu1609 Год назад +5

    Предлогаю Че́ллендж - повтори устройство и выложи видос . Порадуй автора за его труды!!!!

    • @alexshu1609
      @alexshu1609 Год назад

      Первый пошел
      ruclips.net/video/yRFJdpKtyOI/видео.html

    • @VadRov
      @VadRov  Год назад

      Только там без звука и на частоте ядра 84 МГц.

    • @alexshu1609
      @alexshu1609 Год назад

      @@VadRov ruclips.net/video/JgTPknFu5o0/видео.html

    • @alexshu1609
      @alexshu1609 3 месяца назад

      ruclips.net/video/1u-iSjt7Wqs/видео.html

  • @sonick_black6397
    @sonick_black6397 Год назад

    Почему я вас встретил именно сегодня? Спасибо вам!!!

  • @igoriskarolaitis3392
    @igoriskarolaitis3392 Год назад +2

    Респект и уважуха за труды(особливо за коменты). Интересно, а сколько времени потратил на написание кода и отладку?

    • @VadRov
      @VadRov  Год назад +1

      Значительная часть кода была написана и отлажена ранее. Здесь же всё просто собралось по сути в кучу. Пару вечеров заняла оптимизация дисплейного драйвера. На оптимизацию и отладку jpeg декодера ушло три-четыре вечера. Если всё делать с нуля, то неделька точно выйдет.

  • @sergatmel8242
    @sergatmel8242 Год назад

    Очень интересный проект !
    Спасибо !

  • @gpowertesla1714
    @gpowertesla1714 2 месяца назад

    Это невероятно круто

  • @KoTNegash
    @KoTNegash 9 месяцев назад

    Блин, совсем случайно наткнулся на это видео и это прекрасно! спасибо!

  • @user-se2jf7wo7j
    @user-se2jf7wo7j 9 месяцев назад

    Приветствую автора и всех собравшихся!
    Восхищен проектом и трудом автора!
    То что я только собирался сделать, после запуска мп3, вы уже реализовали)
    Я запустил ваш проект на ф411. Но не смог перенести его на кейл. Возникла трудность с тем что звук идет в двараза быстрее.
    Предлагаю автору забавную идею: реализовать двух ядерную систему на двух мк паралельно. Потому что в данный момен производительность недостаточная...
    Творческих успехов! Автор - мега крут! Старая школа😊

    • @VadRov
      @VadRov  9 месяцев назад

      Приветствую. Если звук передается с более высокой частотой, то проблема кроется в настройке интерфейса i2s (скорость передачи, см. различия в организации системы тактирования 401 и 411).
      Смысла реализовывать "многоядерность" для решения задачи воспроизведения видео нет. Это так, проект - забава ради разминки мозга)) Недостающую производительность можно почерпнуть на другом, более мощном м/к, что будет дешевле и по бюджету, и, что самое главное, по временным затратам на программную реализацию. Тот же самый проект, например, я реализовал на "тайвано-китайском" м/к Artery at32f403a (плата отладки в районе 400 р. с доставкой), работающим на частоте 240 МГц. Там нет недостатка в производительности (переносил в целях освоения другого м/к). Если совсем станет трудно, то есть "монстры" подороже, в т.ч., у самой компании ST. Как вариант, H7 серия. Но, как уже кому-то писал в комментарии, если бы стояла именно задача создания недорогого и функционального медиаплеера, то я бы, например, использовал какой-нибудь из доступных и дешевых allwinner-ов. А проекты, подобные этому, просто хорошая зарядка для "любителя покодить".

    • @user-se2jf7wo7j
      @user-se2jf7wo7j 9 месяцев назад

      @@VadRov спасибо за ответ) если есть возможность, то пересоберите этот проект под кейл) с наилучшими пожеланиями!

  • @marinchiriac1341
    @marinchiriac1341 Год назад

    Супер проект..

  • @user-cb8vs1rp2g
    @user-cb8vs1rp2g 9 месяцев назад

    Круто канеш, жаль у меня меня руки из жопы растут. 😁Вроде собрать не шибко сложно.
    А аудиокниги на нем можно слушать? И сколько он потребляет?

    • @VadRov
      @VadRov  9 месяцев назад +1

      В ближайшем видео по многочисленным просьбам зрителей (а также исходя из возникающих вопросов) планируется расширение функционала, т.е. наряду с видеоплеером будет встроен и аудиоплеер (mp3). Что касается потребления, то оно невелико, особенно, если выключить дисплей (перевести его в режим "сна"). Для микроконтроллера - это около 140 μA/MHz. Если только воспроизводить звук (mp3), то частоты ядра в 40 МГц должно хватить для снижения потребления (порядка 8 мА на микроконтроллер с требуемой периферией). Но для нестационарного использования (вне дома) придется добавить затраты энергии на усилитель для наушников либо внешних динамиков (например, усилитель на 3 Вт). Кроме того, следует принять во внимание потребление micro sd карты. Оно может быть и 10, и 50, и даже 100 мА в зависимости от марки/изготовителя карты, ее объема, применяемых технологий и т.п. ЦАП PCM5102 потребляет около 30 мА (в зависимости от частоты Fs).

    • @user-cb8vs1rp2g
      @user-cb8vs1rp2g 9 месяцев назад

      @@VadRov Ого. Спасибо за быстрый ответ. Внял.
      По факту для аудиокниг портативных плееров, вменяемых по цене и с файл-менеджером нет. Была Дигма, но и та гуманным ценником из-за популярности не отличалась. Короче ничего проще и дешевле мобильника нет🤷‍♂, а это и не мобильно по размерам и не автономно по вемени.
      АудиоКнигоФилам тачскрин не нужен. Нужны аудиокниги в разных папках и автономность. Про закладки никто даже не заикается😁
      В общем было бы круто.👍
      Про micro sd карты не знал, 10 и 100 огромная разница.

    • @user-se2jf7wo7j
      @user-se2jf7wo7j 8 месяцев назад

      Расширение функционала - это очень хорошая новость. Есть просьба к автору: добавить на ряду с мп3 ещё и декодер flac.❤❤❤

  • @user-un1ev5lp4e
    @user-un1ev5lp4e Год назад

    Молодец, сколько памяти микроконтроллера заняла ?

    • @VadRov
      @VadRov  Год назад +1

      100 кБ вместе с текстурами и шрифтом.

  • @openFrimeTv
    @openFrimeTv 10 месяцев назад

    куда вы пропали коллега? ждем новых роликов

    • @VadRov
      @VadRov  10 месяцев назад

      Времени катастрофически не хватает. Все свободное время уходит на новую стройку. Верчусь как белка в колесе последние несколько месяцев.

    • @openFrimeTv
      @openFrimeTv 10 месяцев назад

      @@VadRov понял. тогда удачи, а как будет время ждем контент

  • @MSaidu-sj6vx
    @MSaidu-sj6vx Год назад

    отлично!!! теперь вопрос: под stm746Disco можно доработать?

    • @VadRov
      @VadRov  Год назад

      Весь код, относящийся к "ядру" плеера, в т.ч., оптимизация на ассемблере на ядре Cortex-m7, конечно, работать будет. А вот для поддержки периферии придется корректировать код: дисплей на stm746Disco подключен по fsmc, sd-карта по sdio, ЦАП, наверное, тоже свой есть. Если это вопрос общий, т.е.: "Можно сделать или нет?", то ответ: "Можно". Если вопрос ко мне: "Могу сделать я или нет?", то ответ: "Смог бы, но у меня нет такой именно платы разработки".

  • @user-gb6ew9qq8f
    @user-gb6ew9qq8f Год назад

    А почему esp32 неиспользуете там частота 240мгц и 2 ядра ещё и флешка в топовой комплектаций 16 мегов + доп psram + ацп 8 или 16 бит незнаю быстрее будет это про esp wrover 32. Какраз для плеера сгодится

    • @user-gb6ew9qq8f
      @user-gb6ew9qq8f Год назад

      Наверное сможет вывести тот же мультик на дисплей 640на480

    • @VadRov
      @VadRov  Год назад +2

      Не использую, потому что тут дело не в плеере, а просто в возможностях использования ресурсов недорогого МК от stm. То есть плеер в данном случае - это способ демонстрация того, как можно писать программы в условиях ограниченности ресурсов. Если бы передо мной стояла задача именно создания мультимедиа плеера, то я бы вообще использовал какой-нибудь Allwinner, у которого все для этого есть: интерфейсы, ускорители, кодеки и т.п. esp32 для подобных задач будет не шибко быстрее примененного микроконтроллера от stm, несмотря на наличие дополнительных "плюшек". То есть результат был бы фактически аналогичным.

  • @kokotmkokot4926
    @kokotmkokot4926 6 месяцев назад

    Доброго здравия! Решил на досуге посмотреть Вашу реализацию энкодера на прерываниях. Никак не соображу 167 строку ...keys &= ENCODER_C; /* Получаем состояние выхода С, выделив его из совокупности выходов. */ Так как переменная keys изначально равна 0, то после логического И мы также имеем 0. Не поясните? Заранее спасибо.

    • @VadRov
      @VadRov  6 месяцев назад +1

      Приветствую! А в самом начале видите?
      /* Опрашиваем выходы энкодера (они же входы МК) и формируем в переменной keys значение,
      соответствующее текущему состоянию выходов энкодера. */
      if (!(enc->a_port->IDR & enc->a_pin)) keys = ENCODER_A; /* Активен выход A (прижат к "земле"): установим бит ENCODER_A. */
      if (!(enc->b_port->IDR & enc->b_pin)) keys |= ENCODER_B; /* Активен выход B (прижат к "земле"): установим бит ENCODER_B. */
      if (!(enc->c_port->IDR & enc->c_pin)) keys |= ENCODER_C; /* Активен выход C (прижат к "земле"): установим бит ENCODER_C. */
      Уже не 0. 🙂

    • @kokotmkokot4926
      @kokotmkokot4926 6 месяцев назад

      @@VadRov Да, конечно, Вы правы. У меня при прохождении этих строк в отладке значение keys не изменяется, что странно, тк прерывания срабатывают. Буду разбираться, спасибо.

    • @kokotmkokot4926
      @kokotmkokot4926 6 месяцев назад

      @@VadRov Разобрался) выражение (enc->c_port->IDR & enc->c_pin) работает в F4 серии. В серии F1 чтения пина не происходит, соответственно переменная keys всегда равна 0.

    • @VadRov
      @VadRov  6 месяцев назад

      @@kokotmkokot4926 , наверное, из-за этого "These bits are read only and can be accessed in Word mode only. They contain the input value of the corresponding I/O port." Т.е. доступ возможен только при чтении полного слова. Т.е. в структуре пинам объявить uint32_t вместо uint16_t

    • @VadRov
      @VadRov  6 месяцев назад

      Я забыл про это. Это не критично для F4 серии (хотя есть уведомление), в G0 серии про это, например, вообще не указано. А для F1 критично. Обновил на гитхабе.

  • @AslanAslan-ei6ud
    @AslanAslan-ei6ud 2 месяца назад

    Have you made code video player with fsmc?

    • @VadRov
      @VadRov  2 месяца назад +1

      In this project the screen is connected via SPI. With FSMC you can do it by analogy. The only difference will be in the display driver. For example, on stm32f407vet6 this is easy to do. I developed the CMSIS driver for FSMC. I made some demos. Namely, I did not translate this project onto the screen from FSMC. Maybe someday, in my spare time, I’ll do it.

    • @AslanAslan-ei6ud
      @AslanAslan-ei6ud 2 месяца назад

      @@VadRov Thank you

  • @staszzz5067
    @staszzz5067 11 месяцев назад

    @VadRov, а как вывести jpeg картинку с sd карты?
    Ваши картинки получилось вывести, которые во флеш мк

    • @VadRov
      @VadRov  11 месяцев назад

      Для этого следует использовать функцию LCD_Load_JPG_chan(lcd, x, y, w, h, image_stream, location),
      где параметр location должен быть равен PICTURE_IN_FILE, а image_stream является указателем на данные типа iFile_jpg (см. jpeg_chan.h в папке JPEG):
      typedef struct {
      void *file; //указатель на обработчик файла
      volatile uint32_t size; //размер файла
      } iFile_jpg;
      Т.е. Вы должны объявить обработчик файла, открыть файл и создать переменную типа iFile_jpg. Например:
      FIL file;
      iFile_jpg jpeg_file;
      f_open(&file, "example.jpg", FA_READ);
      jpeg_file.file = &file;
      jpeg_file.size = f_size(&file);
      LCD_Load_JPG_chan(lcd, 0,0, 320, 240, &jpeg_file, PICTURE_IN_FILE);
      Разумеется файл не должен быть прогрессивным jpeg. Кроме того, может не хватить памяти. В этом случае увеличиваем параметр JPEG_CHAN_WORK_BUFFER_SIZE (см. jpeg_chan.h в папке JPEG).

    • @staszzz5067
      @staszzz5067 11 месяцев назад

      @@VadRov, спасибо, получилось.
      сделал так:
      f_lseek(&MyFile,ind);
      f_read(&MyFile, buf,512,&byteread);
      memcpy(jpg_buf+ind,buf,512) ;
      ind+=512
      после всего копирования
      const Picture_jpg image = {sizeof(jpg_buf), jpg_buf};
      (void)LCD_Load_JPG_chan(lcd, (Picture_jpg*) &image);
      Но если так делать, то буфер jpg_buf[15000] надо делать большим по умолчанию, а когда пробовал кидать частями, выводился маленький фрагмент и потом ошибка
      Нужно ли обязательно копировать весь файл целиком перед отправкой в функцию LCD_Load_JPG_chan?
      Пользовался проэктом файлменеджера, т.к. там код написан профессионально, но легче чем в этом проэкте, этот проэкт пока для меня недосягаем.

    • @VadRov
      @VadRov  11 месяцев назад

      @@staszzz5067 , насколько понял, Вы пытаетесь "засунуть " файл jpeg картинки в буфер, расположенный в оперативной памяти, а потом выводить из него, т.е. сделать по аналогии с тем, как в данном проекте осуществляется вывод jpeg файлов из флэш. Выше я схему дал, как выводить картинку непосредственно с sd карты, без необходимости копирования файла в буфер целиком. Функция вывода картинки написана так, что ей можно передавать как файловый поток из флэш (PICTURE_IN_MEMORY), так и файловый поток c sd (PICTURE_IN_FILE). Вариант определяется параметром location. И уже задача подгрузки картинки частями во временный буфер возлагается на саму функцию вывода. Т.е. это не Ваша головная боль. Если будет ошибка, то ее код вернет функция.
      Upd.: В общем, я напишу доп. функцию просмотра jpeg картинок и обновлю проект на гитхабе.

    • @staszzz5067
      @staszzz5067 11 месяцев назад

      @@VadRov , большое спасибо!

  • @VasyaPupkinus
    @VasyaPupkinus 10 месяцев назад

    Здравствуйте. Проект шикарный !!!! но Чёт оно у меня не работает )))) Подцепил ST7789 , библиотеку подключил, инициализацию поменял на 7789 , а на экране темнота. Видать что то где то ещё нужно править ? Другие ваши проекты с этим экраном работают. CubeIde последней версии, может с ней что не так. Подскажите куда копать ?
    Давно кстати ваших видосов поучительных не выходило, не охота время на нас, дурачков , тратить ? ))

    • @VadRov
      @VadRov  10 месяцев назад

      Приветствую. На видосы времени не хватает, потому что я опять влез в стройку, на которую, собственно, трачу всё свободное время. Дисплей с каким разрешением?

    • @VasyaPupkinus
      @VasyaPupkinus 10 месяцев назад

      @@VadRov 240x240 стандартный, как у вас

    • @VadRov
      @VadRov  10 месяцев назад

      @@VasyaPupkinus , изначально проект под 320 на 240. Но если дисплей черный, значит, работает неправильно. Для начала в файле display-config.h отредактируйте строку #define LCD_USE_ASSEMBLER 0

    • @VasyaPupkinus
      @VasyaPupkinus 10 месяцев назад

      @@VadRov не помогло

    • @VadRov
      @VadRov  10 месяцев назад

      @@VasyaPupkinus ,конечно, не поможет. Вам бы отладку дисплея для начала провести, отключив все остальное. Проверить схему подключения дисплея, наличие контактов, почитать в github.com/vadrov/stm32-display-spi-dma пункт "Решение проблем с подключением дисплея".

  • @marsikovsergey
    @marsikovsergey Год назад

    Попытался повторить. Прошил готовый hex-файл из проекта на гитхабе. Дисплей заработал, выдал заставку и сообщение "Error FileManager!" на розовом фоне. При попытке повернуть энкодер это сообщние начинает быстро мерцать. Схему проверил. Видеофайл на карточку залил. Нифига! Не работает! Кто-нибудь, кроме автора, пытался запустить этот проект?

    • @VadRov
      @VadRov  Год назад +1

      Как минимум о двух повторах данного проекта есть видео на RUclips.
      Похоже, что в Вашем случае есть ошибка чтения sd карты. Проверьте схему её подключения, а затем попробуйте снизить скорость spi, к которому подключена карта.

    • @xxxx9320
      @xxxx9320 Год назад

      Можно попробовать подать питание на microsd до включения stm, либо в коде перед монтированием диска добавить задержку. И после фейла карточку нужно резетнуть (думаю, она могла "подвиснуть"). ну это так, мысли в слух :)

    • @VadRov
      @VadRov  Год назад +1

      Сергей, попробуйте обновить проект с гитхаба. Я выловил месяца полтора назад (и забыл об этом) один баг в драйвере sd при переносе проекта на микроконтроллеры семейства artery (в коде драйвера не опрашивался флаг busy spi).

    • @marsikovsergey
      @marsikovsergey Год назад

      @@VadRov Обновил hex-файл с гитхаба. Ничего не изменилось. Кстати, заметил, что у меня на дисплее цвета заставки инверсные - синие элементы на розовом фоне. Дисплей (ILI9341) в других проектах ведет себя адекватно (например, в ёRadio). Похоже, что инициализация не полная. Карточку и вставлял, и вынимал - реакции нет. Питание карточки от своего отдельного стаба 3,3V. Жаль, весь проект копать времени нет, я к IAR привык :).

    • @VadRov
      @VadRov  Год назад +1

      @@marsikovsergey , а плата точно на контроллере stm32f401ccu6? Если бы инициализация была неполная, то была бы полная повторяемость багов, как у Вас, у всех, (в т.ч., и у меня) кто попытался повторить проект на тех же комплектующих, что в описании к видео. Если изображение инверсное, то есть сомнения, что дисплей на котроллере ili9341. Больше похоже, что он на контроллере st7789 (для него в коде инициализации отключают инверсию). ёRadio, скорее всего, читает при инициализации строку из rom дисплея, по которой определяет, какой драйвер будет управлять дисплеем.
      Карточка может не заработать, если не поддерживает скорость spi, которая указана в коде проекта. В общем, с hex проблему не решить.

  • @WWolf_13
    @WWolf_13 7 месяцев назад

    Шикарно! Не понятно почему энкодер таймером не обрабатывать, еще б больше разгрузился проц. Но результат впечатляет!

    • @VadRov
      @VadRov  7 месяцев назад

      Так он, по сути, и не загружается от энкодера.. Энкодер с кнопкой на внешних прерываниях. Т.е. он нагружает ядро (и то незначительно) только в тот момент, когда мы вращаем энкодер или нажимаем его кнопку. При этом управление можно настроить более гибко, чем в случае с таймером.

    • @WWolf_13
      @WWolf_13 7 месяцев назад

      @@VadRov более гибко? Да тоже самое вышлоб и отрабатывал одно прерывание от таймера... Ну в целом кто как привык...

    • @VadRov
      @VadRov  7 месяцев назад

      @@WWolf_13 , я сделал, как увидел для этого проекта, а не как привык. Значит, так надо было 🙂
      Ну, и про одно прерывание от таймера Вы, мягко говоря, лукавите. Про кнопку забыли? 🙂На нее тоже прерывание по спаду/нарастанию.

    • @WWolf_13
      @WWolf_13 7 месяцев назад

      @@VadRov не лукавлю... Кнопка за скобкой, её обработка отдельно... А два прерывания на лево/право или одно от таймера с обработкой дребезга по умолчанию...

    • @VadRov
      @VadRov  7 месяцев назад

      @@WWolf_13 , т.е. Вы предлагаете использовать таймер не в режиме encoder mode, как я изначально подумал?

  • @ismailbasic11
    @ismailbasic11 6 месяцев назад

    Can you change the code to fsmc tft?

    • @VadRov
      @VadRov  6 месяцев назад

      Hello. What microcontroller do you want to use?

    • @ismailbasic11
      @ismailbasic11 6 месяцев назад

      Stm32f407

    • @ismailbasic11
      @ismailbasic11 6 месяцев назад

      Stm32f407
      Ili9341 16bit

    • @VadRov
      @VadRov  6 месяцев назад

      @@ismailbasic11 , this board? aliexpress.ru/item/1005001579853052.html

    • @ismailbasic11
      @ismailbasic11 6 месяцев назад

      Yes

  • @esqwaer
    @esqwaer Год назад

    А я тут случайно... И думал что-то пойму))))
    Ващще ничего не понял))) не моё))

    • @VadRov
      @VadRov  Год назад

      Бывает. 🙂