اطلاعیه

Collapse
No announcement yet.

درخواست کمک، مدولاسیون fsk با AVR

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

    درخواست کمک، مدولاسیون fsk با AVR

    سلام دوستان،
    برای انجام یک پروژه نیاز دارم تا ورودی میکرو که مقداری بین 0 تا 5 ولت هست رو نمونه برداری کنم و توسط یک کلاک (که باید تعریف کنم) و لبه بالا رونده اون نمونه برداری شروع بشه و به ازای پالس مثبت کلاک، یک سینوسی با فرکانس f1 و به ازای پالس صفر کلاک، یک سینوسی با فرکانس f2 از میکرو خارج بشه.
    فقط تونستم با پروژه های شبیه داخل سایت قسمت ADC رو انجام بدم.
    اگه ممکنه اطلاعاتتون رو به اشتراک بذارید تا بنده هم به نتیجه برسم.
    ببخشید پلود نتونستم بکنم لینک خارجی گذاشتم:
    http://www.mediafire.com/?fbtv82058ptzit3

    #2
    پاسخ : درخواست کمک، نمونه برداری از سیگنال با کلاک

    دوستان میشه یه راهنمایی کوچیک کنید تا هم تاپیک راه بیوفته هم کار ما؟

    دیدگاه


      #3
      پاسخ : درخواست کمک، نمونه برداری از سیگنال با کلاک

      سلام
      AVR واحد DAC نداره ها! می خوای نرم افزاری کار کنی(یا شاید می خوای یه دونه IC شو بخری؟)؟
      بهتر نیست با XMEGA کار کنی؟

      البته من دقیقا نفهمیدم می خوایین چیکار کنید!

      دیدگاه


        #4
        پاسخ : درخواست کمک، نمونه برداری از سیگنال با کلاک

        نه باید با AVR کار کنم و از DAC خارجی هم استفاده میکنم. اینش مشکلی نیست فقط من میخوام سیگنال ورودیم رو مدوله کنم و مشکل کارم اینه که نمیدونم چطوری اینکارو انجام بدم.
        میخوام مدولاسیون FSK روی سیگنال انجام و فرستاده بشه به یه میکرو دیگه و اون این سیگنال رو دمدوله کنه.
        الان سیگنال ورودیم آمادست فقط کافیه بجای 8 بیتی که میره به LCD یک سیگنال سینوسی با دو فرکانس (و احتمالا از پایه TXD) به میکرو دوم فرستاده بشه و اون میکرو این سیگنال سینوسی رو دوباره به 8 بیت صفر و یک تبدیل کنه و من با DAC آنالوگش کنم دوباره.
        من راستش زیاد اصولی AVR کر نکردم شما راهنمایی کنید و سرنخهارو بدید تا با کمکتون بتونم مدارم رو کامل کنم.
        ممنون،

        دیدگاه


          #5
          پاسخ : درخواست کمک، نمونه برداری از سیگنال با کلاک

          درود

          باید بهتر توضیح بدی.
          اگه درست حدس زده باشم، شما می خوای از سیگنال ورودی انالوگ نمونه برداری کنی و اون رو به صورت fsk ارسال کنی. منظورت از اون پالس هم بیت ریت هست، درسته؟
          فرکانس های f1 و f2 رو هم که مشخص نکردی.
          به هر حال، کارهای مختلفی می تونی انجام بدی. ساده اش اینه که توی حلقه اول مقدار adc رو بخونی، بعد یکی یکی بیت های اون رو بخونی اگه یک بود، به اندازه بیت ریت، توی حلقه دیگه فرکانس f1 رو در خروجی ایجاد کنی. این کار رو هم می توی با یه lookup table انجام بدی. یعنی مقادیر دو تا فرکانست رو در یک جدول داشته باشی و اون رو در خروجی قرار بدی. برای صفر هم همینطور.

          اگ نیازی به dac نباشه و نخوای سینوسی رو خودت تولید کنی، می تونی به صورت مربعی فرکانس های f1 و f2 رو تولید کنی. در این صورت می تونی از تایمر ها استفاده کنی. به راحتی با مقدار دهی به تایمر در یک مد مشخص، می تونی هر فرکانسی خواستی در خروجی پایه مثلا oc1a قرا بدی. بدون اینکه میکرو درگیر تولید فرکانس بشه.
          اگه سینوسی هم خواستی می تونی با فسلتر کردن این مربعی، یه چیزی شبیه سینوسی بسازی.
          مـن هیچ ندانم که مرا آن که سرشت
          از اهل بهشت کرد یا دوزخ زشت
          جامی و بتی و بربطی بر لب کشت
          اين هر سه مرا نقد و تو را نسیه بهشت

          دیدگاه


            #6
            پاسخ : درخواست کمک، نمونه برداری از سیگنال با کلاک

            میکروهای ATMEGA64 و ATMEGA128 و سری جدید AVR خودشون یه مدولاتور FSK دیجیتالی داره که میشه تو دو حالت and یا or ازش استفاده کرد.

            دیدگاه


              #7
              پاسخ : درخواست کمک، نمونه برداری از سیگنال با کلاک

              Lookup Table رو برای این گفتین درست کنم تا سینوسیم رو بتونم تشکیل بدم؟
              یه کوچولو راجع بهش توضیح میدین؟

              مثل این؟

              flash unsigned char sine[256]={
              0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95,0x98,0x9c, 0x9f,0xa2,0xa5,0xa8,0xab,0xae,
              0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4,0xc7,0xc9, 0xcc,0xce,0xd1,0xd3,0xd5,0xd8,
              0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8,0xea,0xec, 0xed,0xef,0xf0,0xf2,0xf3,0xf5,
              0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc,0xfd,0xfe, 0xfe,0xff,0xff,0xff,0xff,0xff,
              0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe,0xfd,0xfc, 0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,
              0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec,0xea,0xe8, 0xe6,0xe4,0xe2,0xe0,0xde,0xdc,
              0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9,0xc7,0xc4, 0xc1,0xbf,0xbc,0xb9,0xb6,0xb3,
              0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x98,0x95, 0x92,0x8f,0x8c,0x89,0x86,0x83,
              0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a,0x67,0x63, 0x60,0x5d,0x5a,0x57,0x54,0x51,
              0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b,0x38,0x36, 0x33,0x31,0x2e,0x2c,0x2a,0x27,
              0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17,0x15,0x13, 0x12,0x10,0x0f,0x0d,0x0c,0x0a,
              0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03,0x02,0x01, 0x01,0x00,0x00,0x00,0x00,0x00,
              0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x02,0x03, 0x03,0x04,0x05,0x06,0x07,0x08,
              0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13,0x15,0x17, 0x19,0x1b,0x1d,0x1f,0x21,0x23,
              0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36,0x38,0x3b, 0x3e,0x40,0x43,0x46,0x49,0x4c,
              0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63,0x67,0x6a, 0x6d,0x70,0x73,0x76,0x79,0x7c};

              بله منظورم همون بیت ریت بود.
              فرکانسها زیاد مهم نیستند فقط همین که متفاوت باشند کافیه.
              خب تا اینجاش که adc رو انجام دادم، حالا باید اطلاعات adc که اینجا رو پورت c ریخته شده رو از پایه صفرم تا هفتم با if چک کنم ببینم یکه یا صفر؟
              بعد اگه یک بود یکی از جدولهام بره برای خروجی و اگه صفر بود یکی دیگه از جدولهام؟
              بعد شما گفتین که مقادیر دو فرکانس رو تو یه جدول داشته باشم میشه اینو بیشتر توضیح بدید. احتمالا من Lookup Table رو درست متوجه نشدم.
              ممنون از کمکتون،

              دیدگاه


                #8
                پاسخ : درخواست کمک، نمونه برداری از سیگنال با کلاک

                نوشته اصلی توسط rozeh
                میکروهای ATMEGA64 و ATMEGA128 و سری جدید AVR خودشون یه مدولاتور FSK دیجیتالی داره که میشه تو دو حالت and یا or ازش استفاده کرد.

                ممکنه یه نمونه مثال بهم معرفی کنین؟

                دیدگاه


                  #9
                  پاسخ : درخواست کمک، نمونه برداری از سیگنال با کلاک

                  درسته. مثل همین جدولی که گذاشتی. دو تا جدول هم لازم نیست . یکی کافیه. یه جدول درست میکنی و مقادر یک پریود از سینوسی رو داخل اون قرار میدی. مثلا با 256 تا مقدار یک پریود رو داخلش میذاری.
                  حالا اگه فرکانس f1 خواستی، کل این 256 عدد رو یکی یکی روی پورت قرار میدی. اگه فرکانس f2=2*f1 خواستی، این 128 تا از این مقادیر رو روی پورت میذاری. یعنی به صورت یکی در میون عدد ها رو از جدول بر میداری. اگه f2=3*f1 خواستی، سه تا در میون بر میداری و ... .

                  بیت به بیت برداشتن هم درسته. یعنی بیت 0 تا 7 رو با if چک میکنی. اگه یک بود f1 و اگه فر بود f2 رو تولید می کنی.
                  مـن هیچ ندانم که مرا آن که سرشت
                  از اهل بهشت کرد یا دوزخ زشت
                  جامی و بتی و بربطی بر لب کشت
                  اين هر سه مرا نقد و تو را نسیه بهشت

                  دیدگاه


                    #10
                    پاسخ : درخواست کمک، نمونه برداری از سیگنال با کلاک

                    نوشته اصلی توسط nibilala

                    ممکنه یه نمونه مثال بهم معرفی کنین؟
                    توی دیتاشیت ATMEGA128 از صفحه 160 الی 161 راجب بهش توضیح داده. دانلود کنید و ببینید:

                    www.atmel.com/Images/doc2467.pdf

                    دیدگاه


                      #11
                      پاسخ : درخواست کمک، نمونه برداری از سیگنال با کلاک

                      نوشته اصلی توسط rozeh
                      توی دیتاشیت ATMEGA128 از صفحه 160 الی 161 راجب بهش توضیح داده. دانلود کنید و ببینید:

                      www.atmel.com/Images/doc2467.pdf
                      نوشته اصلی توسط marychi
                      درسته. مثل همین جدولی که گذاشتی. دو تا جدول هم لازم نیست . یکی کافیه. یه جدول درست میکنی و مقادر یک پریود از سینوسی رو داخل اون قرار میدی. مثلا با 256 تا مقدار یک پریود رو داخلش میذاری.
                      حالا اگه فرکانس f1 خواستی، کل این 256 عدد رو یکی یکی روی پورت قرار میدی. اگه فرکانس f2=2*f1 خواستی، این 128 تا از این مقادیر رو روی پورت میذاری. یعنی به صورت یکی در میون عدد ها رو از جدول بر میداری. اگه f2=3*f1 خواستی، سه تا در میون بر میداری و ... .

                      بیت به بیت برداشتن هم درسته. یعنی بیت 0 تا 7 رو با if چک میکنی. اگه یک بود f1 و اگه فر بود f2 رو تولید می کنی.
                      از هردو عزیز ممنونم اول شروع میکنم به نوشتن کدها تا هرجایی که شد بقیشو ازتون کمک میگیرم.
                      خیلی ممنون،

                      دیدگاه


                        #12
                        پاسخ : درخواست کمک، مدولاسیون fsk با AVR

                        http://www.mediafire.com/view/?4ju2nb2idszdll4

                        دوستان یه چیزایی نوشتم ولی رجیسترها رو فکر نمیکنم درست ست کرده باشم.
                        بی زحمت یه نگاهی بهش بندازی.
                        تو کدها دو قسمت رو با "First Part" و "Second Part" مشخص کردم که این قسمتها رو احتمال میدم اشتباه نوشته باشم.


                        پی نوشت:
                        البته این کد فقط دو سینوسی با فاز متفاوت تولید میکنه فعلا بیسش درست شه باقیشو مجدد تصحیح میکنم.

                        دیدگاه


                          #13
                          پاسخ : درخواست کمک، مدولاسیون fsk با AVR

                          برنامت کلا مشکل داره.
                          بالاخره می خوای با تایمر کار کنی یا می خوای مقدار سینوس رو روی پورت میکرو بذاری.
                          این حالتی که نوشتی هر دو رو به صورت اشتباه با هم ترکیب کردی.
                          اگه می خوای مقدار سینوسی رو روی پورت بذاری، تایمر رو کاری نداشته باش. توی قسمی که شرط رو چک میکنی، به جای:
                          OCA = xx
                          باید یه تابع دیگه بنویسی که فرکانس مورد نظرت رو تولید کنه. یعنی در یک حلقه با زمان مشخص، مقادیر جدول رو روی پورت قرار بده:
                          for(i=0;i<time;i++)
                          PORTC = sin[i]);
                          i رو از نوع int بگیر.


                          اگه از تایمر می خوای استفاده کنی و پالس مربعی می خوای تولید کنی، که دیگه نیاز به جدول سینوسی نیست و کار راحت تره. تقریبا میشه شبیه اونی که خودت نوشتی ولی با تغییرات جزئی.
                          مـن هیچ ندانم که مرا آن که سرشت
                          از اهل بهشت کرد یا دوزخ زشت
                          جامی و بتی و بربطی بر لب کشت
                          اين هر سه مرا نقد و تو را نسیه بهشت

                          دیدگاه


                            #14
                            پاسخ : درخواست کمک، مدولاسیون fsk با AVR

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

                            دیدگاه


                              #15
                              پاسخ : درخواست کمک، مدولاسیون fsk با AVR

                              دوستان کسی نظری نمیده؟

                              دیدگاه

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