امتیاز موضوع:
  • 5 رأی - میانگین امتیازات: 4.2
  • 1
  • 2
  • 3
  • 4
  • 5
شروعی دوباره برای میکروهای arm
نویسنده پیام
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #1
شروعی دوباره برای میکروهای arm
سلام
از اونجا که تو دنیای مجازی منبع کافی برای میکروهای 32بیتی arm وجود نداره،من و هادی تصمیم گرفتیم که یک شروع تخصصی تر برای یادگیری میکروهای پرکاربرد arm راه بندازیم.
ما قرار بود کار رو از میکروهای سری arm9 که از سیستم عامل پشتیبانی می کنن،شروع کنیم ولی از اوجا که منبع محدود بود و هزینه بردها بالا،تصمیم گرفتیم با arm7 که هزینه بردش پایینتره و نسبتا منبع بیشتری داره شروع کنیم تا بعد به سری های بالاتر ارتقا بدیم.
برای این کار ما از هدربرد آموزشی برای میکروی at91sam7x256 و محیط کامپایلر keil استفاده کردیم.

برای شروع کار می تونید برد و از لینک زیر و سایت کویر الکترونیک تهیه کنید؛
برد آموزشی at91sam7x256

همچنین کامپایلر keil رو می تونید از لینک زیر دانلود کنید
کامپایلر keil uvision4

دوستان تو این تاپیک هر مشکلی داشتن می تونن بیان کنن و مدیران و سایر اعضایی که قبلا تجربه کار با این میکروها رو دارند ما رو از کمک هاشون بی نصیب نکننRolleyes

(آخرین ویرایش در این ارسال: ۰۳-بهمن-۱۳۹۱, ۲۱:۱۵:۵۹، توسط omid_phoenix.)
۰۳-بهمن-۱۳۹۱, ۲۰:۱۳:۳۶
ارسال‌ها
پاسخ
تشکر شده توسط : behzady, aKaReZa75, hadikh73, sharin, رسول, salehjg, من عاشق ایرانوج
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #2
RE: شروعی دوباره برای میکروهای arm
یه توضیح در مورد برد آموزشی بدم؛
این برد بدون نیاز به پروگرامر و بصورت نرم افزاری و توسط نرم افزار sam-ba پروگرام میشه.
به این صورت که برنامه تون و به زبان c در محیط keil می نویسید و بعد توسط sam ba و به حافظه flash میکرو میریزید.
همچنین این برد قابلیت ارتقا داره و می تونید کانال های i2c ، jtag و eternet و سایر ماژول های کاربردی مثل lcd و کارت حافظه sd روش بندازید و به آسونی باهاش کار کنید.

نرم افزار sam ba رو هم باید تهیه کنید که من لینک مناسبی واسش پیدا نکردم اگه دوستان پیدا کنن لینک بدن.
ضمنا اینم بگم که اگه برد و گرفتید همه نرم افزارهای مورد نیاز و توش داره و دانلود نکنیدWink

یادم رفت بگم نرم افزار h-jtag رو هم به لیست برنامه های مورد نیاز اضافه کنید.
به طور کلی ما ابتدا تو محیط keil برنامه مون و به زبان c می نویسیم و بعد کد هگز و ایجاد می کنیم.
بعد توسط برنامه h-jtag کد هگز اون وبه باینری تبدیل می کنیم.
و نهایتا توسط sam-ba سورس باینری رو داخل میکرومون میریزیم.

تا الان ما؛
یه برد آموزشی برای at91sam7x256
کامپایلر keil
نرم افزار تبدیل کد هگز به باینری h-jtag
و نرم افزار sam-ba برای ریختن سورس باینری داخل میکرو
نیاز داریم.

(آخرین ویرایش در این ارسال: ۰۳-بهمن-۱۳۹۱, ۲۱:۳۵:۲۴، توسط omid_phoenix.)
۰۳-بهمن-۱۳۹۱, ۲۱:۰۸:۵۵
ارسال‌ها
پاسخ
تشکر شده توسط : hadikh73, رسول, salehjg, aKaReZa75, Ambassador
hadikh73 آفلاین
مدیــر کـل سایـت
*******

