Яке кодування використовується в цьому сигналі?


19

У мене є дешевий бездротовий термометр для басейну (AcuRite 617 1 ), і я хотів би перехопити дані про температуру на приймачі та використовувати їх у комп’ютеризованій системі реєстрації даних.

Зручно, що всередині приймача розташована невелика плата, що з'єднується з антеною і має цифрові штифти "V", "G", "D" та "SH":

RF211 плата

Ось сегмент захоплених даних зі шпильки "D" під час передачі (вони трапляються один раз на хвилину). Перед цим сегментом є дані, що здаються значно швидшими, але я вважаю, що це може бути шумом - це початок даних 1,36 кГц / 680 Гц.

захоплений сигнал зі штифта "D"

Я трохи погуглився і не можу знайти кодування, яке виглядає так приблизно, але якби я здогадався, що відбувається, ось що я думаю:

  • початкові 4 цикли 680 Гц - це синхронізація годин, але не містить даних
  • 13 циклів 1,36 кГц (2х початкова швидкість), які слідують за цим, мають одну з двох форм: вони або знижуються до середини циклу, або після неї - я вважаю, що одна форма є логічною, а інша дорівнює нулю.
  • після цього, як видається, є дивний проміжок, але якщо ви знизите частину нижнього, що є частиною попереднього "1", то решта пробілу становить 735 мкс, що є (фазово правильним!) продовженням Преамбула 680 Гц.

Я правильно на це дивлюся? Чи існує назва цього кодування?

Деякі додаткові зауваження щодо розбивної дошки:

  • плата позначена "RF211" і виглядає дивовижно відповідно до MICRF211 "загального призначення, 3V QwikRadio приймачем, який працює на 433,92 МГц" 3
  • таблиця даних MICRF211 має такий малюнок (з дуже невеликим поясненням), який виглядає вражаюче як те, що я бачу, за винятком квадратної хвилі з подвійною швидкістю передачі даних у порівнянні з моїм захопленням:
    профіль даних

Оновлення 2016-02-14: Я переглянув цей проект і, здається, отримую чистий 64-бітовий потік між преамбулою 4 циклу та "постамблером" 1 циклу, після чого дисплейна панель вимикає модуль РФ на тягнути ^ SH низько (верхня лінія):

64 біта даних

Відповідно до схеми "33/66% ШІМ" Міцреля (яка більше ніде не з’являється в Google), це

-_-_-_-_0000011110011000110000000000000000000000100011101000010010101010-_

Тому зараз я повинен почати маніпулювати температурою для декодування бітів. Тут ("х") - біти, які, здається, змінюються без видимих ​​змін на дисплеї:

0000011110011000110000000000000000000000100011101000010010101010
------------------------------------------------x----xxxx----xxx

Я припускаю, що це або найменш значущі біти, або рівень акумулятора (який відображається лише як "Низький", коли він значно падає).

Оновлення 2016-02-15: Я беру шоу на шляху, щоб дати новій стеклянній "Reverse Engineering" змінити тріщину при визначенні значення: /reverseengineering/12048/what-is-conposed -in-this-передача-rf-pool-temperature-sensor-base-unit-re


BTW - Читання коментарів користувачів на веб-сайті Home Depot для пристрою AcuRite 617 не дає хорошого відчуття загальної міцності цього продукту. Насправді це звучить так, що це вичерпне становище щодо того, щоб не просочитися до відправника.
Майкл Карась

о, це так. шахта вже просочилася. але я висушив його і розібрав і маю певну впевненість, що я можу покращити герметизацію гарячим клеєм та / або силіконом. відсік акумуляторної батареї, здається, добре розроблений з гідним ущільнювачем; це інша частина, яка так погана, і її ніколи більше не потрібно відкривати ...
Роб Старлінг

