Адель
не, просто точка подключения
Glamtie
Попробуйте есп в программатор и по новой залить программу. Жив ли чип, это установим.
Glamtie
Батарейка с каким напряжением?
Адель
я уже залил прошивку в новую esp. Буду ставить на днях. Со старой случилось следующее: На ней была tasmota, и после выключения/включения питания начал гореть один из светодиодов, не помню какой именно, с gpio 0 или 2. Я привез его домой, воткнул в программатор и вроде как он прошился, но потом полностью перестал работать.
Andy
зеленые кружочки просто объединенная гребенка для земли. Светодиоды горели хорошо
Хм, а вот выше пишете, что начал гореть один из светодиодов. Так бывает если пробивает один из транзисторов на выходе.
Адель
Я так понимаю пин RX можно использовать на вход и при низком и высоком уровне он загрузится без проблем. А светодиоды вообще не активны в момент включения
Glamtie
Что то странное, в общем. В схеме ничего подозрительного не вижу. Может еспшка такая попалась. Я бы перед работой стенд бы собрал и погонял на столе, как оно себя поведет.
Адель
Да вроде гонял, включал выключал с замкнутым входом. Вроде по собранной информации можно использовать пины таким образом
Glamtie
Я так понимаю пин RX можно использовать на вход и при низком и высоком уровне он загрузится без проблем. А светодиоды вообще не активны в момент включения
Вот про уровень при загрузке не подскажу. Но как вход можно использовать. Другое дело оно же у вас раз отработало.
Glamtie
Там часом с воды никакая фаза прилететь не могла? А то может там ТЭН стоит или насос, достаточно малой утечки...
Адель
Да, даже на практике проверил что при стянутых остальных gpio модуль не запускался, а со стянутым RX запускался. Всем спасибо. Подключу новую ESP погоняю, отпишусь если что👍
Адель
не. просто бак который наполняется водой
Glamtie
еспшки хилые в плане защиты по входам.
Адель
а какие резисторы используете для светодиодов? Я ставил на 500ом если не ошибаюсь, оставил на ночь включенный, пришел с утра, а он не светит. Поэтому перестраховался и воткнул 2 кОм, работали нормально
Glamtie
Батарейное питание это вещь в себе. Еспшка сама то нехило жрет, не предназначена она для питания от батарей.
Glamtie
А может батарея у вас говно. Тоже кто знает.
Адель
не, питаю от блоков питания 3,3В
Glamtie
Тогда делайте далее эксперименты, это все странно.
Glamtie
Glamtie
Но это пиковое.
Glamtie
есп куда поскромнее
Ruslan
есп куда поскромнее
У меня они вместе
Glamtie
только тесты короче.
Glamtie
и нафига оно тут?
evg
Привет народ. Все никак не могу победить.
evg
void readAndSend(void* parameter) { // Структура для приема данных struct dataPacket { int16_t packet25; int16_t packet26; }; for (;;) { // Проверяем, есть ли достаточно данных в Serial2 для чтения пакета if (Serial2.available() >= sizeof(dataPacket)) { dataPacket packet; // Объявляем экземпляр структуры для хранения прочитанных данных // Читаем данные из Serial2 в packet Serial2.readBytes((byte*)&packet, sizeof(packet)); // Обработка данных для пина 25 if (packet.packet25 > 0) { // Если значение больше 0 int freq = packet.packet25; // Устанавливаем частоту согласно прочитанному значению ledcWrite(0, 512); // Устанавливаем скважность PWM в 50% ledcWriteTone(0, freq); // Устанавливаем частоту PWM } else if (packet.packet25 == 0) { // Если значение равно 0 ledcWrite(0, 0); // Останавливаем генерацию PWM, устанавливая скважность в 0% } // Обработка данных для пина 26 if (packet.packet26 > 0) { // Если значение больше 0 int freq = packet.packet26; // Устанавливаем частоту согласно прочитанному значению ledcWrite(2, 512); // Устанавливаем скважность PWM в 50% ledcWriteTone(2, freq); // Устанавливаем частоту PWM } else if (packet.packet26 == 0) { // Если значение равно 0 ledcWrite(2, 0); // Останавливаем генерацию PWM, устанавливая скважность в 0% } } // Переключаем пин DE_RE_PIN обратно в режим приема digitalWrite(DE_RE_PIN, LOW); vTaskDelay(1 / portTICK_PERIOD_MS); } }
evg
с одного датчика принимаю норм работает, с двух начинаются проблемы.
evg
Это может быть из-за разрешения?
evg
сейчас 10бит
Anton
с одного датчика принимаю норм работает, с двух начинаются проблемы.
подожди. какие два датчика? они на один уарт заведены что ли?
evg
на другой плате снимаю, на эту одним пакетом передаю
evg
и пытаюсь воспроизвеси сигнал
Anton
ещё раз. сигнал приходит по уарт? с одного датчика?
evg
да, с двух
Anton
с двух датчиков на один уарт?
evg
одна плата снимает сигнал, потом на эту передает цифру пакетами
evg
на этой плате пытаюсь воспроизвести
evg
с одного датчика работает как надо, но когда начинаю обрабатывать сигнал с двух датчиков, на пине получаю расхождение между тем что отправил и тем что выдал на пине
Anton
так ещё раз вопрос. с двух разных датчиков приходят данные на один физический уарт?
evg
сигнал с датчиков приходят на 2 разных пина на другой плате, потом собираю количество импульсов и раз в секунду шлю да эту по уарт
evg
в реальном времени не получится, частота высока
Anton
окей. второй вопрос: выведи сайзоф структуры: // Структура для приема данных struct dataPacket { int16_t packet25; int16_t packet26; };
evg
сейчас нет возможности, в среднем там ~100-800 импульсов
evg
180
Anton
пофиг на импульсы, вопрос о программе
Anton
ты очевидно думаешь что данные там занимают 32 бита в очевидной для тебя последовательности — проверь это
evg
то что отправил в packet25 и packet26 то и получил, тут потерь нет
evg
я считаю общее количество импульсов
Anton
сигнал с датчиков приходят на 2 разных пина на другой плате, потом собираю количество импульсов и раз в секунду шлю да эту по уарт
то есть другая плата обрабатывает два датчика а тебе передаёт данные по уарт уже разбитые на два поля?
evg
в источнике, в приемник и на пине
evg
да
Anton
да
о шибка тогда где?
evg
незнаю
evg
ошибка на пине(
evg
приемника
Anton
почему с одни датчиком работает, а с двумя нет — не получается ли что ошибка "в другой плате"?
evg
какбудто таймер дробит частоту
evg
там где снимаю допустим 180 и 250 импульсов, передал, там тоде 180 и 250 импульсов
evg
а когда с пина снимаю там уже 174 и 232 к примеру
Anton
там где снимаю допустим 180 и 250 импульсов, передал, там тоде 180 и 250 импульсов
принимаются значения полей "пакет 25,26" — верно?
evg
да
evg
так снимаю и передаю void receiveAndAct(void* parameter) { // Структура для передачи данных struct dataPacket { int16_t packet25; // Счетчик импульсов для пина 25 (Датчик скорости вход с датчика) int16_t packet23; // Счетчик импульсов для пина 23 (Расходомер жидкости вход с датчика) }; for (;;) { if (millis() - lastMillis > SEND_DATA_INTERVAL) { // Если прошло более 1000 миллисекунд (1 секунда) dataPacket packet; // Объявляем пакет данных pcnt_get_counter_value(PCNT_UNIT_0, &packet.packet23); // Получаем значения счетчика для 23 пина (Расходомер жидкости вход с датчика) pcnt_get_counter_value(PCNT_UNIT_1, &packet.packet25); // Получаем значения счетчика для 25 пина (Датчик скорости вход с датчика) //------------------------------- // Увеличиваем значение счетчика total_count_0 += packet.packet23; // Счетчик общих пакетов (Расходомер жидкости вход с датчика) total_count_1 += packet.packet25; // Счетчик общих пакетов (Датчик скорости вход с датчика) //------------------------------ pcnt_counter_clear(PCNT_UNIT_0); // Очищаем счетчик 0 (Расходомер жидкости вход с датчика) pcnt_counter_clear(PCNT_UNIT_1); // Очищаем счетчик 1 (Датчик скорости вход с датчика) lastMillis = millis(); // Обновляем время последнего обновления счетчиков digitalWrite(DE_RE_PIN, HIGH); // Переключаем в режим передачи Serial2.write((byte*)&packet, sizeof(packet)); // Передаем пакет данных Serial2.flush(); // Ждем окончания передачи digitalWrite(DE_RE_PIN, LOW); // Переключаем обратно в режим приема //Serial.println(packet.packet23); // Печатаем значение счетчика для пина 23 (Расходомер жидкости вход с датчика) //Serial.println(packet.packet25); // Печатаем значение счетчика для пина 25 (Датчик скорости вход с датчика) //----------------------------- // Выводим общие значения счетчиков Serial.print("Pin 23: "); Serial.println(total_count_0); // Печатаем общее количество импульсов с пина 23 (Расходомер жидкости вход с датчика) Serial.print("Pin 25: "); Serial.println(total_count_1); // Печатаем общее количество импульсов с пина 25 (Датчик скорости вход с датчика) //---------------------------- } vTaskDelay(1 / portTICK_PERIOD_MS); // Пауза в 1 мс перед следующей итерацией цикла } }
evg
может я дебил и просто не правильный изначально алгоритм
evg
мне надо воспроизвести сигнал
evg
это ретранслятор
evg
пробовал прерыванием на таймере воспроизводить, ведет аналогично
evg
это тоже по сути, под капотом у LEDC теже таймеры
Anton
я чесгря не разбирался с железной составляющей, но, подозреваю, данные, что передаются в ледц при сетапе и потом при управлении — могут быть вполне не точно корректны, а приближены к тому, что ты хочешь
evg
тогда почему с одним датчиком работает как надо
evg
завтра хочу еще попробовать SDM DAC и если с ними будет тоже самое, значит не стой стороны подошел к проблеме
evg
может разрешение надо меньше
evg
оно же зависимо от частоты камня
Anton
а сколько у тебя?
evg
10 бит
Anton
просто там все установки частоты и пр — это так или иначе пересчитывается в разные множители/делители и твоя частота может оказаться не совсем уж точной
evg
так пробовал // void readAndSend(void* parameter) { // // Структура для приема данных // struct dataPacket { // int16_t packet25; // int16_t packet26; // }; // for (;;) { // // digitalWrite(led1, LOW); // // digitalWrite(led2, LOW); // if (Serial2.available() >= sizeof(dataPacket)) { // dataPacket packet; // //xSemaphoreTake(serialMutex, portMAX_DELAY); // Serial2.readBytes((byte*)&packet, sizeof(packet)); // читаем данные // //xSemaphoreGive(serialMutex); // // обработка пакета данных для пина 25 // //if (packet.packet25 != lastPacket) { // if (packet.packet25 >= 0) { // //Serial.println(packet.packet25); // Serial.println(count1); // if (packet.packet25 != 0) { // timerAlarmWrite(timer, 500000 / packet.packet25, true); // частота таймера // timerAlarmEnable(timer); // включаем таймер // } else { // timerAlarmDisable(timer); // если 0, выключаем таймер // digitalWrite(led1, LOW); // } // lastPacket = packet.packet25; // } // // обработка пакета данных для пина 26 // if (packet.packet26 >= 0) { // //Serial.println(packet.packet26); // Serial.println(count); // if (packet.packet26 != 0) { // timerAlarmWrite(timer26, 500000 / packet.packet26, true); // частота таймера // timerAlarmEnable(timer26); // включаем таймер // } else { // timerAlarmDisable(timer26); // если 0, выключаем таймер // digitalWrite(led2, LOW); // } // lastPacket26 = packet.packet26; // } // } // digitalWrite(DE_RE_PIN, LOW); // Переключаем обратно в режим приема // vTaskDelay(1 / portTICK_PERIOD_MS); // } // }