Mã hóa nào được sử dụng trong tín hiệu này?


19

Tôi có một nhiệt kế hồ bơi không dây giá rẻ (AcuRite 617 1 ) và tôi muốn chặn dữ liệu nhiệt độ ở máy thu và sử dụng nó với hệ thống ghi dữ liệu trên máy vi tính.

Thuận tiện, bên trong máy thu là một bảng đột phá nhỏ được kết nối với ăng-ten và có các chân "V", "G", "D" và "SH" kỹ thuật số:

Bảng RF211

Đây là một đoạn dữ liệu được chụp từ chân "D" trong khi truyền (những điều này xảy ra một lần mỗi phút). Trước phân khúc này, có những dữ liệu dường như là dữ liệu tốc độ cao hơn nhiều, nhưng tôi tin rằng đó có thể là nhiễu - đây là sự khởi đầu của dữ liệu 1.36kHz / 680Hz.

tín hiệu thu được từ chân "D"

Tôi đã googled một chút và không thể tìm thấy một mã hóa trông giống như thế này, nhưng nếu tôi đoán những gì đang xảy ra, đây là những gì tôi nghĩ:

  • 4 chu kỳ ban đầu là 680 Hz là để đồng bộ hóa đồng hồ nhưng không chứa dữ liệu
  • 13 chu kỳ 1,36 kHz (gấp đôi tốc độ ban đầu) xuất hiện có một trong hai dạng: chúng giảm xuống thấp trước điểm giữa của chu kỳ hoặc sau đó - tôi cho rằng một dạng là dạng logic và dạng kia là một số không.
  • sau đó, dường như có một khoảng cách kỳ lạ, nhưng nếu bạn chiết khấu phần thấp là một phần của "1" trước đó, thì khoảng trống còn lại là 735, đó là sự tiếp nối (đúng pha!) của Lời mở đầu 680 Hz.

Tôi đang nhìn vào điều này một cách chính xác? Có một tên cho mã hóa này?

Một số lưu ý thêm trên bảng đột phá:

  • bo mạch được đánh dấu "RF211" và trông rất phù hợp với mục đích chung MICRF211 ", Bộ thu 3w QwikRadio hoạt động ở 433,92 MHz" 3
  • bảng dữ liệu MICRF211 có hình dưới đây (với rất ít lời giải thích), trông giống như những gì tôi đang thấy ngoại trừ sóng vuông tốc độ dữ liệu kép so với chụp của tôi:
    hồ sơ dữ liệu

Cập nhật 2016/02/14: Tôi đã xem lại dự án này và dường như đang nhận được luồng 64 bit sạch giữa phần mở đầu 4 chu kỳ và "postamble" 1 chu kỳ, sau đó bảng hiển thị tắt mô-đun RF bằng cách kéo ^ SH thấp (dòng trên cùng):

64 bit dữ liệu

Theo sơ đồ "33/66% PWM" của Micrel (không xuất hiện ở nơi nào khác trên Google), đó là

-_-_-_-_0000011110011000110000000000000000000000100011101000010010101010-_

Vì vậy, bây giờ tôi phải bắt đầu thao tác nhiệt độ để giải mã các bit. Ở đây ("x") là các bit dường như thay đổi mà không có bất kỳ thay đổi rõ ràng nào trong màn hình:

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

Tôi giả sử đây là các bit có mức độ quan trọng thấp nhất hoặc mức pin (chỉ được hiển thị là "Thấp" khi nó giảm đáng kể).

Cập nhật 2016/02/15: Tôi đang tham gia chương trình trên đường để cung cấp cho stackexchange "Kỹ thuật đảo ngược" mới để xác định ý nghĩa: /reverseengineering/12048/what-is-contained -in-this-Transmission-rf-pool-nhiệt độ-cảm biến-cơ sở-đơn vị-re


BTW - Đọc các bình luận của người dùng tại trang web Home Depot cho đơn vị AcuRite 617 không mang lại cảm giác tốt về độ bền chung của sản phẩm này. Trên thực tế có vẻ như đó là một tư thế vượt trội đối với việc không rò rỉ vào đơn vị người gửi.
Michael Karas

ồ, nó là Của tôi đã bị rò rỉ. nhưng tôi đã làm khô nó và tháo rời nó và có một số mức độ tự tin rằng tôi có thể cải thiện việc niêm phong bằng một số keo nóng và / hoặc silicone. ngăn chứa pin dường như được thiết kế tốt với vòng chữ o; đó là phần còn lại của đơn vị quá tệ và không bao giờ cần phải mở lại ...
Rob Starling