ارسال‌ها: 1,219
موضوع‌ها: 43
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 13641
( 14739 تشکر در 4686 ارسال )
ارسال: #3
RE: شروعی دوباره برای میکروهای arm
سلام به همه دوستان
بلاخره بعد از تلاش از صبح تا حالا تونستم اولین برنامم رو با keil برای arm بنویسم
قبل از هرچیزی دو فایل موجود در فایل lib (فایل پیوست) را در مسیر
C:\Keil\ARM\INC\Atmel\SAM7X
کپی کنید
خوب حالا بریم سراغ برنامه
کد:
#include <AT91SAM7X256.H>
#include <lib_AT91SAM7X256.h>
با این دو خط کتابخانه های مورد نیاز برای آی سی را تعریف کردیم
کد:
#include <delay.h>
کتابخانه ی تاخیر را تعریف کردیم
کد:
int main (void) {
شروع برنامه
کد:
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
پایه ی b.19 را خروجی تعریف کردیم
کد:
while(1){
شروع حلقه ی اصلی
کد:
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, AT91C_PIO_PB19);
پایه ی b.19 رو صفر کردیم
کد:
delay_s(1);
یک تاخیر (زمانش دقیق نیست)
کد:
AT91F_PIO_SetOutput (AT91C_BASE_PIOB, AT91C_PIO_PB19);
پایه ی b.19 را یک کردیم
کد:
delay_s(1);
یک تاخیر
کد:
}
}
پایان حلقه و برنامه
حالا کلید f7 را بزنید فایل هگز ساخته میشه و باید با نرم افزار H-JTAG V0.9.0 به باینری تبدیل می کنیم و فایل باینری را با پروگرامر sam-ba رو آی سی میریزم
حالا آی سی را ریست می کنیم و می بینید که ال ای دی سبز روی برد چشمک می زنه
(برنامه طبق گفته ی آقا مرتضی ویرایش شد)


فایل‌(های) پیوست شده
.rar   led.rar (اندازه: 134.15 KB / تعداد دفعات دریافت: 231)
.rar   lib.rar (اندازه: 15.36 KB / تعداد دفعات دریافت: 258)

(آخرین ویرایش در این ارسال: ۰۵-بهمن-۱۳۹۱, ۱۶:۳۶:۱۴، توسط hadikh73.)
۰۴-بهمن-۱۳۹۱, ۱۷:۳۲:۰۰
ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, aKaReZa75, رسول, Ambassador
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #4
RE: شروعی دوباره برای میکروهای arm
مشكل خاصي ندارهه ، اما براي پيكربندي I/O ها بهترهه اونها رو قبل از شروع حلقه پيكربندي كنيد.
مورد ديگه اينكه بنظرم از اين كتابخانه و توابع استفاده نكنيد.
در سطح ريجستر كد بزنيد ، بهتر متوجه مي شيد چي به چيه و ماندگاريش بيشترهه ...

موفق باشيد.

۰۴-بهمن-۱۳۹۱, ۲۰:۰۳:۴۸
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : aKaReZa75, hadikh73, omid_phoenix, salehjg, من عاشق ایرانوج, Ambassador, 1نفر
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #5
RE: شروعی دوباره برای میکروهای arm
نقل قول: مورد ديگه اينكه بنظرم از اين كتابخانه و توابع استفاده نكنيد.
در سطح ريجستر كد بزنيد ، بهتر متوجه مي شيد چي به چيه و ماندگاريش بيشترهه ...
ممنون مرتضی جون ولی زیاد متوجه نشدم
میشه بیشتر توضیح بدی؟
بدون استفاده از کتابخانه چطور میشه کد زد؟

(آخرین ویرایش در این ارسال: ۰۴-بهمن-۱۳۹۱, ۲۰:۱۶:۱۲، توسط omid_phoenix.)
۰۴-بهمن-۱۳۹۱, ۲۰:۱۵:۲۷
ارسال‌ها
پاسخ
hadikh73 آفلاین
مدیــر کـل سایـت
*******

ارسال‌ها: 1,219
موضوع‌ها: 43
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 13641
( 14739 تشکر در 4686 ارسال )
ارسال: #6
RE: شروعی دوباره برای میکروهای arm
ممنون
یه سوال آقا مرتضی رجیستر ها همه توی دیتاشیت هستن اگر نیستن یه مرجع براشون دارین بهم معرفی کنید

۰۴-بهمن-۱۳۹۱, ۲۰:۱۸:۱۳
ارسال‌ها
پاسخ
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #7
RE: شروعی دوباره برای میکروهای arm
توي ديتاشيت هستن. كتاب هم بگيريد موجود هست. تو خود سايت Keil هم يه سري manual گذاشته فكر كنم!
مثال زير رو ببينيد. كد چشمك زن هست.
اين كد در سطح ريجستر هست ، اونموقع با IAR كار مي كردم و براي تنظيمات PLL و WD و RST و ... چون wizard نداشت بايد در خط هاي برناه وضعيت رو مشخص مي كردي ، اون چند خط اول رو مي بينيد كوپ نكنيد!
اين كد رو مستقيم در Keil هم مي تونيد استفاده كنيد ، اون خط هاي اولش رو هم كه مربوط به تنظيمات PLL و ... مي شه مي تونيد حذف كنيد ، چون خود Keil يه Wizard دارهه كه به صورت پيشفرض مقدار دهي شدن...
يه سري كد و ... ابتدايي رو در لينك زير هست ( مربوط به يكي از تاپيك هاي قبل هست ) مي تونيد ببينيد و تو همين تاپيك ازشون استفاده كنيد ، توضيحاتي كه اونجا دادم ، ممكنه كاملا درست نباشه ، چون اونموقع تازهه شروع كردهه بودم!
صفحه ي 4 به بعد رو ببينيد :
http://www.iranled.com/forum/thread-22883-page-5.html

