Адель
не, просто точка подключения
Glamtie
Попробуйте есп в программатор и по новой залить программу. Жив ли чип, это установим.
Glamtie
Батарейка с каким напряжением?
Andy
Адель
я уже залил прошивку в новую esp. Буду ставить на днях.
Со старой случилось следующее: На ней была tasmota, и после выключения/включения питания начал гореть один из светодиодов, не помню какой именно, с gpio 0 или 2.
Я привез его домой, воткнул в программатор и вроде как он прошился, но потом полностью перестал работать.
Адель
Адель
Адель
Я так понимаю пин RX можно использовать на вход и при низком и высоком уровне он загрузится без проблем. А светодиоды вообще не активны в момент включения
Glamtie
Что то странное, в общем. В схеме ничего подозрительного не вижу. Может еспшка такая попалась. Я бы перед работой стенд бы собрал и погонял на столе, как оно себя поведет.
Адель
Да вроде гонял, включал выключал с замкнутым входом. Вроде по собранной информации можно использовать пины таким образом
Glamtie
Glamtie
Там часом с воды никакая фаза прилететь не могла? А то может там ТЭН стоит или насос, достаточно малой утечки...
Адель
Да, даже на практике проверил что при стянутых остальных gpio модуль не запускался, а со стянутым RX запускался. Всем спасибо. Подключу новую ESP погоняю, отпишусь если что👍
Адель
не. просто бак который наполняется водой
Glamtie
еспшки хилые в плане защиты по входам.
Адель
а какие резисторы используете для светодиодов? Я ставил на 500ом если не ошибаюсь, оставил на ночь включенный, пришел с утра, а он не светит. Поэтому перестраховался и воткнул 2 кОм, работали нормально
Glamtie
Батарейное питание это вещь в себе. Еспшка сама то нехило жрет, не предназначена она для питания от батарей.
Glamtie
А может батарея у вас говно. Тоже кто знает.
Адель
не, питаю от блоков питания 3,3В
Glamtie
Тогда делайте далее эксперименты, это все странно.
Ruslan
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
evg
в источнике, в приемник и на пине
evg
да
Anton
evg
незнаю
evg
ошибка на пине(
evg
приемника
Anton
почему с одни датчиком работает, а с двумя нет — не получается ли что ошибка "в другой плате"?
evg
какбудто таймер дробит частоту
evg
там где снимаю допустим 180 и 250 импульсов, передал, там тоде 180 и 250 импульсов
evg
а когда с пина снимаю там уже 174 и 232 к примеру
Anton
evg
да
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);
// }
// }