• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

BLE модули TB-04/TB-03F (TLSR8253F512)

pvvx

Активный участник сообщества
если правильно посчитал на калькуляторах к ne555, то получается, что там что-то около 1МГц при 50%
1660179443693.png

1660179458923.png
F = 1.44/((330+2*1600)*0.00000000047) =~ 867940 Гц = 868 кГц

1660179452197.png
Th = 0.693*(330+1600)*0.00000000047 = 628.6 us
Tl = 0.693*1600*0.00000000047 = 521.1 us

Следовательно на выходе постоянное напряжение (среднее у PWM) 3V*521.1/628.6 = 2.487 V
А когда электрод намокнет, то у него сопротивление постоянному току около 6 кОм и выходит делитель в (10+6)/6 = 2.67 раз.
А итоге при мокром электроде выходит 2.487 В / 2.67 раза = 0.93 В
:)
 

pvvx

Активный участник сообщества
Диэлектрическая проницаемость воздуха 1.0, а у воды 81.0:

У сухой земли или песка это 2..5, по аналогии:

Емкость конденсатора зависит от диэлектрической проницаемости наполнителя между пластинами...
В итоге предел отношения емкости электродов без воды и с водой - до 80 раз.
А ne555 измеряет что-то другое - промокаемость электродов :)
 

pvvx

Активный участник сообщества
Емкость печатного конденсатора на стеклотекстолите в основном зависит от диэлектрической проницаемости покрывающего его диэлектрика, если вся внешняя среда проводящая - как промежуточная пластина из проводника. Тогда для плотно прилегающей почвы насыщенной солями или прочими химикатами емкость изменится на отношение диэлектрической проницаемости воздуха к диэлектрической проницаемости лака покрывающего электроды и стеклотекстолита с учетом уменьшения расстояния между пластинами. Так-же при определенной инкапсуляции в почве воды, может проявляться достаточная поляризация. Эффект проявления поляризации аналогичен соединённых в беспорядке множеству маловольтных и плохих АКБ – т.е. сопротивление переменному току на определенной частоте сильно уменьшается... До поляризации в пиритах обычной почве наверно далеко, но не золото ищем…

Но если почва не однородная и неоднородно прилегает к электродам, тогда вообще не понятно - что измеряют данные измерители? Просто какую-то абстракцию и обязательно должны быть настроены на месте применения. Иначе необходимо применять комплексный метод, но для его описания тут не тот форум и он не реализуется на одном TLSR825x.
 

millworm

New member
Это для детсада и измеряет сопротивление между электродами (на сколько они окислились), а не влажность.
согласен. приходилось под каждое растение калибровать показания сухой почвы и влажной. но это лучше чем ничего, как мне кажется. бывает забываю что-то полить, а тут в HA оповещение висит
 

Slacky

Member
@Slacky - А что там в самом HA с BLE датчиками? Я пока не обновлял HA (занят другими делами) и не знаю что тама произошло... Ernst79 пишет:
Важное объявление о будущем монитора BLE
Home Assistant 2022.8 имеет (улучшенную) поддержку пассивных устройств BLE непосредственно в Home Assistant. Для каждого бренда будет разработана базовая интеграция BLE, чтобы обслуживание можно было разделить между большим количеством людей, используя новейшие пакеты Bluetooth (bleak).
Ничего. Вообще не обнаруживает ни одного устройства, хотя у меня в доме их полно (не только мои находит, но и соседей).

ha_ble.jpg
 

Slacky

Member
Еще немного пара глупых вопросов.

Сделал схемку, в основном обвес по разъемам и пара кондеров по питанию. Ну думаю, можно сразу воспользоваться вот такой схемой


чтобы заливать через uart. Прикупил для этого дела вот такую платку, на которой есть сигнал RTS.

H2f7fd487c81f445eba171cc6f7007817o.jpg

Сама схема.
Schematic_watermeter_tlsr8253_2022-08-17.jpg
и плата
board_top.jpg

Замкнул перемычки, получив соединение из первой картинки в этом сообщении.

И не прошился.

Убрал перемычки, залил программу программатора - https://github.com/pvvx/TlsrComProg825x в TB-04.
Соединил земли и SWS и SWM. Прошился.

Поменял в коде вывод вывод с TX на SWS, но ничего не выводит в компорт. В чем может быть косяк?
 

Slacky