کد php:
#include <Atmel/ioat91sam7x256.h>
void delay(void);
void main ()
{
  
//AT91C_BASE_WDTC->WDTC_WDMR=AT91C_WDTC_WDDIS;
  //AT91C_BASE_RSTC->RSTC_RMR=0XA5000001;
  
AT91C_BASE_CKGR->CKGR_MOR=0XF01;
  
AT91C_BASE_CKGR->CKGR_PLLR=0X2903FFC;  
  
AT91C_BASE_PMC->PMC_MCKR=0X3;
  
AT91C_BASE_PMC->PMC_SCER=0X1;    
  
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PIOA);
  
AT91C_BASE_PIOA->PIO_PER=(1<<0);
  
AT91C_BASE_PIOA->PIO_OER=(1<<0);
  while(
1)
  {
    
AT91C_BASE_PIOA->PIO_CODR=(1<<0);
    
delay();
    
AT91C_BASE_PIOA->PIO_SODR=(1<<0);
    
delay();
  }
}
//---------------------------
  
void delay (void)
  {
    
unsigned int i,j;
    for(
i=0;i<2000000;i++)
      for(
j=0;j<1000000;j++);
  }
//--------------------------- 

موفق باشيد.

۰۴-بهمن-۱۳۹۱, ۲۰:۳۲:۱۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, hadikh73, 1نفر
hadikh73 آفلاین
مدیــر کـل سایـت
*******

ارسال‌ها: 1,219
موضوع‌ها: 43
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 13641
( 14739 تشکر در 4686 ارسال )
ارسال: #8
RE: شروعی دوباره برای میکروهای arm
با این خط چکار کردین
کد:
AT91C_BASE_PIOA->PIO_CODR=(1<<0);
با این خط چکار کردین
کد:
AT91C_BASE_PIOA->PIO_SODR=(1<<0);
فکر کنم پایه ای رو با یکی صفر کردین و با یکی یک خوب حالا پایه کجا تعیین شده

۰۴-بهمن-۱۳۹۱, ۲۰:۵۳:۱۹
ارسال‌ها
پاسخ
تشکر شده توسط : salehjg
sharin آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,053
موضوع‌ها: 28
تاریخ عضویت: مرداد ۱۳۸۹

تشکرها : 3714
( 8171 تشکر در 2772 ارسال )
ارسال: #9
RE: شروعی دوباره برای میکروهای arm
کد php:
AT91C_BASE_PMC->PMC_PCER=(1<<AT91C_ID_PIOA); 
به واحد PMC مي گي كلاك PIOA رو وصل كن.
کد php:
AT91C_BASE_PIOA->PIO_PER=(1<<0); 
پايه ي A.0 رو به صورت I/O تعريف مي كني.
کد php:
AT91C_BASE_PIOA->PIO_OER=(1<<0); 
پايه ي A.0 رو به صورت output پيكربندي مي كني.

2 تايي هم كه خودتون گفتيد درست هست ، يكي set مي كنه و ديگري clear

(آخرین ویرایش در این ارسال: ۰۴-بهمن-۱۳۹۱, ۲۲:۵۸:۳۵، توسط sharin.)
۰۴-بهمن-۱۳۹۱, ۲۱:۰۲:۴۷
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : aKaReZa75, salehjg, hadikh73, omid_phoenix, من عاشق ایرانوج, رسول, 1نفر
omid_phoenix آفلاین
مدیر بخش
*****

ارسال‌ها: 2,238
موضوع‌ها: 108
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 12682
( 15433 تشکر در 4574 ارسال )
ارسال: #10
RE: شروعی دوباره برای میکروهای arm
(راه اندازی فلاشر 8 بیتی با at91sam7x256)

سلام
امروز تونستم یه فلاشر 8بیتی با میکرو arm راه بندازم
برنامه و کارهایی رو که کردم و به همراه یه فیلم کوتاه از عملکرد فلاشر گذاشتم استفاده کنید.

