اطلاعیه

Collapse
No announcement yet.

$crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

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

    $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

    سلام خدمت دوستان عزیز ، بنده کلا با فرکانس میکرو دوشواری دارم ! oo:
    اول اینکه وقتی از این دستور استفاده میشه : $crystal = X000000 رو چه اصول و قاعده ای این فرکانس انتخاب میشه ؟
    سوال دوم میکرو از کجا میفهمه 1 ثانیه چقدره ؟ یا اصلا من با چطور میتونم بدون کریستال خارجی تاخیر 1 ثانیه ایجاد کنم یا تایمری که تاخیرش 1 ثانیه باشه ؟

    دوستان لطفا روان و کامل توضیح بدید ؛ این قضیه رو می خوام به طور کامل درک کنم و یاد بگیرم :nerd:
    [shadow=red,left]باتشکر[/shadow]
    - اَللّهُمَّ عَجِّل لِوَلیِّکَ الفَرَج -
    ارتباط با من : ir02x6
    طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

    #2
    پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

    سلام :nerd:
    خب بستگی داره. مثلا بعضی مواقع شما می خوای یه موج با فرکانس خاصی با میکرو بسازی. اون موقوع مثلا ممکنه مجبور بشی فرکانس کلاک رو کم یا زیاد بکنی. این یه مثال بود.
    میکرو نمیفهمه! بقول بچه ها میکرو شعور نداره!(جسارتا شعور نداره :mrgreen این کارو با روش های گوناگون میشه انجام داد.
    ببین شما باید اول یه بار یه کتاب کامل از کاربرد اجزای جانبی میکرو و خود میکرو بخونی. اونوقت همشو می فهمی. اینجوری ما بگیم فایده نداره.

    دیدگاه


      #3
      پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

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

      من هم دنبال همین روش های گوناگون و اون یه کتابم ... :rolleyes:
      - اَللّهُمَّ عَجِّل لِوَلیِّکَ الفَرَج -
      ارتباط با من : ir02x6
      طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

      دیدگاه


        #4
        پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

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

        من هم دنبال همین روش های گوناگون و اون یه کتابم ... :rolleyes:
        مثلا با ایجاد حلقه توی برنامه نویسی یا دستور NOP اسمبلی هم میشه. شما باید یه بار کتابخونه برنامه هایی مثل کدویژن یا کامپایلر GCC رو ببینی. با نگاه کردن بهش می فهمی. البته ظاهرا همشون دقیق نیستن.
        کامل ترین کتابی که من دیدم کتاب مرجع کامل AVR از انتشارات نص هستش. قیمت هم روش نوشته 18 هزار تومن.


        دیدگاه


          #5
          پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

          عزیز برادر منم همین مشکل رو دارم
          البته من 4تا کتاب خوندم که دوتا AVR و دوتا دیگه PIC بود(این کتاب بالا رو نخوندم متاسفانه) ولی هیچ کدوم کامل و واضح نگفتن چرا کلاک رو یه جا 4000000 یه جا دیگه 8000000 یا مقادیر دیگه قرار میدن. میدونم که این باعث میشه وقفه های زمانی یا سایر پارامترهای مربوط به پروسس ها تنظیم بشن اما نمیدونم فرق کلاک ریت 1 میلیون با 8 میلیون یا مقادیر دیگه چیه! چرا این مقادیر عوض میشن؟
          ممنون میشم راهنمایی فرمایید.

          از این که در تاپیک دوستمون این پست رو دادم عذر میخوام چون فکر میکردم سوالم خیلی مبتدیانه است!

          دیدگاه


            #6
            پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

            ببین دوست عزیز فرق فرکانس مثلا 2MHz با 16 MH یکیش افزایش سرعت میکرو هست مثلا برای کریستال 2MHz سرعت هر کلاک 0.5 میکرو ثانیه و برای 16MHz سرعت برابر با 0.0625 میکرو ثانیست مثلا برای انجام یه دستور که به 10 کلاک نیازه ما با کرسیتال 16 به سرعت بالاتری می رسیم (البته این ساده ترین کاربردش بود )

            دیدگاه


              #7
              پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

              نوشته اصلی توسط mehrdad_italy
              ببین دوست عزیز فرق فرکانس مثلا 2MHz با 16 MH یکیش افزایش سرعت میکرو هست مثلا برای کریستال 2MHz سرعت هر کلاک 0.5 میکرو ثانیه و برای 16MHz سرعت برابر با 0.0625 میکرو ثانیست مثلا برای انجام یه دستور که به 10 کلاک نیازه ما با کرسیتال 16 به سرعت بالاتری می رسیم (البته این ساده ترین کاربردش بود )
              خوب پس چرا شرکت سازنده بالاترین میزان فرکانس رو فقط نزاشته و اتخاب مقدار اونرو در اختیار ما گذاشته ؟ اونجوری همه برنامه ها باسرعت بالاتری اجرا میشدن ! اصلا وقتی سرعت بالا هست چرا با سرعت پایین کار کنیم !!! oo:

              [move] [/move]
              - اَللّهُمَّ عَجِّل لِوَلیِّکَ الفَرَج -
              ارتباط با من : ir02x6
              طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

              دیدگاه


                #8
                پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

                نوشته اصلی توسط ir02x6
                خوب پس چرا شرکت سازنده بالاترین میزان فرکانس رو فقط نزاشته و اتخاب مقدار اونرو در اختیار ما گذاشته ؟ اونجوری همه برنامه ها باسرعت بالاتری اجرا میشدن ! اصلا وقتی سرعت بالا هست چرا با سرعت پایین کار کنیم !!! oo:

                [move] [/move]
                یکی از دلایلش بخاطر همون دلیلی بود که توی پست اولم گفتم. مثلا تولید فرکانس. مهندس شما کتابو گیر بیار و بخون بعد می فهمی. :nerd:

                دیدگاه


                  #9
                  پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

                  نوشته اصلی توسط ir02x6
                  خوب پس چرا شرکت سازنده بالاترین میزان فرکانس رو فقط نزاشته و اتخاب مقدار اونرو در اختیار ما گذاشته ؟ اونجوری همه برنامه ها باسرعت بالاتری اجرا میشدن ! اصلا وقتی سرعت بالا هست چرا با سرعت پایین کار کنیم !!! oo:

                  [move] [/move]
                  اول یه نکته بگم بعضی جاها مثل ارتباط سریال نیازه که از کریستال دقیق مثل 11.0592MHz استفاده کنم که خطا رو زیر 2درصد بیاریم .
                  مورد دوم هم اینکه همونطور که دوستمون rozeh گفت برای تولید فرکانس و PWM بر حسب کاربردمون نیاز میشه از کریستال خاصی استفاده کنی ولی به طور معمول شما اگه نمیخوای از تایمر/کانتر استفاده کنی کریستال رو همیشه بذار روی 16 یا بذار 14 چون برای اینجور کارها زیاد فرق نمی کنه ...

                  دیدگاه


                    #10
                    پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

                    بچه ها لطف میکنید یه مثال از تاخیر 1 ثانیه و تایمر ساعت قرار بدید که 1 ثانیه واقعا 1 ثانیه باشه ؛ من فعلا دسترسی به اون کتاب رو ندارم . :smile:
                    ممنون
                    - اَللّهُمَّ عَجِّل لِوَلیِّکَ الفَرَج -
                    ارتباط با من : ir02x6
                    طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

                    دیدگاه


                      #11
                      پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

                      هر 1 ثانیه ال ای دی چشمک میزنه:

                      کد:
                      /*****************************************************
                      
                      
                      Chip type        : ATmega16
                      Program type      : Application
                      AVR Core Clock frequency: 4.000000 MHz
                      Memory model      : Small
                      External RAM size    : 0
                      Data Stack size     : 256
                      *****************************************************/
                      
                      #include <mega16.h>
                      #include <delay.h>
                      #define led PORTA.0
                      
                       unsigned char c;
                      
                        interrupt [TIM0_OVF] void timer0_ovf_isr(void){
                          TCNT0=0x06;
                          c++;
                        }
                        
                        
                        void main(void){
                         PORTA=0x00;
                         DDRA=0x01;
                         
                          // Timer/Counter 0 initialization
                          // Clock source: System Clock
                          // Clock value: 62.500 kHz per=64
                          // Mode: Normal top=0xFF
                          // OC0 output: Disconnected
                          TCCR0=0x03;
                          TCNT0=0x06;
                          OCR0=0x00;
                          
                          
                          // Timer(s)/Counter(s) Interrupt(s) initialization
                          TIMSK=0x01;
                          
                          // Global enable interrupts
                          #asm("sei")
                      
                          while (1){
                            if(c>=250) {
                             led=~led;
                             c=0;
                            }
                          }
                        }
                      
                      /*
                       1:  4000000/64=62500Hz
                       2:  1/62500=16us
                       3:  16us*250=4ms ==> TCNT0=(256-250)=6
                       4:  1sec=1000ms ==> 1000/4ms=250 ==> if(c>=250) {
                      
                      */

                      دیدگاه


                        #12
                        پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

                        فایل زیر رو برات اپلود کردم درباره انواع منبع کلاک و فیوزبیت و ...
                        البته زبان اصلیه
                        http://mitaly.persiangig.com/documen...k%20Source.pdf


                        (منبع avrfreaks.net)

                        دیدگاه


                          #13
                          پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

                          نوشته اصلی توسط mehrdad_italy
                          کد:
                          AVR Core Clock frequency: 4.000000 MHz
                          دوستان باز هم همون مشکل اولی ، چرا فرکانس 4MHZ انتخاب شده ؟؟؟ :sad:

                          یکی لطف می کنه این برنامه رو تشریح کنه :

                          کد:
                          /*****************************************************
                          
                          
                          Chip type        : ATmega16
                          Program type      : Application
                          AVR Core Clock frequency: 4.000000 MHz
                          Memory model      : Small
                          External RAM size    : 0
                          Data Stack size     : 256
                          *****************************************************/
                          
                          #include <mega16.h>
                          #include <delay.h>
                          #define led PORTA.0
                          
                           unsigned char c;
                          
                            interrupt [TIM0_OVF] void timer0_ovf_isr(void){
                              TCNT0=0x06;
                              c++;
                            }
                            
                            
                            void main(void){
                             PORTA=0x00;
                             DDRA=0x01;
                             
                              // Timer/Counter 0 initialization
                              // Clock source: System Clock
                              // Clock value: 62.500 kHz per=64
                              // Mode: Normal top=0xFF
                              // OC0 output: Disconnected
                              TCCR0=0x03;
                              TCNT0=0x06;
                              OCR0=0x00;
                              
                              
                              // Timer(s)/Counter(s) Interrupt(s) initialization
                              TIMSK=0x01;
                              
                              // Global enable interrupts
                              #asm("sei")
                          
                              while (1){
                                if(c>=250) {
                                 led=~led;
                                 c=0;
                                }
                              }
                            }
                          
                          /*
                           1:  4000000/64=62500Hz
                           2:  1/62500=16us
                           3:  16us*250=4ms ==> TCNT0=(256-250)=6
                           4:  1sec=1000ms ==> 1000/4ms=250 ==> if(c>=250) {
                          
                          */
                          - اَللّهُمَّ عَجِّل لِوَلیِّکَ الفَرَج -
                          ارتباط با من : ir02x6
                          طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

                          دیدگاه


                            #14
                            پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

                            خوب تو این برنامه از 4MHz انتخاب شده شما می تونی از 8 یا 10 یا ... استفاده کنی و با توجه به اون prescaler و برنامه رو تغییر بدی
                            اصلا یه سوال ؟ شما با تایمر کانتر تابحال کار کردی ؟ با تولید فرکانس اشنا هستی ؟
                            اگه نه بگو یه توضیح مختصر بدم ....

                            دیدگاه


                              #15
                              پاسخ : $crystal = X000000 رو چه حساب این مقدار انتخاب میشه ؟

                              نوشته اصلی توسط mehrdad_italy
                              اگه نه بگو یه توضیح مختصر بدم ....
                              ممنون میشم توضیح بدید
                              - اَللّهُمَّ عَجِّل لِوَلیِّکَ الفَرَج -
                              ارتباط با من : ir02x6
                              طراحی و ساخت انواع منابع تغذیه سوئیچینگ - SMPS Designer

                              دیدگاه

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