اطلاعیه

Collapse
No announcement yet.

مشکل با تایمر مگا 32

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

    مشکل با تایمر مگا 32

    سلام
    من یک برنامه فرکانس متر توی بسکم 8051 نوشتم و با دقت 1 هرتز کار میکنه ولی وقتی میحوام اونو واسه مگا 32 بنویسم کلا بهم میریزه
    تبدیل تایمرها رو هم انجام دادم
    راهنمایی کنید


    این سورس برنامه من هست



    $regfile = "89c55wd.dat"
    $crystal = 24000000

    ' define variables used
    Dim A As Byte
    Dim C As Long , D As Long
    Dim Count As Word
    Dim T0ic As Long
    Dim Delayword As Word


    ' Initialize variables
    Count = 0
    T0ic = 0
    D = 0

    ' initialize ports
    P1 = 0
    P3 = 255

    ' configure lcd display
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = P1.4 , Db5 = P1.5 , Db6 = P1.6 , Db7 = P1.7 , E = P1.3 , Rs = P1.2
    Cls
    'clear the LCD display
    Lcd " EFY Freq Meter "

    ' define timer0
    Config Timer0 = Counter , Gate = Internal , Mode = 1
    'Timer0 = counter : timer0 operates as a counter
    'Gate = Internal : no external gate control
    'Mode = 1 : 16-bit counter

    ' set t0 internal interrupt
    On Timer0 Timer_0_overflow_int
    ' interrupt will be generated on every 65536 count
    Priority Set Timer0
    Enable Interrupts
    Enable Timer0


    Counter0 = 0
    'clear counter
    Start Counter0
    'enable the counter to count

    Do
    'set up a 1 sec accurate DO NOTHING loop
    Enable Interrupts
    'wait 1 as per BASCOM-51 is not accurate

    For Delayword = 1 To 45440
    Next Delayword

    Disable Interrupts
    C = Counter0
    'get counter value
    D = T0ic * 65536

    Lowerline
    C = C + D
    T0ic = 0
    Lcd " "
    Lowerline
    ' show the frequency
    Lcd "f=" ; C ; " Hz"
    Waitms 255
    Waitms 255

    C = 0

    Counter0 = 0
    Start Counter0
    're-start it because it was stopped by accessing the COUNTER
    Loop



    ' timer0 int subroutine
    Timer_0_overflow_int:
    Rem timer0 overflow ( 65535 ) interrupt comes here
    ' increment the variable
    Incr T0ic
    Return
    End
    نوفن پردازش هوشمند

    #2
    پاسخ : مشکل با تایمر مگا 32

    سلام
    منظورت از کلا بهم میریزه چیه؟؟ یعنی فرکانس رو اشتباه میده؟؟؟؟
    به فرض که اصلاحات برنامه درست باشه باید کلاک توی برنامه با کلاک میکرو(کلاکی که با فیوزبیتها مشخص میشه) یکی باشه
    فعلا چیزی به ذهنم نمیرسه
    در دیر مغان آمد یارم قدحی در دست
    مست از می می خواران از نرگس مستش مست

    دیدگاه


      #3
      پاسخ : مشکل با تایمر مگا 32

      سلام
      دستگاه تا زیر 255 هرتز رو درست نشون میده ولی بعد از 255 هرتز دیگه کانتر سرریز نمیشه و عدد ها کم یا زیاد میشن . با فرض اینکه کانتر 1 8 بیتی هست و باید تا 255 بشماره و بعد سرریز بشه .
      اون حلقه هم برای ایجاد یک ثانیه تاخیر هست ولی برای مگا درست از آب در نمیاد .
      یک تاخیر یک ثانیه رو چطور با مگا ایجاد کنم .؟

      نوفن پردازش هوشمند

      دیدگاه


        #4
        پاسخ : مشکل با تایمر مگا 32

        سلام،

        نوشته اصلی توسط پشه 007

        یک تاخیر یک ثانیه رو چطور با مگا ایجاد کنم .؟
        هرجا نیاز به تاخیر 1 ثانیه داشتید از دستور زیر استفاده کنید.

        Start timer0
        Do
        If A=1 then Exitdo
        Loop
        A=0
        count=0

        و از وقفه ی سرریز زیر استفاده کنید:

        Timer0_1s:
        Incr count
        If count>=31250 then
        stop timer0
        A=1
        End if
        Return

        توجه شود که در برنامه ی مذکور از تایمر 0 و perescale=1 وکریستال 8 مگاهرتز استفاده شده. برای تاخیر 1 ثانیه تایمر باید 31250 بار سرریز شود.




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

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

        دیدگاه


          #5
          پاسخ : مشکل با تایمر مگا 32

          شما برای این کار از REAL Time clock استفاده کنید و یک کریستال ساعت مچی به پایه های TOSC1 , TOSC2 وصل کنید
          برای اطلاعات بیشتر یک پیغام خصوصی بدهید
          برای تشکر از امتیاز + استفاده کنید

          دیدگاه

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