اطلاعیه

Collapse
No announcement yet.

کمک برنامه نویسی رجیستر

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

    کمک برنامه نویسی رجیستر

    با سلام خدمت دوستان

    در برنامه ای از تراشه ATMEGA 8 از رجیستر OCR1 در تایمر 0 برای تولید موج PWM استفاده کرده ام ولی هنگام کامپال کردن به OCR1 ارورر میگیره ولی وقتی از تراشه 16 یا 32 استفاده می کنم این ارورر نمی ده و من می خوام از این تراشه 8 استفاده کنم
    سوال بعدی که داشتم تایمر صفر در ویزارد کردن نخستین پروژه (سربرگ تایمر) تایمر 0 مد کاری نداره؟؟؟؟؟چرا؟؟؟؟؟

    با تشکر ازهمه کمک کنید لطفا

    #2
    پاسخ : کمک

    سلام

    همونطور که می دونید تایمر 1 یه تایمر 16 بیتی و بر این اساس رجیسترهاشم 16 بیتی هستن که از ترکیب دو رجیستر 8 بیت تشکیل شدن. پس در نتیجه نمی تونید بگید OCR1 بلکه باید H و L بودنش رو هم مشخص کنید و نکته بعد اینکه در این تایمر چهار رجیستر OCR داریم و بهتره برای رسیدن به نتیجه مطلوب برین سراغ دیتاشیت.

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

    دیدگاه


      #3
      پاسخ : کمک

      جایی که جناب آراسته پاسخ میدن ، پاسخ حقیر زیره به کرمان بردن هست.
      اگه لطف کنید و برنامه رو بذارین دوستان کمک میکنن مشکل حل میشه
      تیم کاوش در مسابقات بین المللی ایران اپن 2016.نمایشی.مین یاب.
      علم را باید در آزمایشگاه یاد گرفت نه در دانشگاه!

      دیدگاه


        #4
        پاسخ : کمک

        با عرض ارادت به دوستان
        درسته تایمر یک 16بیتی هست ولی مثلا اگه مستقیما بنویسید TCNCT1 نه تنها مشکلی پیش نمیاد بلکه کاملا توصیه شدست اینکار را بکنید مگر نه باید ببینید تو دیتاشیت برای دسترسی 16 بیتی اول باید مقدار پر ارزش مقداردهی بشه یا مقدار کم ارزش مگر نه به مشکل میخورید.
        برای اطلاعات بیشتر قسمت Accessing 16-bit
        Registers را تو دیتاشیت ببینید.
        من خودم کلی سر این موضوع با تایمر یک درگیر بودم.
        منتهی ایراد شما اینه که یا باید بنویسید OCR1A یا OCR1B.
        چون دو تا compare match register وجود داره.
        آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

        دیدگاه


          #5
          پاسخ : کمک

          باتشکر از همه دوستان برنامه اینه ولی در عمل که روی برد ازمایشی پیاده کردم راضی نیستم نمی دونم شاید کلاک تایمر باشه یا بیت های رجیستر تایمر 1 که کد فعال سازی بیت های رجیستر tccr1a یا tcnt1h-L درست نیست؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟



          #include <mega8.h>
          # include <delay.h>


          void main(void)
          {
          int x=150;



          PORTB=0x00;
          DDRB=0x0A;





          // Timer/Counter 0 initialization
          // Clock source: System Clock
          // Clock value: 125.000 kHz
          TCCR0=0x03;
          TCNT0=0x00;

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

          // Timer/Counter 2 initialization
          // Clock source: System Clock
          // Clock value: 125.000 kHz
          // Mode: Fast PWM top=FFh
          // OC2 output: Non-Inverted PWM
          ASSR=0x00;
          TCCR2=0x6C;
          TCNT2=0x00;
          OCR2=0x00;




          while (1)
          {
          for(x=0;x<=1023;x++)
          {
          OCR1AL=x;
          delay_ms(3);
          }


          for(x=1023;x>=0;x--)
          {
          OCR1AL=x;
          delay_ms(3);
          }






          };
          }

          دیدگاه


            #6
            پاسخ : کمک

            سلام
            شما هر چی مربوط به تایمر هاست مقدار دهی کردی 3 تایمر رو با مخلفاتش مقدار دهی کردی شما فقط یه مد رو در تایمر 1 راه بنداز با اون تایمرها که دیگه کاری نداری
            امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

            دیدگاه


              #7
              پاسخ : 1کمک1

              مهندسین کمک

              دیدگاه


                #8
                پاسخ : کمک

                نوشته اصلی توسط مسعود کردی
                باتشکر از همه دوستان برنامه اینه ولی در عمل که روی برد ازمایشی پیاده کردم راضی نیستم نمی دونم شاید کلاک تایمر باشه یا بیت های رجیستر تایمر 1 که کد فعال سازی بیت های رجیستر tccr1a یا tcnt1h-L درست نیست؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

                #include <mega8.h>
                # include <delay.h>

                void main(void)
                {
                int x=150;

                PORTB=0x00;
                DDRB=0x0A;

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

                while (1)
                {
                for(x=0;x<=1023;x++)
                {
                OCR1AL=x;
                delay_ms(3);
                }
                for(x=1023;x>=0;x--)
                {
                OCR1AL=x;
                delay_ms(3);
                }
                };
                }
                باید از یکی از رجیستر های OCR1A یا OCR1B استفاده کنی که در اینجا از A استفاده کردی.
                ولی مقداری بیش از ظرفیت تایمر بهش دادی.
                خود OCR1A شانزده بیتی هستش
                OCR1AH یا OCR1AL هر کدام هشت بیتی هستن و نمی توان بیشتر از 255 به آن داد.
                اگر مقدار هایی بیشتر لازم دارید به طور مستقیم به OCR1A بدهید.
                If the wind will not serve, take to the oars

                دیدگاه


                  #9
                  پاسخ : کمک11

                  باتشکر از شما و دوستان

                  سوال این بود که اگه مد کاری تایمر 1 در ویزارد نخستین پروژه روی fast pwm میزارم کد فعال سازی بیت های مریوط به رجیستر tccr1 و tcnt1 به صورت اتوماتیک wgm01 و wgm11و CS10 الی CS12 طبق جدولی که داره خودشون مقداره 0 ویا 1 فعال میشه یا اینکه خودم بیام مقدارشو پیدا کنم از روی جدول؟؟؟؟؟؟؟؟؟؟؟


                  مرسی از همه دوستان فقط نمیدونم چرا بعضی فقط بعضی ها سوادشون با لا مبرن برای حس انتقام گیری که اگر کسی روزی کمک بخواد بهش بخندند از این انجمن کمال تشکر دارم

                  دیدگاه


                    #10
                    پاسخ : کمک11

                    نوشته اصلی توسط مسعود کردی
                    باتشکر از شما و دوستان

                    سوال این بود که اگه مد کاری تایمر 1 در ویزارد نخستین پروژه روی fast pwm میزارم کد فعال سازی بیت های مریوط به رجیستر tccr1 و tcnt1 به صورت اتوماتیک wgm01 و wgm11و CS10 الی CS12 طبق جدولی که داره خودشون مقداره 0 ویا 1 فعال میشه یا اینکه خودم بیام مقدارشو پیدا کنم از روی جدول؟؟؟؟؟؟؟؟؟؟؟


                    مرسی از همه دوستان فقط نمیدونم چرا بعضی فقط بعضی ها سوادشون با لا مبرن برای حس انتقام گیری که اگر کسی روزی کمک بخواد بهش بخندند از این انجمن کمال تشکر دارم
                    سلام
                    البته من با atmel studio کار میکنم ولی با کد ویزارد تنظیم کنی خودش مقدار دهی میشه و نمیخواد دستی مقدار دهی کنی
                    امام مهدی(عج): اگر شیعیان ما ، که خداوند طاعتشان دهد. در عهد ما وفادار و همدل بودند، هرگز دیدار ما (ظهور) به تاخیر نمی افتاد.(کدام عهد ؟)

                    دیدگاه

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