> Описание: Разработка дешевого UART-BT4.0-AtomSwift моста
Syph3r
Отправлено: 29 Апреля, 2020 - 15:24:35
Post Id



Частый гость


Off-line
Сообщений всего: 96
Дата рег-ции: Авг. 2018  
Откуда: Россия, Кавказ
Репутация: 26




Описание проекта

Приветствую всех участников нашего форума!

2 месяца назад в голову пришла идея купить за 1.5$ модуль BT4.0 AT-09 (с SOC CC2541 - на аналогичном камне сделан BT кусок AtomFast/Swift) и запилить из него мост UART - приложение AtomSwift, т.е. купив отладчик CC Debugger разработать собственную прошивку для него, описав BT профиль Atom.

В интернете гуляет инфа как при помощи обычной Arduino выполнить прошивку данного модуля без отладчика CC Debugger, поэтому данный проект может стать вполне народным, т.к. 1.5$ за такой модуль может себе позволить я думаю любой участник форума строящий самодельный дозиметр, или решивший модифицировать ДП-5 данным модулем + Arduino или другой МК, или прикрутив к самодельному спектрометру, сделав из него шустрый дозиметр с возможностью построения трека на карте в реальном времени при обследовании местности.

Для быстрой отладки был на скорою руку набросан софт под винду для генерирования рандомных, но приближенных к реальности данных и отправки их через преобразователь USB-UART в данный BT модуль.
На данный момент описана основная часть профиля Atom для вывода в приложение дозы, мощности дозы и прочих параметров описанных в основной измерительной характеристике, срисована схема модуля, что бы понимать что куда подключать, скриншоты реальной работы модуля см. ниже. ВПО модуля работает в прозрачном режиме - т.е. что пользователь отправил по UART , модуль эти данные передаст в нужном формате по BT в приложение.
Ну и если забыли приложение AtomSwift позволяет выводить трек на карты с привязкой по GPS/ГЛОНАСС.

Модуль на данный момент работает только в активном режиме (без сна) и жрет порядка 8мА.

А теперь о грустном, из-за долбанного вируса, изменились условия основной работы, соответственно отсутствует толком время и силы на продолжение данного проекта, т.к. уже в течении 2х недель до него не доходили руки и чувствую может уже толком не дойти, т.к. компанию из-за гребаных карантинов и прочего дерьма нужно вытаскивать из жопы. В связи с этим решил о проекте объявить сегодня, а не после его полноценного альфа тестирования.

Соответственно, если есть на форуме заинтересованные лица владеющие на нормальном уровне си, и готовые потратить 10-12$ на приобретение в Китае отладчика CC Debugger и BT модуля, могу предоставить исходники для дальнейшей совместной работы и рассказать что да как.
Условий несколько:
1. проект народный, поэтому все в дальнейшем разработанные исходники в открытый доступ - сюда (через галерею форума в архиве) и на гит;
2. запрет использования в целях наживы (коммерческие проекты, продажа прошитых модулей, продажа исходников/бинарников прошивок) - в случае появления таких хитрожопых - админом будут выпиливаться данные личности и их объявления с форума.

По-сути осталось допилить правильный уход в сон, с выключением uart и правильное пробуждение с включением uart.

В общем если есть заинтересованные с нормальным уровнем владения си - велком как говорится, если нет буду потихоньку пилить по мере возможности.

ЗЫ: для тех кто посчитает этот проект нелегальным - Madmax дал добро на сие использование его приложения.

Добавлено 21:00 29.04.20:
Вероятно на днях выгружу текущий бинарник для прошивки модуля и исходники/бинарник ПО под винду, что бы заинтересованные могли изучить протокол и способ обмена для прикручивания модуля к своему дозиметру на ардуине или другом МК. Ну и инфу куда что подпаивать для прошивки.



Мой жопограм

(Отредактировано автором: 30 Апреля, 2020 - 14:14:24)

 
 Top
ЗДЕСЬ МОГЛА БЫТЬ ВАША РЕКЛАМА
а пока можете посетить ресурс: блог сисадмина-пайщика




Убедительная просьба для всех. Загружайте пожалуйста фотографии в нашу фотогалерею по адресу http://rhbz.pw У кого нет учетной записи - отпишитесь в этой теме ЗДЕСЬ либо в ЛС к BON'у
Matrix
Отправлено: 29 Апреля, 2020 - 19:37:57
Post Id


