اطلاعیه

Collapse
No announcement yet.

راههای خوندن سریع فرکانس با avr

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

    راههای خوندن سریع فرکانس با avr

    با سلام

    من میخواستم با سرعت هرچه بیشتر و دقت خوبی فرکانس یه سیگنال رو با avr بخونم

    از روش تایمر و کناتر میشه و دقت خوبی هم داره اما متاسفانه سرعت رفرش بسیار کمی (یک ثانیه) داره که خیلی زیاده

    من حداقل با سرعت رفرش 0.01 ثانیه میخوام دسترسی به مقدار فرکانس داشته باشم

    از دوستان میخوام که در این زمینه کمکم کنن

    راستی از یه روش هم میشه و اونم اینه که فرکانس رو به ولتاژ تبدیل کنم که یه کم مشکله و هزینه ی جانبی هم داره

    ممنون از همه :bye
    ِِDie for Life, Not Live to Die
    Freedom Fighter
    " ناخود گاه، هريك از ما ، از ناميرائي خود يقين دارد " . فروید

    #2
    پاسخ : راههای خوندن سریع فرکانس با avr

    سلام
    والا اون قدیما که avr و این قرتی بازی هاش نبود! ما سیگنال رو می دادیم به پایه interrupt و طول پالس رو اندازه می گرفتیم! اون وقت معکوس تایم میشد فرکانس :biggrin: با وقفه حساس به لبه یا سطح ... البته این روش خیلی ابتداییه ولی خوب همینه دیگه :icon_razz:

    دیدگاه


      #3
      پاسخ : راههای خوندن سریع فرکانس با avr

      سلام

      ممنون از توجهتون

      راستش من با avr همین کار رو کردم و اونم به این شکل که با لبه ی بالا رونده تایمر استارت میشد و با لبه ی بالا رونده ی بعدی تایمر می ایستاد و با این روش
      فرکانس رو میخوندم

      اما یه کم دقتش کم بود البته میشد از دقتش صرف نظر کرد اما یه مشکل دیگه هم داشت و اونم این بود که تو ی فرکانسهای کم دچار خطا میشد

      دلیلش هم قابل توجیه بود و اونم به این خاطر بود که با پالس بالا رونده ی اول تایمر استارت میشه و چون تایمر یه بار سر ریز میشه و دوباره از اول میشمره

      عدد بدست امده قابل اعتماد نیست

      به هر حال از راهنماییتون ممنون :smile:

      همین الان یه ایده به ذهنم رسید اجراش میکنم خبرشو همینجا میدم

      بازم ممنون
      ِِDie for Life, Not Live to Die
      Freedom Fighter
      " ناخود گاه، هريك از ما ، از ناميرائي خود يقين دارد " . فروید

      دیدگاه


        #4
        پاسخ : راههای خوندن سریع فرکانس با avr

        با استفاده از 2 تایمر میتونی اینکار انجام بدی ، اندازه گیری فرکانس در یک قسمت کوچک از موج . اینجوری میتونی به سرعت رفرش بالا برسی .
        فتو بلاگ من
        کاردستی ها :
        روبات شطرنج باز ( یادگار دوران جوانی )
        فارسی نویسی مستقیم در نمایشگر های گرافیکی
        کتابچه خود آموز زبان توصیف سخت افزار Verilog

        دیدگاه


          #5
          پاسخ : راههای خوندن سریع فرکانس با avr

          نوشته اصلی توسط shankimout
          با استفاده از 2 تایمر میتونی اینکار انجام بدی ، اندازه گیری فرکانس در یک قسمت کوچک از موج . اینجوری میتونی به سرعت رفرش بالا برسی .
          چرا 2 تایمر :question:
          ِِDie for Life, Not Live to Die
          Freedom Fighter
          " ناخود گاه، هريك از ما ، از ناميرائي خود يقين دارد " . فروید

          دیدگاه


            #6
            پاسخ : راههای خوندن سریع فرکانس با avr

            خودم یه برنامه نوشتم و تو پروتئوس هم خوب جواب داده


            یه نظری بدید :redface:
            ممنون :job:

            کد:
            $regfile = "m8def.dat"
            $crystal = 8000000
            
            Config Lcdpin = Pin , Db4 = Pind.1 , Db5 = Pind.7 , Db6 = Pind.5 , Db7 = Pind.4 , E = Pind.0 , Rs = Pind.6
            Config Lcd = 16 * 2
            Cursor Off
            Config Int0 = Rising
            Config Timer0 = Timer , Prescale = 8
            
            
            
            Enable Interrupts
            Enable Timer0
            Enable Int0
            On Int0 Int0_int
            On Ovf0 Tim0_str
            
            Stop Timer0
            Timer0 = 0
            'Start Timer0
            
            Dim Freq As Single
            Dim T_ovft As Word
            Dim Ovft As Word
            Dim Tv As Word
            Dim Temp As Single
            Dim 1st_p As Bit
            Dim Too_small As Bit
            
            Do
            
            If Too_small = 0 Then
            Temp = Ovft * 256
            Temp = Temp + Tv
            'Temp = Temp * 8
            Freq = 1000000 / Temp
            Freq = Round(freq)
            Locate 1 , 1
            Lcd Freq ; "     "
            Locate 2 , 1
            Lcd Ovft ; "   "
            Else
            Locate 1 , 1
            Lcd "Less Than 1HZ   "
            Locate 2 , 1
            Lcd Ovft ; "   "
            End If
            
            If Ovft > 3906 Then
            
             Too_small = 1
            
             Else
            
             Too_small = 0
            
            End If
            
            Loop
            
            
            
            Int0_int:
            
            If 1st_p = 1 Then
            Stop Timer0
            Tv = Timer0
            1st_p = 0
            Ovft = T_ovft
            Else
            Timer0 = 0
            Start Timer0
            T_ovft = 0
            1st_p = 1
            End If
            
            Return
            
            
            
            Tim0_str:
            
            Incr T_ovft
            
            Return
            
            
            End
            ِِDie for Life, Not Live to Die
            Freedom Fighter
            " ناخود گاه، هريك از ما ، از ناميرائي خود يقين دارد " . فروید

            دیدگاه

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