ايران ويج

نسخه‌ی کامل: سنسور دما
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام بر همه دوستان

من یه کد دارم که دما رو روی سون سگمنت نشون میده فقط میخوام بدونم که اندازه دما رو چه طوری میتونم به دست بیارم یعنی دما تو کدوم متغیر ذخیره میشه؟( سنسور دما DC1621 هست)

با تشکر.
[/align]
Dim D As Byte
Dim N As Byte , L As Byte , W As Byte
Dim Teller As Word
Dim Tempmsb As Byte
Dim Templsb As Byte
Dim Confg As Byte
Dim Count As Byte
Dim Slope As Byte
Dim Nneg As Byte
Dim Alarmtemp As Byte
Dim Blinkrate As Byte

$crystal = 10000000

Const Digit1 = &B01000000
Const Digit2 = &B00100000
Const Digit3 = &B00010000

Declare Sub Cpos(number As Byte)
Declare Sub Cneg(number As Byte)
Declare Sub Cover
Declare Sub Readtemp(tempmsb As Byte)
Declare Sub Startconvert()

Config Portb = Output
Config Pind.4 = Output
Config Pind.5 = Output
Config Pind.6 = Output

Config Sda = Portd.1
Config Scl = Portd.0

Alarmtemp = 30

'******** test display **************************
Portb = 255
Portd = &B01110000

'******** Main program **************************
Call Startconvert
Waitms 1000

Do
Call Readtemp(tempmsb)
Tempmsb = Tempmsb - 3

For Teller = 1 To 250
Select Case Tempmsb
Case 0 To 99 : Call Cpos(tempmsb) 'temp >0 show temp on display
Case 100 To 127 : Call Cover 'temp > 99.5 show -- on display
Case 128 To 245 : Call Cover 'temp < -9.5 show -- on dsiplay
Case 246 To 255 : Call Cneg(tempmsb) 'temp <0 show temp on displa
End Select
Next Teller
Loop
'******** end main program **********************

'******** start convert *************************
Sub Startconvert()
I2cstart
I2cwbyte &H90
I2cwbyte &HEE
I2cstop
End Sub
'************************************************

'******** read temperature **********************
Sub Readtemp(tempmsb As Byte)
'-------------
I2cstart
I2cwbyte &H90 'send adress byte
I2cwbyte &HAA 'send register byte
I2cstop

I2cstart
I2cwbyte &H91 'read register
I2crbyte Tempmsb , Ack
I2crbyte Templsb , Nack
I2cstop
End Sub Readtemp
'************************************************

'******** convert and display temperature *******

Sub Cpos(number)

If Templsb = 0 Then
N = 0
Else
N = 5
End If

D = Lookup(n , Digits)
Portd = Digit1
Portb = D
Waitms 5

N = Number Mod 10
D = Lookup(n , Digits)
Portd = Digit2
Portb = D + 128
Waitms 5

N = Number \ 10
D = Lookup(n , Digits)
Portd = Digit3

If N < 1 Then
Portb = 0
Else
Portb = D
End If
Waitms 5

Portd = 0

If Tempmsb > Alarmtemp Then
For W = 1 To 10
Waitms 15
Next W
End If

End Sub

'************************************************

Sub Cneg(number)

Nneg = 0 - Number

Nneg = Nneg - 1

If Templsb = 0 Then N = 5 Else N = 0 'If Templsb = 0 Then N = 0 Else N = 5
D = Lookup(n , Digits)
Portd = Digit1
Portb = D
Waitms 5

N = Nneg Mod 10
D = Lookup(n , Digits)
Portd = Digit2
Portb = D + 128
Waitms 5

N = 10
D = Lookup(n , Digits)
Portd = Digit3
Portb = D
Waitms 5

End Sub Cneg(number As Byte)

'************************************************

Sub Cover
N = 10
D = Lookup(n , Digits)
Portd = Digit1
Portb = D
Waitms 5

N = 10
D = Lookup(n , Digits)
Portd = Digit2
Portb = D
Waitms 5

N = 10
D = Lookup(n , Digits)
Portd = Digit3
Portb = D
Waitms 5

End Sub

'************************************************



End


'************************************************

'******** Data **********************************
Digits:
Data 63 , 6 , 91 , 79 , 102 , 109 , 125 , 7 , 127 , 111 , 64 , 128 , 56 , 70
' 0 1 2 3 4 5 6 7 8 9 - dp L +
'************************************************
به نظر میاد تو دو متغیر Tempmsb و Templsb ذخیره می شود .
اولی بیتهای بالا و دومی پایین .
خب چه طوری میشه فهمید که دما چند درجه هست؟ منظورم مقدار عددیشه.

با تشکر.
کد:
I2crbyte Tempmsb , Ack
I2crbyte Templsb , Nack

نمی دونم . دیتاشیتش رو نگاه کن و ببین چجوری اطلاعات می فرسته ؟

بعد برنامه هم که تو این خط دما رو می گیره .
سلام
این سنسور ds1621 هم هست که ارتباتش از طریق i2c هست ودقتش با lm35 یکیه و دما رو هم به سانتیگراد و هم به فارنهایت به میکرو ارسال میکنه ، یکی از اون متغیر ها برای دمای سانتی گراد و دیگری برای دمای فارنهایت استفاده میشه
یعنی با دستور ack بایت اول و با دستور anck اخرین بایت از i2c ( سنسور خونده میشه )