DS1621 hőmérés
DS1621 hőmérés
Sziasztok!
Több napos adatlapolvasás, wiki, google után életre keltettem
a DS1621 hőmérő IC-t egy M16 al.
Használnám a termosztát funkcióját.
Az is működik.
De ha csak a DS1621 et használom egy tranzisztoron keresztül ventinlátor kapcsolgatásra, ahogy lehúzom a uC-ről, elfelejt mindent.
Az ACh regiszterben kikapcsoltam az One-Shot módot, bekapcsolam az EEpromot de mégsem jegyzi meg a beállításokat.
Tehát a kérdés az lenne hogy az ACh regiszterben mit álítsak ahoz hogy szólóban is működjön az IC.....
Köszi
Több napos adatlapolvasás, wiki, google után életre keltettem
a DS1621 hőmérő IC-t egy M16 al.
Használnám a termosztát funkcióját.
Az is működik.
De ha csak a DS1621 et használom egy tranzisztoron keresztül ventinlátor kapcsolgatásra, ahogy lehúzom a uC-ről, elfelejt mindent.
Az ACh regiszterben kikapcsoltam az One-Shot módot, bekapcsolam az EEpromot de mégsem jegyzi meg a beállításokat.
Tehát a kérdés az lenne hogy az ACh regiszterben mit álítsak ahoz hogy szólóban is működjön az IC.....
Köszi
Üdvözlet!
Nem tudom, hogy más is találkozott e már olyan problémával a DS1621-nél, mint amilyennel én küzdök.
Adott egy egyszerű hőmérséklet szabályozó program. Annyi a program feladata, hogy méri a hőmérsékletet és kapcsolgat egy relét, plusz kijelzi a mért hőmérsékletet.
A program működik is rendesen már 2 éve használom, kapcsolgat 21 és 22 fok között.
A probléma csak az, hogy ha áramkimaradás van és a helység lehűl 21 fok alá és a feszültség(áram) visszajön, az áramkőr feléled, de nem kapcsolja be a fűtést. Ha kézzel felmelegítem a DS1621-et és az eléri a 21 fokot, ami a minimum érték kezdete, akkor bekapcsolja a fűtést(vezérlést).
Miért van ez, ha a programban a 21 fok alatti hőmérséklet is meg van határozva
valakinek valami ötlete?
köszönöm!
Ui.: Közben eszembe jutott, hogy először egy állítható hőfokú termosztátot akartam csinálni, de itt megbukott a project, amikor állítottam a hőfokot akkor sem akart kapcsolgatni. Na mind egy megemlítettem.
Nem tudom, hogy más is találkozott e már olyan problémával a DS1621-nél, mint amilyennel én küzdök.
Adott egy egyszerű hőmérséklet szabályozó program. Annyi a program feladata, hogy méri a hőmérsékletet és kapcsolgat egy relét, plusz kijelzi a mért hőmérsékletet.
Kód: Egész kijelölése
$regfile = "attiny2313.dat"
$crystal = 4000000
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db7 = Portb.7 , Db6 = Portb.6 , Db5 = Portb.5 , Db4 = Portb.4 , E = Portb.3 , Rs = Portb.2
Config Pind.6 = Output
Config Sda = Portd.0
Config Scl = Portd.1
Dim Tempmsb As Byte
Dim Templsb As Byte
Declare Sub Convert
Declare Sub Readtemp
Declare Sub Lcdre
Declare Sub Szamol
Deflcdchar 0 , 14 , 17 , 17 , 17 , 14 , 32 , 32 , 32
Deflcdchar 1 , 10 , 32 , 14 , 17 , 17 , 17 , 14 , 32
Deflcdchar 2 , 2 , 4 , 14 , 17 , 31 , 16 , 14 , 32
Call Convert
Cursor Off
Cls
Do
Call Readtemp
Call Szamol
Call Lcdre
Wait 1
Loop
'-------------------------
Sub Szamol
If Templsb = 128 Then Templsb = 5 Else Templsb = 0
If Tempmsb >= 22 And Templsb = 0 Then Reset Portd.6
If Tempmsb <= 21 And Templsb = 0 Then Set Portd.6
End Sub Szamol
'-------------------------
Sub Lcdre
Locate 1 , 1 : Lcd "21 C: 22 C"
Locate 2 , 1 : Lcd "M" ; Chr(2) ; "rt h" ; Chr(1) ; "m. " ; Tempmsb ; "," ; Templsb ; Chr(0) ; "C "
End Sub Lcdre
'-------------------------
Sub Convert
I2cstart
I2cwbyte &H90
I2cwbyte &HEE
I2cstop
End Sub Convert
'-------------------------
Sub Readtemp
I2cstart
I2cwbyte &H90
I2cwbyte &HAA
I2cstop
I2cstart
I2cwbyte &H91
I2crbyte Tempmsb , Ack
I2crbyte Templsb , Nack
I2cstop
End Sub Readtemp
A probléma csak az, hogy ha áramkimaradás van és a helység lehűl 21 fok alá és a feszültség(áram) visszajön, az áramkőr feléled, de nem kapcsolja be a fűtést. Ha kézzel felmelegítem a DS1621-et és az eléri a 21 fokot, ami a minimum érték kezdete, akkor bekapcsolja a fűtést(vezérlést).
Miért van ez, ha a programban a 21 fok alatti hőmérséklet is meg van határozva
Kód: Egész kijelölése
If Tempmsb <= 21 And Templsb = 0 Then Set Portd.6
köszönöm!
Ui.: Közben eszembe jutott, hogy először egy állítható hőfokú termosztátot akartam csinálni, de itt megbukott a project, amikor állítottam a hőfokot akkor sem akart kapcsolgatni. Na mind egy megemlítettem.
Kód: Egész kijelölése
If Tempmsb <= 21 Then Set Portd.6 else Reset Portd.6
Ha kell a fél fokos pontossogág:
Kód: Egész kijelölése
Hatarho = 215
Temptemp = Tempmsb * 10
If Templsb = 128 Then Temptemp = Temptemp + 5
If Temptemp <= HatarHo Then Set Portd.6 Else Reset Portd.6
Ja elnéztem bocsánat Akkor csak a második felét vedd figyelembe a hsz nek
viszont akkor is inkább case t használnék
[/code]
viszont akkor is inkább case t használnék
Kód: Egész kijelölése
MinHatarho= 215
MaxHatarho = 225
Temptemp = Tempmsb * 10
Select Case Temptemp
Case Is <= MinHatarho : Set Portd.6
'Case MinHatarho To MaxHatarho : nop
Case Is >= MaxHatarho : ReSet Portd.6
End Select
Üdv!kapu48 írta:Mert rossz a feltétel vizsgálat!
Csak ennyi kel: „ If Tempmsb <= 21 Then Set Portd.6”
„És Templsb = 0” hatására csak minden egész fokon kapcsol neked!
Vagyis csak: 18, 19, 21°-on
Ha nem teszem bele a
Kód: Egész kijelölése
And Templsb = 0
Akkor legyen csak ennyi:
Kód: Egész kijelölése
Dim Tempmsb As Byte
Dim Templsb As Byte
Dim Tempi As Single
'-------------------------
Sub Szamol
If Templsb = 128 Then Templsb = 5 Else Templsb = 0
Tempi = Templsb / 10
Tempi = Tempi + Tempmsb 'Tizedes törtre váltjuk
If Tempi >= 22 Then Reset Portd.6
If Tempi <= 21 Then Set Portd.6
End Sub Szamol
Szia!kapu48 írta:Akkor legyen csak ennyi:Kód: Egész kijelölése
Dim Tempmsb As Byte Dim Templsb As Byte Dim Tempi As Single '------------------------- Sub Szamol If Templsb = 128 Then Templsb = 5 Else Templsb = 0 Tempi = Templsb / 10 Tempi = Tempi + Tempmsb 'Tizedes törtre váltjuk If Tempi >= 22 Then Reset Portd.6 If Tempi <= 21 Then Set Portd.6 End Sub Szamol
A probléma még midig az hogy ha feszültség alá helyezem a kapcsolást és a hőmérséklet teszem azt 20,5°C, akkor sem kapcsol a relé.
De, ha nem melegítem, hanem hűtöm egy jégdarabbal a szenzort, akkor a következő fél fokos lépésnél már meghúzza a relét.
Szóval ha egész nap nem változik a hőmérséklet a helységben, akkor nem fogja felfűteni, mer nem kapcsol a kapcsolás, pedig kijelzi az adott hőmérsékletet, de mindig csak akkor működik, ha az első mérés után egy változás következik be. Ez végül is program szempontból egyfelöl érthető is mert az első méréshez képest a következő változást figyelembe véve kapcsolgat?! De hiszen nem így van programozva. Lehet hogy a konvertálás előtt kiírt 196 zavarja meg? Vagy a DS1621 belső termosztátját kéne programozni? Használjak TC75-öt hátha azzal jó? Vagy LM35-öt?
Mert már nem csak egészekkel számolsz, de ezért javasoltam a select case verziót mert azzal átláthatóan tartományokat is tudsz kezelni. Meg tehetsz be védelmet mondjuk ventillátoros hűtés esetén 22 fokhoz hogy nem hűt ventillátor (túlmelegedtünk). Én 10 el szoroztam De Kapu48 verziója hogy single vltozóba teszi át talán jobb.
'Case MinHatarho To MaxHatarho : nop (bekapcsoláskor a két érték közt nincs művelet de be lehet tenni hogy : Set Portd.6 , így bekapcsiláskor 21,5 foknál is bekapcsol a fűtésed.
'Case MinHatarho To MaxHatarho : nop (bekapcsoláskor a két érték közt nincs művelet de be lehet tenni hogy : Set Portd.6 , így bekapcsiláskor 21,5 foknál is bekapcsol a fűtésed.
Hello.
A várakozás kell, mindenképp ezért:
Temperature Conversion Time 750 ms
Miért nem tizedes pontosággal mérsz?
Amúgy miért nem használod azt ami benne van?:)))
Beállítod az alsó és felső határt. Aztán hajrá mérés.
A megoldás...
The active state for the output is programmable by the user so that an active state may either be a logic
"1" (VDD) or a logic "0" (0V). This is done using the POL bit in the configuration reagister as explained
in the Operation and Control section of this datasheet.
POL = Output Polarity Bit. “1” = active high, “0” = active low. This bit is nonvolatile.
Az utolsó szó a lényeg!!!!
Szóval a relédet hőmérő kimenetével hajtsd.. Igaz Neked kell beírni a bitet, de ha visszajön a delej akkor kapásból tudja mi volt utoljára.
Érted?
két if kell, ha olvasod a status register.
Ha THF bit egy akkor elérte a felső szintet. Beállítod a pol bitet, meg törlöd a THF bitet. A TLF-el hasonlóan csak törlöd a pol bitet.
Sokkal egyszerűbb és átláthatóbb.
Tessen dokumentációt olvasni
Bár ez maximéknál néha nem olyan egyszerű....
By
KN
A várakozás kell, mindenképp ezért:
Temperature Conversion Time 750 ms
Miért nem tizedes pontosággal mérsz?
Amúgy miért nem használod azt ami benne van?:)))
Beállítod az alsó és felső határt. Aztán hajrá mérés.
A megoldás...
The active state for the output is programmable by the user so that an active state may either be a logic
"1" (VDD) or a logic "0" (0V). This is done using the POL bit in the configuration reagister as explained
in the Operation and Control section of this datasheet.
POL = Output Polarity Bit. “1” = active high, “0” = active low. This bit is nonvolatile.
Az utolsó szó a lényeg!!!!
Szóval a relédet hőmérő kimenetével hajtsd.. Igaz Neked kell beírni a bitet, de ha visszajön a delej akkor kapásból tudja mi volt utoljára.
Érted?
két if kell, ha olvasod a status register.
Ha THF bit egy akkor elérte a felső szintet. Beállítod a pol bitet, meg törlöd a THF bitet. A TLF-el hasonlóan csak törlöd a pol bitet.
Sokkal egyszerűbb és átláthatóbb.
Tessen dokumentációt olvasni
Bár ez maximéknál néha nem olyan egyszerű....
By
KN
Nem is olyan kozmikus.
A címben az a huligánság, hogy van benn egy bit is néha, vagy több, amivel megmondod az adat irányát, vagy egyebeket. De ez a doksikban benne van!
Vagy pl van mikor elég megadni az első register címet , ahová/ahonnan írni vagy olvasni akarsz. A többit nem kell, csak olvasni/írni kell az adatot, mert az eszköz inkrementálja a register pointert. Ez segítség, néha átok. Meg van amelyik tudja, van amelyik nem. Alapos doksi átolvasás. Ennyi a titok.
De a gondodra visszatérve használd amit írtam. Akkor bekapcsol a hőmérőd áram kimaradás után is.
A címben az a huligánság, hogy van benn egy bit is néha, vagy több, amivel megmondod az adat irányát, vagy egyebeket. De ez a doksikban benne van!
Vagy pl van mikor elég megadni az első register címet , ahová/ahonnan írni vagy olvasni akarsz. A többit nem kell, csak olvasni/írni kell az adatot, mert az eszköz inkrementálja a register pointert. Ez segítség, néha átok. Meg van amelyik tudja, van amelyik nem. Alapos doksi átolvasás. Ennyi a titok.
De a gondodra visszatérve használd amit írtam. Akkor bekapcsol a hőmérőd áram kimaradás után is.