اطلاعیه

Collapse
No announcement yet.

پروژه تکمیل شده دماسنج پیشرفته

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

    پروژه تکمیل شده دماسنج پیشرفته

    سلام
    یکی از دوستان درخواست کرده بود این پروژه رو
    امکان تعیین دمای بالا و پایین و منو برای تعیین ان
    ذخیره دمای بالا و پایین در ای تو پیرام میکرو
    نمایش کلمات cold و warm و hot با توجه به بازه دمایی تعیین شده و دمای محیط
    دوستان توجه کنید که من خودم عملی تستش نکردم هنوز و اگر کسی ساخت و با مشکل مواجه شد اعلام کنه همین جا تا تحصیح بشه
    موفق باشید
    فایل های پیوست شده

    #2
    پاسخ : پروژه تکمیل شده دماسنج پیشرفته

    در ضمن پسورد فایل فشرده www.eca.ir میباشد و شامل شماتیک در پرتوس و فایل برنامه در بسکام میباشد
    با تشکر

    دیدگاه


      #3
      پاسخ : پروژه تکمیل شده دماسنج پیشرفته

      اگر ممکنه یه سری کلیات هم راجع به برنامه ای که نوشتی بدی ممنون میشم

      دیدگاه


        #4
        پاسخ : پروژه تکمیل شده دماسنج پیشرفته

        چشم فقط یه قمدار کمبود وقت دارم الان
        امشب یا فردا میزارم واست البته تو خود برنامه هم هلپ گزاشتم

        دیدگاه


          #5
          پاسخ : پروژه تکمیل شده دماسنج پیشرفته

          خوب اولین اشکال رو خودم پیدا کردم
          در برنامه کانفیگ adc رو نزاشته بودم که لطفا اضافه کنید
          CONFIG ADC = single, PRESCALER = AUTO, REFERENCE = internal
          توضیحات رو هم بزودی میزارم

          دیدگاه


            #6
            پاسخ : پروژه تکمیل شده دماسنج پیشرفته

            خوب بریم سر وقت برنامه
            $regfile = "m16def.dat"
            $crystal = 8000000
            اینا که واضح هست و نوع میکرو و فرکانس کاری رو تعیین میکنند
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''&#039 ;
            Config Adc = Single , Prescaler = Auto , Reference = Internal
            اینم که کانقیگ ای دی سی هست و ولتاژ مرجع رو 2.56 ولت داخلی تنظیم شده
            Config Lcd = 16 * 2
            Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.1 , Db6 = Portc.0 , Db7 = Portd.7 , E = Portc.3 , Rs = Portc.4
            اینم که کانفیگ ال سی دی هست
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' '
            Config Portb.0 = Input : Upk Alias Pinb.0 'up key
            Config Portb.1 = Input : Downk Alias Pinb.1 'down key
            Config Portb.3 = Input : Cohk Alias Pinb.3 'chenge betwen cold and hot in chengeing menu
            اینم کانفیگ چند پایه به عنوان ورودی و تعیین هم نام برای اونها و استفاده از اونا به عنوان کلید های تنظیم و منو و ...
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' '
            Enable Interrupts
            Enable Int2
            On Int2 Int2isr 'menu / exit key
            این چند خط هم اینتراپت ها رو فعال میکنه و از اینتراپت خارجی 2 به عنوان کلید رفتن به منوی تنظیم استفاده میکنه
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''
            Dim A As Word
            Dim B As Word
            Dim C0 As Integer
            Dim C1 As Integer
            Dim C2 As Integer
            Dim C3 As Integer
            Dim C4 As Integer
            Dim C5 As Integer
            Dim C6 As Integer
            Dim Cf As Integer
            این متغییر های دما هستند که چند بار از adc خونده میشه و سر اخر میانگینشون نمایش داده میشه
            Dim Mio As Bit 'menu is open
            این متغییر هم برای فهمیدن اینکه منو الان باز هست یا بسته استفاده میشه
            Declare Sub Menu
            این ساب منو رو نمایش میده
            Dim Cold As Integer
            Dim Hot As Integer
            این هم متغییر های دمای مینیمم و ماکسیمم هستند
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' '''
            Readeeprom Cold , 0
            Readeeprom Hot , 10
            این دو خط مقدار رو از ای ای پیرام میکرو میخونه و میریزه تو متغییر های مینیمم و ماکسیمم
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' '''
            If Cold = -1 Then Cold = 10
            If Hot = -1 Then Hot = 40
            این خط میاد برسسی میکنه مقدار این دو متغییر رو و اگه -1 بود یعنی میکرو اولین بار هست که بعد از پروگرم داره کار میکنه میاد مقدار اولیه میده بهشون
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' '''
            Deflcdchar 0 , 3 , 3 , 32 , 30 , 16 , 16 , 30 , 32
            این خط یه کاراکتر اختصاصی به شکل درجه سانتیگراد تعریف میکنه
            Cursor Off
            Cls
            Lcd "Ali Alipoor.R"
            Wait 1
            Cls
            این چند خط هم lcd رو اماده میکنه
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''

            Start Adc
            قسمت انالوگ به دیجیتال رو روشن میکنه
            Main:
            Do
            ''''''''&# 039;'''''''&#03 9;'''''''
            A = Getadc(3)
            B = Getadc(4)
            C0 = A - B
            C0 = C0 / 4

            A = Getadc(3)
            B = Getadc(4)
            C1 = A - B
            C1 = C1 / 4

            A = Getadc(3)
            B = Getadc(4)
            C2 = A - B
            C2 = C2 / 4

            A = Getadc(3)
            B = Getadc(4)
            C3 = A - B
            C3 = C3 / 4

            A = Getadc(3)
            B = Getadc(4)
            C4 = A - B
            C4 = C4 / 4

            A = Getadc(3)
            B = Getadc(4)
            C5 = A - B
            C5 = C5 / 4

            A = Getadc(3)
            B = Getadc(4)
            C6 = A - B
            C6 = C6 / 4
            ''''''''&# 039;'''''''&#03 9;'''''''' ''
            Cf = C0 + C1
            Cf = Cf + C2
            Cf = Cf + C3
            Cf = Cf + C4
            Cf = Cf + C5
            Cf = Cf + C6
            Cf = Cf / 7
            ''''''''&# 039;'''''''&#03 9;'''''''' '''
            Locate 1 , 1
            Lcd Cf ; Chr(0)
            Waitms 100
            این چند خط بالا هم میاد از adc میخونه و میریزه توی متغییر ها و سر اخر میانگین میگیره و رو ال سی دی نمایش میده دما و پشت سرش کاراکتر سانتیگراد رو که تعریف کرده بودیم
            ''''''''&# 039;'''''''&#03 9;'''''''' '''
            Locate 2 , 1
            If Cf < Cold Then Lcd "cold"
            If Cf > Hot Then Lcd "hot "
            If Cf > Cold And Cf < Hot Then Lcd "warm"
            Loop
            End
            این چند خط دما رو بررسی میکنه با مقدار ماکسیمم و مینیممم و میگه وضعیت دما چیه
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;''''''
            Int2isr:

            If Mio = 1 Then
            Mio = 0
            Goto Main
            Else
            Mio = 1
            Call Menu
            End If
            Return
            اینم مال قسمت دکمه منو هست که میاد بررسی میکنه اگه منو باز نبود منو رو باز میکنه
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''
            Sub Menu
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' '''''
            Coldmenu:
            Cls
            Lcd "cold:" ; Cold
            Do
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;''''
            If Upk = 1 Then
            Waitms 100
            If Upk = 1 Then
            Cold = Cold + 1
            Goto Coldmenu
            End If
            End If

            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;''''
            If Downk = 1 Then
            Waitms 100
            If Downk = 1 Then
            Cold = Cold - 1
            Goto Coldmenu
            End If
            End If
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;''''
            If Cohk = 1 Then
            Waitms 100
            If Cohk = 1 Then
            Writeeeprom Cold , 0
            Goto Hotmenu
            End If
            End If
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;''''
            Loop
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' '''''
            Hotmenu:
            Cls
            Lcd "hot:" ; Hot
            Do
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;''''
            If Upk = 1 Then
            Waitms 100
            If Upk = 1 Then
            Hot = Hot + 1
            Goto Hotmenu
            End If
            End If

            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;''''
            If Downk = 1 Then
            Waitms 100
            If Downk = 1 Then
            Hot = Hot - 1
            Goto Hotmenu
            End If
            End If
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;''''
            If Cohk = 1 Then
            Waitms 100
            If Cohk = 1 Then
            Writeeeprom Hot , 10
            Goto Main
            End If
            End If
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;''''
            Loop
            ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' ''''''''&# 039;'''''''&#03 9;'''''''' '''''
            Return
            End Sub
            بعد از باز شدن منو برنامه اول مقدار کولد رو میخواد که میشه با دکمه های اپ و دون کم و زیادش کرد میکرو تو یک حلقه بررسی میکنه دائم وضعیت کلید ها رو و اگه کلیدی فشترده شد کمی صبر میکنه و اگه باز هم همون کلید فشرده شده باشه(برای جلوگیری از اثر نویز محیط روی برنامه) میاد مقدار رو کم و زیاد میکنه و اگر کلید chenge فشرده شده باشه مقدار cold رو ثبت میکنه تو ای پی رام و میره سرو وقت گرفتن هات و بعد از مقدار گرفتن اون و .. کاربر میکتونه با فشردن دوباره کلید چنج بره به قسمت اصلی برنامه و نمایش دما و ....
            اگه باز نکته مبهمی بود خط های مورد نظر رو کپی کنید و بگید تا مفصل توضیح بدم
            با تشکر

            دیدگاه

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