اطلاعیه

Collapse
No announcement yet.

کمک در پروژه ی یک شمارنده ی ساده با میکرو

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

    #16
    پاسخ : کمک در پروژه ی یک شمارنده ی ساده با میکرو

    خوب به نظر من بیایید یک متغیر دیگه مثل C تعریف کنید و در جهت عکس اون رو زیاد کنید و هر وقت که به صد رسید از B یک واحد کم کنه برای مثال روتین وقفه رو به صورت زیر بنویسید


    My_count:
    '================================
    If Pinb.0 = 0 Then
    Incr A

    If A = 100 Then
    Incr B
    A = 0
    End If

    Else
    If A > 0 Then Decr A
    Incr C

    If C = 100 Then
    Decr B
    C = 0
    End If

    End If
    '================================
    Return

    دیدگاه


      #17
      پاسخ : کمک در پروژه ی یک شمارنده ی ساده با میکرو

      البته من بیسیک بلد نیستم اما یک برنامه ساده میتونه این باشه:
      با فرض اینکه یکی از سیگنالها به PinB.0 وصل باشه و اون یکی سیگنال به INT0:


      Dim AbsPosition As Long

      Declare Function PosMeter As Integer
      Declare Function PosCM As Integer

      Enable Interrupts
      Config Int0 = Falling
      Enable Int0
      On Interrupt INT0 IRQ0


      Do
      ....
      Loop
      End

      Function PosMeter As Integer
      PosMeter = AbsPosition / 100
      End Function

      Function PosCM As Integer
      PosCM = AbsPositon Mod 100
      End Function

      IRQ0:
      If PinB.0 Then
      AbsPosition = AbsPosition + 1
      Else
      AbsPosition = AbsPosition - 1
      End If
      Return

      دیدگاه


        #18
        پاسخ : کمک در پروژه ی یک شمارنده ی ساده با میکرو

        سلام بر دوستان و تشکر بی نهایت به خاطر برنامه هاتون
        دوست عزیز اقای Mojtaba-led برنامه تون رو با کمی تغییر نسبت به چیزی که نوشتید با اجازتون در اخر این شد:
        $regfile = "m8def.dat"
        $crystal = 1000000

        Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = _
        Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
        Config Lcd = 16 * 2

        Config Int1 = Rising

        Enable Interrupts
        Enable Int1

        On Int1 My_count


        Dim A As Word
        Dim B As Word


        Do


        Cls
        Lcd "cm: "
        Lcd A
        Locate 2 , 1
        Lcd "meter: "
        Lcd B
        Waitms 500






        Loop


        End




        My_count:
        '================================
        If Pind.2 = 1 Then
        Incr A

        If A = 100 Then
        Incr B
        A = 0
        End If

        Else
        If A > 0 Then
        Decr A

        If A = 0 Then A = 100
        End If
        If A = 100 Then
        Decr B
        End If
        If B = 65535 Then
        A = 0
        B = 0
        End If

        End If
        '================================
        Return

        عدد 65535 به خاطر این بود که وقتی متغیر b رو بعد از صفر مقدارش رو کسر میکردیم این عدد می اومد و من برنامه رو به صورت فوق تغییر دادم
        برنامه که معلومه و چیزی نداره
        اما این در صورتی است که برای تعیین جهت چرخش باید از یه کلید استفاده کرد . میخواستم ببینم نمیشه برنامه رو به طوری تغییر داد که با همون بحث تشخیص اختلاف فاز بفهمه جهت چرخش رو به چه سمتی هست و تشخیص بده که شمارش بالا شمار باشه یا پایین شمار
        اقای اقا زاده برنامه تون رو دیدم اما یه چند تا ارور داشت که نتونستم رفعش کنم و اگه ممکنه میخواستم دوستان یه لطفی کنن کمک کنن که تموم شه
        ( البته تا همین جاش هم خیلی کمک شده و اگه اون چیزی هم که خودم خواستم نشد هم بازم ازتون ممنون هستم )
        امیدوارم همتون همیشه خوب و خوش و موفق باشید
        در کشوری که تنها دولت حق حرف زدن دارد هیچ حرفی را باور نکنید

        دیدگاه


          #19
          پاسخ : کمک در پروژه ی یک شمارنده ی ساده با میکرو

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

          دیدگاه


            #20
            پاسخ : کمک در پروژه ی یک شمارنده ی ساده با میکرو

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

            دیدگاه


              #21
              پاسخ : کمک در پروژه ی یک شمارنده ی ساده با میکرو

              کامپایلر مورد استفاده ات چیه؟ مثلا کدویژن یا WINAVR یا اسمبلر نمیتونه باشه؟

              دیدگاه


                #22
                پاسخ : کمک در پروژه ی یک شمارنده ی ساده با میکرو

                نوشته اصلی توسط رضا آقازاده
                کامپایلر مورد استفاده ات چیه؟ مثلا کدویژن یا WINAVR یا اسمبلر نمیتونه باشه؟
                سلام
                بیسکام
                در کشوری که تنها دولت حق حرف زدن دارد هیچ حرفی را باور نکنید

                دیدگاه


                  #23
                  پاسخ : کمک در پروژه ی یک شمارنده ی ساده با میکرو

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

                  میخواهد با حرکت شفت انکودر در جهت راست متغیر A به ازای هر پله یک واحد زیاد بشه و بعد از اون با افزایش A و رسیدن اون به 100 متغیر B یک واحد افزایش پیدا کنه و A برابر با صفر بشه
                  حالا اگه شفت انکودر در جهت عکس یعنی به سمت چپ بچرخه متغیر A به ازای هر پله یک واحد کاهش پیدا کنه و پس از رسیدن A به صفر متغیر B یک واحد کم بشه
                  و توی لوپ اصلی بیاد مقدار A , B رو نشون بده
                  فقط همینه!
                  درسته ؟

                  اما این در صورتی است که برای تعیین جهت چرخش باید از یه کلید استفاده کرد . میخواستم ببینم نمیشه برنامه رو به طوری تغییر داد که با همون بحث تشخیص اختلاف فاز بفهمه جهت چرخش رو به چه سمتی هست و تشخیص بده که شمارش بالا شمار باشه یا پایین شمار
                  ده نه ده !
                  این همه در موردش بحث کردیم که دیگه همچین کاری نکنیم دیگه ! طبق اون روشی که توی پست قبل اشارعه کردم دیگه نیازی به کلید نیست :

                  به این ترتیب که خروجی a به اینتراپت 1 و خروجی b به پایه pb0 متصل شده باشند

                  دیدگاه


                    #24
                    پاسخ : کمک در پروژه ی یک شمارنده ی ساده با میکرو

                    نوشته اصلی توسط mojtaba_led
                    آقا من برخلاف اونچه که جناب آقا زاده فرمودند همچین لوپ مطلب رو دیر میگیرم (ملت دارن به جوک بعدی میخندن من هنوز نفهمیدم اولی چی بوده) ببینید من درست متوجه شدم که میخوایید چیکار کنید یا خیر :

                    میخواهد با حرکت شفت انکودر در جهت راست متغیر A به ازای هر پله یک واحد زیاد بشه و بعد از اون با افزایش A و رسیدن اون به 100 متغیر B یک واحد افزایش پیدا کنه و A برابر با صفر بشه
                    حالا اگه شفت انکودر در جهت عکس یعنی به سمت چپ بچرخه متغیر A به ازای هر پله یک واحد کاهش پیدا کنه و پس از رسیدن A به صفر متغیر B یک واحد کم بشه
                    و توی لوپ اصلی بیاد مقدار A , B رو نشون بده
                    فقط همینه!
                    درسته ؟
                    ده نه ده !
                    این همه در موردش بحث کردیم که دیگه همچین کاری نکنیم دیگه ! طبق اون روشی که توی پست قبل اشارعه کردم دیگه نیازی به کلید نیست :
                    سلام ببخشید من یکم دیر جواب دادم چون رفته بودم عرسی یه شهر دیگه به نت دسترسی نداشتم
                    اما در مورد سوالتون بله دوست عزیز
                    دقیقا همین چیزی هست که خودتونم فهمیدید
                    ولی حرف من اینه
                    وقتی شفت انکودر در یک جهت مثلا ساعت گرد میچرخه با توجه به خروجی هاش که دو تا خرجی با 90 درجه اختلاف فاز هستن یکی از خروجی ها پیش فاز تر از اون یکی هستش
                    و خوب اگر انکودر رو در جهت معکوس بچرخونیم مسلما پیشفاز بودن خروجی ها در جهت چرخش معکوس عوض میشه و دقیقا خروجی که در جهت قبل پیش فاز بود حالا پس فاز میشه
                    حالا اگه ما بتونیم برای میکرو تعریف کنیم که مثلا اگر وردی 1 پیش فاز بود بالا شمار بشمار اگه ورودی 2 پیشفاز بود پایین شمار دقیقا مشکل رو حا کردیم
                    و مشکا اصلی من اینه که نمیدونم چطور باید پیش فاز بودن دو ورودی رو جوری نوشت که بتونه تشخیص بده . و تشخیص اختلاف فاز توسط میکرو برای من سخته


                    اما دوست من در مورد برنامتون ضمن تشکر از شما نمیشه این چیزی که گفتم با این برنامه عملی کرد
                    چون برنامه طوری هست که اگر ورودی pb0 برابر 0 بود خوب روال عادی برنامه پیش بره و بالا شمار بشماره و اگر برابر یک شد دستور else اجرا بشه و پایین شما بشماره در صورتی که خرجی انکودر به صورت پالس هستش و مدام صفر و یک میشه و میکرو سریعا به حالت بالا شمار و پایین شمار در میاد و کلا برنامه به هم میریزه
                    نمیدونم منظورتون از اینکه این همه بحث کردیم که کلید نزاریم چی هستش
                    الان برنامه وابسته به کلید هستش تا درست کار کنه
                    بازم ممنون از وقتی که گذاشتید
                    پیشاپیش ممنون از جوابتون
                    بدرود
                    در کشوری که تنها دولت حق حرف زدن دارد هیچ حرفی را باور نکنید

                    دیدگاه

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