Closed Striagor closed 1 day ago
Вывод на ленту где и как организован?
Мультиметром измерять напряжение цифрового сигнала с частотой почти 1 МГц это конечно сильно)
Вывод на ленту где и как организован?
хахаха) знаю про это) ну чем богаты как говориться
Вывод на ленту где и как организован?
на момент последних тестов был подключен 33 пин, он на самой плате подписан как rs485, также добавлю что пробовал многие пины, везде ситуация одинаковая, пробовал пины ( 2,4,14,15,32,23,33,17... )
Часть программы, где обновляется лента
Часть программы, где обновляется лента
void setup() { Serial.begin(115200); Serial.println();
matrix->begin();
matrix->setBrightness(BRIGHTNESS);
matrix->show();
}
void display_fillMatrix(uint16_t color) { matrix->fillRect(0,0, MW, MH, color); matrix->show(); }
вызов функции происходит по надобности, не чаще чем раз в 100 мс, а то и реже
Так, а что представляет собой мерцание?
Ladno
Так, а что представляет собой мерцание?
так... сегодня снова искал проблему и понял что в целом мерцание еще возможно происходит из за многопоточности
есть три потока
xTaskCreatePinnedToCore( Task_SwitchModeLight, "Task_SwitchModeLight", 5000, NULL, 2, &Task1, 1);
delay(500);
xTaskCreatePinnedToCore(Task_IRRemoteControl, "Task IRRemoteControl", 5000, NULL, 2, &Task2, 1);
delay(500);
xTaskCreatePinnedToCore(Task_UpdateRGBPanel, "Task UpdateRGBPanel", 5000, NULL, 1, &Task3, 0);
delay(500);
так вот если использовать вместо xTaskCreatePinnedToCore(Task_UpdateRGBPanel...
другую библиотеку многопоточности (псевдо многопоточность)
Thread thread_UpdateRGBPanel = Thread(); // создаём поток обновления rgb панели void setup() { ... thread_UpdateRGBPanel.onRun(updateRGBPanel); // назначаем потоку задачу thread_UpdateRGBPanel.setInterval(0.02); // задаём интервал срабатывания, мсек ... }
void loop() { // обработчик UI sett.tick(); if (thread_UpdateRGBPanel.shouldRun()) thread_UpdateRGBPanel.run(); // запускаем поток } мерцание проходит и появляется только в момент входа в web интерфейс, а именно в раздел авторизации. В целом возможно проблема и не с библиотекой GyverDBFile
DB здесь вообще последнее из за чего может быть проблема)
DB здесь вообще последнее из за чего может быть проблема)
есть теория о том что в момент отправки шим сигнала по обновлению светодиодов на панели, поток прерывается и отдается приоритет на выполнения других операций, как бы принудительно заставить выполнить функцию до конца и только после этого отдать ресурсы цп на выполнения других операций...
Не использовать ртос или наоборот изучать его подробнее)
Не использовать ртос или наоборот изучать его подробнее)
пойду изучать его, спасибо за отклик)
может кому пригодится, решение своей проблемы нашел в руководстве FreeRTOS https://narodstream.ru/esp32-urok-14-freertos-myuteksy/
Проблема была в многопоточности, а именно в неправильной организации, другие потоки прерывали поток в котором происходило обновление RGB панели, когда стал использовать мьютекс для обновления RGB панели, все мерцания прошли
ну во
Делаю светофор с использованием платы WT32-S1. и LED панелью гибкой 16x16 пикселей
по библиотекам: `
include
include
include
include
include "button.h"
include "IRremote.h"
include
include
include
include
// настройки led панели
define PIN 33 // Пин для управления RGB панелью 14
define MW 16 // Ширина rgb пенели (колличество пикселей)
define MH 16 // Высота rgb пенели (колличество пикселей)
define BRIGHTNESS 20 // Яркость панели
define DELAY_SHOW 5000 // Задержка
Adafruit_NeoMatrix *matrix = new Adafruit_NeoMatrix(MW, MH, PIN, NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, NEO_GRB + NEO_KHZ800);`
код в котором происходит глюк/мерцание `void Init_DataBase(){ // запуск файловой системы
ifdef ESP32
}`
проблема заключается в том что при использовании данных библиотек, у меня возникает мерцание на led панели раз в 3 секунды, мультиметр мне говорит что на пине который отправляет данные в led панель происходит просадка раз в 3 секунды, как только я комментирую строку db.begin(); , то мерцание проходит, но оно также проявляется в момент когда я захожу в веб интерфейс в раздел ввести пароль для авторизации и мерцает когда я выхожу из этого раздела, подскажите как решить данную проблему и с чем она может быть связана?