اطلاعیه

Collapse
No announcement yet.

درخواست کمک برای توضیح برنامه (سنسور رطوبت)

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    درخواست کمک برای توضیح برنامه (سنسور رطوبت)

    سلام
    یکی میتونه این برنامه رو توضیح بده
    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

    Sck Alias Portb.0
    Dataout Alias Portb.1
    Datain Alias Pinb.1
    Redled Alias Portb.2

    Declare Sub Getit()

    Ddrb = &B11111111 'all port b are output
    Config Pinb.0 = Output 'sck
    Config Pinb.1 = Output 'datain

    'reset the serial communications first, it is easily confused!
    Set Dataout
    For Ctr = 1 To 12
    Set Sck
    Waitus 2
    Reset Sck
    Waitus 2
    Next Ctr


    Do 'continually read the tempfature and humidity

    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(tempf , "###.##&quot
    Print "Temperature = " ; Dis ; " (F)"

    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 , "##.##&quot
    'Print "Humidity adjusted for linear = " ; Dis


    Calc = T2 * Dataword
    Calc = Calc + T1c
    Calc2 = Tempc - 25
    Calc = Calc2 * Calc
    Rhlintemp = Calc + Rhlinear

    Dis = Fusing(rhlintemp , "##.##&quot
    Print "Humidity adjusted for temperature = " ; Dis
    Print

    Wait 1
    Loop


    Sub Getit()

    Local Datavalue As Word
    Local Databyte As Byte

    '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!
    Bitwait Pinb.1 , Reset 'wait for the chip to have data ready

    Shiftin Datain , 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 Datain , 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 Datain , 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

    End
    با مردم همون جوری رفتار کن که دوست داری باهات رفتار کنن




    #2
    پاسخ : توضیح برنامه sht 75

    بازم سلام
    من تو سایت مهندس لاچینی این لینکو پیدا کردم که یکی لطف کرده بود و برنامه رو توضیح داده بود
    http://www.4shared.com/file/38hdcHOl/termometer.html
    البتنه هنوز کامل نخوندمش ولی فکر کنم خیلی کمک کنه
    با مردم همون جوری رفتار کن که دوست داری باهات رفتار کنن



    دیدگاه

    لطفا صبر کنید...
    X