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

موضوع: کمک فوری در مورد arm

  1. #1
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    Icon2008 کمک فوری در مورد arm

    با سلام
    دوستان یه at91sam7s128 خریدم تغذیه ها رو وصل کردم و توسط کامپیوتر هم شناخته میشه ولی وقتی برنامه چشمک زن رو روش میریزم کار نمیکنه
    من لینک برنامه چشمک زن رو می زارم اساتید لطف کنید بفرمایید که اشکال از چیست.
    در ضمن با sam-ba v2.12 وقتی می خوام از میکرو بخونم برنامه هنگ میکنه ولی پروگرم کردنش رو بدون ارور انجام میده


    http://uplod.ir/mswqddgitwur/Keil_First_Project.rar.htm

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

  3. #2
    عضو جدید
    تاریخ عضویت
    Mar 2013
    نوشته ها
    17
    تشکر
    5
    تشکر شده 9 بار در 6 پست

    پیش فرض

    شما باید اول کلاک واحد PIO رو فعال کنید:
    کد:
       AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
    ضمناً بهتره به جای استفاده از اعداد، ثوابت دارای نام تعریف کنید:
    کد:
    #define AT91B_LED1            (1<<19)
    چون بعداً که پروژه بزرگ می شه، خوندن، فهمیدن و دیباگ سخت می شه.

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


  5. #3
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    Icon2008

    نقل قول نوشته اصلی توسط aref3006 نمایش پست ها
    شما باید اول کلاک واحد PIO رو فعال کنید:
    کد:
       AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
    ضمناً بهتره به جای استفاده از اعداد، ثوابت دارای نام تعریف کنید:
    کد:
    #define AT91B_LED1            (1<<19)
    چون بعداً که پروژه بزرگ می شه، خوندن، فهمیدن و دیباگ سخت می شه.
    ممنون دوست عزیز
    ولی مگه با
    کد:
    *AT91C_PIOA_PER = 0x00000004;

    کلاک واحد pio فعال نمی شه؟

  6. #4
    همکار علمی sarbaz13 آواتار ها
    تاریخ عضویت
    Mar 2011
    نام
    محمد قاسمی
    نوشته ها
    410
    تشکر
    995
    تشکر شده 425 بار در 230 پست

    پیش فرض

    [PHP]

    #include <AT91SAM7S128.h>
    void delay_s(void);

    int main (void) {

    *AT91C_PIOA_PER = 0x00080000; // Set in PIO mode
    *AT91C_PIOA_OER = 0x00080000; // Configure in Output
    while(1)
    {
    *AT91C_PIOA_SODR = 0x00080000 ; // PB.19 to be set
    delay_s();
    *AT91C_PIOA_CODR = 0x00080000; // PB.19 to be cleared
    delay_s();
    }
    }
    void delay_s (void)
    {
    unsigned int n;
    for (n = 0; n < 7372800; n++);
    }


    [/PHP]
    ویرایش فایل ارسالی
    شرکت Time Owner

  7. #5
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    پیش فرض

    میشه بگید این چه کار می کنه
    کد:
    *AT91C_PIOA_PER = 0x00080000;
    و فرقش با
    کد:
    AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
    در چیه؟

  8. #6
    همکار علمی sarbaz13 آواتار ها
    تاریخ عضویت
    Mar 2011
    نام
    محمد قاسمی
    نوشته ها
    410
    تشکر
    995
    تشکر شده 425 بار در 230 پست

    پیش فرض

    نقل قول نوشته اصلی توسط pirozy نمایش پست ها
    میشه بگید این چه کار می کنه
    کد:
    *AT91C_PIOA_PER = 0x00080000;
    و فرقش با
    کد:
    AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
    در چیه؟
    فرقی می کنه و شما دقت کنید پرانتز را یادتون رفته که بگذارید.
    و این دستور
    [PHP]
    AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA);
    [/PHP]
    کلاک پورت A را توسط واحد PMC فعال می کند.
    این دستور
    [PHP]
    *AT91C_PIOA_PER = 0x00080000;
    [/PHP]
    واحد PIO را برای پایه ی 19 از پورت A فعال می کند.

    بعدم شما کمی دقت کنید و یک شبیه سازی در keil انجام بدهید اشکالات خودتون رو می فهمید.با کد شما اصلا پورت 19 نه روشن میشد نه خاموش و من نمیدونم بر چه اساسی شما کامپیل کردین و انتظار داشتین که LED پایه 19 خاموش و روشن شود.
    ویرایش توسط sarbaz13 : 15-04-2013 در ساعت 00:31
    شرکت Time Owner

  9. #7
    عضو جدید
    تاریخ عضویت
    Mar 2013
    نوشته ها
    17
    تشکر
    5
    تشکر شده 9 بار در 6 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sarbaz13 نمایش پست ها
    فرقی نمی کنه و فقط شما دقت کنید پرانتز را یادتون رفته که بگذارید.
    [PHP]
    AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA);
    [/PHP]
    من فکر می کنم این دو کد فرق دارن. کد اولی پین های مورد نظر رو تحت کنترل واحد PIO قرار می ده اما کد دومی به طور کلی کلاک پورت A واحد PIO رو فعال می کنه که به طور پیش فرض برای صرفه جویی در مصرف توان، غیرفعال هست. البته شاید من منظور شما رو اشتباه متوجه شدم.
    اما چرا لازم بوده پرانتز استفاده بشه؟ تمام ID های تعریف شده در AT91SAM7X256.h دورشون پرانتز دارن. و اگه هم نداشته باشن، اون موقع باید دور ID پرانتز گذاشت نه کل عبارت، مثلاً
    کد:
    #define SOME_ID 1+2
    x = 1 << SOME_ID  /*computation error because + has more priority */
    در این کد چون دور SOME_ID پرانتز قرار ندادم، نتیجه به جای 8 میشه 4 که غلطه.

  10. #8
    همکار علمی sarbaz13 آواتار ها
    تاریخ عضویت
    Mar 2011
    نام
    محمد قاسمی
    نوشته ها
    410
    تشکر
    995
    تشکر شده 425 بار در 230 پست

    پیش فرض

    نقل قول نوشته اصلی توسط aref3006 نمایش پست ها
    من فکر می کنم این دو کد فرق دارن. کد اولی پین های مورد نظر رو تحت کنترل واحد PIO قرار می ده اما کد دومی به طور کلی کلاک پورت A واحد PIO رو فعال می کنه که به طور پیش فرض برای صرفه جویی در مصرف توان، غیرفعال هست. البته شاید من منظور شما رو اشتباه متوجه شدم.
    اما چرا لازم بوده پرانتز استفاده بشه؟ تمام ID های تعریف شده در AT91SAM7X256.h دورشون پرانتز دارن. و اگه هم نداشته باشن، اون موقع باید دور ID پرانتز گذاشت نه کل عبارت، مثلاً
    کد:
    #define SOME_ID 1+2
    x = 1 << SOME_ID  /*computation error because + has more priority */
    در این کد چون دور SOME_ID پرانتز قرار ندادم، نتیجه به جای 8 میشه 4 که غلطه.
    سلام دوست عزیز ممنون که تذکر دادین
    ولی دوستمون داره با at91sam7s128 کار می کنه نه با at91sam7x256 که شما از کتابخونه at91sam7x256.h استفاده کنید.
    بعدم اون پرانتز مهم هست که باشه.
    بعدم این حرف با هم شما و هم دوست عزیز آقای pirozy هستم ککه معلوم هست این برنامه را کسی برای ایشان نوشته
    حالا من توصیه می کنم به ایشون که زمانی که از آدرس های پایه ای(Base) ساختمان واحد های PIO استفاده می کنند.( منظور نوشتن کد ها به این شکل AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA); است.)
    بهتر است قسمت های startup(منظور واحد های wdtc_wdmr و rstc_rmr ) و speed up(منظور واحدهای ckgr_mor و pmc_mckr و pmc_scer ) را هم مقدار دهی کنند تا برنامه در عمل بهتر تر کار کند.
    شرکت Time Owner

  11. #9
    عضو جدید
    تاریخ عضویت
    Mar 2013
    نوشته ها
    17
    تشکر
    5
    تشکر شده 9 بار در 6 پست

    پیش فرض

    نقل قول نوشته اصلی توسط sarbaz13 نمایش پست ها
    سلام دوست عزیز ممنون که تذکر دادین
    ولی دوستمون داره با at91sam7s128 کار می کنه نه با at91sam7x256 که شما از کتابخونه at91sam7x256.h استفاده کنید.
    سلام به شما
    بله من حواسم نبود. البته نکته ای که درباره پرانتزها گفتم فکر می کنم در هر دو هدر صادق باشه

    بعدم اون پرانتز مهم هست که باشه.
    چرا؟ من که برای لازم نبودنش دلیل آوردم!

    بعدم این حرف با هم شما و هم دوست عزیز آقای pirozy هستم ککه معلوم هست این برنامه را کسی برای ایشان نوشته
    حالا من توصیه می کنم به ایشون که زمانی که از آدرس های پایه ای(Base) ساختمان واحد های PIO استفاده می کنند.( منظور نوشتن کد ها به این شکل AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_PIOA); است.)
    بهتر است قسمت های startup(منظور واحد های wdtc_wdmr و rstc_rmr ) و speed up(منظور واحدهای ckgr_mor و pmc_mckr و pmc_scer ) را هم مقدار دهی کنند تا برنامه در عمل بهتر تر کار کند.
    ممنون بابت این توصیه، اما عمل کردن به اینها مستلزم مطالعه زیاده، مثل ور رفتن با واحد PMC. ولی اینکه چرا باید تنظیمات پیش فرضشون رو تغییر داد کلاً یه بحث دیگه ست.
    در مقابل آنچه بنده گفتم توصیه نبود، بلکه انجامش برای کار کردن پروژه ایشون ضروریه. اگه اشتباه می گم بفرمایید.

    برای پیش گیری از سوء تفاهم عرض کنم کل تجربه عملی من درباره میکروکنترلها محدود به 2 ماه گذشته هست. هدفم از نوشتن در انجمن این میکرو هم فقط دو چیزه: کمک به دوستان و افزایش دانش خودم. و صد البته دربرابر اساتید بزرگوار ادعایی ندارم

  12. #10
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    New

    نقل قول نوشته اصلی توسط sarbaz13 نمایش پست ها
    [PHP]

    #include <AT91SAM7S128.h>
    void delay_s(void);

    int main (void) {

    *AT91C_PIOA_PER = 0x00080000; // Set in PIO mode
    *AT91C_PIOA_OER = 0x00080000; // Configure in Output
    while(1)
    {
    *AT91C_PIOA_SODR = 0x00080000 ; // PB.19 to be set
    delay_s();
    *AT91C_PIOA_CODR = 0x00080000; // PB.19 to be cleared
    delay_s();
    }
    }
    void delay_s (void)
    {
    unsigned int n;
    for (n = 0; n < 7372800; n++);
    }


    [/PHP]ویرایش فایل ارسالی
    با سلام
    دوست عزیز کد شما رو هم پروگرم کردم کار نکرد اصلا اشکال از چیه ؟
    ولی تو شبیه سازی کار می کنه
    اقا دیگه دیونه شدم
    سخت افزار که فکر نکنم مشکلی داشته باشه چون با usb پروگرم می کنم و تو ویندوز 7 اونو به عنوان یه com مجازی می شناسه و با sam-ba هم پروگرم میشه
    واسه led هم از پین 19 یه سیم به مثبت مثبت led وصل کردم و منفی led رو هم گراند مدار وصل کردم خوب اشکالش چیه که کار نمیکنه؟

  13. #11
    عضو جدید
    تاریخ عضویت
    Mar 2013
    نوشته ها
    17
    تشکر
    5
    تشکر شده 9 بار در 6 پست

    پیش فرض

    نقل قول نوشته اصلی توسط pirozy نمایش پست ها
    با سلام
    دوست عزیز کد شما رو هم پروگرم کردم کار نکرد اصلا اشکال از چیه ؟
    ولی تو شبیه سازی کار می کنه
    اقا دیگه دیونه شدم
    سخت افزار که فکر نکنم مشکلی داشته باشه چون با usb پروگرم می کنم و تو ویندوز 7 اونو به عنوان یه com مجازی می شناسه و با sam-ba هم پروگرم میشه
    واسه led هم از پین 19 یه سیم به مثبت مثبت led وصل کردم و منفی led رو هم گراند مدار وصل کردم خوب اشکالش چیه که کار نمیکنه؟
    از سر کنجکاوی می پرسم، اضافه کردن سطر زیر به ابتدای main() مشکل رو حل نمی کنه؟
    کد:
    AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
    شما در کد اولتون این دو چیز رو با هم یکی فرض کرده بودید:
    AT91C_BASE_PMC->PMC_PCER
    و *AT91C_PIOA_PER
    در حالیکه دو چیز متفاوت هستند. در واقع اولی کلاک کل واحد PIO رو می تونه کنترل کنه. اما دومی مشخص می کنه که کدام پینهای بورد در اختیار واحد PIO باشند (یعنی GPIO بشند و بتونید توسط *AT91C_PIOA_SODR و *AT91C_PIOA_CODR مقدارشون رو 0 یا 1 کنید) و کدام پینها در اختیار Peripheral Controller ها باشند (مثل SPI، USART، PWM و...).
    به همین خاطر باید همون مقداری که در *AT91C_PIOA_SODR و *AT91C_PIOA_CODR میریزید رو در *AT91C_PIOA_PER قرار بدید و نه مقدار 0x00000004 که باید در AT91C_BASE_PMC->PMC_PCER بریزید.
    مگر این که AT91SAM7S128 از لحاظ معماری تفاوت اساسی با AT91SAM7X256 داشته باشه، که مطمئنم این طور نیست!

    -- ویرایش: فایلی که ضمیمه کردم نمونه پروژه برای AT91SAM7S64 هست. اول هدر رو تغییر بدید و مجدد کامپایل کنید. بعد تست کنید. امیدوارم مشکلتون حل بشه
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: zip Blinky.zip (92.0 کیلو بایت, 28 نمايش)
    ویرایش توسط aref3006 : 16-04-2013 در ساعت 03:45 دلیل: افزودن پیوست

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


  15. #12
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    پیش فرض

    نقل قول نوشته اصلی توسط aref3006 نمایش پست ها
    از سر کنجکاوی می پرسم، اضافه کردن سطر زیر به ابتدای main() مشکل رو حل نمی کنه؟
    کد:
    AT91C_BASE_PMC->PMC_PCER  = 1 << AT91C_ID_PIOA;
    شما در کد اولتون این دو چیز رو با هم یکی فرض کرده بودید:
    AT91C_BASE_PMC->PMC_PCER
    و *AT91C_PIOA_PER
    در حالیکه دو چیز متفاوت هستند. در واقع اولی کلاک کل واحد PIO رو می تونه کنترل کنه. اما دومی مشخص می کنه که کدام پینهای بورد در اختیار واحد PIO باشند (یعنی GPIO بشند و بتونید توسط *AT91C_PIOA_SODR و *AT91C_PIOA_CODR مقدارشون رو 0 یا 1 کنید) و کدام پینها در اختیار Peripheral Controller ها باشند (مثل SPI، USART، PWM و...).
    به همین خاطر باید همون مقداری که در *AT91C_PIOA_SODR و *AT91C_PIOA_CODR میریزید رو در *AT91C_PIOA_PER قرار بدید و نه مقدار 0x00000004 که باید در AT91C_BASE_PMC->PMC_PCER بریزید.
    مگر این که AT91SAM7S128 از لحاظ معماری تفاوت اساسی با AT91SAM7X256 داشته باشه، که مطمئنم این طور نیست!

    -- ویرایش: فایلی که ضمیمه کردم نمونه پروژه برای AT91SAM7S64 هست. اول هدر رو تغییر بدید و مجدد کامپایل کنید. بعد تست کنید. امیدوارم مشکلتون حل بشه
    با سلام و تشکر
    مثل اینکه این فایل یادت رفته
    کد:
    #include "..\Board.h"

  16. #13
    عضو جدید
    تاریخ عضویت
    Mar 2013
    نوشته ها
    17
    تشکر
    5
    تشکر شده 9 بار در 6 پست

    پیش فرض

    خواهش می کنم.
    متوجه نشدم که آیا مشکل حل شده؟ یا کامپایل نشد؟

  17. #14
    کاربر فعال pirozy آواتار ها
    تاریخ عضویت
    May 2010
    نوشته ها
    337
    تشکر
    147
    تشکر شده 192 بار در 84 پست

    پیش فرض

    نقل قول نوشته اصلی توسط aref3006 نمایش پست ها
    خواهش می کنم.
    متوجه نشدم که آیا مشکل حل شده؟ یا کامپایل نشد؟
    نه دوست عزیز موقع کامپایل می گه این فایل
    کد:
    Board.h
    موجود نیست راستم میگه تو فایل هایی که گذاشتی فایلی با این اسم موجود نیسیت.

  18. #15
    عضو جدید
    تاریخ عضویت
    Mar 2013
    نوشته ها
    17
    تشکر
    5
    تشکر شده 9 بار در 6 پست

    پیش فرض فایل Board.h

    فایل board.h که ضمیمه کردم رو باید کنار پوشه Blinky قرار بدی.
    اگه از Keil استفاده می کنی، این مثال به همراه چند مثال دیگه در شاخه زیر موجود هست:
    C:\Keil\ARM\Boards\Atmel\AT91SAM7S-EK
    (البته با این فرض که Keil رو در C:\Keil نصبش کرده باشی)
    فايل هاي پيوست شده فايل هاي پيوست شده
    • نوع فایل: zip Board.zip (1.2 کیلو بایت, 19 نمايش)

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

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