Super Member


Off-line
Сообщений всего: 538
Дата рег-ции: Апр. 2016  
Откуда: Israel
Репутация: 25




"BT профиль Atom" это изначально открытая информация (открытый протокол)?
 
 Top
Syph3r
Отправлено: 29 Апреля, 2020 - 19:40:46
Post Id



Частый гость


Off-line
Сообщений всего: 96
Дата рег-ции: Авг. 2018  
Откуда: Россия, Кавказ
Репутация: 26




 Matrix пишет:
"BT профиль Atom" это изначально открытая информация (открытый протокол)?
Да, открытый, спецификация существует, и для не коммерческого использования Максим мне его предоставил, какая то информация была получена/подтверждена снифером. Единственное в этой спецификации есть опечатки, и она предназначена для разработчиков приложений для телефонов/компьютеров, если хорошо по форуму поискать - можно её найти, Максим уже ранее делился с народом несколько лет назад, но видимо не осилили.

(Отредактировано автором: 29 Апреля, 2020 - 19:58:36)

 
 Top
Syph3r
Отправлено: 30 Апреля, 2020 - 14:12:27
Post Id



Частый гость


Off-line
Сообщений всего: 96
Дата рег-ции: Авг. 2018  
Откуда: Россия, Кавказ
Репутация: 26




Порядок прошивки модуля AT-09 с использованием Arduino
(я использовал Arduino UNO взятую у товарища, что бы проверить способ прошивки без специализированного отладчика)