Очищені інші відповіді, але це від зовнішності. Початкова квадратна хвиля полягає в тому, щоб синхронізувати фрагмент даних на рівні 50%. Пауза перед даними, щоб переконатися, що рівень "1" зменшився. Тоді 2: 1mk-spc = 1 скажіть і 1: 2 = 0. При гістерезисі 50:50 не перемикання між попередніми 1 або 0, АЛЕ не повинно відбуватися під час потоку даних. Попереднє "погано", оскільки воно не намагається зберегти середнє співвідношення 50:50, а рівень постійного струму буде дрейфувати, якщо в даних більше 1 або 0, але якщо постійна тривалість постійного рівня довга порівняно з довжиною msg, вона не матерія. Потім ви повторно синхронізуєтесь з преамбулою 1: 1 для наступного повідомлення.
Рассел Макмахон

Декодер може бути операційним підсилювачем з одним вхідним сигналом, що подається RC-фільтром, для встановлення середнього рівня постійного струму та іншого поданого сигналу через резистор плюс + зворотний зв'язок гістерезису (можливо, приблизно 4R), щоб сигнал 1: 1 не перевертав вихід, а 2 : 1 або 1: 2 робить. Трохи граючи з гістерезисом% та постійною постійною частотою RC, і він повинен працювати досить добре.
Рассел Макмахон

Кілька гранул карбіду кальцію або металевого кальцію на дні корпусу повинні зберігати його сухим і злегка тисненим :-). Ні, я ніколи цього не пробував.
Рассел Макмахон

Відповіді:


8

Micrel називає це схемою 33/66% ШІМ. Здається, це досить простий, але тимчасовий протокол.

ШІМ розшифровує імпульсну модуляцію. Існує сторінка Вікіпедії, яка детальніше описується, але, коротше кажучи, PWM - це місце, де ви зберігаєте фіксований період, тож ось час від піднімаючого краю до наступного піднімаючого краю, але ви змінюєте відсоток часу, витраченого у високий стан шляхом зміни, коли відбувається падаюча грань Для цього можна побачити, що він високий 33% для '1' і 66% для '0'.

Початкові серії імпульсів рівні високі та низькі. Зазвичай це робиться для того, щоб одержувач міг синхронізуватися до отримання фактичних даних.

Дивіться http://www.micrel.com/_PDF/App-Notes/an-22.pdf для отримання додаткових відомостей про те, що вони очікують від модуля.

Типовим способом отримання такого роду кодування було б введення цього в контактний таймер вводу мікроконтролера. Або ви можете просто підключитися до загального входу та отримати його вибірку в 4-5x періоду ШІМ. Алгоритм декодування звідти не надто жорсткий.

Як варіант, запропонований markt, ви можете повернутись до самого датчика температури. Але, якщо це аналоговий вихідний сигнал, вам доведеться самостійно перетворити його в цифровий, і він може мати дещо інші цифри у вашій реєстрації від вихідного виводу.


3

Люди мого знайомого зазвичай називають таку техніку кодування "ШІМ", яка, напевно, є розумним описом.

Моя перша думка, дивлячись на ваш потік даних і припускаючи, що ви правильно вгадуєте полярність бітів, - це те, що це 12-бітове зчитування АЦП, спочатку LSB, з початковим бітом "1". Я сходжу з LSB спочатку, тому що початок того, що, мабуть, наступне читання, показує однобітну зміну, і навряд чи показник АЦП (басейну) температури буде змінюватися на 2-й або 3-й MSB за той короткий проміжок часу.

Я б занурився трохи далі в систему, повернувшись до того, що генерує дані (на відміну від їх передачі), подивіться, чи можете ви визначити датчик температури, і шукати деяку кореляцію між переданими даними та температурою.


Мені здається, що @RobStarling вже повинен мати можливість знати, яка температура передається, внаслідок перегляду приймального пристрою та перегляду того, що відображається.
Майкл Карась

