اطلاعیه

Collapse
No announcement yet.

مشکل در راه اندازی ولوم هرز گرد یا همان rotary encoder

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

    مشکل در راه اندازی ولوم هرز گرد یا همان rotary encoder

    سلام دوستان

    یه مشکل هنگام استفاده از ولوم هرز گرد تو بسکام و استفاده از دستور
    کد:
    Var = ENCODER( pin1, pin2, LeftLabel, RightLabel , wait)
    برام پیش اومده و اونم اینه که هنگام راستگرد 2 تا 2 تا با لا میره در صورتی که من تو برنامه نوشتم یکی یکی بالا بره و هنگاه چپ گرد هم اصلا پایین نمیاد . خیلی باهاش ور رفتم ولی هیچ ... لطفا کمک کنید . a , b رو هم با 1k پول پ کردم و com رو هم زمین.
    اینم برنامم.
    کد:
    $regfile = "m128def.dat"
    $crystal = 11059200
    $baud = 19200                        ' use baud rate
    $hwstack = 32                        ' default use 32 for the hardware stack
    $swstack = 32                        ' default use 10 for the SW stack
    $framesize = 40
    
     '---------------------------------------------------------------------------------------------------------
    $lib "glcdks108.lbx"
    $include "FONT8X8.FONT"
    Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 4 , _
    Ce2 = 3 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 2
    Setfont Font8x8
    Cls
    '-----------------------------------------------------------------------------------------
    Dim B As Byte , A As Single , C As Word
    Config Porte = Input
    B = 10
    Do
    
    B = Encoder(pine.1 , Pine.0 , Leftlabel , Rightlabel , 1)
    Lcdat 1 , 1 , A ; "   "
    Lcdat 2 , 1 , B , "   "
    Lcdat 3 , 1 , C ; "   "
    Waitms 10
    Loop
                                'end program
    
    Rightlabel:
    Waitms 20
    
    A = A +1
    C = B
    
    Return
    
    Leftlabel:
    Waitms 20
    
    A = A - 1
    C = B
    Return
    
    End
    دعا پشتِ دعا براي آمدنت
    گناه پشــــــتِ گناه براي نيامــدنت
    دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
    کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

    #2
    پاسخ : مشکل در راه اندازی ولوم هرز گرد یا همان rotary encoder

    دوستان هنگام استفاده از دستور بالا به یه مشکل دیگه بر خوردم و اون این بود که این دستور باید تو یه loop دایما چک بشه تا کار کنه ولی اینجاش مشکلی نیست , مشکل از اونجایی شروع میشه که بخاییم کلیدی یا دستوری تو همون loop بکار ببریم و دیگه اونارو اجرا نمیکنه چون دایما مشغول روتری هست. پس نتیجه گرفتم که خودم برنامشو بنویسم . برنامشو با یه وقفه و یه پایه معمولی نوشتم. ولی باز کیفیت لازم رو نداره . مثلا متغییر من خوب بالا میره ولی درس و حسابی پایین نمییاد.
    دعا پشتِ دعا براي آمدنت
    گناه پشــــــتِ گناه براي نيامــدنت
    دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
    کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

    دیدگاه


      #3
      پاسخ : مشکل در راه اندازی ولوم هرز گرد یا همان rotary encoder

      این برنامه که نوشتم چه مشکلی داره که به هر جهت میچرخونم متغیر من کم میشه؟؟؟
      دوستان لطفا کمک کنن
      کد:
      $regfile = "m128def.dat"
      $crystal = 11059200
      '-------------------------------------------------
      $lib "glcdks108.lbx"
      $include "FONT8X8.FONT"
      Config Graphlcd = 128 * 64sed , Dataport = Porta , Controlport = Portc , Ce = 4 , _
      Ce2 = 3 , Cd = 0 , Rd = 1 , Reset = 5 , Enable = 2
      Setfont Font8x8
      '--------------------------------------------------
      Dim A As Bit , B As Byte , C As Byte
      '--------------------------------------------------
      Enable Interrupts
      Config Int0 = Falling
      Enable Int0
      On Int0 Leftt
      Config Int1 = Falling
      Enable Int1
      On Int1 Rightt
      '--------------------------------------------------
      A = 0
      B = 0
      C = 0
      Cls
      Do
      Lcdat 1 , 1 , "number: " ; B ; "   "
      'Lcdat 2 , 1 , "           "
      'Lcdat 3 , 1 , "           "
      'Lcdat 4 , 1 , "           "
      'Lcdat 5 , 1 , "           "
      'Lcdat 6 , 1 , "           "
      Loop
      
       Leftt:
      If C = 1 Then
      B = B - 1
      C = 0
      A = 0
      Else
      A = 1
      End If
      Return
      
      Rightt:
      If A = 1 Then
      B = B + 1
      A = 0
      C = 0
      Else
      C = 1
      End If
      Return
      End                             'end program
      دعا پشتِ دعا براي آمدنت
      گناه پشــــــتِ گناه براي نيامــدنت
      دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
      کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

      دیدگاه


        #4
        پاسخ : مشکل در راه اندازی ولوم هرز گرد یا همان rotary encoder

        دوستان لطفا کمک کنید الان 2 ماه میشه که دارم باهاش ور میرم ولی درست نمیشه :cry:

        دعا پشتِ دعا براي آمدنت
        گناه پشــــــتِ گناه براي نيامــدنت
        دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
        کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

        دیدگاه


          #5
          پاسخ : مشکل در راه اندازی ولوم هرز گرد یا همان rotary encoder

          از دوستان کسی تاحالا با این روتریها کار نکرده؟؟؟؟
          اینم عکسش
          دعا پشتِ دعا براي آمدنت
          گناه پشــــــتِ گناه براي نيامــدنت
          دل درگــير ، مــيان اين دو انتخــــــــــــــــــــاب
          کــــــــــــــدام آخر ؟ آمـــدنـت يا نيامدنـــــــــــــــــــــــت

          دیدگاه


            #6
            پاسخ : مشکل در راه اندازی ولوم هرز گرد یا همان rotary encoder

            سلام . اگه درست حدس زده باشم نوع کار این انکودر هم مثل باقی انکودر های افزایشی هست.
            من مدار و نرم افزار کاملش رو تو پروتوس دارم عزیز. اگه به کارت میاد آدرس Email رو بده بقرستم برات . چون اینجا اکانت ندارم که پلود کنم.!
            در ضمن من از کدویژن و زبان سی استفاده کردم . به کمک 2 وقفه حساس به لبه. یکی برای چپ گرد یکی برای راست گرد ...
            یاهو آیدی رو برات می فرستم ... همیشه آنلاین هستم تقریبا.

            دیدگاه


              #7
              پاسخ : مشکل در راه اندازی ولوم هرز گرد یا همان rotary encoder

              سلام منم قبلا مشکل شمارو داشتم خودم کد نوشتم.
              کد:
              '**************************** Find Rotary Encoder Value ************************
              
              Find_value:
              
              
              
              
                 Encoder_value = Pinb
              
                 Encoder_value = Encoder_value And &B11000000
              
              
                 If Encoder_value = &B11000000 Then
              
                     M = 1
                     Stop_bit = 0
                 End If
              
                 If Encoder_value = &B01000000 Then
              
                     If M = 1 Then
              
                     M = M * 2
              
                     End If
              
                     If M = 5 Then
              
                     M = M * 6
              
                     End If
              
              
                 End If
              
                 If Encoder_value = &B00000000 Then
              
                     If M = 2 Then
              
                     M = M * 3
              
                     End If
              
                     If M = 1 Then
              
                     M = M * 5
              
                     End If
              
                 End If
              
                 '*******************
                 If M = 6 Then
              
                   Gosub Link_a
              
                 End If
              
                 '*******************
                 If M = 30 Then
              
                   Gosub Link_b
              
                 End If
              
              
              
              Return
              
              '********************************* Link A **************************************
              
              Link_a:
              
              If Stop_bit = 0 Then
              
              Incr A
              Incr B
              
              Waitms 10
              
              Stop_bit = 1
              
              
              End If
              
              Return
              
              '******************************* Link B ****************************************
              
              Link_b:
              
              If Stop_bit = 0 Then
              
              Decr A
              Decr B
              
              Waitms 10
              
              Stop_bit = 1
              
              
              
              End If
              
              Return

              دیدگاه

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