اطلاعیه

Collapse
No announcement yet.

چرا نمی شه تو ATmega 32 دو تا تایمر را با هم راه انداخت

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

    چرا نمی شه تو ATmega 32 دو تا تایمر را با هم راه انداخت

    سلام
    آقا یه سوال: :question:
    چرا توی atmega32 نمی شه 2 تا تایمر ار با هم راه انداخت.
    ببینید من دو تا تایمر را روشن می کنم. توی bascom هم مشکل نداره ولی تو پروتئوس یکی از تایمر ها (اولین تایمری که راه انداختم) از کار میفته.
    من می دونم نمی شه تایمر 0 و 1 را با هم راه انداخت چون با هم سنکرون هستند ولی چرا تایمر 2 که تو atmega32 با این دو تا تایمر آسنکرون هست هم نمی تونه با این د وتا تایمر کار کنه.
    ببینید من می خوام برای مدت زمان مثلا 5 ثانیه تایمر 2 را روشن کنم. در عین حال می خوام تایمر صفر را هم برای بدست آوردن T هر پالس راه بندازم. یعنی توی 5 ثانیه T هر پالس ورودی به یکی از پین ها را اندازه بگیرم. ولی وقتی برنامه را اجرا می کنم تایمر 2 که مربوط به شمارش 5 ثانیه هست از کار میفته و تایمر صفرم درست کار میکنه . بعد وقتی مثلا تایمر صفر را خاموش (از برنامه خارج می کنم) می کنم تایمر 2 درست کار می کنه و 5 ثانیه را اندازه می گیره :eek:
    میشه بگید مشکل می تونه کجا باشه

    #2
    پاسخ : چرا نمی شه تو ATmega 32 دو تا تایمر را با هم راه انداخت

    تا جایی که من میدونم تایمر های مگا32 مستقل از هم دیگه کار میکنند و مدهای کاریشون هم میتونه متفاوت از هم دیگه باشه من خودم با مگا 32 شده
    با هر سه تایمر( با مدهای مختلف : Fast pwm,CTC,CPhase PWM,Normal mode ) کار کردم. مشکلی هم پیش نیومده.
    به دیتا شیتش هم نگاه کنید میبینید که تایمر هایش ربطی به هم دیگه ندارن:
    – Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes
    – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture
    Mode
    آموزش نرم افزار Matlab برای دانشجویان رشته های مهندسیhttp://alidoost.ir/news.php?readmore=22

    دیدگاه


      #3
      پاسخ : چرا نمی شه تو ATmega 32 دو تا تایمر را با هم راه انداخت

      سلام
      دوست عزیز فکر میکنم این مشکل از پرتئوس هست
      در دیر مغان آمد یارم قدحی در دست
      مست از می می خواران از نرگس مستش مست

      دیدگاه


        #4
        پاسخ : چرا نمی شه تو ATmega 32 دو تا تایمر را با هم راه انداخت

        نوشته اصلی توسط farid-a
        تا جایی که من میدونم تایمر های مگا32 مستقل از هم دیگه کار میکنند و مدهای کاریشون هم میتونه متفاوت از هم دیگه باشه من خودم با مگا 32 شده
        با هر سه تایمر( با مدهای مختلف : Fast pwm,CTC,CPhase PWM,Normal mode ) کار کردم. مشکلی هم پیش نیومده.
        به دیتا شیتش هم نگاه کنید میبینید که تایمر هایش ربطی به هم دیگه ندارن:
        – Two 8-bit Timer/Counters with Separate Prescalers and Compare Modes
        – One 16-bit Timer/Counter with Separate Prescaler, Compare Mode, and Capture
        Mode
        سلام آقا فرید و آقا محمد
        آقا من یه برنامه ساده برای اینکه دو تا تایمر را با هم راه بندازم اینجا نوشتم میشه بهش یه نگاه بندازید شاید مشکل از طرف من باشه و تو اصل قضیه ایراد داشته بشم فایل هاشم گذاشتم تا ببنید.

        $regfile = "m32def.dat"
        $crystal = 8000000

        Config Pind.0 = Input

        Cls
        Lcd " start"
        Dim X As Long
        Dim Times As Long
        Dim Time_2 As Long
        Dim Y As Long
        Dim Z As Long
        Dim U As Long

        Time_2 = 0
        Times = 0
        Y = 0
        X = 0


        Config Timer0 = Timer , Prescale = 1
        Config Timer2 = Timer , Prescale = 1
        Enable Interrupts
        Enable Timer0
        Enable Timer2
        Enable Ovf0
        Enable Ovf2
        Start Timer0
        Start Timer2
        On Ovf0 Shomaresh0
        On Ovf2 Shomaresh2

        Cursor Off

        Cls

        Do
        Times = Timer0
        Y = X * 256
        Y = Y + Times
        Y = Y / 8000000
        Locate 2 , 1
        Lcd "time: " ; Y
        Time_2 = Timer2
        U = Z * 256
        U = U + Time_2
        U = U / 8000000
        Locate 2 , 10
        Lcd "time2:" ; U
        Loop

        Shomaresh0:
        Incr X
        Return

        Shomaresh2:
        Incr Z
        Return

        این فایل هاش
        http://www.4shared.com/dir/1907573/d0314dd0/timer_2.html

        ممنون میشم اگه دوستان دیگه هم نظر بدن

        دیدگاه


          #5
          پاسخ : چرا نمی شه تو ATmega 32 دو تا تایمر را با هم راه انداخت

          دوست عزیز سلام،

          پیشنهاد هایی که بنظر من برنامتون را بهتر میکنه ایناست:

          1- اگه میخواید روی LCD چیزی نمایش داده بشه باید اون را پیکر بندی کنید مثلا:

          Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 , Db6 = Porta.6 , Db7 = Porta.7 , E = Portc.7 , Rs = Portc.6
          2- با توجه به اینکه کریستال شما 8MHz هست و prescale=1 پس تایمر با سرعت 8000000/3 بر ثانیه در حال شمارش هست و مقدار اون یعنی Timer0 نیز با سرعت بالایی تغییر میکنه پس مقدار Y نیز دایما در حال تغییر است. اگه مقدار Timer0 براتون در یه لحظه ی خاص براتون مهمه باید تایمر را متوقف کنید(stop timer0) وبعد مقدار اون را بخونید. برای تایمر 2 هم همینطور.

          با این پیکربندی تایمر وقتی متغیرهای X وZ تامقدار31250 میشمارند زمان 1 ثانیه گذشته است. اینو گفتم تا شاید ازش استفاده کنید. یعنی وقتی مقدار اونها 31250 شد آنها را صفر کنید و مقدار یه متغیر دیگه را یک واحد اضافه کنید یه تایمر (شمارنده) خواهید داشت مثلا:

          If x >= 31250 then
          X=0
          Incr second
          End if


          3- اگه از LCD 2*16 استفاده میکنید مقدار U روی اون نشون داده نمیشه چون با دستور Locate 2 , 10 و بعد از اون Lcd "time2:" ; U مقدار U در ستون 15 از LCD قرار میگیره وتنها یک رقم از اون نمایش داده میشه.


          صلی الله علیک یا اباعبدالله الحسین.

          صلی الله علی الباکین علی الحسین(ع).

          دیدگاه


            #6
            پاسخ : چرا نمی شه تو ATmega 32 دو تا تایمر را با هم راه انداخت

            سلام محمود جان، خوبی؟

            آقا این چند تا اشکال کوچک داشت، الان دو تا تایمرت داره همزمان کار می کنه، در ضمن تایمر صفر ویک فقط پیش تقسیم کننده اشون مشترک و کاملا مستقل از هم عمل میکنند.

            http://www.avr.ir/temp_files/timers.zip

            موفق باشی. :smile:
            There is nothing so practical as a good theory. — Kurt Lewin, 1951

            دیدگاه

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