1
правда, але це може бути хитромудрим. наприклад, дисплей може перемикатися між ˚F / ˚C, тому передача може бути в абсолютній температурі ˚C або orF або відносно якогось дивного зміщення або до якоїсь довільної точності з фіксованою точкою. Крім того, є 3 ідентифікаційні станції, що перемикаються ("A", "B", "C"), і хоча він каже, що зміна ідентифікатора може допомогти прийому, у мене є переконання, що це просто ідентифікаційний префікс у повідомленнях - я перемкну перегляньте, що зміниться на даних.
Роб Старлінг

@RobStarling - Ви можете відкрити відправник, щоб переконатися, що вони використовують простий тип датчика температури, наприклад, LM75 або один з інших поширених типів I2C. Якщо так, то цілком ймовірно, що дані, що надсилаються через посилання, як значення температури просто випливають із зчитування з пристрою датчика температури. З іншого боку, якщо відправник використовує в якості датчика аналоговий датчик, такий як діод або транзистор BJT, було б складніше зробити висновок про фактично надіслані дані.
Майкл Карась

Я підозрюю, що найкращий шанс у вас з’ясувати вміст даних - це розмістити відправника в контрольованій ситуації, коли ви можете повільно змінювати температуру, щоб ви могли бачити, як читання змінюється за раз. У вас буде дисплей приймача, щоб повідомити, що насправді очікується.
Майкл Карась

@MichaelKaras - важко зрозуміти, що таке датчик - він знаходиться на крихітній дошці, забитої в маленький тримач на кінчику, в горщику термопасти, щоб приєднати його до зовнішньої стінки під водою.
Роб Старлінг

2

Практично всі схеми передачі РФ повинні мати кілька характеристик у своїх протоколах кодування даних. Сюди входять:

  1. Преамбула послідовного формату використовується для блокування приймача по частоті
  2. Індикатор імпульсу синхронізації для позначення початку, якщо індикація кадру
  3. Метод кодування даних 1 і 0 з якоюсь кодованою синхронізацією для відновлення даних.

Непарний кульовий імпульс, який ви відзначили, є, безумовно, індикатором імпульсу синхронизації.

Здається, що кодування даних слідує тому, що я бачив, як кодування ширини імпульсу. Це досить поширена методика, коли один напрямок переходу слід за постійною частотою, що веде до постійної ширини бітових частот. Під час бітової комірки активний імпульс представлений як 25% часу бітової комірки або 75% часу бітової комірки. Ця схема не є імпульсно-імпульсною схемою кодування з постійним імпульсом, як це пропонує кодування в Манчестері. Це поширена техніка з кодуванням ширини імпульсу, щоб забезпечити баланс постійного струму в протоколі повідомлення шляхом надсилання додаткових біт для створення загального балансу у всьому повідомленні. У своєму найпростішому вигляді дані надсилаються двічі, при цьому друга копія логічно перевернута.

У вашому прикладі дивно бачити дані, модульовані по ширині імпульсу, що виникають перед імпульсом синхронізації. Однак це все-таки можлива схема, якщо алгоритм декодування даних розроблений, щоб прийняти отримані дані з синхронізацією в цьому положенні. Можливо, що пристрій надсилає один тип даних перед синхронізацією та один після. Розділення може бути між адресою / тимп. Датчиками АБО справжніми даними / перевернутими даними.

Редагувати:

Цікаво зауважити, що це майже схоже на те, що передавальний блок використовує інший програмний алгоритм для формулювання позитивної ширини імпульсу для комірок даних перед схемою синхронізації, ніж для ширини імпульсу на та після схеми синхронізації. Це означає, що може існувати окрема частина програмного забезпечення, що генерує більш ранній шаблон, ніж для наступної частини шаблону. Ця різниця шаблону може означати, що джерело даних у кожному випадку вимагає різної обробки з точки зору способу доступу до нього побітно. Різниця, що спостерігається на діаграмі синхронізації, може бути просто тимчасовою інструкцією або двома різницею циклів генерації візерунків.


мені цікаво, чи це: преамбула (квадрат) + стартовий біт (1) + унікальний ідентифікатор (12 біт) + імпульс синхронізації + дані. (о, як ви запропонували ... наприклад, можливо, він очікує, що µC підготується до даних під час імпульсу синхронізації)
Роб Старлінг

