آخه شما گفتيد KEIL ، منم كدها رو با IAR زدم ... ، گفتم شايددوبارهه بگيد دارهه ...
گفتم كه اگر كدها رو مي خوايد بگيد مي زارم !!
قدرت نمايي ؟! براي چشمك زدن !!
بله از كتابخانه اي استفادهه نكردم ...
فقط هدر خود ميكرو ...
نه از تايمر استفادهه نشده ، از همون delay استفادهه شدهه ( البته تابع delay هم خودم نوشتم --> يه كار نيمه گترهه اي ... )
كدها رو ديديد نا اميد نشيد ... ! بايد ريجسترها جلو تون باشه ...
اين كد چشمك زن ...
کد:
#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++);
}
//---------------------------
اين كد چشمك زن با كنترل سرعت :
کد:
#include <Atmel/ioat91sam7x256.h>
void delay(void);
void wait(void);
unsigned int len=1;
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|1<<1|1<<2);
AT91C_BASE_PIOA->PIO_OER=(1<<0);
//--------------------------------
unsigned int num,num1;
while(1)
{
if(len==0)
len=1;
num=(AT91C_BASE_PIOA->PIO_PDSR&0X6)>>1;
wait();
num1=(AT91C_BASE_PIOA->PIO_PDSR&0X6)>>1;
if(num==num1)
{
if (num==1)
len=len+5;
if (num==2&len>1)
len=len-5;
}
AT91C_BASE_PIOA->PIO_CODR=(1<<0);
delay();
AT91C_BASE_PIOA->PIO_SODR=(1<<0);
delay();
}
}
//---------------------------
void delay (void)
{
unsigned int k,i,j;
for(k=0;k<len;k++)
for(i=0;i<100000;i++)
for(j=0;j<1000000;j++);
}
//---------------------------
void wait (void)
{
unsigned int i,j;
for(i=0;i<2000000;i++)
for(j=0;j<1000000;j++);
}
موفق باشيد.
يا علي.
مبارک باشه!
به نظر من کد نوشتن برای چشمک زن با استفاده از رجیستر ها وقت تلف کردنه!
من اون پروژه رو با استفاده از دو هدر delay.h و pio.h نوشتم(با تشکر از pmm )
وقتی میشه از دستورات ساده تری استفاده کرد چرا این کار رو نکنیم؟
بالاخره برای کامپایلر کدوم رو کار کنیم؟
کار کردن با keil یکم راحت تره نه؟
sam-ba چطور بود؟ اذیتت نکرد؟
نقل قول: بله از كتابخانه اي استفادهه نكردم ...
فقط هدر خود ميكرو ...
نه از تايمر استفادهه نشده ، از همون delay استفادهه شدهه ( البته تابع delay هم خودم نوشتم --> يه كار نيمه گترهه اي ... )
کار تو هم قابل تقدیره! چون جلوتر بهش نیاز داریم...( برای کار های بعدی)(اونجا که دیگه هدری نداریم! )
اما نه برای چشمک زن! البته برای تمرین خوبه...
موفق باشی!
نقل قول: به نظر من کد نوشتن برای چشمک زن با استفاده از رجیستر ها وقت تلف کردنه!
ولي نظر من اينطور نيست !!
دقيقا خودت جواب اين قسمت رو دادي ...
ببين :
نقل قول: کار تو هم قابل تقدیره! چون جلوتر بهش نیاز داریم...( برای کار های بعدی)(اونجا که دیگه هدری نداریم! )
اما نه برای چشمک زن! البته برای تمرین خوبه...
تازه هم تمرين براي آينده هست ، هم اعتماد به نفست رو بالا مي برهه و هم با ميكرو راحت تري و ازش كمتر مي ترسي !!
نقل قول: وقتی میشه از دستورات ساده تری استفاده کرد چرا این کار رو نکنیم؟
بايد موقع شناس باشي و به وقتش اين كار رو كني !!
نقل قول: بالاخره برای کامپایلر کدوم رو کار کنیم؟
همون keil ديگه ...
من تو IAR براي دل خودم كد مي زنم ، اما Keil هم در همون سطح بلدم ، يعني هر 2 رو با هم مي برم جلو ...
پس همون Keil
نقل قول: کار کردن با keil یکم راحت تره نه؟
ظاهرا بله ... ، اما وقتي سختي بكشي ، چيزاي بيشتري هم ياد مي گيري ... !
نقل قول: sam-ba چطور بود؟ اذیتت نکرد؟
خوب بود ، فقط چون قلق ميكرو دستم نبود ، مي ديدم هم جواب مي ده و هم نمي دهه !!
در واقع در كد نويسي در IAR بايد يه ملاحظاتي مي كردم ...
بعد از چند بار پروگرام كردن ، فهميدم مشكل چي بودهه و خيلي اذيت نشدم ...
نقل قول: موفق باشی!
شما هم به همچنين ...
يا علي.
سلام.
تايمر بلادرنگ ( RTT )
همونطور كه مي دونيد يه شمارندهه ي 32 بيتي هست و حداكثر مي تونه تا 32^2 ثانيه بشمارهه ...
كه معادل با كمي بيشتر از 136 سال مي شه و بعد از رقم انتهايي دوبارهه 0 مي شه و ...
البته در صورتي كه كلاكش 1Hz تنظيم بشه ...
اين هم يه كد نمونه با IAR كه فركانس 2Hz رو روي پايه ي PA0 ميكرو توليد مي كنه ( فركانس كاري ميكرو هم 48MHz )
خوب رابطه اش هم به اين صورته :
RTPRES*(desiger frequncy)=Slow Clock
كه در اينجا :
Sclk=32768
Frequency=2Hz
و در نتيجه مقدار ريجستر RTPRES به دست مي ياد 0x4000
برنامه هم به اين صورته ...
بچه ها شما هم معادل Keil اش رو بذاريد كه من ديگه كار تكراري نكنم و با 1 تير 2 نشون بزنيم
اگر جايي هم مشكل داشتيد بگيد تا با هم حل اش كنيم ...
کد:
#include <Atmel\ioat91sam7x256.h>
#define Low AT91C_BASE_PIOA->PIO_CODR=(1<<0);
#define High AT91C_BASE_PIOA->PIO_SODR=(1<<0);
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);
//----------------------------------------
unsigned int i;
AT91C_BASE_RTTC->RTTC_RTMR=0X44000;
AT91C_BASE_PIOA->PIO_PER=(1<<0);
AT91C_BASE_PIOA->PIO_OER=(1<<0);
Low;
while(1)
{
i=AT91C_BASE_RTTC->RTTC_RTVR;
if(i%2==0)
Low;
if(i%2==1)
High;
}
}
موفق باشيد.
يا علي.
مگه شما نمیگی با keil میریم جلو! پس چرا با IAR میزنی؟
من که وقتی این کد ها رو میبینم سرم گیج میره!
آرهه ، هنوزم سر حرفم هستم ...
يه فكري به زهنم رسيد كه ، چون من بيشتر IAR مي خونم ، با IAR بزنم ، عنوانش و توضيحات اجمالي هم دادم ...
شما هم با توجه به عنوان ، با Keil همين كار رو انجام بديد و بذاريد ، اگر هم مشكل داشتيد بگيد تا به هم كمك بديم.
اين باعث مي شه كد هاي هر 2 كامپايلر موجود باشه و هر كس خواست هر 2 رو دنبال كنه ...
اگر هم مي بينيد ايده ي خوبي نيست ، ديگه كد IAR توي اين تاپيك نمي زنم ، جاش با Keil مي زنيم.
البته اينطوري دير به دير مي تونم پست بزنم ...
حالا هر جور خواستيد ... همون كار رو مي كنيم ...
راستي تو IAR الان رفتم سراغ وقفه ها ... ، براي Keil مطلب در موردش ديدين ؟ تو pmm هست يا نه ... ؟
خبرش رو بديد ...
موفق باشيد.
يا علي.
سلام ببخشید اگه میبینید نمیام ! میام اما حرفی برای گفتن ندارم!
رفتم کتاب بخرم از بازار سعدی مشهد فقط در موردIAR پیدار کردم منم همونو خریدم
خواستم برد بخرم دیگه دیدم توبازار نیست و باید اینترنتی بخرم تقریبا بی خیال شدم فغلا باهمین کتاب کار میکنم
اگه کسی میدونه برد(هدر)AT91 ازکجا میشه خرید تومشهد بگه ممنون میشم
سلام.
اينترنتي بگيري كه راحت تري ... !!
كتاب IAR هه اگه همون باشه كه من دارم ، كتاب خوبيه ... ، فقط بايد جا نزني و تحمل كني ...
اما عملي كار كردن يه چيز ديگست ...
حتما هر 2 رو با هم كار كن.
البته بگم كه با keil احتمالا راحت تر باشي ها ، از نظر كتابخانه تامين ترهه و حجم كدش ظاهرا كمتر مي شه ...
توي اين كتاب IAR اينطوري نيست و ممكنه دلسرد و دل زدت كنه ...
شما هم سعي كن سريع خودت رو برسوني ...
موفق باشيد.
يا علي.
مشکل منم همینه! keil راحت تر و بهتره اما هرچی کتاب هست در مورد IAR هست. آموزش keil هم کمتره!
فکر کنم آخرش مجبور بشیم بریم IAR کار کنیم!
شارین تو که جفتش رو کار کردی بگو IAR خیلی سخت تر از keil هست؟
مگه كلا چندتا كتاب هست ؟!
دنبالش نگشتم اما فكر نمي كنم آموزش Keil كمتر باشه ... !
Keil همونطور كه مي دونيد كتابخانه هاي بيشتري براش موجود هست ، براي PLL و ... هم محيط گرافيكي دارهه ... و خروجي bin نمي دهه ...
براي IAR همه رو بايد code بزني ، اما مستقيم خروجي bin مي دهه ... ( البته بخشي از كدها رو مي شه copy\paste كرد ! )
حقيقت من تا حدودي اون آموزش هاي keil رو خوندم اما عملي تو Keil كد نزدم.
از روي كتاب IAR مي خونم ، راضي ترم !! درسته در سطح ريجسترهه ، اما باعث مي شه يه مقداري عمقي تر بري سراغ مفاهيم . البته مفاهيمش براي Keil هم كاملا كاربرديه ...
هدف من اينه كه اول سطح ريجستر رو درك كنم و بعد از اون برم سراغ توابع ، مطمئنن كند تر كارم پيش مي رهه ، اما مؤثر ترهه ... ( شايد آخرهه سر برم سراغ Keil )
تا اينجا كه ديدم سبك كارشون يه جورهه ...
در كل تفاوت فاحشي بينشون نيست و حجم كد در keil كمتر از IAR مي شه ( به خاطر توابع و محيط گرافيكي ... )
حالا اينا چيزي نيست ، اين وقفه ها رو خوندم مخم ... !
حقيقتش كمي دپرس شدم ... ، بايد يه برنامه ي دقيق تر بريزم .
يه تفاوت بين syntax هاي IAR, Keil ، ( پست شمارهه 10 )
اين يه نمونه كد با كامپايلر IAR هست :
کد:
AT91C_BASE_PIOA->PIO_SODR=(1<<3)
و اين هم معادلش در Keil:
کد:
*AT91C_PIOB_SODR = 0x00008
البته يه syntax هاي عجيب ديگه هم ديدم !!
بنظرم همينا قابل فهم تر و بهتر هستن ... ( حداقلش فعلا ...! )
راستي كم پيدايين ...
از اين تاپيك كم كم دارم دلسرد مي شم ... !
موفق باشيد.
يا علي.
سلام
ADC:
مبدل آنالوگ به ديجيتال
با مفهومش كه همگي آشنايي داريد و نيازي به توضيح نيست.
دقت كنيد كه حداكثر مقداري كه مي تونيد به ADC بديد ، 3.3 ولت هست.
مقدار ريجستر ها :
lowres=1
prescal=0
startup=0
SHTIM=1
كه مقدار كل ريجستر ADC_MR=0x1000010
مي شه ...
صورت مسئله هم طبق عكس زير كه مشخصه ...
يه پتانسيومتر كه مقاديري بين 0 تا 3.3 ولت رو درست مي كنه به 5 امين كانال ADC ميكرو يعني AD4 خوردهه .
8 تا LED هم به پايه هاي 0 تا 7 پورت A خوردهه .
مقدار ديجيتالي كه ADC درست مي كنه ، روي اين LED ها به صورت باينري به نمايش در مي ياد ...
ويدئو ي اين پروژه هم پيوست كردم ، كيفيت بهتر و كم حجم تر ، اگر دوست داشتيد دانلودش كنيد.
بچه ها آموزش ها يك طرفه نشه ها ... ! ( قرارمون كه يادتون هست ؟! )
يه خوردهه بيشتر فعاليت كنيد ...
دستوراتش اين پروژهه و پروژه ي قبلي رو با Keil برسونيد حداقل ( كار سختي كه نيست ! ، كاملا مشابهه ... )
اين هم كد اين پروژه در IAR
کد:
#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_PMC->PMC_PCER=(1<<AT91C_ID_ADC);
//-----------------------------------
AT91C_BASE_PIOA->PIO_PER=0XFF;
AT91C_BASE_PIOA->PIO_OER=0XFF;
AT91C_BASE_PIOA->PIO_OWER=0XFF;
AT91C_BASE_PIOA->PIO_ODSR=0X0;
AT91C_BASE_ADC->ADC_MR=1000010;
AT91C_BASE_ADC->ADC_CHER=(1<<4);
while(1)
{
AT91C_BASE_ADC->ADC_CR=0X2;
while((AT91C_BASE_ADC->ADC_SR&1<<4)==0);
AT91C_BASE_PIOA->PIO_ODSR=AT91C_BASE_ADC->ADC_CDR4&0X3FF;
delay();
}
}
void delay(void)
{
unsigned int i,j;
for(i=0;i<1000000;i++)
for(j=0;j<1000000;j++);
}
موفق باشيد.
يا علي.