Lướt qua những câu trả lời khác nhưng đây là từ ngoại hình. Sóng vuông ban đầu là để có được bộ cắt dữ liệu được đồng bộ hóa ở mức 50%. Tạm dừng trước khi dữ liệu là để đảm bảo mức "1" bị phân rã. Sau đó 2: 1mk-spc = 1 nói và 1: 2 = 0. Với độ trễ 50:50 không chuyển đổi giữa 1 hoặc 0 BUT trước đó không nên xảy ra trong luồng dữ liệu. Phần trước là "xấu" vì nó không cố gắng duy trì tỷ lệ trung bình 50:50 và mức dc của bạn sẽ trôi đi nếu dữ liệu có nhiều hơn 1 hoặc 0 nhưng nếu hằng số thời gian ở mức DC của bạn dài so với độ dài thông báo thì không vấn đề. Sau đó, bạn nối lại một lần nữa với lời mở đầu 1: 1 cho thông điệp tiếp theo.
Russell McMahon

Bộ giải mã có thể là một opamp với một tín hiệu được cấp đầu vào bởi bộ lọc RC để đặt mức DC trung bình và tín hiệu được cung cấp khác thông qua phản hồi trễ + điện trở (có thể khoảng 4R) để tín hiệu 1: 1 không lật đầu ra mà là 2 : 1 hoặc 1: 2 nào. Một chút chơi với độ trễ% và DC RC thời gian không đổi và nó sẽ hoạt động đủ tốt.
Russell McMahon

Một vài hạt Canxi cacbua hoặc Canxi kim loại ở dưới cùng của vỏ phải giữ cho nó khô và hơi áp lực :-). Không, tôi chưa bao giờ thử điều đó.
Russell McMahon

Câu trả lời:


8

Micrel gọi nó là sơ đồ PWM 33/66%. Nó dường như là một giao thức khá đơn giản, nhưng đặc biệt.

PWM là viết tắt của điều chế độ rộng xung. Có một trang Wikipedia đi sâu vào chi tiết hơn, nhưng tóm lại, PWM là nơi bạn giữ một khoảng thời gian cố định, vì vậy đây là thời gian từ cạnh tăng lên cạnh tăng tiếp theo, nhưng bạn thay đổi tỷ lệ phần trăm thời gian ở mức cao trạng thái bằng cách thay đổi khi cạnh rơi xảy ra. Đối với điều này, bạn có thể thấy rằng nó cao 33% cho '1' và cao 66% cho '0'.

Chuỗi xung ban đầu có thời gian cao và thấp bằng nhau. Điều này thường được thực hiện để cho phép người nhận đồng bộ hóa trước khi nhận được dữ liệu thực tế.

Xem http://www.micrel.com/_PDF/App-Notes/an-22.pdf để biết thêm chi tiết về những gì họ mong đợi cho mô-đun.

Một cách điển hình để có thể nhận loại mã hóa này là nhập mã này vào chân chụp đầu vào bộ hẹn giờ của vi điều khiển. Hoặc, bạn có thể chỉ cần kết nối với một đầu vào chung và lấy mẫu ở khoảng thời gian 4-5 lần. Thuật toán giải mã không quá khó từ đó.

Ngoài ra, như được đề xuất bởi markt, bạn có thể tìm đường quay lại cảm biến nhiệt độ. Nhưng, nếu đó là tín hiệu đầu ra tương tự, bạn sẽ phải tự chuyển đổi nó thành kỹ thuật số và có thể có các số hơi khác nhau khi đăng nhập từ đầu ra ban đầu.


3

Những người quen biết của tôi thường gọi kỹ thuật mã hóa đó là "PWM", mà tôi cho là một mô tả hợp lý.

Suy nghĩ đầu tiên của tôi khi nhìn vào luồng dữ liệu của bạn và giả sử rằng bạn đang đoán chính xác độ phân cực của các bit, đó là cách đọc ADC 12 bit, đầu tiên là LSB, với bit bắt đầu là 1 '. Tôi sẽ đến với LSB trước vì bắt đầu đọc lần tiếp theo có lẽ là một biến thể một bit và không chắc rằng nhiệt độ đọc (nhiệt độ) của ADC sẽ thay đổi theo MSB thứ 2 hoặc thứ 3 trong khung thời gian ngắn đó.

Tôi sẽ đào sâu thêm một chút vào hệ thống, quay lại bất cứ thứ gì đang tạo ra dữ liệu (trái ngược với việc truyền dữ liệu), xem bạn có thể xác định cảm biến nhiệt độ hay không và tìm kiếm mối tương quan giữa dữ liệu truyền và nhiệt độ.


Dường như với tôi rằng @RobStarling đã có thể biết được nhiệt độ truyền là gì nhờ vào việc nhìn vào thiết bị thu và xem những gì đang được hiển thị.
Michael Karas