1. Скачать из любого источника и установить Arduino IDE (я использовал портативную 1.8.11, скачанную https://amperka.ru/page/arduino-ide)
2. Скачать архив с моей прошивкой и Arduino CCLoader см. ниже.
3. Залить в Arduino скетч CCLoader/CCLoader.ino
4. Соединить Arduino c модулем следующим образом:
- 4 порт Arduino к RESET_N модуля;
- 5 порт Arduino к P2.2 (DebugData) модуля;
- 6 порт Arduino к P2.1 (DebugClock) модуля;
- подключить землю GND и питание +3.3V в случае если модуль без переходной платы, или +5V если модуль с переходной печатной платой.
5. Открыть окно коммандной строки в окне с CCLoader.exe (правой кнопкой мыши с зажатым шифтом) и запустить прошивку следующей командой:
CCLoader.exe 9 ProtonBridge.bin 0
(9 это СОМ9, 0 это устройство по умолчанию - UNO)
Если висит на надписи Waiting for respond from Arduino - проверить правильность подключения, нажать ctrl+c и еще раз дать команду, софт бывает тупит даже при правильном подключении.
6. Модуль успешно прошит.



В случае если я когда то в запарке положу вместо ProtonBridge.bin файл с расширением hex - ProtonBridge.hex, то тогда качаем SRecord отсюда "http://srecord.sourceforge.net/download.html" и командой "srec_cat ProtonBridge.hex -Intel -o ProtonBridge.bin -Binary" выполняем его конвертирование из hex в bin. И добить "FF" конец файла до адреса "3FFFF" (примерно 138126 пустых байт, до итогового размера в 256кБ).

Напомню, что текущая версия без ухода в сон, соответственно жрет как свинья помои - порядка 8мА!
В приложении под винду можно легко понять что слать модулю, на какой скорости, и в каком формате (старался оставлять подробные комментарии), писал код по быстрому, без вылизывания и прочей красоты. Как будет время накидаю описание протокола.

Arduino CCLoader использован от RedBearLab, там можно найти сборку под Linux - https://github.com/RedBearLab/CCLoader.

USB-UART адаптер для проверки функционала модуля нужно использовать с уровнем единицы не более 3.6В! Либо делать схему согласования уровней, схем в сети куча. Я использовал свой универсальный сдвоенный преобразователь на FT2232.

Скачать:
ArduinoCCLoader+ProtonBridge.bin от 30.04.20
ProtonBridgeTestApp от 30.04.20 (EXE файл лежит по пути ProtonBridgeTestApp\bin\Debug)

(Отредактировано автором: 30 Апреля, 2020 - 21:58:10)

 
 Top
dozik
Отправлено: 30 Апреля, 2020 - 18:02:01
Post Id



Прописавшийся на форуме


Off-line
Сообщений всего: 389
Дата рег-ции: Нояб. 2013  
Откуда: Крым
Репутация: 2




А чем оно лучше чем приложение atom simple? Оно кстати и по поводу хорошо работает
 
 Top
Syph3r
Отправлено: 30 Апреля, 2020 - 18:21:04
Post Id



Частый гость


Off-line
Сообщений всего: 96
Дата рег-ции: Авг. 2018  
Откуда: Россия, Кавказ
Репутация: 26




 dozik пишет:
А чем оно лучше чем приложение atom simple? Оно кстати и по поводу хорошо работает

Да впринципе достоинств несколько:
1. не ограничены в типах счётчиков (в приложении AtomSimple максимально что можно выставить в скрытых настройках это 99 имп./мкР, а тут вплоть до размерности float, согласно описания профиля, можно свободно встроить в СРП или применить слюдяной датчик);
2. отсутствует провод;
3. есть возможность построения трека на карте в реальном времени;
4. ну и остальной функционал приложения AtomSwift (3 порога вместо одного как в Simple, наличие архива и прочие плюшки которых я уже не помню).

Просто несколько лет назад после покупки AtomFast'a знакомые строящие самодельные дозиметры с восхищением смотрели на софт для ведра, но тогда что то и мысли не пришло поискать дешёвый BT модуль что бы запилить такую вещь. Я думаю найдутся рукастые кому пригодится, и мои потраченные десятки часов не будут напрасны. Как будет возможность допилю потребление, а может найдется энтузиаст который подхватит, ибо тут деятельности куча - можно ведь и полностью на модуль повесить и счёт импульсов и генерирование высокого напряжения для питания трубки, ибо на борту полноценный МК с прерываниями и АЦП.

(Отредактировано автором: 30 Апреля, 2020 - 18:21:30)

 
 Top
Syph3r
Отправлено: 01 Мая, 2020 - 14:03:38
Post Id



Частый гость


Off-line
Сообщений всего: 96
Дата рег-ции: Авг. 2018  
Откуда: Россия, Кавказ
Репутация: 26




Обновление от 01.05.20

Чуть выкроил времени, для разъяснения принципа обмена с модулем.
Добавил возможность полной записи\чтения всех характеристик описанных в AtomService BLE (до этого была возможность только записи по UART в "Основную измерительную характеристику", "Дополнительную измерительную характеристику", и одного параметра в "Основную калибровочную характеристику" ).
Напоминаю что модуль работает в прозрачном режиме т.е. он только принимает и передает данные между вашим устройством и приложением AtomSwift, данные не обрабатываются (принял в двоичном виде, отправил в двоичном виде), хранятся в ОЗУ модуля без привязки к какому либо типу данных.
Кусок с уходом в сон ещё не реализован, поэтому жор тот же - около 8мА.

Для записи данных в переменные модуля требуется:
1. отправить команду записи "0xA0";
2. отправить адрес переменной "0x02" - к примеру обновим мощность дозы;
3. отправляем данные согласно описания AtomService BLE размером 4 байта: "66E6F642" - к примеру мощность дозы равную "123,45 мкЗв/ч" (123,45(float) это в hex 0x42f6e666, ну и отправляем в порт начиная с младших байт 66 потом E6 потом F6 потом 42).
Итого требуется швырнуть в порт "A00266E6F642", думаю понятно.

Для чтения данных из переменных модуля требуется:
1. отправить команду чтения "0xB0";
2. отправить адрес переменной "0x02" - к примеру получим мощность дозы;
3. принять данные согласно описания AtomService BLE размером 4 байта: "66E6F642", соответственно положить данные в свою переменную нужно в обратном порядке, что бы получилось число 0x42f6e666, которое во float имеет значение 123,45.

Для новичков в программировании - отправка/прием должен осуществляться не в ASCII, а в двоичном формате(команды отправляются не текстом как в терминалах).

Описание адресов:

//Основная измерительная характеристика
0x00: //Флаги
0x01: //Накопленная доза в ​ mSv (миллизиверты)
0x02: //Мощность дозы в ​ µSv/h​ (микрозивертыв час)
0x03: //Число импульсов за последние 2 секунды
0x04: //Процент заряда батареи (0..100), %
0x05: //Температура (­128..127), ºC

//Дополнительная измерительная характеристика (можно в нее не писать данные, приложение AtomSwift их не обрабатывает как я понял)
0x10: //Общее число импульсов
0x11: //Число импульсов коррекции на мёртвое время датчика
0x12: //Общее число импульсов за N секунд
0x13: //Время измерения дозы в секундах

//Характеристика настроек индикации превышения 1 порога
0x20: //Порог включения сигнала о превышении накопленной дозы
0x21: //Порог срабатывания сигнала о превышении мощности дозы
0x22: //Время детектирования превышения мощности дозы
0x23: //Байт управления виброзвуковой сигнализацией

//Характеристика настроек индикации превышения 2 порога
0x30: //Порог включения сигнала о превышении накопленной дозы
0x31: //Порог срабатывания сигнала о превышении мощности дозы
0x32: //Время детектирования превышения мощности дозы
0x33: //Байт управления виброзвуковой сигнализацией

//Характеристика настроек индикации превышения 3 порога
0x40: //Порог включения сигнала о превышении накопленной дозы
0x41: //Порог срабатывания сигнала о превышении мощности дозы
0x42: //Время детектирования превышения мощности дозы
0x43: //Байт управления виброзвуковой сигнализацией

//Характеристика управления устройством
0x50: //Команда, на чтение всегда 0x00
0x51: //Параметр #1
0x52: //Параметр #2
0x53: //Параметр #3

//Основная калибровочная характеристика
0x60: //Чувствительность датчика
0x61: //Фоновый счёт датчика
0x62: //Мертвое время датчика
0x63: //Время измерения мощности дозы
0x64: //Пароль для записи калибровки в RAM

//Характеристика служебных данных
0x70: //Команда, на чтение
0x71: //Параметры #1-­#8

//Характеристика текстового описания
0x80: //Произвольная строка

Размерность и тип данных подробно описан в AtomService BLE. Выложена с согласия Максима.
В самом приложении AtomSwift принято за 1 мкЗв/ч = 100 мкР/ч, а не так как оговорено в AtomService BLE, соответственно в своем устройстве выполняйте аналогичный перевод 1:100.

Режим измерения
Есть небольшая тонкость в работе режима изменения. Приложение Atom Swift выполняет расчет в этом режиме исходя из накопленной дозы, соответственно ее нужно точно считать и слать модулю аналогично всем данным раз в секунду (чаще смысла нет, текущая версия прошивки, раз в секунду эти данные через уведомление отсылает приложению), более подробно как это работает - можно посмотреть запустив режим симуляции в тестовом приложении для винды. Если переменную накопленной дозы не обновлять, у вас приложение в режиме измерения будет вечно крутить мнемонику загрузки.

Выключение
В данный момент выключить/включить его можно только отключением/включением питания. Сон и вход EN ещё не реализован.

Скачать:
AtomServiceBLE4-v.0.2
ProtonBridge.bin от 01.05.20

(Отредактировано автором: 02 Мая, 2020 - 11:58:02)

 
 Top
Syph3r
Отправлено: 09 Мая, 2020 - 10:30:39
Post Id



Частый гость


Off-line
Сообщений всего: 96
Дата рег-ции: Авг. 2018  
Откуда: Россия, Кавказ
Репутация: 26




Содержимого переменных\регистров доступных через BLE оригинального AtomFast

В кумыс обратились несколько человек по поводу содержимого переменных\регистров доступных через BLE оригинального AtomFast. Дабы повторно не отвечать, выкладываю данные снятые BLE монитором с моего купленного у Максима дозиметра AtomFast 4735 (о чем свидетельствует чувствительность 1700 имп/мкР в основной калибровочной характеристике).
0080D444(hex little-endian) -> 44D48000(hex big-endian) -> 1700(float). Для перевода можно заюзать любой конвертер - к примеру https://www.scadacore.com/tools/programming-calculators/online-hex-converter/.
Все читаемо и легко расшифровывается с использованием описания профиля BLE выложенного ранее, в общем курите кому нужно.

(Отредактировано автором: 09 Мая, 2020 - 10:33:56)

 
 Top
Nikita71
Отправлено: 05 Декабря, 2020 - 18:42:43
Post Id



Частый гость


Off-line
Сообщений всего: 95
Дата рег-ции: Сент. 2020  
Откуда: Україна Київ
Репутация: 2




Спасибо автору за замечательную статью. Без проблем прошил блютуз модуль через мегу2560. Модуль блютуз и Ардуино стоят около 8 $ но очень сильно розширяют возможности обычно дозиметра особенно если ето дозиметр серии дп.

Видео моего дозиметра с етим блютуз модулем:

https://youtu.be/_-Sv_p1npYA



Вот скэч для отправки данных через ком порт Ардуино (TX ардуино в RX блютуз модуля)

CODE:
unsigned long cps2; // количество імпульсів за 2 секунди з щотчика гейгера
unsigned long RAD; // уровень радиації
unsigned long DOZA; // получена доза в микроренгенах

unsigned long toch_milis2;

void setup() {
Serial.begin(115200);
}

void loop() {
if (millis() - toch_milis2 >= 1000) {
toch_milis2 = millis();
RAD = 14; // уровень радиації в микроренгенах
BluetoothRAD (); // отравка уровня радиації на телефон

DOZA = 10; // получена доза радіації в микроренгенах
BluetoothDoza (); // отравка уровня дози радіації на телефон

cps2 = 10; // количество імпульсів за 2 секунди з щотчика гейгера ( нужен для режима измерения )
BluetoothCPS (); // отравка количества імпульсів за 2 секунди з щотчика гейгера на телефон
}
}
void BluetoothRAD (){ // уровень радиації
double value;
float value1 = RAD * 0.01;
value = value1;
byte * b = (byte *) & value;
Serial.write(0xA0);
Serial.write(0x02);
Serial.write(b,4);
}
void BluetoothDoza (){ // получено доза радиації
double value3 ;
float value4 = DOZA * 0.00001;
value3 = value4;
byte * c = (byte *) & value3;
Serial.write(0xA0);
Serial.write(0x01);
Serial.write(c,4);
}
void BluetoothCPS (){ // количество імпульсов з щотчика гейгера за 2 сек
double value5;
float value6 = cps2 * 0.01 ;
value5 = value6;
byte * e = (byte *) & value5;
Serial.write(0xA0);
Serial.write(0x03);
Serial.write(e,4);
}
 
 Top
elexx
Отправлено: 07 Марта, 2021 - 19:04:53
Post Id


Бывалый


Off-line
Сообщений всего: 16
Дата рег-ции: Июль 2018  
Откуда: Europe/EastGermany/Saxony/Werdau
Репутация: 4




Hello Syph3r and Nikita71,

I've tried to flash the protonbridge.bin in a CC2541-module and i'm able to send a dose rate from the Arduino to the "Atom Fast" App.

Thank you for your great work! Радость




But now I want to try this:

 Syph3r пишет:
Для чтения данных из переменных модуля требуется:
1. отправить команду чтения "0xB0";
2. отправить адрес переменной "0x02" - к примеру получим мощность дозы;


In the setting of the App is a Switch for the Sound: "no sound", "Clicks" oder "beeps" and I think accordingly to the ATOMSERVICE BLE-Document, this is written to the Parameter #1. I've tried to READ variables from the protonbridge like described, but the CC2541 NEVER sends any data via UART to the Arduino (checked with an oscilloscope on the TxD-pin of the AT-09 module).

I'm sending 0xB0, 0x51 but I get no answer:

CODE:
unsigned long RAD;
unsigned int PARAM;

void setup() {
Serial.begin(115200);
}

void loop() {
RAD = 67;
BluetoothRAD (); // Sende den Strahlungspegel an das Telefon
BluetoothRxParam ();
delay(1000);
}

void BluetoothRAD (){ // dose rate
double value;
float value1 = RAD;
value = value1;
byte * b = (byte *) & value;
Serial.write(0xA0); // WRITE!
Serial.write(0x02); // 0x02: Dosisleistung in µSv/h
Serial.write(b,4); // Serial.write(buf, len)
}

void BluetoothRxParam () {
Serial.write(0xB0); // READ!
Serial.write(0x51); // 0x51, 2 Byte uint, ==> length of the tick in msec

while(Serial.available() >= 2); { // warten, bis 2 Byte im Buffer sind
PARAM = Serial.read(); // MSB
PARAM += Serial.read() << 8 ; // LSB
}
}


@Syph3er, do you have any idea why that is?
Did I misunderstand your explanation?

-----
Немецкий счетчик гейгеров форум: https://www.geigerzaehlerforum.de
 
 Top
Syph3r
Отправлено: 08 Марта, 2021 - 10:46:59
Post Id



Частый гость


Off-line
Сообщений всего: 96
Дата рег-ции: Авг. 2018  
Откуда: Россия, Кавказ
Репутация: 26




elexx hey! sorry, this piece of code was not tested due to lack of time for the project. I see you have an interest in this project. Right?
 
 Top
Syph3r
Отправлено: 08 Марта, 2021 - 11:19:17
Post Id



Частый гость


Off-line
Сообщений всего: 96
Дата рег-ции: Авг. 2018  
Откуда: Россия, Кавказ
Репутация: 26




В общем кому интересно выкладываю проект, ввиду отсутствия на него времени из-за других более приоритетных вещей, да и очередного дерьма в жизни. Поэтому пока не выпилил/ся - забирайте.
Может найдется человек кто добъет энергосбережение и выложит свой вариант здесь.

Для сборки использовать Embedded Workbench for 8051 version 10.30, можете забрать тут:
https://cloud.mail.ru/public/5qgU/xj1xuRHYg

Ну и напоминаю, ввиду собственности протокола Atom BLE КБ Радар - использовать в коммерческих целях запрещается. Хотя как я понимаю многим на это похер.

Сорцы соответственно тут:
https://drive.google.com/file/d/...iew?usp=drivesdk
 
 Top
elexx
Отправлено: 08 Марта, 2021 - 23:06:26
Post Id


Бывалый


Off-line
Сообщений всего: 16
Дата рег-ции: Июль 2018  
Откуда: Europe/EastGermany/Saxony/Werdau
Репутация: 4




 Syph3r пишет:
I see you have an interest in this project. Right?


Yeah, thats right - but I'm not an expert in programming (only a few PIC12Fxxx in the past). I've downloaded, installed and licenced^^ the 8051-Workbench and can now open the Workspace with the sourcefiles. I can compile the sources too and will try to find out why there is no communication.

Thanks for your support! Подмигивание

-----
Немецкий счетчик гейгеров форум: https://www.geigerzaehlerforum.de
 
 Top
elexx
Отправлено: 15 Марта, 2021 - 22:10:16
Post Id


Бывалый


Off-line
Сообщений всего: 16
Дата рег-ции: Июль 2018  
Откуда: Europe/EastGermany/Saxony/Werdau
Репутация: 4




One week later I am 2 steps further:

  1. The Protonbridge never sends any data on the TxD-Pin. Don't know why. But: When I flash the ProtonBridge.bin that i compiled myself with the IAR-Workbench out of the sources, its a difference: Suddenly the TxD-Pin transmits data. Радость
  2. But the data is not as expected. They don't change, if I change a Parameter in the app - they remain at the initialization values. А?!


To change this Behavior:

In protonbridge.c in line 1052 is this:

CODE:
static void protonProfileChangeCB( uint8 paramID )
{
uint8 newValue1[10];
uint8 newValue2[10];
uint8 newValue3[10];
uint8 newValue4[8];
uint8 newValue5[18];
uint8 newValue6[17];
uint8 newValue7[20];

switch( paramID )
{
case PROTONPROFILE_CHAR3:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR3, &newValue1 );
break;

case PROTONPROFILE_CHAR4:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR4, &newValue2 );
break;

case PROTONPROFILE_CHAR5:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR5, &newValue3 );
break;

