Kod: Zaznacz cały
Dim Ctr As Byte
Dim Dataword As Word
Dim Command As Byte
Dim Dis As String * 20
Dim Calc As Single
Dim Calc2 As Single
Dim Rhlinear As Single
Dim Rhlintemp As Single
Dim Tempc As Single
Dim Tempf As Single
Const C1 = -4
Const C2 = 0.0405
Const C3 = -0.0000028
Const T1c = .01
Const T2 = .00008
Const T1f = .018
Dim Datavalue As Word
Dim Databyte As Byte
************w petli co sekunde
   Command = &B00000011
   Call Getit           'Get the temperature, puts result in "dataword" for us
      '
'   Tempf = T1f * Dataword
'   Tempf = Tempf - 40
   Tempc = T1c * Dataword       'get celcius for later calculations and for "the rest of the world"
   Tempc = Tempc - 40
   Dis = Fusing(tempc , ###.#)
   Lcd " T " ; Dis ; " " ; Chr(0) ; "C  "
   Command = &B00000101
   Call Getit           'get the humidity
   Calc = C2 * Dataword
   Calc2 = Dataword * Dataword       'that "2" in the datasheet sure looked like a footnote for a couple days, nope it means "squared"!
   Calc2 = C3 * Calc2
   Calc = Calc + C1
   Rhlinear = Calc + Calc2
   'Dis = Fusing(rhlinear , "##.##")
   'Print "Humidity adjusted for linear = " ; Dis
   Calc = T2 * Dataword
   Calc = Calc + T1c
   Calc2 = Tempc - 25
   Calc = Calc2 * Calc
   Rhlintemp = Calc + Rhlinear
   Dis = Fusing(rhlintemp , ##.#)
   Lowerline
   Lcd "RH " ; Dis ; " %  "
Sub Getit
'start with "transmission start"
Set Sck
Reset Dataout
Reset Sck
Set Sck
Set Dataout
Reset Sck
'now send the  command
Shiftout Dataout , Sck , Command , 1
'   Ddrb = &B11111101                    'datain is now input
'   Config Pinb.1 = Input                'datain
   Set Sck              'click one more off
   Reset Sck
'   Waitus 10            'no idea why, but it doesn't work without it!
'   Delay
   $asm
    nop
    nop
   $end Asm
   Bitwait Dataout , Reset       'wait for the chip to have data ready
   Shiftin Dataout , Sck , Databyte , 1       'get the MSB
   Datavalue = Databyte
'   Ddrb = &B11111111
'   Config Pinb.1 = Output
   Reset Dataout        'this is the tricky part- Lot's of hair pulling- have to tick the ack!
   Set Sck
   Reset Sck
'   Ddrb = &B11111101                    'datain is now input
'   Config Pinb.1 = Input
   Shiftin Dataout , Sck , Databyte , 1       'get the LSB
   Shift Datavalue , Left , 8
   Datavalue = Datavalue Or Databyte
   'don't tick the clock or ack since we don't need the CRC value, leave it hanging!
   Dataword = Datavalue
'   Ddrb = &B11111111
'   Config Pinb.1 = Output
   Reset Dataout
   Set Sck
   Reset Sck
'   Ddrb = &B11111101                    'datain is now input
'   Config Pinb.1 = Input
   Shiftin Dataout , Sck , Databyte , 1       'not using the CRC value for now- can't figure it out! Anybody know how to impliment?
   'Print "CRC value was - " ; Databyte
'   Ddrb = &B11111111
'   Config Pinb.1 = Output
   Set Dataout
   Set Sck
   Reset Sck
End Sub
 
