به نام خدا : بعد از مدها که قصد و نیتشو داشتیم که مطالب lpc1768 رو بزارم تو سایت و مطالب رو کامل بزارم تا مثل مطالب ناقصی که دوستان گزاشتن نشه، امروز لیاقت پیدا کردیم که استارت کار رو بزنیم، برای این مرود، من فعلا یه چند تا پروژه میزارم طی امروز فردا از مبحث GPIO و بعدش میرم سراغ آموزش ها و معرفی چند تا منبع آموزشی(کتاب و سایت و فیلم و…)، خب صحبت کوتاه میکنم بریم سراغ مطلبمون، تو این مطلب چند پروژه LPC1768 میزارم که در کل دو تا پروژه روشن کردن LED هستن یکی با دکمه یکی با DELAY ( پروژه ساده روشن کردن led با lpc1768 )
پروژه ساده روشن کردن led با lpc1768
پروژه LED چشمک زن با LPC1768 و GPIO
شماتیک پروژه
تو این پروژه LED پشت سر هم چشمک میزنه.
کد پروژه
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <lpc17xx.h> void delay_ms(unsigned int ms) { for( unsigned int i=0; i<ms; i++ ) for( unsigned int j=0; j<20000; j++ ); } int main() { LPC_PINCON -> PINSEL0 = 0x00000000; LPC_GPIO0 -> FIODIR = 0x0001; while(1) { LPC_GPIO0->FIOSET = 0x0001; delay_ms(100); LPC_GPIO0->FIOCLR = 0x0001; delay_ms(100); } } |
توجه : کد پروژه بالا رو، به صورت زیر هم میشه نوشت ( نتیجه و عملکرد هر دو کد یکسان هستش ) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <lpc17xx.h> void delay_ms(unsigned int ms) { for( unsigned int i=0; i<ms; i++ ) for( unsigned int j=0; j<20000; j++ ); } int main() { LPC_PINCON -> PINSEL0 = 0x00000000; LPC_GPIO0 -> FIODIR = 0x0001; while(1) { LPC_GPIO0->FIOPIN0 = 0x0001; delay_ms(100); LPC_GPIO0->FIOPIN0 = 0x0000; delay_ms(100); } } |
فیلم پروژه
پروژه GPIO LPC1768 روشن کردن LED با دکمه
شماتیک پروژه
تو این پروژه وقتی دکمه رو فشار میدی LED روشن میشه و وقتی دکمه رو ول میکنی LED خاموش میشه.
کد پروژه
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <lpc17xx.h> int main() { LPC_PINCON -> PINSEL0 = 0x00000000; LPC_GPIO0 -> FIODIR = 0x0001; while(1) { if( LPC_GPIO0->FIOPIN & 0x0002 ) { LPC_GPIO0->FIOSET = 0x0001; } else { LPC_GPIO0->FIOCLR = 0x0001; } } } |
فیلم پروژه
پروژه های مرتبط :
خب این مطلب هم تموم شد، امیدوارم براتون مفید بوده باشه. ( توضیحات و آموزش LPC1768 بمونه تو مطلب مربوط به آموزش این میکرو توضیح و آموزش میدم. )
مهمان
با سلام
خیلی ممنون از مطالب خوبتون
کتابخانه پروتئوس LPC1768 را میشه قرار بدید.خیلی سایتا را گشتم نبود اگه قرار بدید خیلی ممنون میشم.
فایل پروتئوس هم نبود در پروژه
مهمان
سلام میخواستم بدونم مگه کلاک سیستم 100 مگاهرتز نیست پس چرا برای تابع تاخیر 20000 رو نوشتین و از کجا اومده و چطور خیلی لازمم ممنون میشم یکم سریع بهم بگید
مهمان
سلام ببخشید، این LPC_GPIO0->FIOPIN به چه منظوری استفاده میشه ؟
یک توضیح کامل بدین ممنون میشم..
نویسنده این مطلب
سلام-این مطلبو بخون.
https://dmf313.ir/آموزش-آرم-lpc1768-جلسه-2-کنترل-gpio/
FIOPIN : خوندن مقدار پایه، در حالتی که پایه ورودی هستش. ( این ریجستر کار ریجستر های FIOSET و FIOCLR رو هم میتونه انجام بده؛ این ریجستر عملیات تغییر مقدار پایه ها -۰و۱ کردن- رو هم انجام میده )
مهمان
ببخید موقع پروگرم کردن
ارور
error flash download fail -cortex m3
میاد واسه چیه ؟؟؟
مهمان
برو تو تارگت قسمت زبانه اخر ستینگ رو بزن وتنظیماتش رو دیفالت کن درست میشه
مهمان
جناب سلام ، خسته نباشین
وقتى میخوام فایل پروژه رو دانلود کنم لینکش باز نمیشه
چکار باید کنم ؟؟؟
ممنونم
نویسنده این مطلب
سلام-لینک دانلود فایل سالمه.
مهمان
*** Using Compiler ‘V5.05 update 2 (build 169)’, folder: ‘D:\Program Files\ARM\ARMCC\Bin’
Build target ‘Target 1’
compiling led.c…
led.c(5): error: #29: expected an expression
for( unsigned int i=0; i<ms; i++ )
led.c(6): error: #29: expected an expression
for( unsigned int j=0; j<20000; j++ );
led.c: 0 warnings, 2 errors
".\Objects\led.axf" – 2 Error(s), 0 Warning(s).
Target not created.
Build Time Elapsed: 00:00:01
سلام بی زحمت میشه این به زبان c بگی cpp نمیدونم چیه نمیتونم اصلاحش کنم
نویسنده این مطلب
سلام
تو زبون سی نمیتونی تو حلقه for متغیر تعریف کنی
for( unsigned int j=0; j<20000; j++ );
این الان اشتباهه – متغییر J رو در خط بالاترش تعریف کن و در حلقه for ازش استفاده کن.
مهمان
داداش ممنونم بالاخره پس از جدال با ارور ها و پروگرمر انجام شد خخخخ
مهمان
سلام کتابخونه 1768برا پروتیوس از کجا بیاریمl??
نویسنده این مطلب
سلام-نمیدونم – در عمل کار کن !
مهمان
سلام. وقتتون بخیر باشه. واقعا ممنون از سایت خوبی که دارید. من به شخصه خیلی استفاده کردم..
شرمنده. سوال داشتم.
من برنامه رو نوشتم اما کامپایل که میکنم دوتا ارور میگیره. نمی دونم باید چکارش کنم..
*** Using Compiler ‘V5.05 update 2 (build 169)’, folder: ‘C:\Keil_v5\ARM\ARMCC\Bin’
Build target ‘Target 1’
compiling led.c…
led.c(6): error: #29: expected an expression
for(unsigned int i=0;i<ms;i++)
led.c(7): error: #29: expected an expression
for(unsigned int j=0;j<۲۰۰۰۰;j++);
led.c: 0 warnings, 2 errors
".\Objects\led.axf" – 2 Error(s), 0 Warning(s).
Target not created.
Build Time Elapsed: 00:00:00
نویسنده این مطلب
سلام – من این کد توی این مطلب رو بر مبنای کد CPP نوشتم – شما به C تغییرش بده – تو کیل هم میشه به زبون C کد زد و هم CPP
مهمان
سلام یک سوالی ولتاژ کاری این میکرو ۳٫۳ یا ۵ ولت ؟
نویسنده این مطلب
سلام
۳٫۳
مهمان
الان من بخوام usb to serial pl233 رو بهش وصل کنم تا از پروپرامر flash magic استفاده کنم ولتاژ رو ب کدوم پایه بدم؟
نویسنده این مطلب
کار نکردم با فلش مجیک – من از پروگرامر J-LINK استفاده میکنم و مستقیما با خود کیل پروگرام میکنم برنامه رو – یه F7 میزنم برنامه کامپایل میشه و بعدش یه F8 میزنم برنامه پروگرام میشه – به همین راحتی
مهمان
سلام میشه برای این میکرو یک کتاب خوب معرفی کنید
نویسنده این مطلب
سلام
کتاب خوب ندیدم من – یه کتاب خریدم خودم ولی بدرد جرز لای در میخوره
همین مطالب سایت رو بخون – سوال هر چی داشتی بگو تمام کمال جواب میدم
مهمان
سلام میشه بگین چه کتابی خریده بودین
نویسنده این مطلب
سلام
تو سایت کتاب.آی آر سرچ کنید
مهمان
if( LPC_GPIO0->FIOPIN & 0x0002 )
بی زحمت این خط رو توضیح میدی؟
fiopin رو چرا با اون and کردی؟
نویسنده این مطلب
دکمه متصل به پایه P0.1 هستش – یعنی پایه دومی – لذا در رجیستر FIOPIN اگه به مطلب آموزشش رفته باشید و ببنید، متوجه میشید که برا خوندن مقدار پایه P0.1 باید بیت دوم رجیستر FIOPIN رو خوند
لذا چون این رجیستر مقدار کل پایه های پورت P0.x رو به من میده ولی من فقط مقدار پایه p0.1 رو میخوام – لذا مقدار بقیه خونه ها رو ۰ کردم به کمک & ۰x0002 و مقدار بیت مربوطه رو خوندم
مطلب زیر رو حتما بخون :
https://dmf313.ir/%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%88-%DB%8C%D8%A7-%D8%AE%D9%88%D9%86%D8%AF%D9%86-%DB%8C%D9%87-%D8%A8%DB%8C%D8%AA-%D8%A7%D8%B2-%DB%8C%DA%A9-%D9%85%D8%AA%D8%BA%DB%8C%D8%B1/
مهمان
الان اینجا وقتی دکمه رو فشار میدی عدد یک میفته رو پینت و با ۰x0002 اند میشه و جوابش یک میشه و میره شرط رو چک میکنه .مگه شرط درستی صفر نیست؟یعنی اگه جواب صفر بود بره دستور رو اجرا کنه؟؟
نویسنده این مطلب
خب طبق شماتیک پروژه، دکمه به vcc وصله و مقاومت به gnd – لرا وقتی کلید فشرده بشه vcc رو پایه میکرو اعمال میشه و ما با دیدن مقدار ۱ در رجیستر pin متوجه فشرده شدن کلید میشیم.
مهمان
این خط رو نمی خواد
LPC_PINCON -> PINSEL0 = 0x00000000;
چون power gpio به صورت پیش فرض فعاله
برای اینکه گیج نزنید بهتره بجای ۰x0001; از۰ >> 1
استفاده کنید و این جوری خونده میشه ۱ که صفر تا شبقت میدیم
if( LPC_GPIO0->FIOPIN & 0x0002 ) اشتیاه است
((if(!( LPC_GPIO0->FIOPIN & 0x0002 این درستشه
از شما کلید زده نشده led روشن میشه و معمولا ما نمی خوایم اینجوری باشه باید خاموش بعد با کلیک روشن شود شما اول روشن می کنید بعد خاموش
FIOPIN این رجیستر وضعیت پین ها یا پورت را به ما میده به صورت پیشفرض gpio ها ورودی و pull up هستند پس بیتهای این رجیستر FIOPIN یک هستند واگه یک بیت رجیستر صفر شود به مفهوم کلیک زده شدن است چون کلید به زمین وصل میشه و آن بیت از رجیستر صفر می شود خوب حالا برای اینکه میکرو نخواد مدام کل رجیستر FIOPIN را چک کنه مبایم محدود به آن بیتی می کنیم که می خواییم کلیک بشه LPC_GPIO0->FIOPIN & 0x0002
پس اینجا بیت ۱ مقدارش ۱ است چون گفتیم pull up است وضعیت FIOPIN که ورودی پس مقدارش ۱ است پس & هر دو میشه ۱ پس کلیک زده نشده است
پس اصلاح شده پروژه
#include
int main()
{
LPC_GPIO0 -> FIODIR = 0x0001;
while(1)
{
((if(!( LPC_GPIO0->FIOPIN & 0x0002 {
LPC_GPIO0->FIOSET = 0x0001;
}
((if(!( LPC_GPIO0->FIOPIN & 0x0002
LPC_GPIO0->FIOCLR = 0x0001;
}
}
}
البته بازم نیاز به توسعه داره
نویسنده این مطلب
سلام
بله درسته نقش پیش فرض پایه ها GPIO هستش ولی چون فعلا در شروع کار هستیم – این کد رو گزاشتم تا دوستان بدونن که اول باید نقش پایه ها تعیین بشه.
((if(!( LPC_GPIO0->FIOPIN & 0x0002 این درستشه
مقاومت دکمه پول دان هستش – درست نوشتم.
بله درسته – من فراموش کردم مقاومت داخلی رو غیر فعال کنم تغییر بدم
ممنون از لطف شما – امیدوارم بقیه دوستان هم مثل شما عمل کنن
مهمان
کتابخونه AT91SAM 7X256روهم میزاشتی بد نمیشد
مهمان
اقا مهدی کتابخونه LPC1768 رو هم بزار واقعا گیرم
ممنون که میزاری
نویسنده این مطلب
کتابخونه چیش?
مهمان
سلام اگه کتابخونه پروتئوس LPC1768 را قرار بدهید خیلی ممنون میشم.
خیلی گشتم اما پیداش نکردم اما شما تصویرش را قرار دادید.
مهمان
سلام
امیدوارم به همین صورت ادامه بدید….