اطلاعیه

Collapse
No announcement yet.

تولید موج در پایه avr

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

    تولید موج در پایه avr

    سلام. من میخوام یک موج مربعی مثلا یک کیلوهرتز را به پایه ای از میکرو مثلا پایه ای adc یا هر پایه ای دیگه ای وارد کنم. و سپس دقیقا مثل همون موج مربعی را در پایه ای دیگر تولید کنم.
    نکته این که موج ورودی ممکنه دیوتی سایکلش تغییر کنه. ولی فرکانس ثابت است. سطح سیگنال موج مربعی هم منطقی است.
    اینطوری به نظرم رسید که ابتدا توسط adc میکرو avr نمونه برداری کنم و داخل یک متغییر بریزم. سپس محتوا متغییر را به خروجی یکی از پایه ها منتقل کنم.
    برنامه را اینجوری نوشتم اما کار نمیکنه. دوستان اگه وارد هستن راهنمایی بفرمایند. ممنون میشم.
    $regfile = "m32def.dat"
    $crystal = 8000000

    Dim W As word
    config PORTd =OUTPUT
    Config Adc = single , Prescaler = auto , Reference = Avcc
    Start Adc


    do
    gosub Read_the_adc
    portd=w
    loop

    end


    '**********************************************
    Read_the_adc:
    W = Getadc(0)
    return



    #2
    پاسخ : تولید موج در پایه avr

    سلام
    اگر موجت مربعی هست نیازی به استفاده از adc نیست.
    از مد کپچر تایمر یک استفاده کن. براحتی میتونی با تغییر لبه تحریک این مد، هم فرکانس و هم دیوتی سایکل رو اندازه بگیری
    ... و (بدانيد) گرفتن تصميمهاى محكم (براى رسيدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگين سازگار نيست و چه بسيار كه خواب شبانه تصميمهاى محكم روز را از ميان برده و تاريكيآ‌ها، خاطره همتآ‌هاى بلند را از يادها محو كرده است. (نهجآ‌البلاغه، خطبه211)

    امام علي (ع):کسي که به وقت ياري رهبرش در خواب باشد، با لگد دشمنش بيدار مي شود (غررالحکم،ص 422)

    دیدگاه


      #3
      پاسخ : تولید موج در پایه avr

      نوشته اصلی توسط AliRezaDAVE نمایش پست ها
      سلام
      اگر موجت مربعی هست نیازی به استفاده از adc نیست.
      از مد کپچر تایمر یک استفاده کن. براحتی میتونی با تغییر لبه تحریک این مد، هم فرکانس و هم دیوتی سایکل رو اندازه بگیری
      سلام. بله موجم مربعی است. تاحالا با مد کپچر کار نکردم.!

      دیدگاه


        #4
        پاسخ : تولید موج در پایه avr

        نوشته اصلی توسط mehrannohtanipour نمایش پست ها
        سلام. بله موجم مربعی است. تاحالا با مد کپچر کار نکردم.!
        خب کار کن
        ... و (بدانيد) گرفتن تصميمهاى محكم (براى رسيدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگين سازگار نيست و چه بسيار كه خواب شبانه تصميمهاى محكم روز را از ميان برده و تاريكيآ‌ها، خاطره همتآ‌هاى بلند را از يادها محو كرده است. (نهجآ‌البلاغه، خطبه211)

        امام علي (ع):کسي که به وقت ياري رهبرش در خواب باشد، با لگد دشمنش بيدار مي شود (غررالحکم،ص 422)

        دیدگاه


          #5
          پاسخ : تولید موج در پایه avr

          جدا میرم دنبالش اما دست کم 2 هفته طول میکشه تا مسلط بشم. در این لحضه میخوام مشکل حل بشه

          دیدگاه


            #6
            پاسخ : تولید موج در پایه avr

            نوشته اصلی توسط mehrannohtanipour نمایش پست ها
            سلام. من میخوام یک موج مربعی مثلا یک کیلوهرتز را به پایه ای از میکرو مثلا پایه ای adc یا هر پایه ای دیگه ای وارد کنم. و سپس دقیقا مثل همون موج مربعی را در پایه ای دیگر تولید کنم.
            نکته این که موج ورودی ممکنه دیوتی سایکلش تغییر کنه. ولی فرکانس ثابت است. سطح سیگنال موج مربعی هم منطقی است.
            اینطوری به نظرم رسید که ابتدا توسط adc میکرو avr نمونه برداری کنم و داخل یک متغییر بریزم. سپس محتوا متغییر را به خروجی یکی از پایه ها منتقل کنم.
            برنامه را اینجوری نوشتم اما کار نمیکنه. دوستان اگه وارد هستن راهنمایی بفرمایند. ممنون میشم.
            $regfile = "m32def.dat"
            $crystal = 8000000

            Dim W As word
            config PORTd =OUTPUT
            Config Adc = single , Prescaler = auto , Reference = Avcc
            Start Adc


            do
            gosub Read_the_adc
            portd=w
            loop

            end


            '**********************************************
            Read_the_adc:
            W = Getadc(0)
            return


            درود

            خود میکرو AVR قابلیت تولید PWM رو داره و نیاز نیست از جای دیگه بهش ورودی بدین.
            به دو صورت میتونید PWM رو تولید کنید یکی به صورت دستی کدش رو بنویسید که خیلی محدودیت داره این روش و روش دوم استفاده از تایمر.
            در روش دستی فقط کافیه یه پورت رو خروجی کنید و بصورت دستی اون رو 0 و 1 کنید به فرض مثال پورت A0 رو خروجی میگیریم.

            PORTA.0=0;
            delay_ms(T-D);
            PORTA.0=1;
            delay_ms(D);
            که T دوره تناوب و D دیوتی سایکل که میتونید با فعال کردن اینتراپت و قرار دادن دوتا کلید مقدار D رو تغییر بدین.

            روش دوم استفاده از TIMER که از داخل کدویزارد فعالش میکنید و پایه خروجی تایمر رو هم فعال میکنید و در حالت NON_INVERTING قرارش میدین سپس TIMER رو در حالت FAST PWM میزاری
            در مرحله بعدی اینتراپت رو هم فعال میکنی و با قرار دادن دوتا کلید مقدار OCR رو تغییر میدی که باعث میشه دیوتی سایکل تغییر کنه.
            فرکانس هم تو این روش میشه
            T=(TOP+1)*N/Fm
            که با تغییر N میتونی مقدار فرکانس رو تغییر بدی.

            دیدگاه


              #7
              پاسخ : تولید موج در پایه avr

              نوشته اصلی توسط Amir_h_ نمایش پست ها
              درود

              خود میکرو AVR قابلیت تولید PWM رو داره و نیاز نیست از جای دیگه بهش ورودی بدین.
              به دو صورت میتونید PWM رو تولید کنید یکی به صورت دستی کدش رو بنویسید که خیلی محدودیت داره این روش و روش دوم استفاده از تایمر.
              در روش دستی فقط کافیه یه پورت رو خروجی کنید و بصورت دستی اون رو 0 و 1 کنید به فرض مثال پورت A0 رو خروجی میگیریم.

              PORTA.0=0;
              delay_ms(T-D);
              PORTA.0=1;
              delay_ms(D);
              که T دوره تناوب و D دیوتی سایکل که میتونید با فعال کردن اینتراپت و قرار دادن دوتا کلید مقدار D رو تغییر بدین.

              روش دوم استفاده از TIMER که از داخل کدویزارد فعالش میکنید و پایه خروجی تایمر رو هم فعال میکنید و در حالت NON_INVERTING قرارش میدین سپس TIMER رو در حالت FAST PWM میزاری
              در مرحله بعدی اینتراپت رو هم فعال میکنی و با قرار دادن دوتا کلید مقدار OCR رو تغییر میدی که باعث میشه دیوتی سایکل تغییر کنه.
              فرکانس هم تو این روش میشه
              T=(TOP+1)*N/Fm
              که با تغییر N میتونی مقدار فرکانس رو تغییر بدی.
              ممنون خیلی خوب توضیح دادید. واضح بود. یک سوال دیگر هم دارم که در یکی دیگه از پست ها قرار دادم در مورد همین pwm است اگر ان هم راهنمایی بفرمایید خیلی ممنون میشم.
              اینجا
              https://www.eca.ir/forums/thread87925.html

              دیدگاه

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