اطلاعیه

Collapse
No announcement yet.

مشکل عجیب با سون سگمنت!!!

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

    #16
    پاسخ : مشکل عجیب با سون سگمنت!!!

    ایول موفق شدیم
    :applause: :applause: :applause: :applause: :applause: :applause:
    مجوی درستی عهد زین جهان سست نهاد که این عجوزه عروس هزار داماد است

    دیدگاه


      #17
      پاسخ : مشکل عجیب با سون سگمنت!!!

      سلام . اون مشکل سون سگمنت حل شد. حالا من یه برنامه دارم که ماله راه اندازی سنسور دما ds18b20 و سنسور رطوبت dht22 هست .خواندن رطوبت توسط تایمر 0 میکرو انجام میشه .من سون سگمنت هامو با تایمر 1 رفرش میکنم . وقتی برنامه سنسور رطوبت رو از برنامه اصلی پاک میکنم سون سگمنتهام خیلی خوب کار میکنن و دما رو نشون میدن ولی وقتی برنامه سنسور رطوبت رو به برنامه اضافه میکنم کل سون سگمنتها عدد 0 رو نشون میدن ناگفته نمونه که همین برنامه رو ال سی دی کاراکتری کاملا جواب میده و مشکل فکر کنم ماله تداخل زمانی دو تایمر 0 و 1 یعنی تایمر سنسور روطوبت و تایمر سون سگمنتها باشه . من زیاد با تایمرها کار نکردم و مطمعنم که مشکل برنامم از تداخل تایمرهاست خواهشا یکی کمک کنه از صبح گیرم.


      $regfile = "m16adef.dat"
      $crystal = 8000000
      Enable Interrupts
      Config Timer2 = Timer , Prescale = 64
      Enable Timer2
      On Ovf2 Segment
      '-------------------------------------
      Config 1wire = Portb.1
      Config Pinb.0 = Input 'DHT22 Data
      Config Timer0 = Timer , Prescale = 8

      Const Min_time = 48
      Config Portc = Output
      Config Porta = Output
      'Config Portd.7 = Output
      Dim A1 As Byte
      Dim B1 As Byte
      Dim C1 As Byte
      Dim D1 As Byte
      Dim E1 As Byte
      Dim F1 As Byte
      '------------DHT22
      Dim Num As Byte
      Dim Count As Byte
      Dim Signaltime(43) As Byte
      Dim Humidityw As Word
      Dim Temperaturew As Word
      Dim Humsens_chksum As Byte
      Dim Humiditys As String * 16
      Dim Temperatures As String * 16
      Dim Strstring As String * 14
      Dim Ib As Byte
      Declare Sub Read_timings
      Declare Sub Humtemp_values

      Declare Function Compare_chksum(byval Hsens_humidity As Word , _
      Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte
      '------------------------------------
      Dim Arr(9) As Byte
      Dim X As Integer
      Dim Y As Single
      Dim Y1 As String * 5
      Dim T1 As String * 5
      Dim T2 As String * 5
      Dim T3 As String * 5
      Dim Ax1 As Byte
      Dim Ax2 As Byte
      Dim Ax3 As Byte
      Dim H1 As String * 16
      Dim H2 As String * 16
      Dim Bx1 As Byte
      Dim Bx2 As Byte

      Dim Nx As Byte






      Do
      Main:

      Call Humtemp_values
      Humiditys = Str(humidityw)
      Temperatures = Str(temperaturew)

      'Locate 2 , 1
      'Lcd "H: " ; Format(humiditys , "0.0&quot ; " % "
      Waitms 10
      H1 = Left(humiditys , 1)
      H2 = Mid(humiditys , 2 , 1)
      Bx1 = Val(h1)
      Bx2 = Val(h2)


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

      If Arr(9) = Crc8(arr(1) , 8) Then
      X = Makeint(arr(1) , Arr(2))
      Y = X / 16
      Y1 = Str(y)
      T1 = Left(y1 , 1)
      T2 = Mid(y1 , 2 , 1)
      T3 = Mid(y1 , 4 , 1)
      Ax1 = Val(t1)
      Ax2 = Val(t2)
      Ax3 = Val(t3)
      Waitms 1
      Else
      'Ax1 = 9

      End If







      C1 = Ax1
      B1 = Ax2
      A1 = Ax3

      D1 = Bx1
      E1 = Bx2
      F1 = 8



      Loop
      End
      '-------------------------------------------

      Sub Read_timings

      'Waitms 500

      Count = 1

      Config Pinb.0 = Output : Portb.0 = 0 ' request data
      Waitms 20 ' wait 20 ms
      Config Pinb.0 = Input ' wait for data, receive data

      While Count < 43 'collect 42 timings / signals

      Bitwait Pinb.0 , Set
      'signal goes high > start timer
      Start Timer0
      Bitwait Pinb.0 , Reset 'signal goes low > stop timer
      Stop Timer0

      Signaltime(count) = Tcnt0 'store number of ticks per signal in Signaltime byte

      Tcnt0 = 0
      Incr Count

      Wend


      End Sub

      '############################################ ## Humidity and temperature values

      Sub Humtemp_values

      Local X As Byte

      Humidityw = 0
      Temperaturew = 0
      Humsens_chksum = 0

      Call Read_timings

      For Count = 3 To 42 ' skip first two

      Select Case Count

      Case 3 To 18
      X = 18 - Count
      If Signaltime(count) > Min_time Then Toggle Humidityw.x

      Case 19 To 34
      X = 34 - Count
      If Signaltime(count) > Min_time Then Toggle Temperaturew.x

      Case 34 To 42
      X = 42 - Count
      If Signaltime(count) > Min_time Then Toggle Humsens_chksum.x

      End Select

      Next

      End Sub

      '######################### Calculate Checksum and compare with trasnmitted value


      Function Compare_chksum(byval Hsens_humidity As Word , Byval Hsens_temperature As Word , Byval Hsens_chksum As Byte) As Byte

      Local Chksum As Byte

      Chksum = Low(hsens_humidity ) + High(hsens_humidity )
      Chksum = Chksum + Low(hsens_temperature)
      Chksum = Chksum + High(hsens_temperature)

      If Chksum = Hsens_chksum Then
      Compare_chksum = 1
      Else
      Compare_chksum = 0
      End If

      End Function
      '----------------------------------------------------


      Data_code:
      Data &B00111111 '0
      Data &B00000110 '1
      Data &B01011011 '2
      Data &B01001111 '3
      Data &B01100110 '4
      Data &B01101101 '5
      Data &B01111101 '6
      Data &B00000111 '7
      Data &B01111111 '8
      Data &B01101111

      Segment:
      Incr Nx
      If Nx > 6 Then Nx = 1
      Select Case Nx
      Case 1:
      Waitus 100
      Porta.1 = 1
      Porta.2 = 0
      Porta.3 = 0
      Porta.4 = 0
      Porta.5 = 0
      Porta.6 = 0
      Portc = Lookup(a1 , Data_code)

      Case 2:
      Waitus 100
      Porta.1 = 0
      Porta.2 = 1
      Porta.3 = 0
      Porta.4 = 0
      Porta.5 = 0
      Porta.6 = 0
      Portd.7 = 0
      Porta.7 = 1
      Portc = Lookup(b1 , Data_code)

      Case 3:
      Waitus 100
      Porta.1 = 0
      Porta.2 = 0
      Porta.3 = 1
      Porta.4 = 0
      Porta.5 = 0
      Porta.6 = 0
      Portd.7 = 0
      Porta.7 = 0
      Portc = Lookup(c1 , Data_code)
      Case 4:
      Waitus 100
      Porta.1 = 0
      Porta.2 = 0
      Porta.3 = 0
      Porta.4 = 1
      Porta.5 = 0
      Porta.6 = 0
      Portc = Lookup(d1 , Data_code)
      Waitus 100
      Case 5:
      Porta.1 = 0
      Porta.2 = 0
      Porta.3 = 0
      Porta.4 = 0
      Porta.5 = 1
      Porta.6 = 0
      Portc = Lookup(e1 , Data_code)
      Case 6:
      Waitus 100
      Porta.1 = 0
      Porta.2 = 0
      Porta.3 = 0
      Porta.4 = 0
      Porta.5 = 0
      Porta.6 = 1
      Portc = Lookup(f1 , Data_code)
      End Select


      Return



      دیدگاه


        #18
        پاسخ : مشکل عجیب با سون سگمنت!!!

        سلام
        کاش برای این مشکل یه تاپیک جدا ایجاد میکردی.
        راستش من تا حالا همزمان از دو تایمر استفاده نکردم و اصول کار با دو تایمر رو نمیدونم در این مورد یه سرچ بزن ببین چیزی دستگیرد میشه.(اگه رو برنامه تم کار بکنی احتمالاً بتونی فقط با استفاده از یه تایمر درستش کنی)
        در ضمن تو زیر برنامه سگمنت چرا از دستور wait استفاده کردی؟؟زمانی که از تایمر استفاده میکنی دیگه استفاده از ویت منطقی نیست .دقت تایمر رو کلاً از بین میبره
        مجوی درستی عهد زین جهان سست نهاد که این عجوزه عروس هزار داماد است

        دیدگاه

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