case PROTONPROFILE_CHAR6:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR6, &newValue4 );
break;

case PROTONPROFILE_CHAR7:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR7, &newValue5 );
break;

case PROTONPROFILE_CHAR8:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR8, &newValue6 );
break;

case PROTONPROFILE_CHAR9:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR9, &newValue7 );
break;

default:
// should not reach here!
break;
}
}


Change this to

CODE:
static void protonProfileChangeCB( uint8 paramID )
{

switch( paramID )
{
case PROTONPROFILE_CHAR3:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR3, &charValue3 );
break;

case PROTONPROFILE_CHAR4:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR4, &charValue4 );
break;

case PROTONPROFILE_CHAR5:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR5, &charValue5 );
break;

case PROTONPROFILE_CHAR6:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR6, &charValue6 );
break;

case PROTONPROFILE_CHAR7:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR7, &charValue7 );
break;

case PROTONPROFILE_CHAR8:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR8, &charValue8 );
break;

case PROTONPROFILE_CHAR9:
ProtonProfile_GetParameter( PROTONPROFILE_CHAR9, &charValue9 );
break;

default:
// should not reach here!
break;
}
}


Afterwards the data transmitted via UART changes, if you change something in the app.
My goal was actually "only" to get the switch "No Sound / Clicks / Beeps" transmitted. So I send 0xB0 ("read" ) , 0x51 ("tick length" ) from the Arduino and get a 2-byte (integer) response back:

  • "No sound" ==> 0
  • "Clicks" ==> 1
  • "Beeps" == 20


