اطلاعیه

Collapse
No announcement yet.

کمک کنید مشکل با برنامه دماسنج

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

    کمک کنید مشکل با برنامه دماسنج

    سلام دوستان
    من یه دماسنج با سون سگمنت 4تایی درست کردم که برنامهش مشکل داره البته تو پروتیوس امتحان میکنم کار میکنه و هیچ مشکلی نداره ولی رو برد مشکل داره
    مشکلش اینه که یه دمای خاصی رو نشون نمیده و همش عدد های متفاوت رو تو کمتر از 1 ثانیه نشون میده و همش پرش داره
    دوستان من برنامه رو مذارم لطفا کمک کنید
    کد:
    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Portd = Output
    Config Portb = Output
    Config Adc = Single , Prescaler = Auto , Reference = Internal
    
    Dim A As Word , B As Word , C As Single , W As Word , D As Byte , S As Byte
    
    Start Adc
    Declare Sub Comm
    Declare Sub Temp
    Declare Sub Refresh
    '=================================================================
    Do
    Call Refresh
    Call Temp
    Call Comm
    Loop
    '==================================================================
    Sub Temp
    A = Getadc(0)
    B = Getadc(1)
    C = A - B
    C = C / 4
    If C > 0 Then
    S = 12
    W = C
    Cls : Lcd W
    End If
    If C < 0 Then
    S = 11
    C = C / -1
    W = C
    Cls : Lcd W
    End If
    End Sub
    '===================================================================
    Sub Comm
    Portd = &B0111 : D = 10 : Call Refresh
    Portd = &B1011 : D = W Mod 10 : Call Refresh
    Portd = &B1101 : D = W / 10 : Call Refresh
    Portd = &B1110 : D = S : Call Refresh
    
    Portd = &B1111 : D = 0
    End Sub
    '=======================================================================
    Sub Refresh
    Portb = Lookup(d , 7seg)
    Waitms 5
    End Sub
    '=============================================================================
    7seg:
    Data &H3F , &H6 , &H5B , &H4F , &H66 , &H6D , &H7D , &H7
    Data &H7F , &H6F , &H63 , &H40 , &H00

    #2
    پاسخ : کمک کنید مشکل با برنامه دماسنج

    دوست عزیز شما در رفرش کردن مشکل داری اگه با آیسی های مخصوص اینکار کار میکنی که bcd هستن این مشکل هست. اما اگه با میکرو کار میکنی باید در هر 1msدوبار کل سگمنت هاتو رفرش کنی و 1نکته ظریف اینکه از سون سگمنت های سرعت بالا که چند تایی هستن استفاده کن
    k

    دیدگاه


      #3
      پاسخ : کمک کنید مشکل با برنامه دماسنج

      سلام
      بهتر است که تا 20 بار هر 10 میلی ثانیه یه بار دما رو اندازه بگیری و در آخر میانگین بگیری که دما ثابت بشه . برای پرش سگمنت هم می تونی با تایمر کار کنی .
      کد:
      Sub Getdata
       If Pinb.3 = 0 Then
        Bitwait Pinb.3 , Set
      
        End If
      
       Portc.5 = 0
       Portc.5 = 0
       Portc.5 = 0
       Readeeprom Tol , 30
       Readeeprom G , 20
      Readeeprom K , 10
      
       Do
      
       If Pinb.3 = 0 Then
        Bitwait Pinb.3 , Set
        Goto Settempon
        End If
       Temp = 0
        For X = 1 To 20
      
          A = Getadc(2)
          Temp = Temp + A
      
        Waitms 10
      Next
      
      Temp = Temp / 20
       Dama = Temp / 4
       Tol2 = Tol / 10
       Dama = Dama + Tol2
       Dama = Dama * 10
       Dama2 = Dama
      Dama3 = Dama2 - Damaval
      
      
      
      If Dama3 > 1 Then
       Do
       Incr Damaval
      
       Loop Until Damaval = Dama2
      
       End If
      
       If Dama3 < -1 Then
       Do
       Decr Damaval
      
       Loop Until Damaval = Dama2
       End If
      
       If Dama3 = 1 Or Dama3 = -1 Then
       End If
      
      
      
       'sevenseg rotin
      
         Ashar1 = Damaval Mod 10
         Yekan = Damaval / 10
         Yekan1 = Yekan Mod 10
         Dahgan1 = Damaval / 100
      
      
      
      
        Y = K - 5
        Z = G + 5
      
        If Damaval > K Then
         Portc.0 = 1
        Portc.4 = 0
        Waitms 20
        Portc.4 = 1
        Portc.3 = 0
      
        End If
      
      
        If Damaval > Y Then
        Portc.4 = 0
        Waitms 100
        Portc.4 = 1
      
        End If
      
      
        If Damaval < Y And Damaval > G Then
      
        Portc.4 = 0
        Portc.3 = 0
        Portc.0 = 0
        End If
        If Damaval < G Then
      Portc.0 = 1
      
        Portc.4 = 0
        Portc.3 = 1
        Waitms 100
         Portc.3 = 0
      
      
        End If
      
        Loop
      
      End Sub

      دیدگاه


        #4
        پاسخ : کمک کنید مشکل با برنامه دماسنج

        این هم نمونه یه برنامه برای رفرش سگمنت
        کد:
        On Timer0 P
        Start Timer0
        Start Timer1
        
        
        
        Goto Getdata
        P:
        Timer0 = 90
        Call Refresh
        
        Return
        Sub Refresh
        
           Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 1 : Portc.1 = 0 : D = Ashar1 : Call Send
           Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 1 : Portc.1 = 1 : D = Yekan1 : Call Send
           Portb.0 = 1 : Portb.1 = 1 : Portb.2 = 0 : Portc.1 = 0 : D = Dahgan1 : Call Send
        
        Return
        End Sub

        دیدگاه


          #5
          پاسخ : کمک کنید مشکل با برنامه دماسنج

          این کد هارو کجاش بذارم؟
          من کار با میکرو رو تازه شروع کردم

          دیدگاه


            #6
            پاسخ : کمک کنید مشکل با برنامه دماسنج

            من کل برنامه رو برات میگذارم البته برای سگمنت 3 رقمی هست خودت می تونی بهش اضافه کنی .
            کد:
            $regfile = "m8def.dat"
            $crystal = 8000000
            
            Config Portb.7 = Output
            
            
            Config Portd = Output
                               'A-G (Data)
            Config Portb.0 = Output
            Config Portb.1 = Output
            Config Portb.2 = Output
            
            'push buton
            Config Portb.3 = Input
             Config Portb.4 = Input
             Config Portb.5 = Input
            
             'dot
            Config Portc.1 = Output
            
            'relay
             Config Portc.0 = Output
            
             'led port
             Config Portc.3 = Output
             Config Portc.4 = Output
              Config Portc.5 = Output
            
            Dataport Alias Portd
            Config Debounce = 50                    'Comm. Anode
            Config Adc = Single , Prescaler = Auto , Reference = Internal
            Config Timer0 = Timer , Prescale = 1024
            Enable Timer0
            Config Timer1 = Timer , Prescale = 1024
            Enable Timer1
            Enable Interrupts
            
            Dim K As Integer , G As Integer , Tol As Integer , Tol2 As Single , Tol3 As Integer
            
            Dim A As Word , Temp As Single , D As Integer , X As Word , Dama As Single , Damaval As Integer , Dama2 As Integer , Dama3 As Integer
            
            Dim Ashar1 As Integer , Yekan As Integer , Yekan1 As Integer , Dahgan1 As Integer , Y As Integer , Z As Integer
            
            Dim Key As Byte , B As Byte
            Declare Sub Send
            Declare Sub Refresh
            Declare Sub Submain
            Declare Sub Settempon
            Declare Sub Settempoff
            Declare Sub Setting
            Declare Sub Getdata
             Cls
            Start Adc
            '************************************************************
            
            On Timer0 P
            Start Timer0
            Start Timer1
            
            
            
            Goto Getdata
            P:
            Timer0 = 90
            Call Refresh
            
            Return
            
            
            '************************************************************
            
            Sub Getdata
             If Pinb.3 = 0 Then
              Bitwait Pinb.3 , Set
            
              End If
            
             Portc.5 = 0
             Portc.5 = 0
             Portc.5 = 0
             Readeeprom Tol , 30
             Readeeprom G , 20
            Readeeprom K , 10
            
             Do
            
             If Pinb.3 = 0 Then
              Bitwait Pinb.3 , Set
              Goto Settempon
              End If
             Temp = 0
              For X = 1 To 20
            
                A = Getadc(2)
                Temp = Temp + A
            
              Waitms 10
            Next
            
            Temp = Temp / 20
             Dama = Temp / 4
             Tol2 = Tol / 10
             Dama = Dama + Tol2
             Dama = Dama * 10
             Dama2 = Dama
            Dama3 = Dama2 - Damaval
            
            
            
            If Dama3 > 1 Then
             Do
             Incr Damaval
            
             Loop Until Damaval = Dama2
            
             End If
            
             If Dama3 < -1 Then
             Do
             Decr Damaval
            
             Loop Until Damaval = Dama2
             End If
            
             If Dama3 = 1 Or Dama3 = -1 Then
             End If
            
            
            
             'sevenseg rotin
            
               Ashar1 = Damaval Mod 10
               Yekan = Damaval / 10
               Yekan1 = Yekan Mod 10
               Dahgan1 = Damaval / 100
            
            
            
            
              Y = K - 5
              Z = G + 5
            
              If Damaval > K Then
               Portc.0 = 1
              Portc.4 = 0
              Waitms 20
              Portc.4 = 1
              Portc.3 = 0
            
              End If
            
            
              If Damaval > Y Then
              Portc.4 = 0
              Waitms 100
              Portc.4 = 1
            
              End If
            
            
              If Damaval < Y And Damaval > G Then
            
              Portc.4 = 0
              Portc.3 = 0
              Portc.0 = 0
              End If
              If Damaval < G Then
            Portc.0 = 1
            
              Portc.4 = 0
              Portc.3 = 1
              Waitms 100
               Portc.3 = 0
            
            
              End If
            
              Loop
            
            End Sub
            '**************************************************************
            Sub Refresh
            
               Portb.0 = 0 : Portb.1 = 1 : Portb.2 = 1 : Portc.1 = 0 : D = Ashar1 : Call Send
               Portb.0 = 1 : Portb.1 = 0 : Portb.2 = 1 : Portc.1 = 1 : D = Yekan1 : Call Send
               Portb.0 = 1 : Portb.1 = 1 : Portb.2 = 0 : Portc.1 = 0 : D = Dahgan1 : Call Send
            
            Return
            End Sub
            '**************************************************************
            Sub Send
              Dataport = Lookup(d , Segdata)
              Waitms 4
              Dataport = &B00000000
            
            
            
               Return
              End Sub
            '**************************************************************
            '**************************************************************
            '************************************************************
            Sub Settempon
            
            If Pinb.3 = 0 Then
              Bitwait Pinb.3 , Set
            
              End If
            
            Ashar1 = 11
            Yekan1 = 11
            Dahgan1 = 11
            
            Portc.5 = 0
            Portc.4 = 1
            Portc.3 = 0
            Readeeprom K , 10
            
            Do
            
              If Pinb.4 = 0 And K < 999 Then K = K + 1 : Waitms 20
            
            
              If Pinb.5 = 0 And K > 0 Then K = K - 1 : Waitms 20
            
            
            If Pinb.3 = 0 Then
             B = 0
              For Key = 1 To 5
               If Pinb.3 = 1 Then Goto Settempoff
                B = B + 1
                Waitms 500
              Next Key
            
               Writeeeprom K , 10
               Waitms 20
               Ashar1 = 11 : Yekan1 = 11 : Dahgan1 = 11
               Waitms 90
            
            End If
            
            
            
            '7seg rotin
            
            
                Ashar1 = K Mod 10
                Yekan = K / 10
                Yekan1 = Yekan Mod 10
                Dahgan1 = K / 100
            
            Loop
            
            End Sub
            
            
            '************************************************************
            
             Sub Settempoff
            If Pinb.3 = 0 Then
              Bitwait Pinb.3 , Set
            
              End If
            
            Ashar1 = 11
            Yekan1 = 11
            Dahgan1 = 11
            Portc.5 = 0
            Portc.4 = 0
            Portc.3 = 1
            
            Readeeprom G , 20
            
            Do
            
              If Pinb.4 = 0 And G < 999 Then Incr G : Waitms 20
            
            
              If Pinb.5 = 0 And G > 0 Then Decr G : Waitms 20
            
            
            If Pinb.3 = 0 Then
             B = 0
              For Key = 1 To 5
               If Pinb.3 = 1 Then Goto Setting
                B = B + 1
                Waitms 500
              Next Key
               Writeeeprom G , 20 : Waitms 20
               Ashar1 = 11 : Yekan1 = 11 : Dahgan1 = 11
               Waitms 90
            End If
            
            '7seg rotin
            
                Ashar1 = G Mod 10
                Yekan = G / 10
                Yekan1 = Yekan Mod 10
                Dahgan1 = G / 100
            
            Loop
            End Sub
            
            
             '************************************************************
             Sub Setting
            If Pinb.3 = 0 Then
              Bitwait Pinb.3 , Set
            
              End If
            Ashar1 = 11
            Yekan1 = 11
            Dahgan1 = 11
            
            
            Portc.5 = 1
            Portc.4 = 0
            Portc.3 = 0
            Readeeprom Tol , 30
            Do
            
              If Pinb.4 = 0 And Tol < 100 Then Incr Tol : Waitms 30
            
            
              If Pinb.5 = 0 And Tol > -100 Then Decr Tol : Waitms 30
            
            
             If Pinb.3 = 0 Then
             B = 0
              For Key = 1 To 5
               If Pinb.3 = 1 Then Goto Getdata
                B = B + 1
                Waitms 500
              Next Key
             Writeeeprom Tol , 30 : Waitms 20
              Ashar1 = 11 : Yekan1 = 11 : Dahgan1 = 11
              Waitms 90
               Goto Getdata
            End If
            
            '7seg rotin
            Tol3 = Tol
            If Tol3 < 0 Then
             Tol3 = Tol3 * -1
             Dahgan1 = 16
             Else
             Dahgan1 = 11
             End If
            
            If Tol3 < 99 Then
            
               Ashar1 = Tol3 Mod 10
                Yekan1 = Tol3 / 10
            
            End If
            
            Loop
             End Sub
            '****************************************************************************
            
            
            Segdata:
            Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110
            Data &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111
            Data &B11111111 , &B00000000 , &B01110110 , &B00110000 , &B01011100    'o  =14
            Data &B00111000 , &B01000000

            دیدگاه


              #7
              پاسخ : کمک کنید مشکل با برنامه دماسنج

              این یکی هم همون طوری بود ولی این فقط 000 رو نشون میداد

              دیدگاه


                #8
                پاسخ : کمک کنید مشکل با برنامه دماسنج

                سلام
                برنامه مشکلی نداره من چند تا دما سنج با همین برنامه درست کردم و داخل چند تا سالن مرغداری داره کار میکنه . احتمالا سخت افزاری مشکل داری . تو پروتئوس هم کار میکنه .
                1 اگه با مگا 8 کار میکنی واچ داگ رو غیر فعال کن .
                2بین پایه aref و زمین یه خازن 104 بذار .
                3 فیوز بیت فرکانس میکرو رو هم 8 مگا هرتز تنظیم کن .

                دیدگاه


                  #9
                  پاسخ : کمک کنید مشکل با برنامه دماسنج

                  فایل شبیه سازی با پروتئوس رو هم بببین
                  http://uplod.ir/90nmu8zz1u02/lm35_mega8_sch.DSN.htm

                  دیدگاه


                    #10
                    پاسخ : کمک کنید مشکل با برنامه دماسنج



                    دیدگاه


                      #11
                      پاسخ : کمک کنید مشکل با برنامه دماسنج

                      12012013590.jpg - 980 KB
                      08012013585.jpg - 777 KB

                      دیدگاه


                        #12
                        پاسخ : کمک کنید مشکل با برنامه دماسنج

                        آقا یاسر اگه میشه همون برنامه خودمو تصحیح کنید
                        چون من برد بورد نداشتم رو پی سی بی اجراش کردم الان دیگه نمیتونم دست به پایه هاش بزنم

                        دیدگاه


                          #13
                          پاسخ : کمک کنید مشکل با برنامه دماسنج

                          ok

                          دیدگاه


                            #14
                            پاسخ : کمک کنید مشکل با برنامه دماسنج

                            این برنامه رو امتحان کن .
                            برای نقطه هم من پورت c3 رو معرفی کردم خودت طبق مدارت تغییرش بده .

                            کد:
                            $regfile = "m8def.dat"
                            $crystal = 8000000
                            '$baud = 9600
                            
                            Config Portd = Output
                             Config Portc.3 = Output
                             Config Portb = Output
                            
                             'Config Lcd = 16 * 2
                            'Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.0 , Rs = Portd.1                            'onfig Portd.7 = Output
                            
                            Dataport Alias Portb
                            Config Debounce = 50                    'Comm. Anode
                            Config Adc = Single , Prescaler = Auto , Reference = Internal
                            Config Timer0 = Timer , Prescale = 1024
                            Enable Timer0
                            
                            Enable Interrupts
                            Dim A As Word , B As Word , C As Single
                            
                            
                            Dim Temp As Single , D As Integer , X As Word , Dama As Single , Damaval As Integer , Dama2 As Integer , Dama3 As Integer
                            
                            Dim Ashar1 As Integer , Yekan As Integer , Yekan1 As Integer , Dahgan1 As Integer , Sadgan As Integer
                            
                            Dim Key As Byte
                            Declare Sub Send
                            Declare Sub Refresh
                            
                            Declare Sub Getdata
                             Cls
                            Start Adc
                            '************************************************************
                            
                            On Timer0 P
                            Start Timer0
                            Start Timer1
                            
                            
                            
                            Goto Getdata
                            P:
                            Timer0 = 90
                            Call Refresh
                            
                            Return
                            
                            
                            '************************************************************
                            
                            Sub Getdata
                            
                            
                            
                             Do
                            
                             A = 0
                              B = 0
                              C = 0
                             Temp = 0
                            
                              For X = 1 To 20
                            
                            A = Getadc(0)
                            B = Getadc(1)
                            C = A - B
                            Temp = Temp + C
                            
                              Waitms 10
                            Next
                            
                            Temp = Temp / 20
                             Temp = Temp / 4
                            
                             Dama = Temp
                             Dama = Dama * 10
                            
                             If Dama < 0 Then Dama2 = Dama * -1 : Damaval = Dama2
                            If Dama > 0 Then Dama2 = Dama : Damaval = Dama2
                            
                            
                            
                            
                            
                             'sevenseg rotin
                            
                               Ashar1 = Damaval Mod 10
                               Yekan = Damaval / 10
                               Yekan1 = Yekan Mod 10
                               Dahgan1 = Damaval / 100
                            
                              If Dama > 0 Then
                            Sadgan = 11
                            
                            
                            End If
                            If Dama < 0 Then
                            Sadgan = 16
                            
                            End If
                            
                              Loop
                            
                            End Sub
                            '**************************************************************
                            Sub Refresh
                            
                               Portd.0 = 0 : Portd.1 = 1 : Portd.2 = 1 : Portd.3 = 1 : Portc.3 = 0 : D = Ashar1 : Call Send
                               Portd.0 = 1 : Portd.1 = 0 : Portd.2 = 1 : Portd.3 = 1 : Portc.3 = 1 : D = Yekan1 : Call Send
                               Portd.0 = 1 : Portd.1 = 1 : Portd.2 = 0 : Portd.3 = 1 : Portc.3 = 0 : D = Dahgan1 : Call Send
                               Portd.0 = 1 : Portd.1 = 1 : Portd.2 = 1 : Portd.3 = 0 : Portc.3 = 0 : D = Sadgan : Call Send
                            Return
                            End Sub
                            '**************************************************************
                            Sub Send
                              Dataport = Lookup(d , Segdata)
                              Waitms 4
                              Dataport = &B00000000
                            
                            
                            
                               Return
                              End Sub
                            '**************************************************************
                            '**************************************************************
                            '************************************************************
                            
                            Segdata:
                            Data &B00111111 , &B00000110 , &B01011011 , &B01001111 , &B01100110
                            Data &B01101101 , &B01111101 , &B00000111 , &B01111111 , &B01101111
                            Data &B11111111 , &B00000000 , &B01110110 , &B00110000 , &B01011100    'o  =14
                            Data &B00111000 , &B01000000
                            New_WinRAR_archive.rar]http://uplod.ir/qqfvy1hkf7dn/New_WinRAR_archive.rar.htm]New_WinRAR_archive.rar

                            دیدگاه


                              #15
                              پاسخ : کمک کنید مشکل با برنامه دماسنج

                              سلام آقا یاسر
                              این فیلمو ببینید http://uploadtak.com/images/x2338_20130202_203928.3gp
                              دماسنج همش پرش داره
                              من دماسنج رو که امتحان کردن دمای اتاق رو 30 نشون داد که فکر نکنم انقد باشه البته دما همش بالا و پایین میره و دمای منفی رو که امتحان کردم اول زد -10 بعد شد -6 و-5 و بعد شد +11 تو چند ثانیه این طور شد محیط هم بسته بود هوا رفت و آمد نداشت
                              ترتیب سون سگمنت ها هم برعکسه یعنی وقتی میخوای دما رو بخونی باید از راست به چپ بخونی
                              الانم متوجه شدم که یه اشتباهی کردم اونم اینه که پایه a و f رو جابجا زدم
                              الان ترتیب پایه ها به شکل زیر هست
                              پایه های مشترک(کاتد):
                              pd0=1 و pd1=2 و pd2=3 و pd3= 4
                              پایه های a تا h :
                              pb5=a و pb1=b و pb2=c و pb3=d و pb4=e و pb0=f و pb6=g و pb7=h یا همون dp
                              ببخشید خیلی اذیتتون کردم
                              پیشاپیش دستت درد نکنه

                              دیدگاه

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