NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 5140 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 17 از 17

موضوع: مشکل با pll و فرکانس کاری

  1. #1
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض مشکل با pll و فرکانس کاری

    این برنامه رو نوشتم و کار کرد بدون هیچ مشکلی - حالا میخوام بدونم چطور میشه فرکانس کاری پردازنده رو تغییر داد

    این برنامه
    کد:
    #include <AT91SAM7X256.H>                        /* AT91SAMT7X256 definitions */
    #include <lib_AT91SAM7X256.h>
    #include "lib/delay.h"
    
    void wait (void) {
      unsigned int n;
      for (n = 0; n < 1000; n++);
    }
    
    
    int main(void){
    
    AT91F_PIO_CfgOutput(AT91C_BASE_PIOA, AT91C_PIO_PA0);
    
    while(1){
    AT91F_PIO_SetOutput  (AT91C_BASE_PIOA, AT91C_PIO_PA0);
          wait();
    AT91F_PIO_ClearOutput(AT91C_BASE_PIOA, AT91C_PIO_PA0);
          wait();
    }
    
    }
    اول به قسمت ویزارد استارتاپ رفتم و تنظیمات رو به این شکل در آوردم

    و بعد دوباره کامپایل کردم و پرگرام کردم هیچ تغییری در سرعت چشمک زدن ایجاد نشده بود
    بعد تنظیمات رو به این شکل در آوردم

    باز کامپایل و پرگرام و باز هیچ تغییری مشاهده نشد فکر میکنید مشکل من از کجا باشه
    فرکانس یکی 48 مگا هرتز و دومی 18.432 مگاهرتز میباشد !
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: 2.JPG
مشاهده: 151
حجم: 18.8 کیلو بایت   برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: 1.JPG
مشاهده: 146
حجم: 17.5 کیلو بایت  

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نام
    Advertising world
    نوشته ها
    Many
     

  3. #2
    مدیر انجمن farzadsw آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    تهران
    نوشته ها
    485
    تشکر
    105
    تشکر شده 745 بار در 309 پست

    پیش فرض

    با توجه به اینکه حداکثر فرکانس کاری میکرو 55 مگاهرتز هست ، و الان میکرو داره با 48 مگاهرتز کار میکنه ، دنبال معجزه نباشید ! (به نظر من که اصلا صرف نداره)

    برای تغییر فرکانس باید مقدار pll multiplier , pll divider رو تغیرر بدید .(طبق دیتا شیت یا استفاده از نرم افزار برای محاسبه مقدار هر کدوم).

  4. تشکرها از این نوشته :


  5. #3
    مدیر انجمن Division آواتار ها
    تاریخ عضویت
    Jan 2010
    نام
    افشین علیزاده
    نوشته ها
    628
    تشکر
    206
    تشکر شده 1,013 بار در 407 پست

    پیش فرض

    با سلام

    وقتي شما فركانس كاري سيستم رو تغيير ميديد چون شما داريد تو كامپايلر از تابع كتابخانه اي delay استفاده مي كنيد خود كامپايلر سر ريز هاي تايمرهاتون رو كنترل مي كنه و رجيستري هاي مربوطه رو مقداردهي مي كني .

    به طور مثال براي توليد 1 ثانيه تاخير در فركانس كاري 25 مگاهرتز اگه شما 10 تا سر ريز 16 بيتي لازم داشته باشين با تغيير فركانس سيستم به 50 مگاهرتز تعداد اين سر ريز ها بايد 20 سر ريز باشه كه چون شما خودت با رجيستري ها كار نمي كني خود كامپايلر اونا رو عددهي مي كنه .

    نتيجه : سرعت چشمك زن تو هر دو حالت ثابت ميمونه فقط سرعت اجري دستورات رفت بالا .
    سادگی نهایت کمال است
    یه مدتی میشه که نیستم... ولی به زودی بر می گردم...

  6. تشکرها از این نوشته :


  7. #4
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    نقل قول نوشته اصلی توسط farzadsw نمایش پست ها
    با توجه به اینکه حداکثر فرکانس کاری میکرو 55 مگاهرتز هست ، و الان میکرو داره با 48 مگاهرتز کار میکنه ، دنبال معجزه نباشید ! (به نظر من که اصلا صرف نداره)

    برای تغییر فرکانس باید مقدار pll multiplier , pll divider رو تغیرر بدید .(طبق دیتا شیت یا استفاده از نرم افزار برای محاسبه مقدار هر کدوم).
    دوست عزیز 48 مگا هرتز یعنی 48 ملیون فرمان در ثانیه یه حلقه 1000 تایی باید 20 میکرو ثانیه طولب بکشه نه اینقدر که با چشم قابل رویت باشه پس حتما یه جایی یه مشکی هست حتما پردازنده با 48 مگاهرتز کلاک نمیخوره در ضمن در حالت دوم که با 18 مگا هرتز کلاک میخوره باید 3 برابر کند تر باشه سرعت چشمک زدن نه این که فرقی نکنه!


    وقتي شما فركانس كاري سيستم رو تغيير ميديد چون شما داريد تو كامپايلر از تابع كتابخانه اي delay استفاده مي كنيد خود كامپايلر سر ريز هاي تايمرهاتون رو كنترل مي كنه و رجيستري هاي مربوطه رو مقداردهي مي كني .

    به طور مثال براي توليد 1 ثانيه تاخير در فركانس كاري 25 مگاهرتز اگه شما 10 تا سر ريز 16 بيتي لازم داشته باشين با تغيير فركانس سيستم به 50 مگاهرتز تعداد اين سر ريز ها بايد 20 سر ريز باشه كه چون شما خودت با رجيستري ها كار نمي كني خود كامپايلر اونا رو عددهي مي كنه .

    نتيجه : سرعت چشمك زن تو هر دو حالت ثابت ميمونه فقط سرعت اجري دستورات رفت بالا .
    در مورد گفته شما باید بگم بهتر بود سورس رو بیشتر برسی میکردید من برای تاخیر از یه تابع که خودم نوشته بودم استفاده کردم یه حلقه 1000 تایی پس اصلا کاری به کامپایلر نداره

  8. #5
    مدیر انجمن farzadsw آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    تهران
    نوشته ها
    485
    تشکر
    105
    تشکر شده 745 بار در 309 پست

    پیش فرض

    من برنامه شما ندیده بودم ، الان که دیدم :
    اولا شما باید کلاک pio رو فعال کنید تو اول برنامه
    ثانیا pll طبق عکس ضمیمه شده تنظیم کنید
    ثالثا چرا تابع wait رو روی 1000 گذاشتید؟ منظورم اینه که شما که میدونستید 1000 تا سریع رد میشه پس چرا کم گذاشتید؟

    مقدار هزار رو که تغییر میدید ، سرعت چشمک زدن فرقی میکنه؟
    چشمک به صورت نصف روشن ، نصف خاموشه ؟ (اگه یکنواخت نیست ، watch dog رو فعال کردید)

    اگه با دو مورد بالا مشکلتون حل نشد ، کل فولدر پروژه رو بگذارید ، شاید مشکل از کامپایلر شماست.
    تصاوير کوچک فايل پيوست تصاوير کوچک فايل پيوست برای دیدن سایز بزرگ روی عکس کلیک کنید