Member
Возможно нашел, почему не работает вывод в терминал через SWS. Но это породило новую проблему и пока я не знаю, как ее решить.

В общем TlsrPgm модуль пишет, а вот что-либо сосчитать с него не может.

Код:
$ ./TlsrPgm.py -s -pCOM4 i
=======================================================
TLSR82xx TlsrPgm version 27.04.21
-------------------------------------------------------
Open COM4, 230400 bit/s... ok
PGM: ChipID: 0x5562 (TLSR825x), ver: 0.0.0.1
swdiv 5, addrlen 3, swbuf [5a 00 06 02 00 05], pwr On
SWire bit rate: 0.9600 Mbits/s
=== PreProcess ========================================
CPU Stop... ok
=== Process ===========================================
Chip TLSR825x ID: 0x5562, rev: 0x02
CPU PC=0x00000000 ([0x0602] = 0x05)
Flash JEDEC ID: 0xC86013, Size: 512 kbytes
-------------------------------------------------------
FLASH UID:
000000: 45 45 30 36 36 34 12 ff 01 0a 00 58 01 e0 ff ff
000010: c8 01 ff ff ff ff ff ff ff ff ff ff ff ff ff ff
-------------------------------------------------------
FLASH:
000000: 56 80 00 00 00 00 5d 02 4b 4e 4c 54 2e 04 88 00
000010: c6 80 00 00 00 00 00 00 d4 fa 00 00 00 00 00 00
Error Read SWire data! (102)
Код:
$ ./TlsrPgm.py -w -t 1 -a 20 -c -pCOM4 -b3000000 rf 0 0x80000 ff_512k.bin
=======================================================
TLSR82xx TlsrPgm version 27.04.21
-------------------------------------------------------
Open COM4, 230400 bit/s... ok
PGM: ChipID: 0x5562 (TLSR825x), ver: 0.0.0.1
swdiv 5, addrlen 3, swbuf [5a 00 06 02 00 05], pwr On
SWire bit rate: 0.9600 Mbits/s
Set Speed UART PGM board 3000000 bits/s... ok
ReOpen COM4, 3000000 bit/s... ok
=== PreProcess ========================================
Hard reset Ext.MCU 5 ms... ok
Activate 20 ms... ok
CPU PC=0x00000000
CPU Stall... ok
=== Process ===========================================
Outfile: ff_512k.bin
Read Flash from 0x000000 to 0x080000...
Error Read Flash data at 0x000000!
 

aloika

Active member
Что-то у меня такое похожее было... я забыл детали уже. Но у меня часть прошивки читалась и потом сбой происходил. Каждый раз на разном месте.
Надо попробовать отключить все режимы сна в прошивке и отключить ватчдог. С чем-то из этого, возможно, связано.
 

Slacky

Member
О, убрал -b3000000 и по умолчанию на скорости 230400 сосчиталась ...

Код:
$ ./TlsrPgm.py -w -t 1 -a 20 -c -pCOM4 rf 0 0x80000 ff_512k.bin
=======================================================
TLSR82xx TlsrPgm version 27.04.21
-------------------------------------------------------
Open COM4, 230400 bit/s... ok
PGM: ChipID: 0x5562 (TLSR825x), ver: 0.0.0.1
swdiv 5, addrlen 3, swbuf [5a 00 06 02 00 05], pwr On
SWire bit rate: 0.9600 Mbits/s
=== PreProcess ========================================
Hard reset Ext.MCU 5 ms... ok
Activate 20 ms... ok
CPU PC=0x00000000
CPU Stall... ok
=== Process ===========================================
Outfile: ff_512k.bin
Read Flash from 0x000000 to 0x080000...
 Worked Time: 33.066 sec
 

Slacky

Member
О, убрал -b3000000 и по умолчанию на скорости 230400 сосчиталась ...

Код:
$ ./TlsrPgm.py -w -t 1 -a 20 -c -pCOM4 rf 0 0x80000 ff_512k.bin
=======================================================
TLSR82xx TlsrPgm version 27.04.21
-------------------------------------------------------
Open COM4, 230400 bit/s... ok
PGM: ChipID: 0x5562 (TLSR825x), ver: 0.0.0.1
swdiv 5, addrlen 3, swbuf [5a 00 06 02 00 05], pwr On
SWire bit rate: 0.9600 Mbits/s
=== PreProcess ========================================
Hard reset Ext.MCU 5 ms... ok
Activate 20 ms... ok
CPU PC=0x00000000
CPU Stall... ok
=== Process ===========================================
Outfile: ff_512k.bin
Read Flash from 0x000000 to 0x080000...
Worked Time: 33.066 sec
Но выводить в терминал через SWS (пытался менять скорость) не получается.
 

