Resident
Тупо 0
Resident
На всех датчиках
Resident
Помогало отключение питания
Resident
Но это ехать нужно
Resident
Esp.restart не помогает, ввиду того наверное что питание оно не сбрасывает
Andy
Суть в том что все модули не Читает по i2c,
Т.е. на esp32 сделан master I2c. К нему подцеплено куча модулей. Все они slave. С некоторого момента автомат I2c в esp32 возвращает данные 0 вместо значений. Верно?
Resident
Да
Resident
На ds3231 вообще 165:165 вернули)
Andrew
На даче ?
Resident
На даче ?
Не суть)
Resident
Электростанция
Andrew
😮😮
Andy
Да
Почти 100% ошибка в прошивке esp32. Можно попробовать сбросить буферы i2c и удалить - установить драйверы i2c. Подробнее тут https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/i2c.html
Resident
У меня 8266
Resident
Думаю безразнициже?
Resident
Почитаю
Resident
Просто хотелось бы с правленной прошивкой приехать
Andy
У меня 8266
Трындец! Там вообще bitbang i2c, только полная перезагрузка чипа и копание в драйвере. https://docs.espressif.com/projects/esp8266-rtos-sdk/en/latest/api-reference/peripherals/i2c.html
Resident
Ну bme280 влажность 100 показывает)
Andy
Думаю безразнициже?
нет, у esp32 два аппаратных модуля, у esp8266 i2c вообще нет, только i2s
Resident
Просто если сброс по питанию сделать оно дальше как и должно раьотает
Andy
Просто хотелось бы с правленной прошивкой приехать
Честно сказать либо на esp32 переползать, либо на МК+чип связи
Andy
Может скорость i2c понизить?
ничего не могу сказать, бог миловал использовать i2c esp8266 на серъезных проектах. А всякая фигня собачим таймером спасает
ВПК ПОТОК
Подскажите когда работаешь с датчиком температуры по wire там сколько байт или бит информации получаешь? я верно понял что приходит 12 бит , а отсчет идет от температуры -273
ВПК ПОТОК
#include <Wire.h> void setup() { Wire.begin(); // join i2c bus (address optional for master) Serial.begin(9600); // start serial for output } void loop() { Wire.requestFrom(8, 6); // request 6 bytes from slave device #8 while (Wire.available()) { // slave may send less than requested char c = Wire.read(); // receive a byte as character Serial.print(c); // print the character } delay(500); } Вот в "с" грузиться я так понял 6 бит? согласно коду
ВПК ПОТОК
т.е. приход 12 бит урезался до 6?
Resident
void resetRTC() { pinMode(SDA, INPUT_PULLUP); pinMode(SCL, INPUT_PULLUP); do { SDA_HIGH(); SCL_HIGH(); if (SDA_READ()) { SDA_LOW(); SDA_HIGH(); } SCL_LOW(); } while (SDA_READ() == 0); }
Resident
At that point the microcontroller should pull SDA low while SCL is high, generating a START condition.
ВПК ПОТОК
ds18b20 ? отсюда https://datasheets.maximintegrated.com/en/ds/DS18B20.pdf
сломал прям, мне достаточно мерить температура до десятых, т.е. -23.4 или +25.7 меня устроит это как мерить
ВПК ПОТОК
вообще мне бы мерить так чтобы уложиться в 1 байт. 8 бит
ВПК ПОТОК
т.е. мне как не курти прийдет 6 байт, я должен байты перевернуть в число, умножить на 0,0625 откинуть лишнее и получить свое?
Andy
т.е. мне как не курти прийдет 6 байт, я должен байты перевернуть в число, умножить на 0,0625 откинуть лишнее и получить свое?
хер его знает :(, давно уже не использовал ds18, надо datasheet курить, но вообще похоже на правду (если мне мой склероз не изменяет :) )
Resident
хер его знает :(, давно уже не использовал ds18, надо datasheet курить, но вообще похоже на правду (если мне мой склероз не изменяет :) )
Думаю можно же как то хитро транзистор поставить что бы размыкал питание ну и как бы заного5стартовал было бы не плохим железным решением
Resident
Ребутнуть хардверно всю еспху
Resident
Но каким нибудь пином да релюхой накрайняк
Resident
Пока из надёжных это решение рассматриваю
Resident
Какраз свободное реле имеется в системе
Andy
Ребутнуть хардверно всю еспху
En нога ребутает esp8266. Но скорее всего проблема не в железе, а в битбанге. Неправильно ловится ASK от славеров. (если они конечно там тупые датчики, а не МК со своими прошивками)
Resident
Andy Кстате это хак стоит у меня битбанг исключает вроде тоже https://elchupanibrei.livejournal.com/34751.html#cutid1
Resident
Только у меня не виснет и не ребутает, только датчики не читает остальное огонь
Resident
Но вариант что аск не ловит тоже сидит в моей голове, потому что выводит 0 а не - 200 или ещё всякую чушь
romanetz
чтобы периферию оживить
romanetz
ногодрыгом
Resident
ногодрыгом
Sda scl подвергать имеешь ввиду? Как то особенно или пофиг как?
Resident
Я почему спрашиваю надеясь что уже ктото сталкивался, я и сам могу выход найти но уйдёт времени по больше., то с чем сейчас дефицит жёсткий
Resident
А здесь знаю, что кто вкурсе молчать не будут, дадут совет
romanetz
ща гляну
Resident
Хотя когда руками датчик отключаешь идут 0 нули подключаешь на горячую о5 нормальные Показания
Anonymous
Кто сможет помочь с прошивкой
romanetz
А здесь знаю, что кто вкурсе молчать не будут, дадут совет
tatic void I2cFailRecover(VL53L0X_Dev_t *vl53dev) { GPIO_InitTypeDef GPIO_InitStruct; int i, nRetry=0; uint16_t clk_pin, data_pin; if ((vl53dev->I2cHandle)==&hi2c1) { clk_pin=GPIO_PIN_6; data_pin=GPIO_PIN_7; } else if ((vl53dev->I2cHandle)==&hi2c2) { clk_pin=GPIO_PIN_10; data_pin=GPIO_PIN_11; } else return; // We can't assume bus state based on SDA and SCL state (we may be in a data or NAK bit so SCL=SDA=1) // by setting SDA high and toggling SCL at least 10 time we ensure whatever agent and state // all agent should end up seeing a "stop" and bus get back to an known idle i2c bus state // Enable I/O __HAL_RCC_GPIOB_CLK_ENABLE(); //HAL_I2C_DeInit(vl53dev->I2cHandle); GPIO_InitStruct.Pin = clk_pin|data_pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD; GPIO_InitStruct.Pull = GPIO_PULLUP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); HAL_GPIO_WritePin(GPIOB, clk_pin, GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOB, data_pin, GPIO_PIN_SET); //TODO we could do this faster by not using HAL delay 1ms for clk timing do{ for( i=0; i<10; i++){ HAL_GPIO_WritePin(GPIOB, clk_pin, GPIO_PIN_RESET); fast_delay(10); HAL_GPIO_WritePin(GPIOB, clk_pin, GPIO_PIN_SET); fast_delay(10); } }while(HAL_GPIO_ReadPin(GPIOB, data_pin) == 0 && nRetry++<7); if (HAL_GPIO_ReadPin(GPIOB, data_pin) == 1) { SET_BIT(vl53dev->I2cHandle->Instance->CR1, I2C_CR1_SWRST); asm ("nop"); CLEAR_BIT(vl53dev->I2cHandle->Instance->CR1, I2C_CR1_SWRST); // HAL_I2C_DeInit(vl53dev->I2cHandle); vl53dev->I2cHandle->State=HAL_I2C_STATE_RESET; if (vl53dev->I2cHandle==&hi2c1) MX_I2C1_Init(); else if (vl53dev->I2cHandle==&hi2c2) MX_I2C2_Init(); } }
Resident
О да дальномер у меня тоже есть
Resident
Ща в редактор скопирую с подсветкой понятнее станет спасибо
romanetz
О да дальномер у меня тоже есть
это кусочек демки стшной, ну почти
Семён
не стал-ли кто ботом
Henadz
Нужна помощь. У меня ESP8266-E12 модуль подключенный по стандартной схеме: 5 резисторов и 2 кнопки. 1. АТ-команды отрабатывает. 2. Ресет работает. Но при попытке чтения или записи через IDE Arduino или esptool = долго ждет ответа и останавливается с ошибкой тайм-аута запроса. Как мне кажется модуль не переходит во Flash-mode. В чём может быть причина? какие советы по тестированию модуля?
Алексей
А как пытаешься в него войти?
Андрей
К датчикам не мог подключится конфликты с dns были помойму
Можно использовать прокси, ngrok, для тестов, там и доменное имя даётся, ещё и в инет выход
Алексей
Ну то есть держишь кнопку и подаешь питание?
Андрей
Второе, ты выбрал нужно устройство в настрокай Ардуино?
Юрий
А если обычный прошивальщик взять?
Henadz
Все процедуры по переходу во Flash-mode выполняю точно. Прошивку старую поменять никак не могу!!! из-за указанного выше. В ардуино выставлено всё правильно.
Henadz
Хотелось бы уточнить. Прошивать модуль можно как через Ардуино ИДЕ, так с использованием штатных Esptool. Я обычно доверяю программным средствам разработчика модуля. 1. Esptool - не может ни стереть модуль, ни прочитать данные из модуля, так как это производиться из Flash-mode. 2. Как вариант я испробывал метод через Ардуино ИДЕ = результата нет. Отсюда и сомнения - что модуль не переходит в режим Flash-mode.
Denisio
отрицательный импульс на gpio16? это что за нововведения
Henadz
Для входа в boot режим по uart надо прижать gpio0 к земле и подать отрицательный импульс на gpio16
Ты описываешь стандартный вход в boot-mode = зажать кнопку -флэш, затем нажать ресет, отпустить флэш!😉