اطلاعیه

Collapse
No announcement yet.

شمارنده با AVR

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

    شمارنده با AVR

    من یه مداری با AVR بستم که کارش شمارش از صفر تا 99 است ولی تا 10 بیشتر نمشماره و دوباره ریست میشه.جالب این هست که وقتی تاخیر تو برنامه بسکام را کم میکنی شمارنده تا 30 میشماره (خود برنامه هیچ مشکلی نداره و فرکانس کاری را هم روی 1MHz داخلی قرار دادم
    ایا کسی هستش که کمکم کنه.(هر چی هستش عیب مربوط به دستور Wait تو برنامه هستش.چون با دادن اعداد مختلف برای دستور Wait شمارنده تا یک عدد جدیدی میشماره)
    تاخیر روی مقدار زیر گذاشتم Waitms 250

    #2
    پاسخ : شمارنده با AVR

    یه متغیر بزار با توی یه حلقه وبایه دستور incr یه واحد افزایش بده وبا یه دستور if کنترلش کن
    dim a as word
    do
    if a=90 then a=0
    end if
    incr a
    waitms 500
    loop
    برای نشون دادنش با یه دستور lcd a نشونش بده
    معلوليت محدوديت نيست

    آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

    دیدگاه


      #3
      پاسخ : شمارنده با AVR

      سلام اقا مهدی ولی عیب مربوط به برنامه ام نسیت.برنامه را برات در زیر میگذارم.مشکلی نداره ولی نمیدونم چرا جواب نمیده
      درضمن با استفاده از دستور do-loop استفاده کردم ولی با جواب نداد(اصلا تغییر مقدار عدد Waitدر برنامه چه ربطی به مقدار شمارش داره)

      این هم برنامه هستش که از 99 شروع به شمارش میکنه.با هردفعه فشردن کلیدی یکی از شمارشو کم میکنه

      $regfile = "m16def.dat"
      $crystal = 1000000
      Config Porta = Output
      Config Portb = Output
      Config Portd = Input
      Dim A As Byte
      Dim B As Byte
      Dim C As Byte
      A = 99
      Do
      If Pind.0 = 1 Then Decr A
      If A = -1 Then A = 99
      B = A / 10
      C = A Mod 10
      Portb = &B0000010
      Porta = B
      Waitms 250
      Portb = &B0000001
      Porta = C
      Waitms 250
      Loop
      End

      دیدگاه


        #4
        پاسخ : شمارنده با AVR

        A=-1؟؟؟؟؟

        اصلا همچین دستوری داریم؟
        متغیر A چون از جنس byte هست وقتی به صفر میرسه اگه یکی دیگه ازش کم کنی مقدار 255 رو میگیره.
        شما اون قسمتشو درست کن فعلا.

        دیدگاه


          #5
          پاسخ : شمارنده با AVR

          سلام اقا مهدی من برنامه زیر که خیلی هم راحت هستش و یه شمارنده تا99 هستش را هم امتحان کردم جواب نداد.
          اول مقدار تاخیر را روی Waitms=70 گذاشتم و شمارنده تا عدد 14 بیشتر نمیشمارد .بعد اومدم و تاخیر را روی Waitms = 50 گذاشتم ایندفعه شمارنده تا 50 شمرد.؟؟؟؟؟؟؟؟؟؟
          هرچی مقدار تاخیر را کمترمیکنم وضعیت کارکرد مدار بهتر میشه .حالا میتونی راهنماییم کنید.متشکر

          $regfile = "m16def.dat"
          $crystal = 1000000
          Config Portb = Output
          Config Portc = Output
          Dim A As Byte
          Dim B As Byte
          For B = 0 To 9
          Gosub Yekan
          Next B
          Yekan:
          For A = 0 To 9
          Portc = &B0000010
          Portb = B
          Waitms 20
          Portc = &B0000001
          Portb = A
          Waitms 20
          Next A
          Return
          End

          دیدگاه


            #6
            پاسخ : شمارنده با AVR

            نوشته اصلی توسط Dr.Xylitol
            A=-1؟؟؟؟؟

            اصلا همچین دستوری داریم؟
            متغیر A چون از جنس byte هست وقتی به صفر میرسه اگه یکی دیگه ازش کم کنی مقدار 255 رو میگیره.
            شما اون قسمتشو درست کن فعلا.
            کاملا درست می فرمایند
            تو خطوط تعریف وپیکربندی اینهارو هم اضافه کن

            portd.0=0
            ddrd.0=1
            از دستور debounce استفاده کن تا راحتر بتونی با فشار دادن کلید یه واحد یه واحد اعداد رو تغییر بدی نه با فشار یه کلید مثلا 20 تا شمارش بشه
            معلوليت محدوديت نيست

            آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

            دیدگاه


              #7
              پاسخ : شمارنده با AVR

              دقیقا شما چی میخوای؟ ببینید من درست متوجه شدم؟ شما میخوای با میکرو یه سون سگمنت دو تایی رو راه اندازی کنی واعداد 0تا 99 رو نمایش بده وبتونی با یه کلید کم ویا زیادش کنی؟ درسته؟
              معلوليت محدوديت نيست

              آنکس که عاجز از خلق لحظه هاست، معلول است. نه من...روح بلند آدمیت فراتر از هر معلولیتی است.

              دیدگاه


                #8
                پاسخ : شمارنده با AVR

                من مشکلم این هستش که دستورات تاخیر در پرتیوس خوب جواب نمیده.مثلا مداری که کارش شمارش عدد هستش (یعنی هروقت ما مدار را استارت کردیم خودش شروع به شمارش کنه).من این مدار را تو پروتیوس بستم ولی درست عمل نمیکنه و هر وقت تاخیر آن را تو برنامه در حد 5msکم میکنم اونوقت شمارنده درست عمل میکنه.ولی اگر همین تاخیر را به 100msافزایش میدهم مدار اصلا درست کار نمیکنه(هرچی مقدار تاخیر را بالاتر میبرم وضعیت بدتر میشه)

                دیدگاه

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