با سلام
2 تا سنسور فشار BMP085 گرفتم با این دیتا شیت
http://www.jahankitshop.com/Market/d5130.aspx
میخوام هر یک در محیط جدا باشند و فشار نسبت به هم اندازه گیری بشه
این سنسور از پروتکل i2c استفاده میشه
مشکل اینه زیاد کار نکردم و سورسی که دارم برای یک سنسوره اگه بخوام 2 تاش روی خط قرار بگیرند کد دهی آنها به چه صورته
اگه دوستان میتونن سورس برنامه رو اصلاح کنن تا خروجی برای 2 تا سنسور نمایش داده بشه
اینم سورس برای یکیش
2 تا سنسور فشار BMP085 گرفتم با این دیتا شیت
http://www.jahankitshop.com/Market/d5130.aspx
میخوام هر یک در محیط جدا باشند و فشار نسبت به هم اندازه گیری بشه
این سنسور از پروتکل i2c استفاده میشه
مشکل اینه زیاد کار نکردم و سورسی که دارم برای یک سنسوره اگه بخوام 2 تاش روی خط قرار بگیرند کد دهی آنها به چه صورته
اگه دوستان میتونن سورس برنامه رو اصلاح کنن تا خروجی برای 2 تا سنسور نمایش داده بشه
اینم سورس برای یکیش
کد:
'-------------------------------------------------------------------------------- '-------------------------------------------------------------------------------- $regfile = "m8def.dat" $crystal = 1000000 $baud = 1200 $hwstack = 32 $swstack = 10 $framesize = 40 Config Scl = Portc.5 Config Sda = Portc.4 Dim Ac1 As Integer Dim Ac1a As Long Dim Ac2 As Integer Dim Ac3 As Integer Dim Ac4 As Word Dim Ac5 As Word Dim Ac5a As Single Dim Ac6 As Word Dim B1 As Integer Dim B2 As Integer Dim B3 As Long Dim B3a As Long Dim B4 As Long Dim B5 As Long Dim B6 As Integer Dim B6a As Long Dim B7 As Long Dim Mb As Integer Dim Mc As Integer Dim Mc2 As Long Dim Md As Integer Dim Adres As Byte Dim Wert As Byte Dim Ut As Long Dim X1 As Long Dim X1t As Single Dim X2 As Long Dim X3 As Long Dim T As Single Dim T2 As Long Dim Temperatur As String * 6 Dim Luftdruck As String * 8 Dim Druck As Single Dim P As Long Dim P2 As Long Dim 2potenz15 As Long Dim 2potenz11 As Integer Dim 2potenz13 As Integer Dim 2potenz8 As Integer Dim 2potenz4 As Integer Dim 2potenz2 As Integer Dim 2potenz16 As Long Dim 2potenz12 As Integer Dim Potenz5255 As Single Dim Altitude As Single Dim Altitudes As String * 8 Dim Msb As Long Dim Lsb As Long Dim Up As Long Dim Druckvar As Byte Declare Sub Berechne_temp Declare Sub Berechne_druck Declare Sub Schreibe_bmp085(byval Adres As Byte , Byval Wert As Byte) Declare Sub Lese_bmp085(byval Adres As Byte , Wert As Byte) Declare Sub Lese_roh_daten Declare Sub Messen Declare Sub Lese_kalib_data Const Addr_schreiben = &B11101110 Const Addr_lesen = &B11101111 Call Lese_kalib_data Do Call Messen T = T / 10 Temperatur = Fusing(t , "###.##") Potenz5255 = 1 / 5.255 Altitude = P / 101325 Altitude = Altitude ^ Potenz5255 Altitude = 1 - Altitude Altitude = Altitude * 44330 Druck = P Druck = Druck / 100 Luftdruck = Fusing(druck , "####.##") Altitudes = Fusing(altitude , "#####.##") Print "Temp " ; Temperatur ; " C," ; " Pressure " ; Luftdruck ; " Pa," ; " Altitude " ; Altitudes ; " m." Wait 1 Loop Sub Messen Call Schreibe_bmp085(&Hf4 , &H2E) Adres = &HF6 Call Lese_roh_daten 'Print "msb " ; Msb 'Print "lsb " ; Lsb Shift Msb , Left , 8 'Print "msb shift " ; Msb Ut = Msb + Lsb Call Berechne_temp Call Schreibe_bmp085(&Hf4 , &H74 ) Adres = &HF6 Call Lese_roh_daten Shift Msb , Left , 16 Shift Lsb , Left , 8 Up = Msb + Lsb Shift Up , Right , 6 'Print "msb " ; Msb ; "lsb " ; Lsb ; "up " ; Up Call Berechne_druck End Sub Sub Berechne_temp 'X1 Ut = Ut - Ac6 2potenz15 = 2 ^ 15 Ac5a = Ac5 / 2potenz15 X1t = Ut * Ac5a 'Print "X1 " ; X1t 'X2 2potenz11 = 2 ^ 11 Mc2 = Mc * 2potenz11 X3 = X1t + Md X2 = Mc2 / X3 'Print "X2 " ; X2 'B5 B5 = X1t + X2 'Print "B5 " ; B5 'T 2potenz4 = 2 ^ 4 T2 = B5 + 8 T = T2 / 2potenz4 End Sub Sub Berechne_druck 'B6 B6 = B5 - 4000 'X1 2potenz12 = 2 ^ 12 B6a = B6 * B6 B6a = B6a / 2potenz12 X1 = B2 * B6a X1 = X1 / 2potenz11 'X2 X2 = Ac2 * B6 X2 = X2 / 2potenz11 'X3 X3 = X1 + X2 'B3 Ac1a = Ac1 * 4 Ac1a = Ac1a + X3 Shift Ac1a , Left , 2 Ac1a = Ac1a + 2 B3 = Ac1a / 4 'X1 die zweite 2potenz13 = 2 ^ 13 B6a = B6 / 2potenz13 X1 = Ac3 * B6a 'X2 die zweite B6a = B6 * B6 B6a = B6a / 2potenz12 X2 = B1 * B6a 2potenz16 = 2 ^ 16 X2 = X2 / 2potenz16 'X3 die zweite X3 = X1 + X2 X3 = X3 + 2 2potenz2 = 2 ^ 2 X3 = X3 / 2potenz2 'B4 B4 = X3 + 32768 B4 = B4 * Ac4 B4 = B4 / 2potenz15 If B4 <= 0 Then B4 = B4 * -1 'Print B4 'B7 B7 = Up - B3 B3a = 50000 Shift B3a , Right , 2 ' B7 = B7 * B3a If B7 <= 0 Then B7 = B7 * -1 'Print B7 If B7 < &H80000000 Then P = B7 * 2 'Print "p1 " ; P P = P / B4 'Print "p1 " ; P Else P = B7 / B4 'Print "p2 " ; P P = P * 2 'Print "p2 " ; P End If 'Print P 'nochmal X1 2potenz8 = 2 ^ 8 P2 = P / 2potenz8 X1 = P2 * P2 'Print X1 X1 = X1 * 3038 X1 = X1 / 2potenz16 'Print X1 ' nochmal X2 X2 = -7357 * P X2 = X2 / 2potenz16 'Print X2 P2 = P P = X2 + 3791 P = P + X1 P = P / 2potenz4 P = P + P2 End Sub Sub Lese_kalib_data Adres = &HAA 'Ac1 lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 Ac1 = Msb + Lsb Adres = Adres + 1 'Ac2 lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 Ac2 = Msb + Lsb Adres = Adres + 1 'Ac3 lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 Ac3 = Msb + Lsb Adres = Adres + 1 'Ac4 lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 Ac4 = Msb + Lsb Adres = Adres + 1 'Ac5 lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 Ac5 = Msb + Lsb Adres = Adres + 1 'Ac6 lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 Ac6 = Msb + Lsb Adres = Adres + 1 'B1 lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 B1 = Msb + Lsb Adres = Adres + 1 'B2 lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 B2 = Msb + Lsb Adres = Adres + 1 'MB lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 Mb = Msb + Lsb Adres = Adres + 1 'MB lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 Mc = Msb + Lsb Adres = Adres + 1 'Md lesen Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert Shift Msb , Left , 8 Md = Msb + Lsb Adres = Adres + 1 End Sub Sub Lese_roh_daten Call Lese_bmp085(adres , Wert) Msb = Wert Adres = Adres + 1 Call Lese_bmp085(adres , Wert) Lsb = Wert End Sub Sub Schreibe_bmp085(byval Adres As Byte , Byval Wert As Byte) I2cstart I2cwbyte Addr_schreiben I2cwbyte Adres I2cwbyte Wert I2cstop Waitms 10 End Sub Sub Lese_bmp085(byval Adres As Byte , Wert As Byte) I2cstart I2cwbyte Addr_schreiben I2cwbyte Adres I2cstart I2cwbyte Addr_lesen I2crbyte Wert , Nack I2cstop Waitms 10 End Sub
دیدگاه