اطلاعیه

Collapse
No announcement yet.

دریافت اطلااعت از Ds18b20 به صورت مجزا از برنامه

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

    دریافت اطلااعت از Ds18b20 به صورت مجزا از برنامه

    سلام من قبلا با pic برنامه مینویشتم چندماهه که به avr رو اوردم
    یه سوال داشتم ایا امکانش هست که یه حلقه do loop داشته باشیم که به کار خودش و دستوراتی که داخلش هست بپردازه
    و یه حلقه دیگه داشته باشیم که هر 3 ثانیه یه بار اطلاعات سنسور Ds18b20 را بگیره و داخل یه متغیر ذخیره کنه
    اینو بگم که ارتباط با Ds18b20 را بلدم و اطلاعات را میگیرم و داخل متغیر میریزم فقط میخوام اون مورد را حل کنم که مثلا دوتا حلقه به صورت مجزا از هم کار کنن

    #2
    پاسخ : دریافت اطلااعت از Ds18b20 به صورت مجزا از برنامه

    بله . امکانش هست. فقط میبایست یک اینتراپت برای تایمر بنویسید که یک کانتر درونش شمرده بشه و هر وقت سه ثانیه شد یک بیت رو set کنه و در حلقه do while اون بیت رو چک کنید که هر وقت set شده بود یک برنامه دیگه رو صدا کنه و بیت رو داخل اون برنامه reset کنید.
    الهم صل علی محمد و آل محمد و عجل فرجهم
    www.adaksell.com

    دیدگاه


      #3
      پاسخ : دریافت اطلااعت از Ds18b20 به صورت مجزا از برنامه

      نوشته اصلی توسط mojitaba نمایش پست ها
      بله . امکانش هست. فقط میبایست یک اینتراپت برای تایمر بنویسید که یک کانتر درونش شمرده بشه و هر وقت سه ثانیه شد یک بیت رو set کنه و در حلقه do while اون بیت رو چک کنید که هر وقت set شده بود یک برنامه دیگه رو صدا کنه و بیت رو داخل اون برنامه reset کنید.
      سلام دستتون درد نکنه همون جوری که گفتم تازه اومدم توی avr فقط همین تکه کدی که گفتید را میتونید برام بنویسید بدید با بسکام بازم تشکر

      دیدگاه


        #4
        پاسخ : دریافت اطلااعت از Ds18b20 به صورت مجزا از برنامه

        Enable Interrupts


        Config Timer1 = Timer , Prescale = 1024


        Enable Ovf1
        Stop Timer1


        Timer1 = 35000
        On Ovf1 Timer5
        '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        Start Timer1


        Print "timer started"


        Do


        Porta.0 = 1
        Wait 1
        Porta.0 = 0
        Wait 1


        Loop
        End


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


        Timer5:


        Stop Timer1
        Print "timer int"
        Timer1 = 35000
        Start Timer1


        Return


        اقا با این مشکلم حل شد فقط موندم زمان تایمر را چه طوری تغییر بدم

        دیدگاه


          #5
          پاسخ : دریافت اطلااعت از Ds18b20 به صورت مجزا از برنامه

          منظورتونو درست توجه نشدم. از حرفتون دو تا نتیجه گرفتم :
          1-یعنی شما میخواهید که تایمر زمانهای مختلفی رو شمارش کنه. مثلا یک بار 3 ثانیه و یه بار دو ثانیه و ...
          2-یا اینکه منظورتون این بود چجوری سه ثانیه رو براش تعریف کنید؟
          در هر دو صورت شما نیاز به یک متغیر دارید که به عنوان counter ازش استفاده کنید .
          به عنوان مثال (برای 3 ثانیه) اگر تایمر شما هر یک میلی ثانیه سرریز میکنه اونوقت نیاز به متغیری از نوع Word دارید که داخل برنامه Timer یکی یکی اضافه بشه . یعنی هر بار تایمر سرریز داشت یک واحد بهش اضافه بشه . فقط کافیه یک IF هم داشته باشید که اگر به عدد 3000 رسید یک بیت رو set کنه و کانتر رو صفر کنه . حالا تو برنامه اصلی هم نیاز به یک IF دارید که اون بیت رو چک کنه که هر وقت یک بود یک برنامه دیگه رو اجرا کنه و بیت مورد نظر رو صفر.

          دلیل: ادغام دو پست برای جلوگیری از اسپم

          config TIMER1=TIMER , prescale=1024
          Enable Ovf1
          Stop Timer1
          Timer1 = 35000
          On Ovf1 Timer5
          start timer1
          '************************************************* ***
          declare sub do_somthing_else
          '************************************************* ***
          dim conter as Integer
          dim flag as Boolean
          '************************************************* ***
          conter=0
          flag=0
          main:
          do


          if flag=1 then do_somthing_else
          loop
          '************************************************* ***
          sub do_somthing_else
          flag=0
          'do every things that you want
          end sub
          '************************************************* ***
          timer5:
          Stop Timer1
          Print "timer int"
          Timer1 = 35000
          incr conter
          if conter>3000 then
          flag=1
          conter=0
          end if
          Start Timer1
          Return
          الهم صل علی محمد و آل محمد و عجل فرجهم
          www.adaksell.com

          دیدگاه

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