Jump to content

    

LAS9891

Участник
  • Content Count

    234
  • Joined

  • Last visited

Community Reputation

0 Обычный

About LAS9891

  • Rank
    Местный

Recent Profile Visitors

2508 profile views
  1. Учтем на будущее. Пока изображение устраивает. Важнее теперь это. Самодельный блок питания на импульсниках.
  2. Подаю снаружи. Если я заливаю дисплей одним цветом, то изображение однородно без полос. Это не оправдывает питание? При этом все равно питание может быть причиной полос на картинке?
  3. Здравствуйте! Имеется задача. С аналоговой камеры видеосигнал поступает в STM32 через встроенный АЦП. Необходимо вывести изображение на дисплей. В качестве видеобуфера используется RAM контроллера. Изображение размером 160x120, поэтому встроенной RAM достаточно. Изображение буду выводить через LTDC. Вот тут вычитал, что руководить этим должен LTDC. В смысле, если используется несколько видеобуферов, то LTDC должен формировать прерывание в конце кадра и в прерывании менять адреса видеобуфера. Запуск камеры, я так понимаю, тоже должен быть в этом прерывании. Но какими должны быть частоты работы камеры и вывода изображения на дисплей в этом случае? В смысле, кто быстрее должен работать? или нужно подобрать одинаковые частоты? Действительно ли требуется минимум 3 видеобуфера или при определенных соотношениях частот достаточно 2?
  4. Вроде заработало Только как-то странно. Почему фон разного оттенка? Вот надпись STM, слева от буквы S фон светлее чем фон ниже надписи.
  5. Нет. Дисплей не поддерживает такой формат. LTDC поддерживает. Я в буфере формирую картинку в соответствии с форматом L8. Я буду выводить черно-белую картинку на цветной дисплей. В буфере кадра храню картинку в формате L8 (каждый пиксель 8 бит). А чтобы дисплей показывал черно-белую картинку я три раза отправляю одно значение пикселя для каждого цвета (RGB).
  6. Можно сказать и так. Для этих целей вместо SPI я использую 80 series parallel interface. С этим проблем нет - все работает. Все верно. В используемом дисплее цвет одного пикселя определяется за три такта пиксельной частоты. За эти три такта на линии данных должны быть установлены данные для каждого из трех цветов (RGB). Подробнее в datasheet на дисплей. UG-6028GDEBF02_21.03.2013.pdf Такого режима работы у LTDC нет. Но можно для LTDC указать ширину строки не 160, а 160х3 = 480. Тогда LTDC будет формировать нужное количество тактов пиксельной частоты. Я подумал, что не стоит марать пост. Но раз уж Вы настаиваете...Source: Header: Объявление фрейм буфера и переключение адреса для вывода изображения:
  7. У меня работал этот АЦП через DMA нормально, и запускался столько раз сколько надо. Первоначально настраивал АЦП в Cube, затем настраивал регистрами то чего не хватало. Многие ошибки в настройке выяснил при отладке. В Вашем коде не нашел настройки Boost mode. Эта настройка "Must be used when ADC clock > 20 MHz". Еще помню, что после калибровки, некоторые регистры сбрасывались и приходилось делать инициализацию АЦП после калибровки, поэтому сначала делал минимальную настройку для проведения калибровки, затем калибровал, а потом всю инициализацию АЦП по полной. Проверяйте тактирование АЦП и контроллера DMA.
  8. Я пытаюсь выводить картинку на дисплей через LTDC. Контроллер STM32H743IIT6, дисплей UG-6028GDEBF02. Дисплей имеет разрешение 160x128. Цвет каждого пикселя определяется данными, которые поступают за три такта пиксельной частоты — по такту на цвет (R, G, B). Я хочу выводить Ч/Б изображение используя пиксельный формат L8. Для этого каждый пиксель буду определять тремя одинаковыми значениями по цветам (R=G=B). Раз каждый пиксель определяется тремя тактами пиксельной частоты, то в одной строке должно быть 160х3 = 480 тактов — или 480 пикселей. Таким образом для LTDC мое изображение преобразуется в 480х128. Дисплей можно настроить на режим работы 160х120 (с помощью встроенного в дисплей контроллера), что я и сделал. Попробовал вывести на дисплей изображение формата 160х120 с помощью встроенного в дисплей контроллера — все получилось как и должно быть.Теперь пытаюсь выводить на дисплей картинку по интерфейсу RGB используя LTDC. Настроил все на регистрах и по ДШ. Сформировал массив на 57600 пикселей (160х120х3). В массиве закрасил первый пиксель в первой строке (нулевой пиксель в нулевой строке), первый пиксель в третьей строке (нулевой пиксель во второй строке) и последний пиксель в кадре 57600 (57599). Вывожу на дисплей — вижу картинку как на картинке. Первый пиксель в первой строке горит не в начале дисплея, он смещен вправо, также как и первый пиксель в третьей строке. Последний горит слева от первого. Картинка отобразилась не до конца, почему то LTDC не отобразил весь буфер, а не дождавшись конца начал отображать первый пиксель, хотя адрес для нового кадра взял не первый в буфере, а тот с которого он прекратил отображать.Пробовал поиграться с настройками — проблему не победил. Не подскажите что-нибудь дельное? С какими регистрами поиграть и как? Возможно я косячу с параметрами синхронизации. Вот все что относится к RGB интерфейсу дисплея: Если я косячу с параметрами синхронизации, то что тут принять за них? Я принял следующие: #define HSYNC_WIDTH ((uint16_t)3) #define VSYNC_WIDTH ((uint16_t)1) #define HBP ((uint16_t)0) #define VBP ((uint16_t)0) #define ACTIVE_WIDTH ((uint16_t)480) #define ACTIVE_HEIGHT ((uint16_t)120) #define HFP ((uint16_t)0) #define VFP ((uint16_t)0) Полный код прилагаю: lar_ltdc.h lar_ltdc.c
  9. Здравствуйте. Я тоже разбираюсь с LTDC. Я пытаюсь выводить картинку на дисплей через LTDC.Контроллер STM32H743IIT6, дисплей UG-6028GDEBF02. Дисплей имеет разрешение 160x128. Цвет каждого пикселя определяется данными, которые поступают за три такта пиксельной частоты — по такту на цвет (R, G, B). Я хочу выводить Ч/Б изображение используя пиксельный формат L8. Для этого каждый пиксель буду определять тремя одинаковыми значениями по цветам (R=G=B). Раз каждый пиксель определяется тремя тактами пиксельной частоты, то в одной строке должно быть 160х3 = 480 тактов — или 480 пикселей. Таким образом для LTDC мое изображение преобразуется в 480х128. Дисплей можно настроить на режим работы 160х120 (с помощью встроенного в дисплей контроллера), что я и сделал. Попробовал вывести на дисплей изображение формата 160х120 с помощью встроенного в дисплей контроллера — все получилось как и должно быть.Теперь пытаюсь выводить на дисплей картинку по интерфейсу RGB используя LTDC. Настроил все на регистрах и по ДШ. Сформировал массив на 57600 пикселей (160х120х3). В массиве закрасил первый пиксель в первой строке (нулевой пиксель в нулевой строке), первый пиксель в третьей строке (нулевой пиксель во второй строке) и последний пиксель в кадре 57600 (57599). Вывожу на дисплей — вижу картинку как на картинке. Первый пиксель в первой строке горит не в начале дисплея, он смещен вправо, также как и первый пиксель в третьей строке. Последний горит слева от первого. Картинка отобразилась не до конца, почему то LTDC не отобразил весь буфер, а не дождавшись конца начал отображать первый пиксель, хотя адрес для нового кадра взял не первый в буфере, а тот с которого он прекратил отображать.Пробовал поиграться с настройками — проблему не победил. Не подскажите что-нибудь дельное? С какими регистрами поиграть и как? LTDC настраиваю православными регистрами. Вся настройка в функции LTDC_Init(). Надеюсь на помощь. lar_ltdc.c lar_ltdc.h
  10. Учтемс. Хотя эту часть кода генерит STM32CubeMX и эту область предполагается не менять.
  11. Я в курсе. Меня интересует именно работа прерываний, останавливать таймеры или нет - детали. Правильные callback функции я выбрал? Правильно разрешил прерывания? Если - да, то почему работает не как как хотелось? То о чем вы говорите устанавливается настройкой Output compare preload в значение Disable. При этом как только таймер получил новое значение для сравнения то сразу будет учитывать его. Кстати работоспособность этого можно увидеть на первой осциллограмме - переполнение ещё не наступило, новое значение для сравнение записано, и после прерывания видим импульс с измененным заполнением.
  12. CPU clock 400 MHz APB2 Timer Clocks 200 MHz Сейчас бы выяснить где косяк в прерываниях
  13. Уточнение: Первое прерывание возникает по TIM2 по совпадению регистра CNT со значением Pulse в STM32CubeMX. Pulse = 12-1 = 11. На осциллограммах видно что два первоначальных импульса формируются за 12 тактов, после чего формируется прерывание. Второе прерывание должно формироваться по переполнению TIM2. Для TIM2 Counter Period = 18-1 = 17.