2

Я почав розшифровувати Acurite 617 і ось мої початкові спостереження. Я можу вам сказати, що останній байт - це якийсь байт "перевірки", а наступний до останніх трьох байтів містить температуру. Ці байти також надсилаються за допомогою 7-го біта, щоб зробити рівномірний паритет, і використовується лише нижня клітка кожного байта. Я написав програму Arduino для збору даних і побачив наступні повідомлення / температуру.

40 ce c0 00 00 0c 03 be
(00 0C 03) => 0C3 => 67F

40 ce c0 00 00 0c 84 39
(00 0C 04) => 0C4 => 67F

40 ce c0 00 00 0c 05 b8
(00 0C 05) => 0C5 => 67F

Інші дані / темпи, які я бачив:

E2 => 73F

F5 => 76F

108 => 80F (81 00 88)

109 => 80F

Використовуючи це, ви повинні мати можливість перетворити "пряму лінію" (припущення).

Оскільки я не маю хорошого розмаху (а також те, що дані надсилаються раз на хвилину), я не впевнений у своїх термінах. Я бачу, що синхронізація HI та LO є 720 Usec, а біти даних - 240 та 480 usec.

Сподіваюся, пізніше я отримаю більше інформації. У мене є купа таких. Як тільки вони починають просочуватися, я виймаю їх з басейну і висушую для використання навколо будинку. Пізніші 617 модулів (із відвернутими гвинтами та ущільнювальним кільцем) здаються довше


Я ще дешифрував. Останній байт (перевірити байт) робить XOR з усіх восьми байтів рівним 0FFH. Наприклад, для "40 CE C0 00 00 8D 0C 30", 40 xor CE xor C0 xor 00 xor 00 xor 8D xor 0C xor 30 дорівнює 0FF.

Крім того, я знизив температуру до 34 ° F, і підрахунок становив 10 десятків (i, наприклад, 00 00 0A), а при 80F підрахунок становив 264 десятків (тобто 81 00 88 або 108H).

З цього я використовую Temp (F) = 0,1811 * Count + 32,1889. Я можу отримати більший проміжок часу, щоб отримати кращі дані, якщо побачу помилку.

Дивлячись на рядок Роб Старлінг на 2016-02-14:

00000111/10011000/11000000/00000000/00000000/10001110/10000100/10101010 07 98 C0 00 00 8E 84 AA

XOR = FF

Підрахунок = 0E4 або 228

Температура = 73,5F


Дякую, хлопці!!! Я впевнений, що це число не просто "підрахунок", а навпаки, точна температура в 0,1 С - тобто "математика" для декодування 228- це те, що це 22.8C. Для Фаренхейта зробіть звичайне F=C*9/5+32.
Роб Старлінг

підсумовано на SE Reverse Engineering SE: reverseengineering.stackexchange.com/a/13593/15076
Роб Старлінг

1
Роб, ти маєш рацію - я повинен був це бачити. F = 0,18 * Розрахунок + 32,0. Добре, що ви вказали, що незабаром я збираюся поставити його в справжню гарячу воду, щоб отримати кращі "м" і "х", використовуючи більш широкий проміжок.
Ken S

Ви все ще можете зробити калібрування для отримання більш точних цифр, оскільки кілька рецензентів скаржилися на вимкнення дисплея на пару градусів. Це, однак, може також відображати той факт, що він знаходиться лише на ≈4 "під поверхнею, і більшість термометрів у басейні для старих є на довгій струні.
Роб Старлінг

Оновлення: я написав бібліотеку Arduino - github.com/robstarling/ArduRight - дайте мені знати, чи працює вона для вас! У нього є приклад і все. Посилаючись на малюнок у цій публікації, вам потрібно буде припаяти дроти до штифтів "SH", "D" та "G". Щоб виконати приклад ескізу, підключіть ці дроти до штифтів 2, 7 та GND відповідно.
Роб Старлінг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.