1
đúng, nhưng những điều này có thể là khó khăn. ví dụ: màn hình có thể chuyển đổi giữa ˚F / ˚C, do đó việc truyền có thể ở mức tuyệt đối ˚C hoặc ˚F hoặc có liên quan đến một số bù lạ hoặc với độ chính xác điểm cố định tùy ý. Ngoài ra, có 3 ID trạm có thể chuyển đổi ("A", "B", "C") và mặc dù thông báo thay đổi ID có thể giúp nhận tín hiệu, tôi có linh cảm đó chỉ là tiền tố nhận dạng trên tin nhắn - tôi sẽ chuyển nó và xem những gì thay đổi trên dữ liệu.
Rob Starling

@RobStarling - Bạn có thể mở đơn vị người gửi để xem liệu họ có đang sử dụng một loại cảm biến nhiệt độ đơn giản như LM75 hoặc một trong các loại I2C phổ biến khác không. Nếu vậy, có khả năng dữ liệu được gửi qua liên kết dưới dạng giá trị nhiệt độ chỉ đơn giản theo sau mà đọc từ thiết bị cảm biến nhiệt độ. Mặt khác, nếu người gửi sử dụng một cảm biến tương tự như diode hoặc bóng bán dẫn BJT làm cảm biến thì sẽ khó khăn hơn để suy ra dữ liệu thực tế được gửi.
Michael Karas

Tôi nghi ngờ rằng cơ hội tốt nhất bạn phải tìm ra nội dung dữ liệu là đặt người gửi vào tình huống được kiểm soát, nơi bạn có thể thay đổi nhiệt độ từ từ để bạn có thể thấy việc đọc thay đổi một chút. Bạn sẽ có màn hình nhận để cho bạn biết những gì đang thực sự được mong đợi.
Michael Karas

@MichaelKara - thật khó để biết cảm biến là gì - nó nằm trên một tấm bảng nhỏ được đặt trong một cái giá đỡ nhỏ ở đầu, được đặt trong một miếng dán nhiệt để ghép nó vào bức tường bên ngoài dưới nước.
Rob Starling

2

Hầu như tất cả các sơ đồ truyền RF sẽ cần phải có một số đặc điểm trong các giao thức mã hóa dữ liệu của chúng. Chúng bao gồm:

  1. Lời mở đầu định dạng nhất quán được sử dụng để khóa tần số máy thu
  2. Một chỉ báo xung đồng bộ để đánh dấu bắt đầu nếu chỉ báo khung
  3. Phương pháp mã hóa dữ liệu 1 và 0 với một số loại xung nhịp được mã hóa để phục hồi dữ liệu.

Xung bóng lẻ mà bạn lưu ý chắc chắn là chỉ báo xung đồng bộ.

Mã hóa dữ liệu dường như tuân theo những gì tôi đã thấy được gọi là mã hóa độ rộng xung. Đây là một kỹ thuật khá phổ biến trong đó một hướng chuyển tiếp tuân theo tần số không đổi dẫn đến thời gian tế bào bit có chiều rộng không đổi. Trong tế bào bit, xung hoạt động được biểu thị bằng 25% thời gian của ô bit hoặc 75% thời gian của ô bit. Lược đồ này không phải là sơ đồ mã hóa cân bằng xung đến xung như cung cấp mã hóa Manchester. Đây là một kỹ thuật phổ biến với mã hóa độ rộng xung để cung cấp cân bằng DC trong giao thức tin nhắn bằng cách gửi thêm bit để tạo sự cân bằng tổng thể trong toàn bộ tin nhắn. Ở dạng đơn giản nhất, dữ liệu được gửi hai lần với bản sao thứ hai được đảo ngược một cách hợp lý.

Trong ví dụ của bạn, thật kỳ quặc khi thấy dữ liệu được điều chế độ rộng xung xảy ra trước xung đồng bộ. Tuy nhiên, đây vẫn là một sơ đồ khả thi nếu thuật toán giải mã dữ liệu được thiết kế chấp nhận dữ liệu nhận được với sự đồng bộ ở vị trí này. Có thể đơn vị đang gửi một loại dữ liệu trước khi đồng bộ hóa và một loại sau. Sự phân chia có thể là giữa địa chỉ cảm biến / dữ liệu tạm thời HOẶC dữ liệu thực / dữ liệu đảo ngược.

Chỉnh sửa:

Thật thú vị khi lưu ý rằng có vẻ như đơn vị máy phát đang sử dụng thuật toán phần mềm khác để tạo độ rộng xung dương cho các ô dữ liệu trước mẫu đồng bộ hóa so với độ rộng xung tại và sau mẫu đồng bộ hóa. Điều này ngụ ý rằng có thể có một phần mềm riêng biệt tạo ra mẫu sớm hơn so với phần tiếp theo của mẫu. Sự khác biệt về mẫu này có thể ngụ ý rằng nguồn dữ liệu trong từng trường hợp yêu cầu xử lý khác nhau về cách nó được truy cập từng chút một. Sự khác biệt nhìn thấy trong sơ đồ thời gian có thể chỉ đơn giản là thời gian hướng dẫn hoặc hai sự khác biệt trong các vòng lặp tạo mẫu.


