Zlecę skomunikowanie ze sobą nadajnika Silicon Labs Si4010 oraz wariometru Flymaster GPS SD (jego odbiornik to Si4355) za pomocą sygnału radiowego. Przy obecnym kodzie źródłowym urządzenie nie pokazuje sygnału nadajnika w swoim interfejsie najprawdopodobniej z powodu niepoprawnego sygnału. Flymaster GPS SD posiada odbiornik radiowy Si4355 i może komunikować się z termometrem dla paralotniarzy TAS (https://www.flymaster.net/tas). TAS ma zasięg 10 metrów i mierzy temperaturę do 50 stopni, natomiast ja potrzebuję zasięg minimum 30 metrów i temperaturę do 130 stopni - tak więc jestem zmuszony stworzyć własne urządzenie.
Od producenta dostałem próbkę kodu TAS, polecili mi żeby w swoim nadajniku "udawać" ten termometr i powinno działać. TAS jest oparty o wycofany już Si4020, którego następcą jest Si4010 (wg producenta są kompatybilne). Wszystko jest w repozytorium: https://gitlab.com/patrykkalinowski/silicon-labs-programs. Próbka kodu od producenta to "rf code.c". W folderze "keyfob_demo_2_flymaster" jest kod źródłowy programu, który udało mi się dotychczas przygotować. Jest to zmodyfikowany przykład z devkitu od producenta, który zapala 3 różne diody w odbiorniku w zależności od naciśniętych przycisków nadajnika ("keyfob_demo_2_original_with_correct_frequency")
Oto dodatkowe informacje które otrzymałem od producenta:
Przedmiotem zlecenia jest:
1. Działający program, na którym nadajnik jest widoczny w odbiorniku
2. Kod opisany komentarzami w stopniu, który umożliwi dalszą pracę nad termometrem (odczyt temperatury z czujnika planuję wysłać do Arduino, w którym przygotuję sygnał wejściowy dla nadajnika)
3. Przeniesienie praw majątkowych
Budżet: 1000zł (do negocjacji)
Termin: możliwie jak najszybciej
Proszę kontaktować się tutaj lub na adres email: patryk.kalinowski(_at_)posteo.net
Pozdrawiam,
Patryk Kalinowski
Od producenta dostałem próbkę kodu TAS, polecili mi żeby w swoim nadajniku "udawać" ten termometr i powinno działać. TAS jest oparty o wycofany już Si4020, którego następcą jest Si4010 (wg producenta są kompatybilne). Wszystko jest w repozytorium: https://gitlab.com/patrykkalinowski/silicon-labs-programs. Próbka kodu od producenta to "rf code.c". W folderze "keyfob_demo_2_flymaster" jest kod źródłowy programu, który udało mi się dotychczas przygotować. Jest to zmodyfikowany przykład z devkitu od producenta, który zapala 3 różne diody w odbiorniku w zależności od naciśniętych przycisków nadajnika ("keyfob_demo_2_original_with_correct_frequency")
Oto dodatkowe informacje które otrzymałem od producenta:
Spoiler:
---
The TAS uses the SI4020, so I guess you can use the same.
When you have stuff going I send you the protocol specification. For testing proposes you can emulate the TAS.
Data can be sent to our instruments using a custom packet. Beside the RF related data, each package includes the instrument type, the serial number, and the data type. So a package should be:
[PREAMBLE][PREAMBLE][PACK_ID][DATA][CRC]
You can use development board to emulate the TAS and send data to our instrument.
Please consider some simple functions that you can use to generate the packet in the file in attachment.
Q: Is Flymaster using OOK or FSK modulation:
A: 2FSK
Q: Which frequency is used?
A: We use 868. In fact we move a little the center frequency to 870 MHz.
Q: Is frequency exactly 870.000 MHz? Default deviation in Si4010 is 119kHz - is it correct for Flymaster?
A: Yes, the frequency is 870MHz. We use 120 KHz for deviation but 119 should be ok. We use 9700 kbps data rate
Q: What's the length of full frame of RF packet?
A: It is flexible but at least you SHOULD send
4 bytes for preamble + 2 for syncword + 2 for datatype and ID + 2 data + 1 for CRC
Q: In example code, CalculateCrc function is not included. Is it the same as vCalculateCrc in Si4010?
A: No. Please consider the "rf code.c"
---
A więc po kolei to, co udało mi się zrobić na podstawie wskazań z RF CODE:
PREAMBLE = 0xAA
4 bajty PREAMBLE = 0xAAAA 0xAAAA
SYNCWORD = 0xD42D
PACKID = 0x1FFF
DATA = 0xAAAA (przykładowa wartość temperatury, nie mam pojęcia jak zostanie odczytana w urządzeniu)
CRC - 0x00
Podsumowując, z tego co rozumiem ramka sygnału powinna wyglądać tak:
0xAAAA 0xAAAA 0xD42D 0x1FFF 0xAAAA 0x00
Wydaje mi się, że wysyłam taki sygnał, ale niestety żadne wykryte urządzenie nie pojawia w odbiorniku.
Oryginalna funkcja generująca CRC w przykładowym programie jest w jednym z poprzednich commitów (https://gitlab.com/patrykkalinowski/silicon-labs-programs/commit/6fcf9b8b6b1a084d0c3df297f51c3d06eb6ccdce#48521c8fde90cbdd5d7c42230d7a2925385321ff_364_371), natomiast została ona zastąpiona w masterze tą z "rf code.c"
Od innej osoby uzyskałem informację, że przy DATA = 0xAAAA, wynik CRC wyniesie zero (czyli w teorii jest dobrze). Nie jestem pewien czy SYNCWORD powinien wynosić 0xD42D czy 0x2DD4.
Więcej materiałów w linkach:
https://www.silabs.com/documents/public/data-sheets/Si4355.pdf
https://www.silabs.com/documents/public/data-sheets/Si4010.pdf
Si4010 programming guide: https://www.silabs.com/documents/public/application-notes/AN370.pdf
https://gitlab.com/patrykkalinowski/si4010-example-programs
---
The TAS uses the SI4020, so I guess you can use the same.
When you have stuff going I send you the protocol specification. For testing proposes you can emulate the TAS.
Data can be sent to our instruments using a custom packet. Beside the RF related data, each package includes the instrument type, the serial number, and the data type. So a package should be:
[PREAMBLE][PREAMBLE][PACK_ID][DATA][CRC]
You can use development board to emulate the TAS and send data to our instrument.
Please consider some simple functions that you can use to generate the packet in the file in attachment.
Q: Is Flymaster using OOK or FSK modulation:
A: 2FSK
Q: Which frequency is used?
A: We use 868. In fact we move a little the center frequency to 870 MHz.
Q: Is frequency exactly 870.000 MHz? Default deviation in Si4010 is 119kHz - is it correct for Flymaster?
A: Yes, the frequency is 870MHz. We use 120 KHz for deviation but 119 should be ok. We use 9700 kbps data rate
Q: What's the length of full frame of RF packet?
A: It is flexible but at least you SHOULD send
4 bytes for preamble + 2 for syncword + 2 for datatype and ID + 2 data + 1 for CRC
Q: In example code, CalculateCrc function is not included. Is it the same as vCalculateCrc in Si4010?
A: No. Please consider the "rf code.c"
---
A więc po kolei to, co udało mi się zrobić na podstawie wskazań z RF CODE:
PREAMBLE = 0xAA
4 bajty PREAMBLE = 0xAAAA 0xAAAA
SYNCWORD = 0xD42D
PACKID = 0x1FFF
DATA = 0xAAAA (przykładowa wartość temperatury, nie mam pojęcia jak zostanie odczytana w urządzeniu)
CRC - 0x00
Podsumowując, z tego co rozumiem ramka sygnału powinna wyglądać tak:
0xAAAA 0xAAAA 0xD42D 0x1FFF 0xAAAA 0x00
Wydaje mi się, że wysyłam taki sygnał, ale niestety żadne wykryte urządzenie nie pojawia w odbiorniku.
Oryginalna funkcja generująca CRC w przykładowym programie jest w jednym z poprzednich commitów (https://gitlab.com/patrykkalinowski/silicon-labs-programs/commit/6fcf9b8b6b1a084d0c3df297f51c3d06eb6ccdce#48521c8fde90cbdd5d7c42230d7a2925385321ff_364_371), natomiast została ona zastąpiona w masterze tą z "rf code.c"
Od innej osoby uzyskałem informację, że przy DATA = 0xAAAA, wynik CRC wyniesie zero (czyli w teorii jest dobrze). Nie jestem pewien czy SYNCWORD powinien wynosić 0xD42D czy 0x2DD4.
Więcej materiałów w linkach:
https://www.silabs.com/documents/public/data-sheets/Si4355.pdf
https://www.silabs.com/documents/public/data-sheets/Si4010.pdf
Si4010 programming guide: https://www.silabs.com/documents/public/application-notes/AN370.pdf
https://gitlab.com/patrykkalinowski/si4010-example-programs
Przedmiotem zlecenia jest:
1. Działający program, na którym nadajnik jest widoczny w odbiorniku
2. Kod opisany komentarzami w stopniu, który umożliwi dalszą pracę nad termometrem (odczyt temperatury z czujnika planuję wysłać do Arduino, w którym przygotuję sygnał wejściowy dla nadajnika)
3. Przeniesienie praw majątkowych
Budżet: 1000zł (do negocjacji)
Termin: możliwie jak najszybciej
Proszę kontaktować się tutaj lub na adres email: patryk.kalinowski(_at_)posteo.net
Pozdrawiam,
Patryk Kalinowski