Here is a Video which shows this:

https://www.youtube.com/watch?v=-Wd0A_qGAl8



Here is the arduino-code for this Demo:

CODE:
//
// credits to Nikita71 from Kiew, Ukraine
// http://forum.rhbz.org/topic.php?forum=80&topic=98
//
#define CalFactor 3.4 // Calibrierungsfaktor in cps / 1 mR/hr

int PIN_GMZ_count_INPUT = 3; // Interrupteingang für Impulse (fallende Flanke) has to be capable of "interrupt on change"

unsigned long Ticks3,Ticks2,Ticks1,Ticks0;
unsigned long new_millis;
unsigned long old_millis;
unsigned long counter; // Impulszähler für die Interruptroutine


void setup() {
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt (PIN_GMZ_count_INPUT), isr_count, FALLING);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, LOW); // LED aus
BluetoothPutRAD (0.0); // Sende den Strahlungspegel an das Telefon DEMO
delay(3000);
BluetoothPutRAD (111.11); // Sende den Strahlungspegel an das Telefon DEMO
delay(3000);
BluetoothPutRAD (222.22); // Sende den Strahlungspegel an das Telefon DEMO
delay(3000);
BluetoothPutRAD (333.33); // Sende den Strahlungspegel an das Telefon DEMO
delay(3000);
BluetoothPutRAD (444.44); // Sende den Strahlungspegel an das Telefon DEMO
delay(3000);
BluetoothPutRAD (555.55); // Sende den Strahlungspegel an das Telefon DEMO
delay(3000);
BluetoothPutRAD (0.0); // Sende den Strahlungspegel an das Telefon DEMO
}

void loop() {
new_millis = millis();
if (new_millis - old_millis >= 1000) { // immer nach 1000 ms führen wir folgendes aus:
old_millis = new_millis;
Ticks3 = Ticks2; // FIFO 4 Werte
Ticks2 = Ticks1;
Ticks1 = Ticks0;
Ticks0 = counter; // Der Messwert der letzten Sekunde
counter = 0; // Der Impulszähler wieder auf 0, für die nächste Messung

unsigned int param_1 = BluetoothGetParam1();
if (param_1 >= 20) { // LED dauerhaft an (Einstellung "Beeps")
digitalWrite(LED_BUILTIN, HIGH);
}
else if (param_1 >= 1) { // LED blinkt (Einstellung "Clicks")
digitalWrite(LED_BUILTIN, HIGH);
delay(10);
digitalWrite(LED_BUILTIN, LOW);
delay(10);
}
else {
digitalWrite(LED_BUILTIN, LOW); // LED aus (Einstellung "No sound")
}
BluetoothPutRAD ((Ticks0+Ticks1+Ticks2+Ticks3)*2.5/CalFactor); // Sende den Strahlungspegel in µSv gemittelt über 4 Sekunden (4 Messungen) an das Telefon
BluetoothPutCPS (Ticks0+Ticks1); // Sende die Anzahl der Impulse in 2 Sekunden von der Geigersonde zum Telefon (für den Messmodus benötigt)
}
}