توضیح برنامه؛
کد:
#include <AT91SAM7X256.H>
تعریف میکروی مورد نظر
کد:
#include <lib_AT91SAM7X256.h>
فراخوانی فایل هدر یا کتابخانه
کد:
#include <delay.h>
دستور تاخیر برنامه
کد:
int main (void) {
while(1){
شروع و اجرای دستور حلقه
کد:
AT91F_PIO_CfgOutput(AT91C_BASE_PIOB,0xff);
پین های 0 تا 7 از پورت b بعنوان خروجی تعریف شدن
برای درک مطلب؛
پین هایی روکه میخواهید خروجی تعریف بشن باید 1 کنید و مابقی رو صفرالان من میخوام پین های 0 تا 7 رو خروجی کنم، پس باید 8 تا 1 بجای پین 0تا7 بذارم(11111111)
الان کافیه که (11111111) رو به مبنای هگزا ببرم که می تونید برای این کار از ماشین حساب سیستم استفاده کنید.
که در واقع حاصل میشه ff در مبنای هگزا در نتیجه در برنامه0xff میذاریم.
کد:
delay_ms(50);
ایجاد یک تاخیر 50 میلی ثانیه ای
کد:
AT91F_PIO_SetOutput (AT91C_BASE_PIOB, 0xaa);
پین های 0-2-4-6 و روشن می کنیم(101010 رو به مبنای هگزا می بریم)
کد:
delay_ms(50);
ایجاد یک تاخیر 50 میلی ثانیه ای
کد:
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, 0xaa);
پین های 0-2-4-6 و خاموش می کنیم
کد:
delay_ms(50);
ایجاد یک تاخیر 50 میلی ثانیه ای
کد:
AT91F_PIO_SetOutput (AT91C_BASE_PIOB, 0x55);
پین های 1-3-5-7 و روشن می کنیم(01010101 رو به مبنای هگزا می بریم)
کد:
delay_ms(50);
ایجاد یک تاخیر 50 میلی ثانیه ای
کد:
AT91F_PIO_ClearOutput(AT91C_BASE_PIOB, 0x55);
پین های 1-3-5-7 و خاموش می کنیم
کد:
delay_ms(50);
ایجاد یک تاخیر 50 میلی ثانیه ای و نهایت پایان برنامه و شروع دوباره حلقه

برای راه اندازی سخت افزار هم طبق دیتاشیت پایه های 0تا7 از پورت b رو با یه مقاومت 330 اهم به led می دیم و از زمین هدربرد به پایه های منفی led وصل می کنیم.

الان کافیه که فایل باینری برنامه رو توسط samba-prog داخل میکرو بریزیم (باید داخل samba-prog تیک none رو بذارید)
و بعد حافظه میکرو رو توسط شستی ریست کنیم تا فلاشر اجرا بشه.

خوش باشید


.rar   8led flusher by at91sam7x256.rar (اندازه: 2.84 MB / تعداد دفعات دریافت: 149)

(آخرین ویرایش در این ارسال: ۰۹-بهمن-۱۳۹۱, ۱۸:۰۱:۵۵، توسط omid_phoenix.)
۰۹-بهمن-۱۳۹۱, ۱۸:۰۰:۴۸
ارسال‌ها
پاسخ
تشکر شده توسط : رسول, salehjg, hadikh73, a.mehran, milad15m
hadikh73 آفلاین
مدیــر کـل سایـت
*******

ارسال‌ها: 1,219
موضوع‌ها: 43
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 13641
( 14739 تشکر در 4686 ارسال )
ارسال: #11
RE: شروعی دوباره برای میکروهای arm
چطوری می تونم کلید از توی برنامه بخونم با کتابخونه قبلی
اینه نوشتم ولی جواب نداد
کد:
#include <AT91SAM7X256.H>
#include <lib_AT91SAM7X256.h>
int main(void){
AT91F_PIO_GetInput(AT91C_BASE_PIOA) , AT91C_PIO_PA27;
AT91F_PIO_CfgPullup(AT91C_BASE_PIOA, AT91C_PIO_PA27);
AT91F_PIO_CfgOutput( AT91C_BASE_PIOB, AT91C_PIO_PB19);
while(1){
if ( AT91F_PIO_GetInput( AT91C_BASE_PIOA) & AT91C_PIO_PA27 == 0) {
AT91F_PIO_SetOutput ( AT91C_BASE_PIOB, AT91C_PIO_PB19);}
else{AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, AT91C_PIO_PB19);}
}
}
فکر کنم مشکل از تعریف کلید باشه چون اصلا ال ای دی روشن نمیشه

(آخرین ویرایش در این ارسال: ۱۰-بهمن-۱۳۹۱, ۱۱:۵۵:۵۹، توسط hadikh73.)
۱۰-بهمن-۱۳۹۱, ۰۱:۰۰:۱۷
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
Wink بررسی تمام میکروهای آرم با یکدیگر md3848 1 2,421 ۱۰-شهریور-۱۳۹۵, ۱۴:۵۴:۴۲
آخرین ارسال: md3848

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 3 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS