بنام خدا
آموزش میکرو کنترلر arm سری lpc2368 جلسه اول : با آموزش ARM در خدمتتون هستم…قرار بر این شد من با arm lpc2368 در خدمتتون باشم و آقا پویا زحمت ۱۷۶۸ رو بکشن ، خوب بریم سر اصل مطلب
ما با کامپایلر کیل کار میکنم >>>
خوب اول برنامه کیل را اجرا میکین اگر از قبل پروژه ای باز بود حتما باید از منوی project گزینهclose project پروزه را ببندیم
خوب حالا از منوی project گزینه new project را انتخاب میکنیم
در اینجا پنجره creat new project باز میشود که آدرس محل ذخیره فایل های پروژه را میدهیم بهتر است همه آنها را داخل یک پوشه ذخیره کنیم
سپس پنجره زیر باز میشود که در اینجا باید از دنیای میکروهای arm میکروی ۲۳۶۸ را از خانواده nxp انتخاب کنیم
پس از انتخاب میکرو اطلاعاتی در مورد میکرو در روبرو نوشته میشود
البته میتوانیم در پنجره search هم نام میکرو را وارد کنیم و مستقیم میکروی مورد نظر انتخاب میشود
بعد از Ok کردن این پنجره پنجره زیر وارد میشود
در اینجا چاره ای جز تایید کردن و فشردن گزینه yes نداریم .
وارد محیط اصلی کیل میشوم در گوشه سمت چپ زیر شاخ هایی مانند شکل زیر بوجود می آید.
حالا از گزینه file و new یک صفحه جدید ایجاد میکنیم
سپس روی گزینه save کلیک میکنیم و صفحه ایجاد شده را با نام دلخواه ولی با پسوند c ذخیره میکنیم
مثلا main.c
اگر دقت کرده باشین این فایل هنوز به زیر شاخه پروزه ما الحاق نشده است خوب کاری نداره که الحاقش میکنیم
با راست کلیک روی شاخه ها پنجره زیر باز میشود
و گزینه add file یا add existing file را انتخاب میکنیم و در پنجره باز شده ادرس فایلی که با پسوند c ذخیره کردیم را میدهیم
اگر این کار را درست انجام داده باشیم آن قایل با همان نام به این زیر شاخه اضافه میشود
خوب تبریک تا اینجا ما موفق شدیم وارد محیط برنامه نویسی برای میکروی arm بشیم
کمربند همت را محکم ببنید که داستان شروع شد.
البته تا همینجای کار هم خیلی از مقدمات را بطور موقت نادیده گرفتم که انشالله در اسرع وقت و در لابلای مباحث به آنها میپردازم
پورتهای ورودی / خروجی عمومی (GPIO)
رک و رو راست همه آتیشها از گور همین gpio بلند میشه پس با دقت به این نکات توجه فرمایید
در میکروهای arm سری lpc پنج پورت وجود دارد با نامهای p0-p1-p2-p3-p4
در اینجا یک بحثی بوجود می اید که بدلیل اینکه نمیخوام از arm زده بشید به آن نمیپردازم
فقط بطور خلاصه میگم که دو پورت p0-p1 قابلیت دسترسی کند و تند و بقیه پورتها فقط قابلیت دسترسی تند را دارند . در مورد دسترسی تند و کند بعدا به طور کامل توضیح میدم .
اما در محموع توصیه میکنم که تمام پورتها را در دسترسی سریع راه اندازی کنیم.
((((( در اینجا اکیدا و شدیدا بهتون توصیه میکنم یه دفترچه داشته باشیم و در قسمتی از آن فقط رجیسترها را بنویسم با کمی از توضیحات مربوط به آن )))).
برای دسترسی تند به پوزتها حتما باید رجیسترSCS را مقدار دهی کنیم.
پس رجیستر SCS شد اولین رجیستر که با آن آشنا میشویم این رجیستر وظایف دیگری هم دارد که فعلا این یک وظیفه آن است.
برای دسترسی کند به پورتهای ۰ و ۱
و رجیتسر
1 |
SCS | =1; |
برای دسترسی سریع به پورتها می باشد .
نکته مهم و اساسی اینکه همه پورتها ۳۲ بیتی است (از اینجا به قدرت و توانایی arm پی مبریم) اما همه پایه های پورتها به بیرون از پکیج میکرو منتقل نشده است حالا بنا به دلایل فنی مثلا در ۲۳۶۸ پایه های p0.14-p0.13-p0.12-p0.11 وجود ندارد
خوب حالا میخوایم ببنیم چطوری میشه این ۳۲ تا پایه از پورتها رو چطوری ورودی و چطوری خروجی کنیم .
در مورد رجیستر scs لازم است که نکاتی را بطور مختصر و مفید عرض کنم .
در داخل میکرو کنتر های سری Lpc23xx دو مدل گذرگاه داریم . گذرگاه AHB که مختص اتصال هسته پردازنده با ادوات پرسرعتی مانند usb – ethernet و …. مورد استفاده قرار میگیرد .
سایر امکانات جانبی مانند usart – timer- adc -dac- از طریق گذرگاه کند APB و به کمک یک پل واسط به پردازنده متصل میشوند .
این پل واسط در واقع یک مقسم فرکانس است . همین مقسم فرکانس باعث میشود که ادواتی که به گذرگاه APB هستند با سرعت کمتری نسبت به ادوات AHB کار کنند . که این عمل خودباعث کاهش توان مصرفی میکرو میشود .
که البته لازم به ذکر است که کنترل کامل این خطوط گذرگاهی با کمک دو رجیستر با نامهای AHBCFG1 و AHBCFG2 امکان پذیر است که فعلا کمی زود است برای کار با این رجیسترها .
یک رجیستر دیگر که فعلا یک بیت آن کار میکنیم رجیستر وضعیت و کنترل سیستم است . با نام scs که مخفف system controls and status register است که برای تنظیم برخی از عملکردهای جانبی سیستم از جمله پورتها و حافظه خارجی و رابط sd/mmc و سیستم کلاک میکرو کنترلر است . در مورد نحوه تنظیمات آن در آینده صحبت خواهیم کرد . فقط لازم به ذکر است که بیت اول این رجیستر مختص GPIO می باشد . که مربوطبه همان راه اندازی تند و کند دو پورت صفر و یک است .
برای مطالعه بهتر در مورد این رجیستر توجهتان را به صفحه ۴۳ دیتا شیت LPC23XX جلب میکنم .
یه نکته خیلی مهم : تو دستور scs قبل از مساوی از | استفاده شده؛ شما بهتر میدانید که این علامت همان OR منطقی است . و در واقع در این دستور یعنی اینکه رجیتسر SCS حالت های قبلی خودش رو داشته باشه و این یک هم به ان اضافه شود.
خوب خیلی راحته با کمک رجیستر IODIR؛ در بالا گفتم که پورتهای ۰ و ۱ قابلیت دسترسی کند را دارند؛ در این حالت برای ورودی خروجی کردن این دو پورت از دستور
1 2 |
IO0DIR = 0xFFFFFFFF; IO1DIR = 0xFFFFFFFF; |
استفاده میکنیم و برای بقیه پورتها ۲-۳-۴ چون کلا این پورتها در حالت سریع یا fast هستند از دستور زیر استفاده میکنیم
1 2 3 |
FIO2DIR=0xFFFFFFFF; FIO3DIR=0xFFFFFFFF; FIO4DIR=0xFFFFFFFF; |
لازم به ذکر است که اگر دو پورت ۰ و ۱ هم در حالت fast مورد استفاده قرار دادیم باید برای ورودی و خروجی کردن آن از دستور
1 2 |
FIO0DIR=0xFFFFFFFF; FIO0DIR=0xFFFFFFFّ; |
استفاده کرد؛ خوب در دستورات بالا با صفر کردن هر بیت پایه متناظر آن ورودی و با یک کردن آن پایه متناظر آن خروجی میشود.
یک کردن پینهای پورت : برای یک کردن پینها از رجیستر زیر استفاده میکنیم :
1 2 3 4 5 |
FIO0SET=0xffffffff; FIO1SET=0xffffffff; FIO2SET=0xffffffff; FIO3SET=0xffffffff; FIO4SET=0xffffffff; |
و برای صفر کردن آنها از رجیستر زیر استفاده میکنیم :
1 2 3 4 5 |
FIO0CLR=0xffffffff; FIO1CLR=0xffffffff; FIO2CLR=0xffffffff; FIO3CLR=0xffffffff; FI4CLR=0xffffffff; |
خوب حالا وارد محیط کیل میشویم و کمی با این دستورات کار میکنم
قبل از اینکار بایدخدمت دوستان عرض کنم که همانطور که در برنامه نویسی زبان c مرسوم است اضافه کردن کتابخانه هاست که در اینحا هم بر همین منوال است
مثلا برای ۲۳۶۸ باید کتابخانه ای به شکل زیر اضافه شود
1 |
#include <lpc23XX.h> |
در ضمن در اینجا خیلی از کتابخانه ها باید توسط خودمون نوشته بشه
مثلا کتابخانه delay
خوب چون ما فعلا کار خاصی نمیخوایم انجام بدیم که زمان برامون خیلی مهم باشه و برای راحتی و درک بهتر و آشنای بیشتر از تابع زیر برای delay استفاده میکنیم
1 2 3 4 5 |
void delay(void) { int j; for(j=0;j<0xfffff;j++); } |
خوب حالا شروع میکنیم به برنامه خیلی راحت و سبک بنویسیم
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <lpc23XX.h> void delay(void) { int j; for(j=0;j<0xfffff;j++); } int main (void) { SCS|=1; // ---------------- Configuration --------------- FIO2DIR = 0xff; FIO2CLR = 0xff; while(1) { FIO2SET = 0xFFFFFFFF; delay(); FIO2CLR = 0xFFFFFFFF; delay(); } } |
در این برنامه بطور مثال آمدیم و پورت دو رو اولخروجی کردیم و بعد در حلقه while اول تمام پایه ها را یک کردیم و سپس یک تاخیر دادیم و سپس تمام پایه ها را صفر کردیم.من پورت دو را انتخاب کردم چون روی بردی که من دارم led ها روی ژورت دو وجو دارند
من هدر برد ۲۳۶۸ محصول eca رو روی برد آموزشی ۱۷۶۸ قرار دادم و پروگرم کردم اینم فیلمش :
اینم یه برنامه نمونه دیگه که بهتر متوجه GPIO بشین
شاید این برنامه ها خیلی راحت باشه اما خوب برای شروع خوبه به نظرم .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <lpc23XX.h> void delay(void) { int j; for(j=0;j<0xfffff;j++); } int main (void) { SCS|=1; // ---------------- Configuration --------------- FIO2DIR = 0xff; FIO2CLR = 0xff; while(1) { FIO2SET = 0x01; delay(); FIO2SET = 0x02; delay(); FIO2SET = 0x04; delay(); FIO2SET = 0x08; delay(); FIO2SET = 0x10; delay(); FIO2SET = 0x20; delay(); FIO2SET = 0x40; delay(); FIO2SET = 0x80; delay(); FIO2CLR = 0x80; delay(); FIO2CLR = 0x40; delay(); FIO2CLR = 0x20; delay(); FIO2CLR = 0x10; delay(); FIO2CLR = 0x08; delay(); FIO2CLR = 0x04; delay(); FIO2CLR = 0x02; delay(); FIO2CLR = 0x01; delay(); } } |
امیدوارم مفید باشه؛ امری بود در خدمتم.
مهمان
سلام.
خیلی خوب بود چون زبان سی بود خیلی خوب فهمیدم.
مهمان
خیلی خوب بود
مهمان
خیلی ممنون بابت اموزش
نویسنده این مطلب
سلام
ایشالله چهارشنبه آموزشی در مورد رجیسترهای ورودی و روش خواندن کلید و رجیتسر بسیار مهم PINSEL صحبت خواهیم کرد
مهمان
سلام

همون که دوستمون اقا مهدی گفتند نمیه ارم ها رو با هم مقایسه کرد اصلا کار درستی نیست بلکه حرام هم هست
ولی اگه بخواید بدونید که فرق LPC و STM در چیه میتونم بگم که بازم هیچ فرقی نداره غیره یه چیز ترتیب پایه در میکرو STM منظم تر و به قولی صنعتی تره و هیچ فرقه دیگه ای نداره .
اکی دنبال میکروی خوب بد نگردید با هر کدوم که دلتون خواست کار کنید مگه این که نیاز به امکانات بیشتری داشته باشید
در کل همشون یکه .
مهمان
حق با شماست
ممنون از راهنماییتون
بی صبرانه منتظر آموزشهاتون هستم
موفق باشید
نویسنده این مطلب
ببنید دوست من آقا مجید
عرض کنم خدمتتون که من هم خودم زیاد در مورد خانواده های arm اطلاعات کاملی ندارم
در بالا تر هم در جواب یکی از دوستان عرض کردم که واقعا در مورد arm ها نمیشه مقایسه درست و حسابی انجام داد
اما تاجایی که اطلاع دارن اینها از خانواده arm هفت هستند
مطلب دیگر اینکه شرکتهای تولید کننده arm بسیار زیاد هستند چونکه همانطور که اطلاع دارید هسته arm فروخته میشه و شرکتهای دیگر بر اساس تکنولوزی های که دارن و به قول معروق سیاست اون شرکت برخی امکانات رو به این arm ها اضافه میکنن
واقعا نمیشه مقایسه درستی از این همه مدل و تولیدات انجام داد
از طرفی به دلیل تنوع زیاد arm ها واز انجایی که رجیتسر ها بسیار زیاد و در واقع نگارش برنامه نویسی متفاوتی ببین محصولات تولیدی شرکتها وجود دارد شما نمی تونید اشخصای رو بیابید که روی تمام میکروهای arm مسلط باشند
برخی میگن میکروهای خانواده lpc صنعتی ترن برخی میگن stm تنوعش بیشتره و کیفیت تولید بهتری داره .
اما تو بیشتر مراکز آموشی روی همین 2368 و جدیدا هم روی 1768 کار میکنن
حالا اینکه شما با کدوم از این همه محصولات متنوع حال میکنی و کار کنی کاملا به خودت برمیگرده .
در مورد مدل برسیده بودین که آره عزیزم مدلهای دیگری هم داره حدود 35 تا شرکت تولید کننده فقط تو برنامه کیل معرفی شدن که شما حالا بگو هر کدو هم میانگین 5 تا میکرو زده باشن ببین چقدر میشه . فکر کنم اگر بخوای رو همه اینا وقت بزاری صبر عیوب و عمر نوح میخواد .
من که خودم تا حالا کسی رو ندیدم که به آرم مسلط باشه و با آرمهای زیادی کار کرده باشه معمولا همه سعی میکنن روی یک خانواده کار کنن .
در مورد کتاب هم که برسیده بودین عرض کنم که بهترین کتاب دیتاشیت خود میکروی شما هست
الان میگی وای خدا کی حال داره دیتا شیت بخونه و ترجمه کنه و انگلیسی هست
داداشای من اگر حال ندارید دیتاشیت 700 صفحه ای رو بخونید ((هرچند که لازم نیست واو به واو همه 700 صفحه رو بخونید اما چون با رجیسترها زیاد سر و کار داریم باید بتونی تو اون همه سرفصل رجیستر مورد نظرتو بیابی و مطالبشو بخونی و بیدا کنی که هر بیت این رجیستر چکار میکته ))
همه کتابهای موجود هم تقریبا دیتاشیت ترجمه کردن .
اما اگر میخوای با 238 کار کنی کتابی که من خوشم اومد کتاب میکرو کنترلر arm سری lpc هست نوشته ابولفضل زرگری تالیف دیباگران .
مهمان
سلام
آقا مهدی من هیچ اطلاعاتی از ARM ندارم ممنون میشم راهنمایی کنید.
فرق بین AT91 با LPCهاچیه ؟اینا جزو کدوم خانواده میشن؟ARM7یا ARM9یا…
برای کدوم سازنده س؟اتمل…
مدل های دیگه هم دارن؟
کتاب هم اگه میشه معرفی کنید
نویسنده این مطلب
دوستان اگرلازم یمدونید بازم چند تا برنام دیگه نمونه بزارم برای کار با gpio ????????????

من مشتاقانه حاضرم
نویسنده این مطلب
ببنید دوستان
واقعا نمیشه میکرو کنترلرها رو با هم قیاس کرد
آخه به قول معروف با چه سنگ محکی میخوای اینارو قیاس کنی ؟
مگه میشه گفت ATMEGA 8 بهتره یا ATMEGA 128
هرکدوم در جای خودش بسیار بکار می آیند
در اینجا هم همونه
ببنید کلا الان اکثر دور ههای آموزشی هم روی LPC ها برگزرار میشه
به قول معروف رونتره تمام امکانات هم داره
حالا ما خودت ببین اوضاعت جطوره و با کدوم حال میکنی
ولی این 1768 و 2368 الان تو بورسه
این دو تا رو یاد بگیری دیگه بعید میدونم رو بقیه مشکلی داشته باشی چون دستت راه افتاده دیگه
خدایی خودتون حساب کنید الان من بگم مثلا 1768 بهترینه
فردا یکی دیگه میاد میگه نه 2138 بهتره چون کمتر نویز میگره
یکی دیگه میاد میگه نه 2768چون مثلا هشت تا ADC داره
بعد دوباره یکی دیگه میاد میگه میکرو فقط ARM11
یکی میگه با keil کار کنیم
یکی میگه ir
یکی میگه سی کار کنیم
یکی میگه بیسک
اینطوری بخوایم پیش بریم نسل arm منقرض شده و ما هنوز سر دوراهی هستیم
پس لطفابیاید این بحثها رو کنار بزاریم رو همین خط پیش بریم و کمی تابع جمع بشیم
مهندسین عزیز
وقتی یه پروزه بهت میخوره مشتری بهت میگه من میخوام مثلا یه سنسوری تو فلان جا برام دتکت بشه و صد متر اونورتر بهم آلارم بده
حالا اینکه شما با چی کار کنی و چی بنویسی و مثلا فیبر فایبر گلاس کار کنی یا استخونی
یا اینکه خازنهای مدارت الکترولیت باشه یا تالیم و مقاومتهای مدارت پنج رنگ باشه یا چهار رنگ دیگه دستت خودته نه مشتریت اون فقط براش مهه که مدارت کار کنه
پس عزیزان دل بیاد بیخیال این مباحث بشیم
چون واقعااگر بخوایم اینا رو با هم مقایسه کنیم باید بریم دیتا شیت همه اینا رو پرینت بگیریم که هرکدوم حداقل صفحه هستند و بشینم واو به واو با هم مقایسه کنیم
که فکر کنم اطلاعتی که جمع آوری میکنیم بدرد نوه نتیجه هامون بخوره که اون موقع هم دیگه احتمالا arm شده یه چیزی شبیه مرحوم z80 که الان کسی ازش یادی نمیکند
مهمان
سلام
آقا مهدی خدا قوت خیلی خوب بود
منتظر مطالب بعدیتون هستم
یاعلی
نویسنده سایت
میگم به جای فراخوانی تابع delay نمیتونستی از کتابخانه ی delay.hاستفاده کنی؟
نویسنده این مطلب
رامین جان برادر
تا جایی که من اطلاع دارم کتابخانه delay در این مبحث وجود ندارد
میتونی تست کنی ببینی که بهت ارور میده
عزیزان اگر در avr تابع کتابخانه را دیده باشید و مطالعه کرده باشید میبینید که در آن کتابخانه تایمر watchdog هم ریست میکنه هربار که شما delay میزنید
برا همین خیلی حرفه ای نیست که با این تابع کار کرد
اگر تاخیر خیلی دقیق در مبحث arm مورد نیاز باشد باید از تامیر ها استفاده کرد که ایشالره سر فرصت به ان هم میرسیم
نویسنده سایت
خیلی ممنون
میگم lpc بهتره یا (stm32f103 zet6) ؟
مهمان
مثل همیشه عالی بود .
سوال :
از نظر سخت افزاری این دو مدل آرم ( 2368 و 1768) خیلی با هم فرق دارن . ( یکی cortex و دیگری arm7 )
ولی انگار دستوراتشون به هم شبیهه !
چی کار کنم ؟ موازی میشه روشون کار کرد یا قات میزنم ؟
نویسنده این مطلب
دستورات زیاد بهم شباهت ندارن
ولی خوب این دو تا میکرو تقریبا پر کاربرد هستند پس بهتره جفتش.ن ر. با هم یاد بگیریم