برای این سنسور از برنامه زیر استفاده کن البته باید یکمی تغییر بدی مثلا برای LCD ویا طرز اتصال به پورت ها این تنهای برنامه ای بود که ازش جواب گرفتم بیشتر خواستی به آدرس a.azizy@yahoo.com ایمیل بزن
Cls 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 Config Lcd = 20 * 4 Config Lcdpin = Pin , Db4 = Portd.7 , Db5 = Portd.6 , Db6 = Portd.1 , Db7 = Portd.0 , E = Portd.4 , Rs = Portd.5
Const C1 = -4 Const C2 = 0.0405 Const C3 = -0.0000028 Const T1c = .01 Const T2 = .00008 Const T1f = .018 Cls Sck Alias Porta.1 Dataout Alias Porta.0 Datain Alias Pina.0 Redled Alias Portb.2
Declare Sub Getit()
Ddrb = &B11111111 'all port b are output Config Pina.1 = Output 'sck Config Pina.0 = 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
Cls Locate 1 , 1 : Lcd "hello"
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(tempc , "###.##") Locate 1 , 1 : Lcd "Temp = " ; Dis ; " '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 , "##.##") Locate 2 , 1 : Lcd "RH = " ; Dis ; " % " 'Print "Humidity adjusted for linear = " ; Dis
Calc = T2 * Dataword Calc = Calc + T1c Calc2 = Tempc - 25 Calc = Calc2 * Calc Rhlintemp = Calc + Rhlinear
Dis = Fusing(rhlintemp , "##.##") Locate 3 , 1 : Lcd "RH25 = " ; Dis ; " % "
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 Pina.0 = Input 'datain Set Sck 'click one more off Reset Sck Waitus 10 'no idea why, but it doesn't work without it! Bitwait Pina.0 , Reset 'wait for the chip to have data ready
Shiftin Datain , Sck , Databyte , 1 'get the MSB Datavalue = Databyte
Ddrb = &B11111111 Config Pina.0 = 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 Pina.0 = 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 Pina.0 = Output
Reset Dataout Set Sck Reset Sck
Ddrb = &B11111101 'datain is now input Config Pina.0 = 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 Pina.0 = Output
Set Dataout Set Sck Reset Sck
End Sub
End
** آخرین ویرایش در يكشنبه 18 مرداد 88 - 3:34 PM
|