نام: 3-27-2010 4-30-54 PM.png
مشاهده: 62
حجم: 8.2 کیلو بایت  

  9. تشکرها از این نوشته :


  10. #6
    کاربر علاقه مند Ali_Salehi آواتار ها
    تاریخ عضویت
    Jul 2009
    نوشته ها
    26
    تشکر
    6
    تشکر شده 7 بار در 3 پست

    پیش فرض

    همونطور که میدونین ، در قسمت pll مقدار فرکانس کریستال در دو عدد تقسیم کننده و ضرب کننده ضرب و تقسیم میشن و مقدار مورد نظری رو که میخواین میتونین بدست بیارین... من اگه به جای شما بودم به جای استارت آپ توی خود برنامه ریجستری های مربوطه رو مقدار دهی میکردم.

    و یک مورد هم در مورد استارت آپ بگم ...تجربه ی شخصی من در مو رد keil 3.2 اینه که همه ی تغییرات در قسمت ویزارد استارت آپ اعمال نمیشه...و من به شما پیشنهاد میکنم دستی کد استارت آپ رو تغییر بدین...

  11. #7
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    نقل قول نوشته اصلی توسط farzadsw نمایش پست ها
    من برنامه شما ندیده بودم ، الان که دیدم :
    اولا شما باید کلاک pio رو فعال کنید تو اول برنامه
    ثانیا pll طبق عکس ضمیمه شده تنظیم کنید
    ثالثا چرا تابع wait رو روی 1000 گذاشتید؟ منظورم اینه که شما که میدونستید 1000 تا سریع رد میشه پس چرا کم گذاشتید؟

    مقدار هزار رو که تغییر میدید ، سرعت چشمک زدن فرقی میکنه؟
    چشمک به صورت نصف روشن ، نصف خاموشه ؟ (اگه یکنواخت نیست ، watch dog رو فعال کردید)

    اگه با دو مورد بالا مشکلتون حل نشد ، کل فولدر پروژه رو بگذارید ، شاید مشکل از کامپایلر شماست.
    سلام خسته نباشید :d
    من چطور باید کلاک pio رو فعال کنم تو سمپل هایی که قرار دادید نیست !

  12. #8
    مدیر انجمن farzadsw آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    تهران
    نوشته ها
    485
    تشکر
    105
    تشکر شده 745 بار در 309 پست

    پیش فرض

    اگه منظورتون سمپلهای وبلاگمه ، تو همشون هست.
    اینم دستورشه :
    [PHP]AT91F_PMC_EnablePeriphClock(AT91C_BASE_PMC, 1 << AT91C_ID_PIOA);[/PHP]

  13. #9
    کاربر علاقه مند
    تاریخ عضویت
    Feb 2010
    نوشته ها
    45
    تشکر
    11
    تشکر شده 7 بار در 6 پست

    پیش فرض

    توی این برنامه کار کلاک pio چی هست؟ تابع wait که از تایمر استفاده نمیکنه؟

  14. #10
    مدیر انجمن farzadsw آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    تهران
    نوشته ها
    485
    تشکر
    105
    تشکر شده 745 بار در 309 پست

    پیش فرض

    کلاک pio یعنی قسمت pio روشن میشه !

  15. #11
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض نشد که نشد

    جناب تمام کار هایی که سفارش شده بود رو انجام دادم ولی انگار که نه انگار !
    نمیدونم والا دیگه مشکل میتونه ار کجا باشه
    من کل پوشه پروژه رو قرار میدم لطف کنید ببینید مشکل از کجاست
    فايل هاي پيوست شده فايل هاي پيوست شده

  16. #12
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    یکی از دوستان اگه لطف کنه و پروژه ای رو که قرار دادم رو برسی کنه تا ببینیم مشکل از کجاست

  17. #13
    کاربر علاقه مند hmg آواتار ها
    تاریخ عضویت
    Sep 2009
    نوشته ها
    36
    تشکر
    99
    تشکر شده 64 بار در 28 پست

    پیش فرض

    نقل قول نوشته اصلی توسط agape نمایش پست ها
    یکی از دوستان اگه لطف کنه و پروژه ای رو که قرار دادم رو برسی کنه تا ببینیم مشکل از کجاست
    سلام برنامه شما کاملا صحیح می باشد فقط باید مقدار n در تابع wait را بیشتر قرار دهید مثلا n=737280
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: rar h_led.rar (162.1 کیلو بایت, 39 نمايش)

  18. #14
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    نقل قول نوشته اصلی توسط hmg نمایش پست ها
    سلام برنامه شما کاملا صحیح می باشد فقط باید مقدار n در تابع wait را بیشتر قرار دهید مثلا n=737280
    عزیز جان من با همین 1000 تا میتونم چشمک زدن لامپ رو ببینم - یعنی سرعت کلاک میکرو پایینه !
    شما برنامه رو رو بردتون آزمایش کردید ؟!
    آیا آرم ها فیوز بیت خاصی دارن که تو فایل استارت آپ نباشه !

  19. #15
    کاربر علاقه مند hmg آواتار ها
    تاریخ عضویت
    Sep 2009
    نوشته ها
    36
    تشکر
    99
    تشکر شده 64 بار در 28 پست

    پیش فرض

    سلام من برنامه شما را روی برد خودم امتحان کردم حق با شما است و سرعت کلاک بسیار پایین است. پس از چندین بار پروگرم کردن و مقایسه با فایل خودم که در پست قبلی پیوست شده، فهمیدم که فایل استارت آپ شما به درستی به برنامه main الحاق نشده است و لذا تغییرات و تنظیمات pll در فایل استارت آپ در پروگرم کردن بی تاثیر است. لطفا فایل پیوست شده در پست قبلی را امتحان کنید حتما مشکل شما برطرف خواهد شد. البته من در برنامه پیوست شده، برای سادگی led را به PORTB.19 اختصاص داده ام.

  20. #16
    مدیرکل انجمنها agape آواتار ها
    تاریخ عضویت
    Feb 2009
    نام
    Zeus
    نوشته ها
    1,235
    تشکر
    139
    تشکر شده 2,209 بار در 846 پست

    پیش فرض

    فایل بین شما رو پروگرام کردم به درستی کار میکرد و جواب میداد
    یعنی ال ای دی آنبورد چمک میزد
    حدود 5 دقیقه کار کرد و چشمک زد بعد خود به خود از کار افتاد و دیگه چشمک نزد
    چند بار دیگه هم پروگرام کردم ولی هیچی به هیچی - نمیدونم مشکل از بورده یه پروگرام کردن من8o

  21. #17
    عضو جدید
    تاریخ عضویت
    Feb 2010
    نوشته ها
    16
    تشکر
    1
    تشکر شده 10 بار در 6 پست

    پیش فرض

    دوستان سلام مخلص همگی
    کلید حل مشکلتون دست منه آخه من خودم دقیقا همین مشکلو داشتم و اتفاقا مطرحشم کردم ولی کسی جواب نداد
    مشکل سره اینه که این آقا wizard کارشو درست انجام نمیده و در نتیجه راه حل اینه که به صورت دستی تنظیماتو انجام بدیم که تو datasheet کامل مراحل کار رو توضیح داده که من برای آسایش شما دوستان کدشو اینجا میذارم

    *AT91C_CKGR_MOR=0x00000701; //enable processor & programmable clocks
    while(AT91C_PMC_MOSCS==0);

    *AT91C_CKGR_PLLR=0x00040801; // Mul=4+1 Div=1
    while(AT91C_PMC_LOCK==0);

    *AT91C_PMC_MCKR=0x00000004;
    while(AT91C_PMC_MCKRDY==0);
    *AT91C_PMC_MCKR=0x00000007; // select (PLL clk)/2
    while(AT91C_PMC_MCKRDY==0);

    تو این رجیستر همAT91C_CKGR_PLLR ضرب و تقسیم PLL رو میتونید مشخص کنید.
    موفق باشید:D

  22. کاربران : 3 تشکر کرده اند از شما vasa برای ارسال این پست سودمند:


مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •