اطلاعیه

Collapse
No announcement yet.

WinAvr & Atnega8

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

    WinAvr & Atnega8

    با winavr یه برنامه ساده LED چشمکآ‌زن برای یک atmega8 نوشتم اما از لحاظ زمان بندی درست عمل نمیآ‌کند.
    مقدار F_CPU در Makefile رو چقدر باید بذارم؟(مقدار 8000000 رو میآ‌نویسم، LED به جای اینکه 1 ثانیه روشن بمونه حدود 9 یا 10 ثانیه روشن میمونه بعد خاموش میشه.)
    این هم کد:

    کد:
    #include<avr/io.h>
    #include<util/delay.h>
    int main(void){
    DDRB=1;
    PORTB=1;
    while(1){
    	
    _delay_ms(1000);
    	
    PORTB=~(PORTB);
    	}
    	
    return 0;
    }
    مقدار F_CPU رو که در Makefile کمتر میآ‌کنم، سرعت چشمک زدن بیشتر میشه، اما من به یک زمان بندی دقیق نیاز دارم.
    لطفاً اگر کسی میتونه ، راهنمایی کنه.

    #2
    پاسخ : WinAvr & Atnega8

    با سلام،

    توابع delay در WinAVR نسبتا دقیق هستند. ( رزولوشن در بدترین حالت، در حدود یک میکرو ثانیه! )
    اما عملکرد دقیق اونها مستلزم تنظیم درست کلاک میکرو در makefile و تنظیمات فیوز بیت کلاک میکروست....

    1 - فیوز بیت های مربوط به کلاک میکرو رو بررسی کرده و در مقدار صحیح اونها رو ست کنید.
    2 - مطابق با ردیف شماره 1، مقدار F_CPU رو در makefile بدرستی درج کنید.
    مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

    Sh_Nourbakhsh@Yahoo.com

    http://s2.picofile.com/file/7170362468/_Wall_e_.jp

    دیدگاه


      #3
      پاسخ : WinAvr & Atnega8

      از پاسخگویی شما ممنونم
      من یه تازه کار هستم !
      من با دستور زیر فایل hex رو لود میآ‌کنم
      avrdude -c usbasp -p atmega8 -U flash:w:main.hex
      یعنی به فیوز بیتها دست نمیزنم، وقتی که از ECA AVR Programmer استفاده میآ‌کنم بیتها رو روی default تنظیم میآ‌کنم.
      F_CPU فرکانس میکرو رو هم که روی مقدار 8000000 تنظیم کردم اما درست عمل نمیکنه.
      مقدار درست F_CPU رو چطور میتونم بدست بیارم؟
      باتشکر

      دیدگاه


        #4
        پاسخ : WinAvr & Atnega8

        نوشته اصلی توسط alp-jj
        از پاسخگویی شما ممنونم
        من یه تازه کار هستم !
        من با دستور زیر فایل hex رو لود میآ‌کنم
        avrdude -c usbasp -p atmega8 -U flash:w:main.hex
        یعنی به فیوز بیتها دست نمیزنم، وقتی که از ECA AVR Programmer استفاده میآ‌کنم بیتها رو روی default تنظیم میآ‌کنم.
        F_CPU فرکانس میکرو رو هم که روی مقدار 8000000 تنظیم کردم اما درست عمل نمیکنه.
        مقدار درست F_CPU رو چطور میتونم بدست بیارم؟
        باتشکر
        در حالت پیش فرض، فرکانس کاری میکرو بر روی اسیلاتور داخلی و یک مگاهرتز تنظیم شده، شما باید با پروگرامر خودتون، منبع کلاک ( داخلی و یا خارجی ) رو انتخاب کنید، اگر داخلی هست، یکی از فرکانس های در دسترس رو انتخاب کنید و در makefile هم همون مقدار رو درج کنید.

        برای تست، در همین حالت پیش فرض، در makefile فرکانس رو یک مگا هرتز تنظیم کنید و نتیجه رو ببینید.

        در تنظیم فیوز بیت ها، حتما دقت کنید، ممکنه میکروتون مرحوم بشه oo: برای اطلاعات بیشتر، حتما بخش مربوط به فیوز بیت ها رو در دیتا شیت میکرو مطالع بفرمائید..... :mrgreen:
        مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

        Sh_Nourbakhsh@Yahoo.com

        http://s2.picofile.com/file/7170362468/_Wall_e_.jp

        دیدگاه


          #5
          پاسخ : WinAvr & Atnega8

          ازتون تشکر میآ‌کنم. درست شد، در هر ثانیه یک بار روشن میشه!
          یک Makefile دیگه هم پیدا کردم که F_CPU نداشت.(با این هم درست عمل میکنه.)
          http://www.cs.ou.edu/~fagg/classes/ame3623_s05/atmel/makefile
          فقط یه سوال داشتم فرمودید:
          در حالت پیش فرض، فرکانس کاری میکرو بر روی اسیلاتور داخلی و یک مگاهرتز تنظیم شده
          یعنی توی همهآ‌ی میکروها بدون استثنا فرکانس کاری 1MHz دارند؟ میشه با دستوراتی اون رو تغییر داد؟
          برای بیشتر کردن اون از اسیلاتور خارجی باید استفاده بشه؟
          با تشکر

          دیدگاه


            #6
            پاسخ : WinAvr & Atnega8

            ازتون تشکر میآ‌کنم. درست شد، در هر ثانیه یک بار روشن میشه!
            یک Makefile دیگه هم پیدا کردم که F_CPU نداشت.(با این هم درست عمل میکنه.)
            http://www.cs.ou.edu/~fagg/classes/ame3623_s05/atmel/makefile
            اینکه با اون makefile درست عمل میکنه، برای اینه که چون F_CPU مشخص نشده، در WinAVR بطور پیش فرض میره روی یک مگاهرتز ....

            فقط یه سوال داشتم فرمودید: یعنی توی همهآ‌ی میکروها بدون استثنا فرکانس کاری 1MHz دارند؟ میشه با دستوراتی اون رو تغییر داد؟
            برای بیشتر کردن اون از اسیلاتور خارجی باید استفاده بشه؟
            بله، میکروی خام که از بازار میخری، روی کلاک داخلی یک مگاهرتز ست شده.....
            شما میتونید با ست کردن فیوز بیت ها توسط پروگرامر، حالت های کلاک داخلی یک، دو، چهار و هشت مگاهرتز رو انتخاب کنید. و یا اینکه کریستال خارجی رو انتخاب کنید و تقریبا هر فرکانسی که خواستید، کریستال بزارید.

            این جریان با دستور انجام نمیشه، فیوز بیت ها رو باید ست کنی ....
            مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

            Sh_Nourbakhsh@Yahoo.com

            http://s2.picofile.com/file/7170362468/_Wall_e_.jp

            دیدگاه

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