void BluetoothPutRAD (double value){ // Strahlungsniveau in µSv/h
byte * p = (byte *) & value;
Serial.write(0xA0); // SCHREIBEN!
Serial.write(0x02); // 0x02: Dosisleistung in µSv/h
Serial.write(p,4); // Serial.write(buf, len)
}

void BluetoothPutCPS (double value){ // Anzahl der Impulse von der Geigersonde für 2 Sekunden
byte * p = (byte *) & value; // e ist ein Pointer auf ein Array von Bytes
Serial.write(0xA0); // SCHREIBEN!
Serial.write(0x03); // 0x03: Anzahl der Impulse in den letzten 2 Sekunden
Serial.write(p,4); // Serial.write(buf, len)
}

unsigned int BluetoothGetParam1 () { // holt einen Parameter der Gerätesteuerungscharakteristik (0x51 , 2 Byte µint, ==> Länge des Ticks in msec
byte buf[4];

Serial.write(0xB0); // LESEN!
Serial.write(0x51); // 0x51, 2 Byte uint, ==> Länge des Ticks in msec // 0x53, 2 Byte uint, ==> Länge der Schwingungsdauer in msec
Serial.setTimeout(500); // Nach max. 500 msec. sollten die Daten gekommen sein
unsigned int rlen = Serial.readBytes(buf, 2);
unsigned int resultat = *((unsigned int *) buf); // https://forum.arduino.cc/index.php?topic=30322.0
if (rlen >= 2) {return resultat; }
}

