اطلاعیه

Collapse
No announcement yet.

تولید پالس با فرکانس متغیر

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

    تولید پالس با فرکانس متغیر

    با سلام خدمت همه دوستان.
    من میخوام برنامه ای بنویسم (توی بسکام) که با فشردن هر دکمه به من پالسی با فرکانس متغیر بدهد. یعنی مثلا با فشردن یک دکمه پالس با فرکانس 20 هرتز و با فشردن دکمه بعدی مثلا پالس با فرکانس 40 هرتز و ال اخر..
    سوال بعدی : میتونم برنامه ای بنویسم که خروجی من پالس با فرکانس متغیر باشه؟ یعنی تغییر فرکانس دست خودمون باشه
    میکروی من مگا16 است .

    ممنون میشم اگر نمونه برنامه ای شبیه این دارید در اختیار من بگذارید.(بعنوان الگو)

    #2
    پاسخ : تولید پالس با فرکانس متغیر

    نوشته اصلی توسط mahboob2
    با سلام خدمت همه دوستان.
    من میخوام برنامه ای بنویسم (توی بسکام) که با فشردن هر دکمه به من پالسی با فرکانس متغیر بدهد. یعنی مثلا با فشردن یک دکمه پالس با فرکانس 20 هرتز و با فشردن دکمه بعدی مثلا پالس با فرکانس 40 هرتز و ال اخر..
    سوال بعدی : میتونم برنامه ای بنویسم که خروجی من پالس با فرکانس متغیر باشه؟ یعنی تغییر فرکانس دست خودمون باشه
    میکروی من مگا16 است .

    ممنون میشم اگر نمونه برنامه ای شبیه این دارید در اختیار من بگذارید.(بعنوان الگو)
    سلام
    برای این که پالس با فرکانس دلخواه داشته باشی راحت ترین کار استفاده از دستور waitms هست
    اینجوری یه پالس با فرکانس 20k درست میشه:
    do
    waitms 25
    toggle porta.0
    loop

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

    f = فرکانس دلخواه به کیلو هرتز
    w=500/f
    do
    waitms w
    toggle porta.0
    loop

    برای مثال اگه توی برنامه بالا مقدار f رو برابر 40 قرار بدی خروجیت یه پالس با فرکانس 40k میشه

    دیدگاه


      #3
      پاسخ : تولید پالس با فرکانس متغیر

      دنبال برنامه واسه فانکشن جنراتور بگردید به نتیجه مطلوب میرسید.

      دیدگاه


        #4
        پاسخ : تولید پالس با فرکانس متغیر

        یعنی نیازی به استفاده از تایمرهای میکرو نیست؟
        اگر هست مقدار شمارنده را چطوری متغیر تعریف کنم؟

        دیدگاه


          #5
          پاسخ : تولید پالس با فرکانس متغیر

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

          دیدگاه


            #6
            پاسخ : تولید پالس با فرکانس متغیر

            نوشته اصلی توسط mahboob2
            یعنی نیازی به استفاده از تایمرهای میکرو نیست؟
            اگر هست مقدار شمارنده را چطوری متغیر تعریف کنم؟
            سلام
            با اجازه دوستان
            آقا فرید یک برنامه ی بسیار روان و ساده رو برای شما گذاشتن
            که درونش از wait استفاده کردن
            در واقع این دستور یه جورایی حالت تایمری داره
            اما یک فرق اساسی داره!
            "تایمر درون میکوکنترلر یک ماژول جداگانه ست که توسط میکرو
            کنترل و هدایت میشه
            اما دستوراتی مانند wait با استفاده از حلقه های خالی
            فقط سر سی پی یو رو گرم میکنن"
            در ساده ترین حالت که بخوای از تایمر هم استفاده کنی
            شما میتونی یک کلید بذاری
            و وصلش کنی به وقفه ی خارجی میکرو
            هر بار که کلید فشرده شد
            مقدار فرکانس به یک میزان مشخصی تغییر کنه
            مثلا 20 تا 20 تا
            یا 100 تا 100 تا !
            پس تایمر کجا استفاده میشه؟
            در واقع شما باید یک تایمر رو با وقفه ش فعال کنید
            و زمانی که کلید فشرده میشه
            مقدار TCNT را تغییر بدید.
            1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
            2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
            3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

            دیدگاه


              #7
              پاسخ : تولید پالس با فرکانس متغیر

              پس شما می فرمایید بهتره از تایمر استفاده کنم؟
              چطوری میتونم20 تا 20 تا یا 100 تا 100 تا فرکانس رو قابل تغییر قرار بدم؟ میتونم برای این کار از حلقه استفاده کنم ؟اگه بیشتر توضیح بدید ممنون میشم.

              دیدگاه


                #8
                پاسخ : تولید پالس با فرکانس متغیر

                توضیحات اضافه:
                همونطور که rozeh گفت، دنبال فانکشن جنراتور باش
                اما برای اینکه کمی راه بیفتی توضیحات زیر رو بخون:

                برای شبیه سازی پروژه ی بسیار ساده
                ابتدا یک وقفه ی خارجی تعریف کن و یک کلید فشاری بهش وصل کن
                یک متغیر تعریف کن از نوعunsigned char یعنی 8 بیتی بدون علامت
                هربار که این کلید فشرده میشه
                در زیر برنامه ی وقفه، یکی به این متغیر اضافه کن
                زمانی هم که شد 255، صفرش کن

                یکی از تایمرهای 8 بیتی میکرو رو فعال کن
                فرکانس تایمر رو زیاد بالا نگیر فعلا
                (میتونی 16 بیتی هم فعال کنی
                اگه 16 بیتی بود متغیری که در بالا تعریف کردی
                از نوع unsigned int یعنی 16 بیتی بدون علامت بذارش)
                وقفه ی تایمر هم فعال کن
                تایمر رو در مود top to FF (ویا top to FFFF) بذار

                هربار که کلید فشرده میشه
                متغیری که در بالا تعریف کرده بودی رو
                درون TCNT مربوط به تایمرت بریز

                یکی از پورت های میکرو رو به عنوان خروجی تعریف کن
                مثلا PD.0 رو.
                درون وقفه ی تایمر در هر بار که رخ میده
                اگه PD.0 برابر با 1 هستش، 0 بکنش
                اگه PD.0 برابر با 0 هستش، 1 بکنش
                (به عبارتی تاگلش بکن toggle)

                خب حالا مصدوم آماده ست
                1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
                2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
                3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

                دیدگاه


                  #9
                  پاسخ : تولید پالس با فرکانس متغیر

                  متوجه توشیحاتتون شدم. فقط اینکه بخوام فرکانس پالسم مثلا n تا n تا تغییر کنه، برای این کار باید متغیر جداگانه ای تعریف کنم؟ از این متغیر در کدوم قسمت برنامه استفاده کنم؟

                  دیدگاه


                    #10
                    پاسخ : تولید پالس با فرکانس متغیر

                    نوشته اصلی توسط mahboob2
                    متوجه توشیحاتتون شدم. فقط اینکه بخوام فرکانس پالسم مثلا n تا n تا تغییر کنه، برای این کار باید متغیر جداگانه ای تعریف کنم؟ از این متغیر در کدوم قسمت برنامه استفاده کنم؟
                    بذار مثال عددی بزنم
                    تا بهتر یاد بگیریم:
                    (اعداد فرضی هستن، مقادیر دقیق به میکرو و تنظیماتت بستگی داره)
                    فرض کن فرکانس کاری تایمر/کانتر 40 کیلوهرتر باشه
                    خب اگه این شمارنده یکی بشماره و بعد وقفه بده، فرکانس تولید وقفه میشه 40 کیلوهرتز
                    اگه این شمارنده دو تا بشماره و بعد وقفه بده، فرکانس تولید وقفه میشه 20 کیلوهرتز
                    اگه این شمارنده چهار تا بشماره و بعد وقفه بده، فرکانس تولید وقفه میشه 10 کیلوهرتز
                    اگه این شمارنده هشت تا بشماره و بعد وقفه بده، فرکانس تولید وقفه میشه 5 کیلوهرتز
                    اگه این شمارنده شانزده تا بشماره و بعد وقفه بده، فرکانس تولید وقفه میشه 2.5 کیلوهرتز
                    اگه این شمارنده سی و دو تا بشماره و بعد وقفه بده، فرکانس تولید وقفه میشه 1.25 کیلوهرتز
                    اگه این شمارنده شصت و چهار تا بشماره و بعد وقفه بده، فرکانس تولید وقفه میشه 0.625 کیلوهرتز
                    اگه این شمارنده صد و بیست و هشت تا بشماره و بعد وقفه بده، فرکانس تولید وقفه میشه 312 هرتز
                    اگه این شمارنده دویست و پنجاه و پنج تا بشماره و بعد وقفه بده، فرکانس تولید وقفه میشه 156هرتز
                    :rolleyes:
                    خب اگه هر مدار دیگه ای بین این اعداد هم بشماره میشه حساب کرد دیگه!
                    مثلا اگه 50 تا بشماره و بعد وقفه بده فرکانس وقفه میشه: 40 کیلو تقسیم بر 50 = 8 کیلوهرتز

                    دیگه بستگی به خودت داره
                    1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
                    2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
                    3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

                    دیدگاه


                      #11
                      پاسخ : تولید پالس با فرکانس متغیر

                      خب یه سوال دیگه بپرسم:
                      نیازی به استفاده از کریستال خارجی دارم؟
                      دیگه اینکه منظورتون از فرکانس کاری میکرو، همان عددیه که برای crystal در برنامه تعریف میکنم؟
                      اون فرمولی که در خط آخر دادید برای قسمتهایییی که در بالای اون توشیح دادید صدق نمیکنه چرا؟ فکر کنم فرمولش بدین صورت میشه که 40 کیلو تقسیم بر تعدادی که میخواد بشماره. درسته؟

                      دیدگاه


                        #12
                        پاسخ : تولید پالس با فرکانس متغیر

                        نوشته اصلی توسط mahboob2
                        خب یه سوال دیگه بپرسم:
                        نیازی به استفاده از کریستال خارجی دارم؟
                        دیگه اینکه منظورتون از فرکانس کاری میکرو، همان عددیه که برای crystal در برنامه تعریف میکنم؟
                        اون فرمولی که در خط آخر دادید برای قسمتهایییی که در بالای اون توشیح دادید صدق نمیکنه چرا؟ فکر کنم فرمولش بدین صورت میشه که 40 کیلو تقسیم بر تعدادی که میخواد بشماره. درسته؟
                        - میکرو اتمگا 16 تا فرکانس داخلی 8 مگاهرتز و فرکانس خارجی 16 مگاهرتز رو ساپورت میکنه! بستگی به کاربردت داره :rolleyes:
                        - آره منظورم همون فرکانس کریستاله!
                        - ممنون از دقتت، درسته، فرمول رو اصلاح کردم
                        1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
                        2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
                        3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

                        دیدگاه


                          #13
                          پاسخ : تولید پالس با فرکانس متغیر

                          سلام. یک سوالی داشتم در دنباله سوالهای قبلی. اگه تونستم با تایمر پالسی با فلرکانس مشخص بسازم، حالا قصد دارم باز هم با تایمر در همون محیط بسکام not این پالس رو بسازم (نمیخوام از گیت not استفاده کنم).میخوام به صورت نرم افزاری این کار رو کنم. کسی ایده ای داره؟

                          دیدگاه


                            #14
                            پاسخ : تولید پالس با فرکانس متغیر

                            نوشته اصلی توسط mahboob2
                            سلام. یک سوالی داشتم در دنباله سوالهای قبلی. اگه تونستم با تایمر پالسی با فلرکانس مشخص بسازم، حالا قصد دارم باز هم با تایمر در همون محیط بسکام not این پالس رو بسازم (نمیخوام از گیت not استفاده کنم).میخوام به صورت نرم افزاری این کار رو کنم. کسی ایده ای داره؟
                            اگر از توابع نرم افزاری مثل wait استفاده میکنید( که من اصلا بتون توصیه نمیکنم چون اصلا دقیق نیست و بهترین راهش تایمره) همون جایی که پین را toggle میکنید زیرش یک پین دیگه هم toggle کنید ، با این تفاوت که مقدار اولیه پین ها را اول کار در دو سطح متفاوت بگیرید( یکیش صفر و دیگری یک)
                            راه اندازي ماژول nrf24l01p براي codevision (ارتباط بيسيم بين دو ميکرو) : http://www.eca.ir/forum2/index.php?topic=78587.0
                            کوچ کردن از کدويژن به http://www.eca.ir/forum2/index.php?topic=81025.0 : AtmelStudio
                            نحوه نوشتن اصولي يک لايبرري و درايور نرم افزاري( بصورت ساده) : http://www.eca.ir/forum2/index.php?topic=81071
                            http://www.eca.ir/forum2/index.php?topic=82130.0 سفارش راه انداز ماژول هاي مختلف توسط اعضاي انجمن
                            انشالله به زودي تاپيک ها به روز رساني خواهد شد،

                            دیدگاه


                              #15
                              پاسخ : تولید پالس با فرکانس متغیر


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

                              دیدگاه

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