Udoskonalony Termometr bezprzewodowy
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Udoskonalony Termometr bezprzewodowy
Spokojnie. To było prawie pięć lat temu...
Nic skomplikowanego tam nie ma. Tiny13 powinien mieć ustawiony Fusebit CKDIV8 czyli tak jak z fabryki po to by pracował na częstotliwości 1.2MHz.
Atmega ma pracować na 8MHz więc dla Mega328P to już trzeba CKDIV8 wyłączyć.
Tiny13 nadaje piątym pinem. Żeby wyeliminować problemy sprzętowe z radiami wystarczy, że połączy się masy układów i pin 5 Tiny13 połączy z RXD wybranej Atmegi. To zadziała jak zwykłe połączenie USART. Jak to nie działa to tym bardziej radia nie ruszą.
To się nie może nie udać. Baudrate tam jest 1200. No zwykły serial tyle że z dodanym buforem FiFo.
Możesz sobie sprawdzić nadajnik Tiny13 podłączając go przejściówką USB<>TTL do terminala w komputerze (taki w którym można wybrać baud 1200 np. HTerm).
Wszystko to da się sprawdzić w kilkanaście minut.
Nic skomplikowanego tam nie ma. Tiny13 powinien mieć ustawiony Fusebit CKDIV8 czyli tak jak z fabryki po to by pracował na częstotliwości 1.2MHz.
Atmega ma pracować na 8MHz więc dla Mega328P to już trzeba CKDIV8 wyłączyć.
Tiny13 nadaje piątym pinem. Żeby wyeliminować problemy sprzętowe z radiami wystarczy, że połączy się masy układów i pin 5 Tiny13 połączy z RXD wybranej Atmegi. To zadziała jak zwykłe połączenie USART. Jak to nie działa to tym bardziej radia nie ruszą.
To się nie może nie udać. Baudrate tam jest 1200. No zwykły serial tyle że z dodanym buforem FiFo.
Możesz sobie sprawdzić nadajnik Tiny13 podłączając go przejściówką USB<>TTL do terminala w komputerze (taki w którym można wybrać baud 1200 np. HTerm).
Wszystko to da się sprawdzić w kilkanaście minut.
-
- Posty: 21
- Rejestracja: 23 kwie 2017, 13:11
Re: Udoskonalony Termometr bezprzewodowy
Wszystko jest tak jak piszesz, poza jednym. Podłączyłem tiny do terminala przez ttl. W terminalu nie wyskakuje nawet krzaczek.
Dioda podłączona do pinu 5 tiny i do plusa tiny, cały czas świeci. Przygasa co jakiś czas na około 200 / 500ms. W tym momencie nie ma żadnych danych w terminalu.
Nie wiem co jest nie tak.
Nie trzeba nic zmieniać w kodzie od tiny?
Dioda podłączona do pinu 5 tiny i do plusa tiny, cały czas świeci. Przygasa co jakiś czas na około 200 / 500ms. W tym momencie nie ma żadnych danych w terminalu.
Nie wiem co jest nie tak.
Nie trzeba nic zmieniać w kodzie od tiny?
-
- Posty: 21
- Rejestracja: 23 kwie 2017, 13:11
Re: Udoskonalony Termometr bezprzewodowy
Korzystam z tego kodu. Kompiluję go i wgrywam do tiny. Terminale milczą. Sprawdziłem też inne moduły USB TTL.
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- $regfile = "ATtiny13.dat"
- $crystal = 1200000
- $hwstack = 4
- $swstack = 2
- $framesize = 24
- '****************************************************
- '* WIRELESS THERMOMETER *
- '* WITH CIRCULAR BUFFER *
- '* TRANSMITTER PART Tiny13 *
- '* niveasoft@tlen.pl *
- '* 2017-03-09 *
- '****************************************************
- '-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.
- ' Schematic and PCB design can be found at http://bart-projects.cba.pl
- $noramclear 'for non clearing Count variable
- Config Watchdog = 8192 : Start Watchdog :
- Const Node_nr = 1
- Const Period_const = 8 '8x8s=~1min
- Config Submode = New
- Tx_pin Alias Portb.0
- Divider_gnd Alias Portb.1
- Battery_terminal Alias Pb3
- Config Tx_pin = Output 'set radio off
- Set Divider_gnd 'no GND for divider
- '-[1WIRE]-
- Config 1wire = Portb.4
- Dim Multip As Byte
- '-[RADIO]-
- Dim Buffer(18) As Byte
- Dim Wrd_1 As Word At Buffer(1) Overlay 'pre
- Dim Wrd_2 As Word At Buffer(3) Overlay 'pre
- Dim Wrd_3 As Word At Buffer(5) Overlay 'ds
- Dim Wrd_4 As Word At Buffer(7) Overlay 'ds
- Dim Wrd_5 As Word At Buffer(9) Overlay 'adc
- Dim Wrd_6 As Word At Buffer(11) Overlay 'adc
- Dim Wrd_7 As Word At Buffer(13) Overlay 'id
- Dim Wrd_8 As Word At Buffer(15) Overlay 'crc
- Dim Wrd_9 As Word At Buffer(17) Overlay 'tail
- Const Tail = &HAA
- 'Wrd_1 = &HAAAA 'for preamble this will send
- 'Wrd_2 = &HAAAA '0101010101010101010101010101...
- '-[BATTERY MEASURE]-
- Dim Adc_read As Word At Buffer(3) Overlay
- '-[POWERSAVING]-
- Dim Count As Byte : Incr Count
- '-[MANCHESTER]- '1 become "01" and 0 become "10" so longest break in TX is "1001"
- Function Code(byref Temp As Byte) As Word 'we use target variable instead local
- Multip = 8
- Do
- Shift Code , Left , 2
- Decr Multip
- If Temp.multip = 1 Then
- Code = Code + 1 '01
- Else
- Code = Code + 2 '10
- End If
- Loop Until Multip = 0
- End Function
- If Count > Period_const Then
- Count = 0
- Config Adc = Single , Prescaler = Auto , Reference = Internal_1.1
- Config Divider_gnd = Output
- Reset Divider_gnd
- Multip = 0
- 1wreset
- If Err = 0 Then
- 1wwrite &HCC
- 1wwrite &H44
- Waitms 750
- 1wreset
- 1wwrite &HCC
- 1wwrite &HBE
- Buffer(1) = 1wread(9)
- If Buffer(8) = &H10 Then
- If Crc8(buffer(1) , 8) <> Buffer(9) Then Multip = 1
- Else
- Multip = 1
- End If
- Else
- Multip = 1
- End If
- If Multip = 0 Then
- Open "COMB.0:1200,8,N,1" For Output As #1
- 'Set Tx_pin
- 'DS18B20
- 'Buffer(1) = &HBB
- 'Buffer(2) = &HBB
- 'ADC
- 'Buffer(3) = &HF0
- 'Buffer(4) = &H00
- Adc_read = Getadc(battery_terminal) 'result in Buffer(1), Buffer(2)
- 'NODE
- Buffer(5) = Node_nr
- Buffer(17) = Node_nr
- 'CRC
- Buffer(18) = Crc8(buffer(1) , 5)
- '' Wrd1 and Wrd2 (four bytes)can be filled at the end so now can be as helpw
- Wrd_3 = Code(buffer(1)) 'ds
- Wrd_4 = Code(buffer(2)) 'ds
- Wrd_5 = Code(buffer(3)) 'adc
- Wrd_6 = Code(buffer(4)) 'adc
- Wrd_7 = Code(buffer(17)) 'id
- Wrd_8 = Code(buffer(18)) 'crc
- Buffer(1) = Tail
- Wrd_9 = Code(buffer(1))
- Buffer(1) = Tail
- Buffer(2) = Tail
- Buffer(3) = Tail
- Buffer(4) = Tail
- Printbin #1 , Buffer(1)
- Reset Tx_pin
- Set Divider_gnd
- End If
- End If
- Stop Adc
- Config Powermode = Powerdown
- End
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Udoskonalony Termometr bezprzewodowy
Ten Tiny13 nadaje w Bin a nie w ASCII więc może w normalnym terminalu nic nie zobaczysz.
Złapię może zaraz jakiegoś Tiny13 i zerknę co tam nadaje
Złapię może zaraz jakiegoś Tiny13 i zerknę co tam nadaje
-
- Posty: 21
- Rejestracja: 23 kwie 2017, 13:11
Re: Udoskonalony Termometr bezprzewodowy
Żeby było ciekawiej, próbowałem też wersję z tiny 85 i - jest dokładnie to samo.
Mam Bascom 81 może tu tkwi problem?
Mam Bascom 81 może tu tkwi problem?
-
- Posty: 21
- Rejestracja: 23 kwie 2017, 13:11
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Udoskonalony Termometr bezprzewodowy
Tak jak się można było spodziewać wszystko działa co widać na screenie.
Tam jest taka zmienna Multip.
W okolicach linii 121 jest warunek "If Multip = 0 Then" Zakomentuj to i End If od niego.
Jeśli jest problem z odczytem DS18B20 (nie ma go, nie odpowiada lub zła CRC) to ta zmienna ma wartość i nic nie jest wysyłane.
Sprawdź Dallasa bo ja mam tu tez inne zadania
Tam jest taka zmienna Multip.
W okolicach linii 121 jest warunek "If Multip = 0 Then" Zakomentuj to i End If od niego.
Jeśli jest problem z odczytem DS18B20 (nie ma go, nie odpowiada lub zła CRC) to ta zmienna ma wartość i nic nie jest wysyłane.
Sprawdź Dallasa bo ja mam tu tez inne zadania
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
-
- Posty: 21
- Rejestracja: 23 kwie 2017, 13:11
Re: Udoskonalony Termometr bezprzewodowy
Ok. dzięki sprawdzę.
-
- Posty: 21
- Rejestracja: 23 kwie 2017, 13:11
Re: Udoskonalony Termometr bezprzewodowy
A więc tak:
Z zaremowanym multip wyświetlacz pokazuje crc ok, napięcie baterii, i temperaturę 136 stopni i się nie zmienia.
Gdy multip jest odkomentowany to brak danych. Mam kilka dallasów i na każdym jest tak samo 136 stopni, lub z multip brak danych.
Testy przeprowadziłem podłączając tiny i megę32 bezpośrednio bez modułów 433mhz.
Z zaremowanym multip wyświetlacz pokazuje crc ok, napięcie baterii, i temperaturę 136 stopni i się nie zmienia.
Gdy multip jest odkomentowany to brak danych. Mam kilka dallasów i na każdym jest tak samo 136 stopni, lub z multip brak danych.
Testy przeprowadziłem podłączając tiny i megę32 bezpośrednio bez modułów 433mhz.
- niveasoft
- Posty: 1239
- Rejestracja: 17 sie 2015, 12:13
- Kontakt:
Re: Udoskonalony Termometr bezprzewodowy
Nie pokazuje CRC ok tylko pokazuje że to właśnie komunikacja z DS`em szwankuje.
Nie wiem czy wiesz, że CRC8 z ośmiu zer to też zero więc gdy DS jest niezasilany lub linia zwarta do masy to CRC nie załatwia sprawy bo będzie się zgadzać. Przewidziano to i jeden bajt w tej transmisji ma stałą wartość &H10. Tak więc i to jest sprawdzane. Jesli odczyta same zera - to ósmy bajt tez ma zera i to jest linia 108. Potem dopiero sprawdza się CRC.
Nie bądź kaczką tylko lekko przerób program na Tiny i wyświetl sobie te dziewięć bajtów z Dallasa na terminalu. Trzy minuty roboty.
Na przykład :
No po prostu zobacz co tam się dzieje bo ja Tobie komunikacji z DS`em nie poprawię.
Nie wiem czy wiesz, że CRC8 z ośmiu zer to też zero więc gdy DS jest niezasilany lub linia zwarta do masy to CRC nie załatwia sprawy bo będzie się zgadzać. Przewidziano to i jeden bajt w tej transmisji ma stałą wartość &H10. Tak więc i to jest sprawdzane. Jesli odczyta same zera - to ósmy bajt tez ma zera i to jest linia 108. Potem dopiero sprawdza się CRC.
Nie bądź kaczką tylko lekko przerób program na Tiny i wyświetl sobie te dziewięć bajtów z Dallasa na terminalu. Trzy minuty roboty.
Na przykład :
Code: [Zaznacz cały] [Rozwiń/Zwiń]
- Buffer(1) = 1wread(9)
- For N = 1 to 9
- Print Hex(buffer(n) ;
- Next