Urządzenie oprócz temperatury mierzy też napięcie baterii. Dzielnik napięcia potrzebny do pomiaru zasilany jest tylko na czas pomiaru.
Większość czasu urządzenie śpi w trybie Powerdown. Do życia budzi go co około 8 sekund Watchdog.
Całość nie była by nic warta gdyby odbiornik nie potrafił się odnaleźć w szumie eteru.
Tak więc powstał zupełnie nowy kod odbiornika. Teraz przy zasilaniu nadajnika nawet z dwóch baterii czyli przy około 3V i nadawaniu jednej paczki danych bez powtórzeń jest ona dekodowana w odbiorniku z bardzo wysoką skutecznością poprzez ściany domu.
Zastosowałem bufor cykliczny w którym wykrywam ostatni bajt całej ramki. Wielkość bufora została tak dobrana że po wykryciu ostatniego bajtu ramki w buforze zmieszczą się tylko dane a preambuła zostaje odrzucona. Odpada więc wykrywanie początku transmisji.
Całość została zaopatrzona w sprawdzanie sum kontrolnych.
Kod: Zaznacz cały
'****************************************************
'* WIRELESS THERMOMETER *
'* WITH CIRCULAR BUFFER *
'* TRANSMITTER PART *
'* niveasoft(at)tlen.pl *
'* 2017-01-20 *
'****************************************************
'-DESCRIPTION-
' For energy saving device is in Powerdown Mode most of the time.
' It weakup after Watchdog Restart every ~8s
' SRAM is not cleared so even after Reset variable Count holds seconds counter
' So every ~8s x Period_const device read Raw data from DS18B20 and measure battery voltage.
' If no error has occured then it packed data, own number and calculated CRC is coded
' into Manchester and send via radio.
' Also for energy saving voltage divider is enabled only for measure time.
Kod: Zaznacz cały
'****************************************************
'* WIRELESS THERMOMETER *
'* WITH CIRCULAR BUFFER *
'* RECEIVER PART *
'* niveasoft(at)tlen.pl *
'* 2017-01-20 *
'****************************************************
'-DESCRIPTION-
' Code receive incomming data in interrupt background mode.
' If special Tail byte is detected then this byte is the last in whole frame.
' Circular buffer size is calculated to hold only 14 bytes.
' So if Tail is detected then rest of buffer must be previous data.
' In this way preamble is rejected and you have only data bytes.
' These are coded im Manchester six bytes. First two contains data from DS18B20
' Second two bytes contains ADC value readed from node battery terminals.
' Fifth byte is a Node number so you can have more of them and recognize.
' Sixth byte is a CRC from provious five bytes.
W paczce znajdują się kody nadajnika, odbiornika, schemat, wzór płytki oraz kilka dodatkowych fotek