اطلاعیه

Collapse
No announcement yet.

کمک در تولید موج pwm توسط mega8

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

    کمک در تولید موج pwm توسط mega8

    با سلام و خسته نباشید به دوستان.ocr2 موج 8بیتی pwm تولید میکنه(0 تا 255) .اما ocr1a و ocr1b موج 16بیتی pwm تولید میکنه.(0تا1024)اونم به صورت منفی. نمیشه یکاری کرد که این دوتا هم 8 بیتی تولید کنن؟

    #2
    پاسخ : کمک در تولید موج pwm توسط mega8

    چرا که نه.
    البته در صورت درک درست از سوالت.
    می تونی فقط به رجیستر OCR1AL مقدار بدی تا بشه 8 بیت.البته این در صورتیه که با بسکام کار نکنی و اگه بسکام کار باشی باید بری سراغ رجیسترها.
    موفق باشی
    چرا ناراحتی پاتریک!
    + امروز ی بچه دیدم سرچهارراه گل میفروخت
    - از دیدنش ناراحت شدی؟
    + نه
    پس چی ناراحتت کرده
    + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
    ------------------------------------------------------------------------------------------------------
    تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
    ------------------------------------------------------------------------------------------------------
    محصولات

    دیدگاه


      #3
      پاسخ : کمک در تولید موج pwm توسط mega8

      من با زبان c کار میکنم.نرم افزار کدویژن
      یعنی با کدویژن نمیشه 8 بیتیش کرد؟

      دیدگاه


        #4
        پاسخ : کمک در تولید موج pwm توسط mega8

        چرا با سی میشه ولی گفتم اگه بسکام کار باشی شاید برات درکش سخت باشه.
        با سی مشکلی نیست. حالا چه کدویژن چه IAR یا Atmel studio
        چرا ناراحتی پاتریک!
        + امروز ی بچه دیدم سرچهارراه گل میفروخت
        - از دیدنش ناراحت شدی؟
        + نه
        پس چی ناراحتت کرده
        + اینکه دیدن اینجور بچه ها انقدر واسم عادی شده که دیگه ناراحتم نمیکنه
        ------------------------------------------------------------------------------------------------------
        تاحالا فکر کردی بیسواد کیه؟- بی سواد یعنی کسی که نمیتونه ذهنیاتش رو عملی کنه!
        ------------------------------------------------------------------------------------------------------
        محصولات

        دیدگاه


          #5
          پاسخ : کمک در تولید موج pwm توسط mega8

          ببین دوست من
          این سوال جوابش خیلی اسونه
          و جوابشو خیلی راحت توی توضیحات تایمر ها میشه پیدا کنید
          وقتی شما این سوال میپرسید یعنی هنوز یه بار درست حسابی تایمر ها رو نخوندی عزیزم
          اما اشکالی نداره
          ببین دوست من اولا که کار خوبی کردی رفتی سراغ زبان c چون جامع و استاندارد
          خب عزیزم تو اگه 2تا خروجی 8 بیتی میخوای همون تایمر 1 نیازتو براورده میکنه
          تایمر یک و دیگر تایمر ها مد های متفاوتی دارند
          بستگی به این داره تو از چه مدی استفاده کنی و چی مد نظرت باشه
          هر چند برای تعیین برخی زمان های دقیق به مشکل شاید بخوری و نتونی دقیق دقیق عمل کنی
          اما میشه خیلی مانور داشته باشی
          خب تو چرا 8 بیتی میخوای؟
          این تورو محدو میکنه برای تولید زمان های دقیق
          بگذریم
          تو بیا از 8 بیت تایمر 1 استفاده کن
          از مد فست pwm 8 بیتی که خودش یکی از مدهای تایمر یک استفاده کن
          واینجوری توپ تو میشه 8 بیت پایین
          و به تعیین ocr ها 2 تا خروجی 8 بیت داشته باشی
          و توی سریز تایمر ocr ها رو مقدار دهی کنی
          پیشنهاد میکنم تایمر یک رو بشین بخون دقیق

          دیدگاه


            #6
            پاسخ : کمک در تولید موج pwm توسط mega8

            بیا دوست من
            من برنامه شو در طول 42 ثانیه نوشتم
            با فرکانس 4k
            و اختلاف فاز 180 درجه بین ocr a , b
            حالا خوب دقیق نگاش کن
            و اون فرکانس و موج pwm دلخواه خودتو انجام بده
            برو جانم برو حالشو ببر
            درضمن فرکانس 8 مگا اینترنال داخلیبرای میکرو انتخاب کن

            ________________________________________________

            #include <mega16.h>

            // Timer 1 overflow interrupt service routine
            interrupt [TIM1_OVF] void timer1_ovf_isr(void)
            {
            if(OCR1A>0) OCR1A--;
            else OCR1A=255 ;
            if(OCR1B<255) OCR1B++;
            else OCR1B=0;

            }

            // Declare your global variables here

            void main(void)
            {
            // Declare your local variables here

            // Input/Output Ports initialization
            // Port A initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
            PORTA=0x00;
            DDRA=0x00;

            // Port B initialization
            // Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
            // State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
            PORTB=0x00;
            DDRB=0x00;

            // Port C initialization
            // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
            // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
            PORTC=0x00;
            DDRC=0x00;

            // Port D initialization
            // Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
            // State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
            PORTD=0x00;
            DDRD=0x30;


            // Timer/Counter 1 initialization
            // Clock source: System Clock
            // Clock value: 1000.000 kHz
            // Mode: Fast PWM top=00FFh
            // OC1A output: Non-Inv.
            // OC1B output: Non-Inv.
            // Noise Canceler: Off
            // Input Capture on Falling Edge
            // Timer 1 Overflow Interrupt: On
            // Input Capture Interrupt: Off
            // Compare A Match Interrupt: Off
            // Compare B Match Interrupt: Off
            TCCR1A=0xA1;
            TCCR1B=0x0A;
            TCNT1H=0x00;
            TCNT1L=0x00;
            ICR1H=0x00;
            ICR1L=0x00;
            OCR1AH=0x00;
            OCR1AL=0xff;
            OCR1BH=0x00;
            OCR1BL=0x00;



            // Timer(s)/Counter(s) Interrupt(s) initialization
            TIMSK=0x04;


            // Global enable interrupts
            #asm("sei&quot

            while (1);

            }

            دیدگاه


              #7
              پاسخ : کمک در تولید موج pwm توسط mega8

              نوشته اصلی توسط sahel2013
              من برنامه شو در طول 42 ثانیه نوشتم
              :applause: بسیار عالی
              راستی تایمر یک در حالت PWM حداکثر 10 بیتی میشه
              آیا میشه بصورت 16 بیتی راه اندازی بشه
              مهم نیست چه مدرکى دارید
              مهم این است که چه درکى دارید . . .

              دیدگاه


                #8
                پاسخ : کمک در تولید موج pwm توسط mega8

                اره چرا نشه:
                به قول ندا : چرا که نه چرا که نه >> ده ری ده دیت دری ده ره

                گفتم که مد های مختلفی داره و خودت باید انتخاب کنی 8 بیتی و 9 بیتی و 10 بیتی
                و اندازه دلخواه با ریجحستر ocra , کاپتر
                و نه تنها اینها تو با مقدار دهی اولیه میتونی هر مقداری داشته باشی
                بشین تایمر 1 بخون همه چی دستت میاد دوست من

                دیدگاه


                  #9
                  پاسخ : کمک در تولید موج pwm توسط mega8

                  مرسی sahel ممنون از کمکت

                  دیدگاه


                    #10
                    پاسخ : کمک در تولید موج pwm توسط mega8

                    نوشته اصلی توسط sahel2013
                    بیا دوست من
                    من برنامه شو در طول 42 ثانیه نوشتم
                    با فرکانس 4k
                    و اختلاف فاز 180 درجه بین ocr a , b
                    حالا خوب دقیق نگاش کن
                    و اون فرکانس و موج pwm دلخواه خودتو انجام بده
                    برو جانم برو حالشو ببر
                    درضمن فرکانس 8 مگا اینترنال داخلیبرای میکرو انتخاب کن

                    ________________________________________________

                    #include <mega16.h>

                    // Timer 1 overflow interrupt service routine
                    interrupt [TIM1_OVF] void timer1_ovf_isr(void)
                    {
                    if(OCR1A>0) OCR1A--;
                    else OCR1A=255 ;
                    if(OCR1B<255) OCR1B++;
                    else OCR1B=0;

                    }

                    // Declare your global variables here

                    void main(void)
                    {
                    // Declare your local variables here

                    // Input/Output Ports initialization
                    // Port A initialization
                    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                    PORTA=0x00;
                    DDRA=0x00;

                    // Port B initialization
                    // Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
                    // State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
                    PORTB=0x00;
                    DDRB=0x00;

                    // Port C initialization
                    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
                    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
                    PORTC=0x00;
                    DDRC=0x00;

                    // Port D initialization
                    // Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In
                    // State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T
                    PORTD=0x00;
                    DDRD=0x30;


                    // Timer/Counter 1 initialization
                    // Clock source: System Clock
                    // Clock value: 1000.000 kHz
                    // Mode: Fast PWM top=00FFh
                    // OC1A output: Non-Inv.
                    // OC1B output: Non-Inv.
                    // Noise Canceler: Off
                    // Input Capture on Falling Edge
                    // Timer 1 Overflow Interrupt: On
                    // Input Capture Interrupt: Off
                    // Compare A Match Interrupt: Off
                    // Compare B Match Interrupt: Off
                    TCCR1A=0xA1;
                    TCCR1B=0x0A;
                    TCNT1H=0x00;
                    TCNT1L=0x00;
                    ICR1H=0x00;
                    ICR1L=0x00;
                    OCR1AH=0x00;
                    OCR1AL=0xff;
                    OCR1BH=0x00;
                    OCR1BL=0x00;



                    // Timer(s)/Counter(s) Interrupt(s) initialization
                    TIMSK=0x04;


                    // Global enable interrupts
                    #asm("sei&quot

                    while (1);

                    }
                    سلام
                    میشه یه توضیح بدین که چرا این رجیستر ها رو ست کردین ؟؟ ممنون
                    کد:
                     TCNT1H=0x00;
                       TCNT1L=0x00;
                       ICR1H=0x00;
                       ICR1L=0x00;
                       OCR1AH=0x00;
                       OCR1AL=0xff;
                       OCR1BH=0x00;
                       OCR1BL=0x00;

                    دیدگاه


                      #11
                      پاسخ : کمک در تولید موج pwm توسط mega8

                      سلام :
                      چون 2 تا موج pwm داریم که مخالف هم حرکت میکنن
                      180 درجه اختلاف فاز دارن
                      اونا ریجستر که 255 دادم برای اینکه یکی از صفر شروع میکنه و دیگری از 255
                      تا بتونن مخالف هم باشن و توی وقفه تایمر که داریم مقدار ocr ها رو تغییر میدیم یکی ازش کم میشه یکی اضافه
                      فقط برای اینکه مخالف هم باشن 2 موج خروجی
                      پس مقدار هاشونم باید عکس هم باشه
                      اون مقدار هم که دادم توی تعریف ریجستر ها فقط یکبار انجام میشه و بعد اون همه کار ها توی وقفه انجام میشه

                      دیدگاه


                        #12
                        پاسخ : کمک در تولید موج pwm توسط mega8

                        تو بسکام هم میشه این حرف ها رو که با چی میشه و با چی نمیشه نگید.اگه کتاب علی کاهه رو توی 40 ثانیه میخوندی میدیدی که میشه. :nice:

                        دیدگاه

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