اطلاعیه

Collapse
No announcement yet.

encoder & counter

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

    encoder & counter

    سلام دوستان
    من یه مشکل تو خوندن دیتا داشتم
    من اینکودر رو به کانتر 0 وصل کردم و همونطور که میدونید این کانتر فقط تا 255 میشمره و
    سرریز میشه
    ولی من برای این که مثلا هر 100 کد یه دستور رو انجام بدم لازم دارم تا این محدودیت 255 تایی رو بردارم
    (اگه راه دیگه ای هس بگید لدفا)
    من با این برنامه و چند برنامه مشابه این ازمایش کردم ولی به نتیجه ای نرسیدم
    کد:
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    Config Lcdbus = 4
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Pina.0 , Db5 = Pina.1 , Db6 = Pina.2 , Db7 = Pina.3 , E = Pina.4 , Rs = Pina.5
    
    Config Timer1 = Counter , Edge = Falling , Capture Edge = Rising , Noise Cancel = 0
    Config Timer0 = Counter , Edge = Rising
    
    Enable Ovf0
    On Ovf0 P
    
    Dim B As Byte , A As Long , C As Long , D As Word , X As Byte
    A = 0
    D = Counter0
    Start Counter0
    
    Do
    Locate 1 , 1 : Lcd Counter0
    Locate 2 , 1 : Lcd C
    Loop
    
    P:
    Incr A
    B = A * 255
    C = B + D
    Return
    خواهش میکنم راهنماییم کنید.شدیدا توش گیر افتادم

    #2
    پاسخ : encoder & counter

    شما باید وقفه سرریز تایمر 0 را فعال کنید و در وقفه به یک متغیر یک واحد اضافه کنید و هر گاه خواستید مقدار انکودر را بخونید مقدار متغییر را در 256 ضرب کنید و با مقدار تایمر جمع کنید.این جوری تعداد پالس های خیلی زیادی را می تونید بشمارید

    دیدگاه


      #3
      پاسخ : encoder & counter

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

      دیدگاه


        #4
        پاسخ : encoder & counter

        ممنون از دوستان
        sadeghmojtabaei: من همین کارو کردم .یعنی با پرش به وقفه 1 واحد به متغیر اضافه کردم و در 256 ضرب
        کردم.ولی حتی تو سیمولاتور هم نتیجه نداد . متغیر روی ال سی دی همش مقدار صفرو نشون میداد.نظرت چیه؟

        جعفر رضائی: تقریبا یه چیزایی فهمیدم.می تونی بیشتر توضیح بدی.در ضمن من در چهار مکان مختلف میخوام هر بار یه دستور اجرا بشه.و برای این کار از mod استفاده میکنم.

        دیدگاه


          #5
          پاسخ : encoder & counter

          جواب میده.(البته من با C می نویسم)
          در ضمن مقاموت پول پ برای انکودر گذاشتی؟البته توی شبیه سازی نیاز نیست.
          اینم سندش :nerd:
          http://uplod.ir/ctf65lea8fc1/ENC.rar.htm

          دیدگاه


            #6
            پاسخ : encoder & counter

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

            دیدگاه

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