Może się przydać wszędzie tam gdzie chcemy przetestować jak badany układ zachowa się przy wskazaniu innej temperatury. Od -55 do +125 stopni bez mrożenia lub grzania czujników.
-chłodnictwo- -ogrzewanie- i inne..
Druga odsłona
Teraz dodałem kilka ciekawych funkcji: -urządzenie można wyszukiwać poprzez MatchROM, SearchROM a nawet Verify
pozwala to na pracę w środowisku wielu czujników
-urządzenie może skopiować ROM ID działającego czujnika by podmienić go w systemie
Możemy podmienić czujnik w działającym systemie który ma przyuczone ID`y swoich czujników
-temperatury możemy zmieniać z trzema różnymi skokami 0,1st, 0,5st i 1st.`
Można szybko zmienić wielkość skoku temperatury naciskając krótko przycisk enkodera
-urządzenie pamięta nastawy temperatury i po uruchomieniu startuje od zapamiętanej wartości
Jeśli chcemy zapisać wartość wystarczy dłużej przytrzymać przycisk enkodera
-może pracować w trybie odczytu tylko dwóch bajtów lub dziewięciu z CRC
Nie ma znaczenia jak będzie go odpytywał Master. Zachowuje się jak czujnik.
-można przywrócić pierwotne ustawienia
Przytrzymując przycisk podczas uruchamiania można usunąć zapamiętane wartości i urządzenie ma swój ID
Możliwość zasilania z układu lub baterii. Kiedy nie wprowadzamy danych to po chwili podświetlanie obniża swoją moc
Opiszę jeszcze ideę jak mi przyświecała :D
Chodziło o to by można było odłączyć czujnik w pracującym układzie i emulować jego obecność ponieważ jego ID można w sekundę skopiować do urządzenia.
Można więc sprawdzić jak sterownik zamrażarki będzie reagować na -28st a jak na -30st bez potrzeby oczekiwania
To samo z Alarmem o gotującej się wodzie w instalacji C.O. Teraz można bez gotowania wody przetestować Alarm
Urządzenie reaguje na SkipROM, ale też pozwala się wyszukiwać. Niepytane milczy.
Dodatkowo w tej wersji zastosowałem całkowicie nowe podejście i czujnik zawsze odpowiada na zapytania Mastera nawet jeśli akurat kręcimy enkoderem. Brak błędów transmisji był priorytetem.
Nowy filmik
Poprzedni filmik
Poniżej program na którym testowałem urządzenie. Sprawdza CRC, zawartość ósmego bajtu i rózne inne zachowania
$regfile = "m32adef.dat"
$crystal = 8000000
$hwstack = 64
$swstack = 100
$framesize = 100
Config Submode = New
'### LCD DISPLAY ###
Config Lcdpin = Pin , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7 , E = Portc.3 , Rs = Portc.2 ', Wr = Portc.6
Config Lcd = 20x4 'nowy sposób zapisu
Cursor Off Noblink
Cls
Config Porta = Output
Led1 Alias Porta.7
Led2 Alias Porta.6
Config 1wire = Portc.0
'timer
Config Timer1 = Timer , Prescale = 256 , Compare_a = Disconnect , Compare_b = Disconnect , Clear Timer = 1
Enable Compare1a : On Compare1a Timer1_isr Nosave : Compare1a = 31249 '1s @8MHz
Dim 1s As Byte , N As Byte
Dim Id_ds1(8) As Byte
Dim Id_ds2(8) As Byte
Dim Ds_data(9) As Byte , Sum As Byte
Dim T As Integer At Ds_data(1) Overlay 'dwa pierwsze bajty tablicy tworzą tez Integer ;)
Dim Celsius As String * 2
Celsius = "{223}C"
Dim Temp_str As String * 6
Dim Help_str As String * 6
Id_ds1(1) = 1wsearchfirst()
Id_ds2(1) = 1wsearchnext()
Lcd " ID sensor one"
Lowerline
For N = 1 To 8
Lcd Hex(id_ds1(n))
Next N
Waitms 2500 : Cls
Waitms 500
Lcd " ID sensor two"
Lowerline
For N = 1 To 8
Lcd Hex(id_ds2(n))
Next N
1wreset
1wwrite &HCC
1wwrite &H44
Wait 3 : Cls
Enable Interrupts
Do
If 1s = 1 Then
1s = 0
' SENSOR 1
'**************************************
'*** VERIFY IF SENSOR IS PRESENT ***
'*** TEST 8`th BYTE &H10 EXPECTED ***
'*** TEST CRC ***
'**************************************
'start test so LED ON
Set Led1
1wverify Id_ds1(1)
If Err = 0 Then
1wwrite &HBE
Ds_data(1) = 1wread(9)
If Ds_data(8) = &H10 Then
Sum = Crc8(ds_data(1) , 8)
If Sum = Ds_data(9) Then
T = T * 10
T = T \ 16
Help_str = Str(t)
Temp_str = Format(help_str , "#.#")
Locate 1 , 1 : Lcd "T=" ; Temp_str ; Celsius ; Spc(3)
If T > 0 Then Reset Porta.0 Else Set Porta.0
If T > 150 Then Set Porta.1 Else Reset Porta.1
If T > 250 Then Set Porta.2 Else Reset Porta.2
If T > 450 Then Set Porta.3 Else Reset Porta.3
If T > 650 Then Set Porta.4 Else Reset Porta.4
If T > 1000 Then Set Porta.5 Else Reset Porta.5
If T > 1200 Then Set Porta.6 Else Reset Porta.6
'everything OK so LED OFF
Reset Led1
Else
Home : Lcd Spc(16)
Locate 1 , 1 : Lcd "E CRC"
End If
Else
Locate 1 , 1 : Lcd "ERR4 "
End If
Else
Locate 1 , 1 : Lcd "ERR5 "
End If
Set Led2
1wreset
If Err = 0 Then
1wwrite &H55
1wwrite Id_ds2(1) , 8
If Err = 0 Then
1wwrite &HBE
Ds_data(1) = 1wread(2)
T = T * 10
T = T \ 16
Help_str = Str(t)
Temp_str = Format(help_str , "#.#")
Locate 2 , 1 : Lcd "T=" ; Temp_str ; Celsius ; Spc(3)
Reset Led2
Else
'Home : Lcd Spc(16)
Locate 2 , 1 : Lcd "ERR5"
End If
Else
Home : Lcd Spc(16)
Locate 2 , 1 : Lcd "ERR1"
End If
1wreset
If Err = 0 Then
1wwrite &HCC
1wwrite &H44
Else
Locate 2 , 1 : Lcd "ERR2 "
End If
End If
Loop
End
Timer1_isr:
push r24
!in r24,sreg
push r24
1s = 1
'Tuned with NoSave Tool
pop r24
!out sreg,r24
pop r24
Return