void isr_count() // in der Interruptroutine ..
{
counter++; // .. wird nur ein Impuls-Zähler bewegt, weiter nichts.
}


This is just the result of my research in short - a more detailed explanation of my debugging i have written here: http://www.geigerzaehlerforum.de...topic,645.0.html (in german). There is also a user who built an "ATOM for the poor" (with an SBM-19) last week. А ты думал?

-----
Немецкий счетчик гейгеров форум: https://www.geigerzaehlerforum.de
 
 Top
Syph3r
Отправлено: 16 Марта, 2021 - 06:56:38
Post Id



Частый гость


Off-line
Сообщений всего: 96
Дата рег-ции: Авг. 2018  
Откуда: Россия, Кавказ
Репутация: 26




Спасибо за корректировку, надеюсь кому то будет полезно.

Thanks for the correction, I hope it will be useful to someone.

(Отредактировано автором: 16 Марта, 2021 - 07:01:15)

 
 Top
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Самодельные дозиметрические приборы »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 

> Похожие темы: ProtonBridge или используем приложение AtomSwift в самодельном дозиметре
Темы Форум Информация о теме Обновление
Электроприводы
фото часто используемых электроприводов пост тока
Всякая разная электронная аппаратура и оборудование Ответов: 19
Автор темы: _Dovnar
23 Февраля, 2023 - 11:04:17
Автор: BON
Радиостанция Р-168-5УН-1
Отечественно-импортная "новая" разработка
Войсковые средства связи Ответов: 8
Автор темы: camuflage-spb
23 Августа, 2016 - 12:30:24
Автор: Сашок
кто возьмётся за разработку прибора
разработка
Самодельные дозиметрические приборы Ответов: 7
Автор темы: 1qaz2wsx
22 Марта, 2020 - 16:21:13
Автор: Zverozavr
radcomm RC2
Что известно о дозиметре
Американские дозиметрические приборы Ответов: 7
Автор темы: Ilya
09 Февраля, 2018 - 07:15:00
Автор: Ilya
Дозиметр МКС-85 «Школьник»
Информация о дозиметре МКС-85 «Школьник»
Российские современные дозиметрические приборы Ответов: 6
Автор темы: gad969
11 Октября, 2016 - 12:42:25
Автор: gad969
Продам Дозиметр QUARTEX за 1200 р., бесплатная доставка
Куплю/продам дозиметры, радиометры, сцинтилляторы Ответов: 6
Автор темы: a55555
23 Мая, 2017 - 17:33:24
Автор: a55555
SFIORA classic vibro что можете сказать об этом дозиметре
Стои ли его покупать
Российские современные дозиметрические приборы Ответов: 14
Автор темы: mirag
31 Октября, 2017 - 16:04:47
Автор: AndreySkv
Детектор-индикатор радиоактивности Квартекс РД 8901 (Quartex RD 8901)
постперестроечное детище
Отечественные дозиметрические приборы Ответов: 25
Автор темы: Sauron
02 Января, 2020 - 21:41:54
Автор: BON
 

Яндекс.Метрика

Вся информация является собственностью www.rhbz.org и охраняется законом об авторском праве.
Копирование материалов условно разрешено
Copyright © 2010 - 2024 rhbz.org

Powered by ExBB

[Script Execution time: 0.6308]     [ Gzipped ]