اطلاعیه

Collapse
No announcement yet.

مشکل در برنامه(زبان بیسیک)

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

    مشکل در برنامه(زبان بیسیک)

    دوستان سلام
    من می خوام وقتی ورودی ADCبرابر2.5 ولت شد یه پایه روresetکنم ووقتی هم برابر 0.5 ولت شد یه پایه دیگه رو reset کنم ووقتی برابر 1.5 ولت شد 2 پایه روset کنم ایا برنامه ای که نوشتم صحیح است؟


    $regfile = "m8def.dat"
    $crystal = 8000000


    Config Portc.0 = Output
    Config Portb = Output
    Config Portc.1 = Output
    Config Adc = Single , Prescaler = Auto,


    Dim A As Word , B As Word
    Enable Adc
    Start Adc


    Do
    A = Getadc(5)
    Waitms 82
    B = A


    If B > 512 Then
    Portc.1 = 0
    End If


    If B = 300 Then
    Portc.1 = 1
    Portc.0 = 0
    End If


    If B < 102 Then
    Portc.0 = 0
    End If


    Loop
    End 'end program
    همچون دیود ی ام که با ورق معکوس روزگار شکسته شده ام

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

    نوشته اصلی توسط mohammad daraie
    دوستان سلام
    من می خوام وقتی ورودی ADCبرابر2.5 ولت شد یه پایه روresetکنم ووقتی هم برابر 0.5 ولت شد یه پایه دیگه رو reset کنم ووقتی برابر 1.5 ولت شد 2 پایه روset کنم ایا برنامه ای که نوشتم صحیح است؟


    $regfile = "m8def.dat"
    $crystal = 8000000


    Config Portc.0 = Output
    Config Portb = Output
    Config Portc.1 = Output
    Config Adc = Single , Prescaler = Auto,


    Dim A As Word , B As Word
    Enable Adc
    Start Adc


    Do
    A = Getadc(5)
    Waitms 82
    B = A


    If B > 512 Then
    Portc.1 = 0
    End If


    If B = 300 Then
    Portc.1 = 1
    Portc.0 = 0
    End If


    If B < 102 Then
    Portc.0 = 0
    End If


    Loop
    End 'end program

    سلام

    ظاهره که درسته ولی اون عدد 300 رو هم بکنید 307 که درستر میشه

    یه نکته هم بگم که شما وقتی ولتاژتون 1.5 ولت میشه تو برنامه نوشتید که پورت سی در 1 رو یک کن و پورت سی در 0 رو صفر کن این با گفتتون در تضاد هست
    برد جوجه کشی:
    مطالعه پست 1 (حتما مطالعه کنید)


    مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

    دانلود

    توجه:
    این برد نیمه صنعتی و خانگی هست...
    برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

    آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

    دیدگاه


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

      نوشته اصلی توسط mohammad...

      سلام

      ظاهره که درسته ولی اون عدد 300 رو هم بکنید 307 که درستر میشه

      یه نکته هم بگم که شما وقتی ولتاژتون 1.5 ولت میشه تو برنامه نوشتید که پورت سی در 1 رو یک کن و پورت سی در 0 رو صفر کن این با گفتتون در تضاد هست
      مرسی ممنون بابت توضیحات. اون یه تیکه که شما ذکر کردین رو حواسم نبود اشتباه نوشتم
      بعد یک سوال دیگه خروجی lm35 به ازای هر درجه افزایش 10 میلی افزایش پیدا میکنه درسته؟پس باید اعداد رو تقسیم بر 10 کنم تا یه صفرش بره
      همچون دیود ی ام که با ورق معکوس روزگار شکسته شده ام

      دیدگاه


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

        نوشته اصلی توسط mohammad daraie
        مرسی ممنون بابت توضیحات. اون یه تیکه که شما ذکر کردین رو حواسم نبود اشتباه نوشتم
        بعد یک سوال دیگه خروجی lm35 به ازای هر درجه افزایش 10 میلی افزایش پیدا میکنه درسته؟پس باید اعداد رو تقسیم بر 10 کنم تا یه صفرش بره
        خواهش می کنم دوست عزیز

        بله خروجی lm35 به ازای هر یک درجه 10 میلی ولت افزایش پیدا می کنه مقدار ولتاژ خروجی lm35 در دمای صفر درجه برابر با صفر ولت هست و در دمای 150 درجه برابر با 1.5 ولت هست

        اینکه عدد خونده شده از adc رو بر چه عددی تقسیم کنید این بر می گرده به ولتاژ رفرنس adc
        اگر ولتاژ رفرنس رو خارجی تنظیم کنید و 5 ولت بهش وصل کنید اگر به adc ولتاژ 5 ولت برسه خروجیش میشه 1023 یعنی دیگه ماکزیمم عدد همینه حالا اگر ولتاژ خروجی سنسور در دمای 150 درجه بهتون 1.5 ولت میده مقداری که adc می خونه برابر است با 306.9 ( رابطه بدست اوردن بدین صورت است که ولتاژ خونده شده از adc ضربدر ماکزیمم عدد adc و بعد جواب تقسیم بر ولتاژ رفرنس که ما 5 ولت در نظر گرفتیم >>>>> چون دقت adc ما 10 بیت هست 2 به توان 10 میشه 1024 و یکی کم می کنیم میشه 1023 که این ماکزیمم دقت adc هست >>>>پس میشه 1.5*1023 که جوابش میشه 306.9حالا این 306.9 رو تقسیم بر 150 می کنیم که میاد 2.046 که این عدد همون عددی هست که باید مقدار adc خونده شده تقسیم بر این عدد بشه تا دمای واقعی رو بهت بده )
        ولی شاید از رفرنس داخلی خود میکرو استفاده کنی که برابر هست با 2.56 ولت و عددی که برای 150 درجه خونده میشه برابره با 599.41 که این عدد رو بر 150 درجه تقسیم می کنیم جواب میشه 3.99 که عدد خونده شده از adc باید به این عدد تقسیم بشه تا مقدار واقعی دما رو بده

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

        باز اگر مشکلی بود در خدمتم
        برد جوجه کشی:
        مطالعه پست 1 (حتما مطالعه کنید)


        مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

        دانلود

        توجه:
        این برد نیمه صنعتی و خانگی هست...
        برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

        آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

        دیدگاه


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

          نوشته اصلی توسط mohammad...
          خواهش می کنم دوست عزیز

          بله خروجی lm35 به ازای هر یک درجه 10 میلی ولت افزایش پیدا می کنه مقدار ولتاژ خروجی lm35 در دمای صفر درجه برابر با صفر ولت هست و در دمای 150 درجه برابر با 1.5 ولت هست

          اینکه عدد خونده شده از adc رو بر چه عددی تقسیم کنید این بر می گرده به ولتاژ رفرنس adc
          اگر ولتاژ رفرنس رو خارجی تنظیم کنید و 5 ولت بهش وصل کنید اگر به adc ولتاژ 5 ولت برسه خروجیش میشه 1023 یعنی دیگه ماکزیمم عدد همینه حالا اگر ولتاژ خروجی سنسور در دمای 150 درجه بهتون 1.5 ولت میده مقداری که adc می خونه برابر است با 306.9 ( رابطه بدست اوردن بدین صورت است که ولتاژ خونده شده از adc ضربدر ماکزیمم عدد adc و بعد جواب تقسیم بر ولتاژ رفرنس که ما 5 ولت در نظر گرفتیم >>>>> چون دقت adc ما 10 بیت هست 2 به توان 10 میشه 1024 و یکی کم می کنیم میشه 1023 که این ماکزیمم دقت adc هست >>>>پس میشه 1.5*1023 که جوابش میشه 306.9حالا این 306.9 رو تقسیم بر 150 می کنیم که میاد 2.046 که این عدد همون عددی هست که باید مقدار adc خونده شده تقسیم بر این عدد بشه تا دمای واقعی رو بهت بده )
          ولی شاید از رفرنس داخلی خود میکرو استفاده کنی که برابر هست با 2.56 ولت و عددی که برای 150 درجه خونده میشه برابره با 599.41 که این عدد رو بر 150 درجه تقسیم می کنیم جواب میشه 3.99 که عدد خونده شده از adc باید به این عدد تقسیم بشه تا مقدار واقعی دما رو بده

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

          باز اگر مشکلی بود در خدمتم
          من تو برنامه رفرنس رو معرفی نکردم آیا خود میکرو متوجه میشه رفرنس خارجیه؟؟؟؟ وپایه aref مربوط به رفرنس خارجیه درسته؟ اونو زدم به vcc
          پس باید دما رو با ولتاژ 5 ولت تناسب بزنم
          همچون دیود ی ام که با ورق معکوس روزگار شکسته شده ام

          دیدگاه


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

            نوشته اصلی توسط mohammad daraie

            من تو برنامه رفرنس رو معرفی نکردم آیا خود میکرو متوجه میشه رفرنس خارجیه؟؟؟؟ وپایه aref مربوط به رفرنس خارجیه درسته؟ اونو زدم به vcc
            پس باید دما رو با ولتاژ 5 ولت تناسب بزنم
            شما برای اینکه بتونی ولتاژ مورد نظر خودتو بدی باید تو برنامه adc رو بر روی aref قرار بدی در این صورت ولتاژی که به aref وصل میشه همون ولتاژ مرجع هست که نسبت به این ولتاژ نمونه برداری انجام میشه کلا در هر صورت که از adc استفاده کنی باید پایه avcc به تغذیه میکرو وصل بشه

            کد زیر کانفیگ adc بر روی پایه avcc هست یعنی همون تغذیه میکرو که 5 ولته نمونه برداری نسبت به ولتاژ 5 ولت صورت خواهد گرفت فقط هنگام نصب هم از فیلتر rc استفاده کن تا نویز کمتر شه

            [code=c]Config Adc = Single , Prescaler = Auto , Reference = Avcc [/code]

            لینک زیر هم می تونه مفید باشه تو این لینک حالات مختلف هست

            http://www.eca.ir/forum2/index.php?topic=86475.0
            برد جوجه کشی:
            مطالعه پست 1 (حتما مطالعه کنید)


            مطالعه پست 2 (برای مطلع شدن از تغییرات برنامه مطالعه کنید)

            دانلود

            توجه:
            این برد نیمه صنعتی و خانگی هست...
            برای صنعتی شدن حتما برد مخصوص خودتون رو بزنید...

            آی دی کانال تلگرامی مربوط به برد جوجه کشی : electr0o0nic@

            دیدگاه

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