Strona 4 z 5
Re: Udoskonalony Termometr bezprzewodowy
: 13 wrz 2021, 8:58
autor: niveasoft
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.
Re: Udoskonalony Termometr bezprzewodowy
: 13 wrz 2021, 10:56
autor: inspector_electro
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?
Re: Udoskonalony Termometr bezprzewodowy
: 13 wrz 2021, 20:45
autor: inspector_electro
Korzystam z tego kodu. Kompiluję go i wgrywam do tiny. Terminale milczą. Sprawdziłem też inne moduły USB TTL.
$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
Re: Udoskonalony Termometr bezprzewodowy
: 13 wrz 2021, 20:51
autor: niveasoft
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
Re: Udoskonalony Termometr bezprzewodowy
: 13 wrz 2021, 21:21
autor: inspector_electro
Ż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?
Re: Udoskonalony Termometr bezprzewodowy
: 13 wrz 2021, 21:23
autor: inspector_electro
niveasoft pisze: ↑13 wrz 2021, 20:51
Ten Tiny13 nadaje w Bin a nie w ASCII więc może w normalnym terminalu nic nie zobaczysz.
Faktycha. Nie zajarzyłem tego. Ale teoretycznie powinno wywalać krzaki na terminalu.
Re: Udoskonalony Termometr bezprzewodowy
: 13 wrz 2021, 21:45
autor: niveasoft
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
Re: Udoskonalony Termometr bezprzewodowy
: 13 wrz 2021, 21:49
autor: inspector_electro
Ok. dzięki sprawdzę.
Re: Udoskonalony Termometr bezprzewodowy
: 14 wrz 2021, 8:25
autor: inspector_electro
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.
Re: Udoskonalony Termometr bezprzewodowy
: 14 wrz 2021, 8:42
autor: niveasoft
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 :
Buffer(1) = 1wread(9)
For N = 1 to 9
Print Hex(buffer(n) ;
Next
No po prostu zobacz co tam się dzieje bo ja Tobie komunikacji z DS`em nie poprawię.