Slacky

Member
А вот еще по поводу вывода отладочной информации в COM-порт.

Берем TB-04-Kit. Кидаем перемычку со 2 ноги CH340 на SWS. И спокойно прописываем TlsrComProg. А дальше подключаем Эклипсовский Serial Terminal и если в программе присутствует код, типа

C:
#define UART_PRINT_DEBUG_ENABLE     1

#if UART_PRINT_DEBUG_ENABLE
#define PRINT_BAUD_RATE         230400
#define DEBUG_INFO_TX_PIN       UART_TX_PB1
#define PB1_DATA_OUT            ON
#define PB1_OUTPUT_ENABLE       ON
#define PULL_WAKEUP_SRC_PB1     PM_PIN_PULLUP_1M
#define PB1_FUNC                AS_GPIO
#endif /* UART_PRINT_DEBUG_ENABLE */
То все прокойно выводится через printf.

Теперь, берем модуль USB-TTL на том же CH340. Берем не кит, а просто модуль TB-04.
H10ab5850cf194161bc17a25f4ab683d4G.jpg
Запитываем, подключаем RX,TX и GND к USB-TTL. И вроде все работает. Но мусорит.

Код:
hot counter - 2950
Save config to flash. watermeter���_��>���������������>���������t_adv_data()
hot counter - 2960
Save config to flash. watermeter���_��>���������������>���������t_adv_data()
Connect
Disconnect
���_��>�������������Save config to flash. watermeter_config.flash_addr - 0x69000
set_adv_data()
Куда смотреть, чего править?
 

Slacky

Member
Какое нибудь прерывание отрабатывает или в спячку впадает? Ведь большую то часть времени нормально отрабатывает.
Почему на TB-04-Kit отрабатывает нормально?

Про спячку. Давайте рассмотрим структуру программы.
C:
_attribute_ram_code_ void blt_pm_proc(void)
{
    bls_pm_setSuspendMask (SUSPEND_ADV | DEEPSLEEP_RETENTION_ADV | SUSPEND_CONN | DEEPSLEEP_RETENTION_CONN);
}


void main_loop (void) {

    blt_sdk_main_loop();

    // Тут что-то, проверка батарейки, проверка счетчиков
    
    blt_pm_proc();
}
Я расскажу, как понимаю, поправьте, если не прав.
Входим в main_loop(). Делаем что-то, достаточно быстро. Вызываем blt_pm_proc(). Спим 2.5 секунды. Просыпаемся, опять входим в main_loop() и так по кругу. Так вот, все вызовы printf осуществляются до blt_pm_proc() и по идее, спать не должна ...

Или я ошибаюсь в логике?
 
Или я ошибаюсь в логике?
1) Я бы добавил к логу тайминги от начала цикла. Не происходит ли этот сбой строго через опреленное время после выхода чипа из сна (ака отрабатывает какая то высокоприоритетная внутренняя задача внутри самого контроллера)?
2) укоротил бы текст выводимого сообщения. Судя по логам криво отрабатывает одно конткретное длинное сообщение(может там вообще символ какой кривой закрался).
 

Slacky

Member
1) Я бы добавил к логу тайминги от начала цикла. Не происходит ли этот сбой строго через опреленное время после выхода чипа из сна (ака отрабатывает какая то высокоприоритетная внутренняя задача внутри самого контроллера)?
2) укоротил бы текст выводимого сообщения. Судя по логам криво отрабатывает одно конткретное длинное сообщение(может там вообще символ какой кривой закрался).
Про тайминги проверю, но не уверен, что это правильный путь.
Про длинные сообщения, не такие уж они и длинные. Должно выглядеть так. И мусорит, если приглядеться, в разных местах.
Код:
hot counter - 2950
Save config to flash. watermeter_config.flash_addr - 0x67000
set_adv_data()
hot counter - 2960
Save config to flash. watermeter_config.flash_addr - 0x68000
set_adv_data()
Connect
Disconnect
hot counter - 2970
Save config to flash. watermeter_config.flash_addr - 0x69000
set_adv_data()
 
Сверху Снизу