' Tämä ohjelma mittaa lämpötilan DS1621-anturilla ja jos se on yli ' 25 astetta, laittaa hälyledin päälle. DS1621 on asetettu numeroksi ' 72 ja hälyledi on I/O-linjassa 10. ' Kytkentäohjeet löytyvät osoitteesta http://www.esutech.com/OOPic/ 'Lämpötilan mittauksen muuttujia Dim Thermo As New oi2c Dim Thermo8bit as New oByte Dim ThermoHiRes as New oWord Dim ThermoLoRes as New oWord Dim ThermoCounts as New oByte Dim ThermoSlope as New oByte Dim Lampo as New oWord 'Hälytyksen merkkiledin lähtö Dim Haly as New oDIO1 Sub Main() Call Init_Binaarit Call ThermoSetup(72) 'Alustetaan lämpötila-anturi 72 'Vilkutetaan alussa hälytyslediä 3 kertaa merkiksi 'siitä, että OOPic käynnistyi Haly.Value=1 Oopic.Delay = 20 'Odota 0,2 s Haly.Value=0 Oopic.Delay = 20 'Odota 0,2 s Haly.Value=1 Oopic.Delay = 20 'Odota 0,2 s Haly.Value=0 Oopic.Delay = 20 'Odota 0,2 s Haly.Value=1 Oopic.Delay = 20 'Odota 0,2 s Haly.Value=0 Do 'Mitataan lämpötila anturilta numero 72 Lampo = Lampotila(72) 'Jos lämpötila on yli 25 astetta If (Lampo > 2500) then 'Laitetaan hälytysledi päälle Haly.Value=1 Else 'Muutoin sammutetaan se Haly.Value=0 End If Loop End Sub Sub Init_Binaarit() 'Asetetaan binäärilähtöjen suunnat ja pinnit Haly.IOLine = 10 'I/O linja, jota käytetään hälytykselle Haly.Direction = cvOutput 'Suunnaksi lähtö Haly.Value = 0 'Oletuksena pois päältä End Sub Function Lampotila(Anturi as Byte) as Word 'Lukee halutun anturin lämpötilan ja palauttaa sen satakertaisena Thermo.Node = Anturi Lampotila=0 Thermo.Mode = cv7bit 'I2C tila on 7-bittinen Thermo.Width = cv8bit Thermo = &hEE 'Aloita lämpötilan muunnos, komento &hEE Oopic.Delay = 20 'Odota 0,2 s Thermo = &h22 'Lopeta lämpötilan muunnos, komento &h22 Oopic.Delay = 20 'Odota 0,2 s Thermo.Mode = cv10bit 'I2C tila on 10-bittinen Thermo.Width = cv16bit 'Temperature Info on 2 tavua Thermo.Location = &hAA 'Lue lämpötila, komento &hAA OOPic.Delay=2 'Odota 0,02 s ThermoLoRes = (Thermo/256)*100+25 'Lämpötila asteissa * 100 'Anturin sisäisen toiminnan epälineaarisuuden takia tarvitaan 'paria arvo anturin sisältä tarkkan mittaustulokseen laskentaan 'Tarkemmat tiedot kts. DS1621 Data Sheet Thermo.Mode = cv10bit 'I2C tila on 10-bittinen Thermo.Width = cv8bit Thermo.Location = &hA9 'Lue Slope, komento &hA9 ThermoSlope = Thermo Thermo.Location = &hA8 'Lue Counter, komento &hA8 ThermoCounts = Thermo ThermoHiRes = (ThermoSlope-ThermoCounts)*100/ThermoSlope 'Laske ja palauta lämpötila Lampotila = ThermoLoRes+ThermoHiRes End Function Sub ThermoSetup(Anturinro as Byte) 'DS1621:n I2C-osoitteen muodostuminen 'Binäärisenä 1001(a2)(a1)(a0) eli 7-bittisen osoitteen 4 ensimmäistä bittiä 'ovat aina 1001 ja a2 - a0 linjat määrittävät loput bitit. 'Perusosoite on 72 eli silloin a2 - a0 linjat piirillä kytketään maihin, 'muutoin osoitteet muodostuu oheisen taulukon mukaisesti eli 0 tarkoittaa, 'että on kytketty maihin ja 1 että on kytketty +5V. ' Osoite a2 a1 a0 ' 72 0 0 0 ' 73 0 0 1 ' 74 0 1 0 ' 75 0 1 1 ' . ' . Thermo.Node = Anturinro Thermo.Width = cv8bit 'Control Info on 1 tavun Thermo.Mode = cv7bit 'I2C tila on 7-bittinen Thermo = &hEE 'Aloita lämpötilan muunnos, komento &hEE 'Aseta I2C parametrit lämpötilan luentaa varten. Thermo.Width = cv16bit 'Temperature Info on 2 tavua Thermo.Mode = cv10bit 'I2C tila on 10-bittinen Thermo.Location = &hAA 'Lue lämpötila, komento &hAA Thermo.NoInc = cvTrue 'Älä kasvata osoitetta. End Sub