اطلاعیه

Collapse
No announcement yet.

مشکل در راه اندازی ds18b20 با سون سگمنت

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

    مشکل در راه اندازی ds18b20 با سون سگمنت

    با سلام خدمت دوستان
    من مدار دماسنج با ds18b20 رو با ال سیدی دارم و هیچ مشکلی هم نداره اما همین مدار با سون سگمنت بعلت تاخیری که در راه اندازی پروتوکل یک سیم هست با عث چشمک زدن سون سگمنت ها میشه....(دما رو درست نشون میده اما هر ثانیه تقریبا یه پرش روی سون سگمنت هست).
    ایا باید حتما از لچ استفاده بشه ؟

    #2
    پاسخ : مشکل در راه اندازی ds18b20 با سون سگمنت

    سلام دادا.
    فرکانس میکرو رو بالاتر ببر. در ضمن بهتره با یه تایمر اطلاعات 7segment رو رفرش کنی.
    در ضمن کافیه هر یک ثانیه اطلاعات رو از سنسور بخونی و اگه تغییری کرده بود نمایش بدی.
    خوندن اطلاعات سنسور هم می تونه بین مولتی پلکس اطلاعات انجام شه.
    اگه برای هر 7segment یه لچ بذاری که بهتره. اینطوری نیازی به رفرش نداری. اما در کل چشمک زدن نمایشگر مربوط به کدنویسی شما میشه.
    تشکر لازم نیست!

    دیدگاه


      #3
      پاسخ : مشکل در راه اندازی ds18b20 با سون سگمنت

      نوشته اصلی توسط iman-63
      سلام دادا.
      فرکانس میکرو رو بالاتر ببر. در ضمن بهتره با یه تایمر اطلاعات 7segment رو رفرش کنی.
      در ضمن کافیه هر یک ثانیه اطلاعات رو از سنسور بخونی و اگه تغییری کرده بود نمایش بدی.
      خوندن اطلاعات سنسور هم می تونه بین مولتی پلکس اطلاعات انجام شه.
      اگه برای هر 7segment یه لچ بذاری که بهتره. اینطوری نیازی به رفرش نداری. اما در کل چشمک زدن نمایشگر مربوط به کدنویسی شما میشه.
      ممنون از پاسختون
      فرکانس میکرو روی 4 مگ هستش و برای رفرش هم از تایمر 0 استفاده میکنم با فرکانس حدود 2 کیلوهرتز رفرش میشه.و دیتای سنسور هم هر نیم ثانیه (با یه ثانیه هم تست کردم همین شکل بوداما چشمکش دیرتر میشد)خونده میشه...
      و اگه برنامه سنسور رو از مدار حذف کنم و یه عدد بجای سنسور به متغیر بدم بدون هیچ گونه نوسانی نشون میده اما .....
      اینم برنامه ای که تست کردم
      [code=qbasic]
      $regfile = "m8def.dat"
      $crystal = 4000000

      $hwstack = 40
      $swstack = 16
      $framesize = 32


      Config 1wire = Portd.0

      Config Portb = Output
      Config Portc = Output


      Config Timer0 = Timer , Prescale = 8
      On Timer0 Det
      Enable Timer0
      Enable Interrupts

      Declare Sub Refresh
      Declare Sub Send
      Declare Sub Cheek
      Declare Sub Wait4key



      Dim Arr(9) As Byte
      Dim X As Integer
      Dim Y As Single
      Dim Z As String * 4
      Dim A As Single , A1 As Word , A2 As Word , A3 As Byte
      Dim Temp As Byte
      Dim Temp1 As Byte , Temp2 As Byte
      Dim Ms As Byte
      Dim Yekan As Byte
      Dim Dahgan As Byte
      Dim Sadgan As Byte
      Dim Tt As Byte , Con As Byte , W As Long , Con1 As Word , Con2 As Byte


      Com3 Alias Portc.2
      Com2 Alias Portc.1
      Com1 Alias Portc.0


      'Set Portc.0
      'Set Portc.1
      'Set Portc.2
      'Set Portc.3

      Seg_a Alias Portb.0
      Seg_b Alias Portb.1
      Seg_c Alias Portb.2
      Seg_d Alias Portb.3
      Seg_e Alias Portb.4
      Seg_f Alias Portb.5
      Seg_g Alias Portb.6
      Seg_dat Alias Portb.7



      1wreset
      1wwrite &HCC
      1wwrite &H44

      Wait 1


      1wreset
      1wwrite &HCC
      1wwrite &HBE
      Arr(1) = 1wread(9)



      X = Makeint(arr(1) , Arr(2))
      Y = X / 16
      Z = Fusing(y , "#.&&quot
      A = Val(z)
      A1 = A * 10

      Yekan = A1 Mod 10
      A2 = A1 / 10

      Dahgan = A2 Mod 10
      Sadgan = A2 / 10




      Start Timer0


      Do


      Loop
      End


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

      '(
      Sub Refresh




      ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;''''




      End Sub
      &#039

      Sub Send

      Select Case Temp

      If A3 = 1 Then
      Seg_dat = 1
      Else
      Seg_dat = 0
      End If



      Case 0:
      Seg_a = 1
      Seg_b = 1
      Seg_c = 1
      Seg_d = 1
      Seg_e = 1
      Seg_f = 1
      Seg_g = 1

      Case 1:
      Seg_a = 0
      Seg_b = 1
      Seg_c = 1
      Seg_d = 0
      Seg_e = 0
      Seg_f = 0
      Seg_g = 0

      Case 2:
      Seg_a = 1
      Seg_b = 1
      Seg_c = 0
      Seg_d = 1
      Seg_e = 1
      Seg_f = 0
      Seg_g = 1

      Case 3:
      Seg_a = 1
      Seg_b = 1
      Seg_c = 1
      Seg_d = 1
      Seg_e = 0
      Seg_f = 0
      Seg_g = 1

      Case 4:
      Seg_a = 0
      Seg_b = 1
      Seg_c = 1
      Seg_d = 0
      Seg_e = 0
      Seg_f = 1
      Seg_g = 1

      Case 5:
      Seg_a = 1
      Seg_b = 0
      Seg_c = 1
      Seg_d = 1
      Seg_e = 0
      Seg_f = 1
      Seg_g = 1

      Case 6:
      Seg_a = 1
      Seg_b = 0
      Seg_c = 1
      Seg_d = 1
      Seg_e = 1
      Seg_f = 1
      Seg_g = 1

      Case 7:
      Seg_a = 1
      Seg_b = 1
      Seg_c = 1
      Seg_d = 0
      Seg_e = 0
      Seg_f = 0
      Seg_g = 0

      Case 8:
      Seg_a = 1
      Seg_b = 1
      Seg_c = 1
      Seg_d = 1
      Seg_e = 1
      Seg_f = 1
      Seg_g = 1

      Case 9:
      Seg_a = 1
      Seg_b = 1
      Seg_c = 1
      Seg_d = 1
      Seg_e = 0
      Seg_f = 1
      Seg_g = 1

      Case 10:

      Seg_a = 0
      Seg_b = 0
      Seg_c = 0
      Seg_d = 0
      Seg_e = 0
      Seg_f = 0
      Seg_g = 0


      End Select
      'Waitus 500

      End Sub




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


      Det:

      If Con1 < 1000 Then Incr Con1

      Incr Con

      If Con1 = 1000 Then
      Con2 = 1
      End If



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

      If Con = 1 Then

      Com1 = 0 : Com2 = 1 : Com3 = 1
      Temp = Sadgan : A3 = 0 : Call Send ': Waitus 50

      Elseif Con = 2 Then

      ''''''''&# 039;''''''off segments''''''' ''''''''&# 039;'''
      Com1 = 1 : Com2 = 1 : Com3 = 1
      Temp = 10 : Call Send : 'Waitus 1 :
      ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;''''


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

      Elseif Con = 3 Then


      Com1 = 1 : Com2 = 0 : Com3 = 1
      Temp = Dahgan : A3 = 1 : Call Send ': Waitus 50


      Elseif Con = 4 Then

      ''''''''&# 039;''''''off segments''''''' ''''''''&# 039;'''
      Com1 = 1 : Com2 = 1 : Com3 = 1
      Temp = 10 : A3 = 0 : Call Send : 'Waitus 1 :
      ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;''''


      Elseif Con = 5 Then


      Com1 = 1 : Com2 = 1 : Com3 = 0
      Temp = Yekan : A3 = 0 : Call Send ': Waitus 50

      Elseif Con = 6 Then

      ''''''''&# 039;''''''off segments''''''' ''''''''&# 039;'''
      Com1 = 1 : Com2 = 1 : Com3 = 1
      Temp = 10 : Call Send : ' Waitus 1 :
      ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;''''

      Elseif Con = 7 Then

      1wreset
      1wwrite &HCC
      1wwrite &H44


      Elseif Con = 8 And Con2 = 1 Then

      1wreset
      1wwrite &HCC
      1wwrite &HBE
      Arr(1) = 1wread(9)



      X = Makeint(arr(1) , Arr(2))
      Y = X / 16
      Z = Fusing(y , "#.&&quot
      A = Val(z)
      A1 = A * 10

      Yekan = A1 Mod 10
      A2 = A1 / 10

      Dahgan = A2 Mod 10
      Sadgan = A2 / 10
      Con2 = 0
      Con1 = 0

      Else

      Con = 0

      End If


      Return
      [/code]

      دیدگاه


        #4
        پاسخ : مشکل در راه اندازی ds18b20 با سون سگمنت

        نظرتون در مورد برنامه چی هست آیا راه دیگه ای هم هست که بشه بدون لچ این کارو کرد؟؟؟

        دیدگاه

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