tôi tự hỏi nếu đây là: preamble (vuông) + bit start (1) + id duy nhất (12 bit) + xung đồng bộ + dữ liệu. (ồ, như bạn đã đề xuất ... ví dụ: có thể nó mong đợiCraftC sẵn sàng cho dữ liệu trong xung đồng bộ hóa)
Rob Starling

2

Tôi đã bắt đầu giải mã Acurite 617 và đây là những quan sát ban đầu của tôi. Tôi có thể nói với bạn rằng byte cuối cùng là một loại byte "kiểm tra" và bên cạnh ba byte cuối cùng chứa nhiệt độ. Các byte này cũng được gửi bằng cách sử dụng bit thứ 7 để tạo chẵn lẻ và chỉ sử dụng nibble thấp hơn của mỗi byte. Tôi đã viết một chương trình Arduino để thu thập dữ liệu và đã thấy các thông báo / nhiệt độ sau đây.

40 ce c0 00 00 0c 03 được
(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

Dữ liệu / temps khác tôi đã thấy là:

E 2 => 73F

F5 => 76F

108 => 80F (81 00 88)

109 => 80F

Sử dụng điều này, bạn sẽ có thể thực hiện chuyển đổi "đường thẳng" (giả định).

Vì tôi không có phạm vi tốt (và thực tế là dữ liệu được gửi một lần một phút) nên tôi không chắc về thời gian của mình. Tôi thấy HI và LO đồng bộ hóa là 720 usec và các bit dữ liệu là 240 và 480 usec.

Hy vọng tôi sẽ có thêm thông tin sau. Tôi có một loạt những thứ này. Ngay khi chúng bắt đầu rò rỉ, tôi lấy chúng ra khỏi hồ bơi và lau khô chúng để sử dụng xung quanh nhà. Các mô-đun 617 sau này (với ốc vít ở dưới và vòng chữ O) dường như tồn tại lâu hơn.


Tôi đã làm thêm một số giải mã. Byte cuối cùng (byte kiểm tra) làm cho XOR của tất cả tám byte bằng 0FFH. Ví dụ: "40 CE C0 00 00 8D 0C 30", 40 xor CE xor C0 xor 00 xor 00 xor 8D xor 0C xor 30 bằng 0FF.

Ngoài ra, tôi đã giảm nhiệt độ xuống 34F và số đếm là 10 thập phân (i, e., 00 00 0A) và ở 80F, số đếm là 264 thập phân (tức là 81 00 88 hoặc 108H).

Từ đây tôi đang sử dụng Temp (F) = 0.1811 * Đếm + 32.1889. Tôi có thể có một khoảng lớn hơn để có được một số dữ liệu tốt hơn nếu tôi thấy bất kỳ lỗi nào.

Nhìn vào chuỗi của Rob Starling vào ngày 2016/02/14:

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

XOR = FF

Đếm = 0E4 hoặc 228

Nhiệt độ = 73,5F


Cảm ơn các bạn!!! Tôi khá chắc chắn rằng con số không chỉ là "đếm", mà là nhiệt độ chính xác trong 0,1C - nghĩa là "toán học" để giải mã 228là nó 22.8C. Đối với Farenheit, làm như bình thường F=C*9/5+32.
Rob Starling

được tóm tắt trên Reverse Engineering SE: Reverseengineering.stackexchange.com/a/13593/15076
Rob Starling

1
Rob, bạn đã đúng - tôi nên thấy điều đó. F = 0,18 * Đếm + 32,0. Điều tốt là bạn đã chỉ ra rằng, tôi sẽ sớm đặt nó vào nước nóng thực sự để có được "m" và "x" tốt hơn bằng cách sử dụng một khoảng rộng hơn.
Ken S

Bạn vẫn có thể muốn thực hiện hiệu chuẩn để có được các số chính xác hơn, vì một số nhà phê bình phàn nàn về việc màn hình bị tắt một vài độ. Tuy nhiên, điều đó cũng có thể chỉ phản ánh thực tế rằng nó chỉ ≈4 "bên dưới bề mặt và hầu hết các nhiệt kế bể bơi trường học cũ nằm trên một chuỗi dài.
Rob Starling

Cập nhật: tôi đã viết một thư viện Arduino - github.com/robstarling/ArduRight - hãy cho tôi biết nếu nó hoạt động cho bạn! Nó có một ví dụ và tất cả mọi thứ. Tham khảo hình ảnh trong bài đăng này, bạn sẽ cần hàn dây vào các chân "SH", "D" và "G". Để chạy phác thảo ví dụ, kết nối các dây đó với các chân 2, 7 và GND tương ứng.
Rob Starling
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.