پیش نیاز : دوره آموزشی AVR
دسترسی سریع به بخش های قبلی :
مقدمه
در قسمت قبل با معماری میکروکنترلرهای ARM7 و سری LPC213x آشنا شدیم. اما معمولا میکروکنترلرهای Cortex M3 ، یعنی سری LPC176x در پروژه ها به علت قابلیت های بیشتر و سرعت بالاتر ترجیح داده می شود. با این حال ویژگی های مفیدی ، باعث می شود که ابتدا میکروکنترلرهای سری ARM7 را یادبگیریم. یکی از این ویژگی ها ، ساده تر بودن کار با آن هاست به طوری که در هنگام برنامه نویسی با تعداد رجیسترهای کمتری سر و کار داریم و نیز دسترسی به رجیسترها راحت تر است. ویژگی دیگر پشتیبانی کردن نرم افزار پروتئوس از میکروکنترلرهای ARM7 است. به طوری که میتوان در این نرم افزار میکروکنترلرهای سری LPC213x را شبیه سازی نمود. ( نرم افزار پروتئوس سری LPC176x یعنی Cortex M3 را پشتیبانی نمی کند) . بنابراین این ویژگی ها میتواند کمک کند تا به طور ملموس تر و راحت تر میکروکنترلرهای ARM را فرا گرفته و ضمن یادگیری مفاهیم به طور عمیق تر ، با برنامه نویسی راحت تر و شبیه سازی بیشتر جلو برویم.
مقایسه بین میکروکنترلرهای سری LPC213X
همانطور که در جدول زیر مشاهده می کنید ، در این سری ۵ میکروکنترلر LPC2131,LPC2132,LPC2134,LPC2136 و LPC2138 وجود دارد و ۵ میکروکنترلر دیگر به صورت LPC213X/01 نیز در کنار آن مشاهده می شود. میکروکنترلرهایی که به آن پسوند ۰۱ اضافه شده است ، نسخه جدیدتر و با قابلیت های بهبود یافته ی نسخه بدون پسوند می باشد.
به طور کلی بهبود هایی که در LPC213X/01 وجود دارند عبارت است از :
- سریع تر شدن قابلیت تغییر در پورت های GPIO تا ۳٫۵ برابر
- تخصیص رجیستری برای ذخیره نتایج مبدل های Analog/Digital
- اضافه شدن مولد BuadRate به UART0/1 ، قابلیت تشخیص خودکار نرخ ارسال/دریافت و اضافه شدن قابلیت کنترل به صورت HandShake در آن
- بهبود یافتن BrownOutDetection و رجیستر کنترل توان مصرفی ( PCON )
تذکر : هر کجا که میگوییم LPC213X منظور همان آخرین نسخه یعنی LPC213X/01 است.
پایه های میکروکنترلر LPC2138
از میان میکروکنترلرهای سری LPC213x ، میکروی دارای بیشترین قابلیت یعنی LPC2138 انتخاب می شود. این میکروکنترلر در بسته بندی TQFP و ۶۴ پایه عرضه می شود. پایه های این میکروکنترلر را در شکل زیر مشاهده می کنید.
.
همانطور که در شکل فوق مشاهده می کنید ، میکرو LPC2138 دارای دو پورت همه منظوره ورودی/خروجی ( GPIO ) می باشد که به صورت P0 و P1 نامگذاری شده است. عملکردهای دیگر هر پایه که مربوط به دیگر واحدهای میکروکنترلر می باشد نیز در شکل مشخص شده است.
چند نکته مهم :
- همانطور که مشاهده می کنید هر یک از پایه های حداقل یک و حداکثر چهار عملکرد مختلف دارند که در آن واحد فقط از یکی از آنها استفاده می گردد.
- پهنای داده ، رجیستر ها و پورت های GPIO در میکروکنترلر ۳۲ بیتی هستند اما به علت زیاد شدن پایه های خروجی پورت ها ، فقط برخی از پایه های هر پورت از آی سی بیرون آمده و در دسترس است. بقیه آنها به صورت نرم افزاری ( در برنامه نویسی ) در دسترس می باشند.
- تمامی پایه های مربوت به پورت صفرام ( P0 ) از P0.0 تا P0.31 به جز P0.24 در دسترس است. ( پایه P0.24 وجود ندارد )
- در پورت یکم ( P1 ) فقط ۱۶ پایه دوم یعنی پایه های P0.16 تا P0.31 بیرون میکرو در دسترس هستند و بقیه به صورت نرم افزاری وجود دارند. ( پایه های P0.0 تا P0.15 وجود ندارد )
تشریح پایه های LPC2138
تغذیه دیجیتال آی سی : پایه هایی که با نام VDD وجود دارند تغذیه مثبت آی سی و پایه های VSS تغذیه منفی ( زمین ) آی سی می باشند.
پایه ریست : پایه RST به عنوان پایه ریست آی سی می باشد که به صورت Active Low عمل می کند و همانند AVR باید به مدار Power On Reset متصل شود.
کریستال خارجی آی سی : پایه های XTAL1 و XTAL2 به منظور اتصال کریستال خارجی ( کلاک اصلی میکرو ) می باشد.
کریستال واحد RTC : این آی سی دارای واحد RTC مجزا است که برای فعالسازی آن نیاز به اتصال کریستال ساعت به پایه های RTXC1 و RTXC2 می باشد. همچنین پایه VBAT ، تغذیه مثبت واحد RTC است که به منظور فعال بودن دائمی این واحد به باتری پشتیبان ( Backup Battery ) متصل می گردد.
واحد GPIO : تمام پایه هایی که به نام P0.X و P1.X هستند ، میتواند از آنها به عنوان پورت ورودی/خروجی استفاده شود. X میتواند عددی بین ۰ تا ۳۱ باشد.
واحد ADC : تمام پایه هایی که به نام AD0.X و AD1.X هستند ، میتوانند به عنوان ورودی واحد آنالوگ به دیجیتال استفاده شوند. X میتواند عددی بین ۰ تا ۷ باشد.
واحد DAC : پایه AOUT مربوط به خروجی آنالوگ واحد DAC می باشد.
پایه های تغذیه آنالوگ آی سی ( تغذیه واحدهای ADC و DAC ) : شامل پایه های VREF ( ولتاژ مرجع ) ، VDDA تغذیه مثبت آنالوگ و VSSA تغذیه منفی آنالوگ می باشند.
واحد UART0 : پایه های RXD0 و TXD0
واحد UART1 : پایه های RXD1 ، TXD1 ، CTS1 ، DCD1 ، DSR1 ، DTR1 ، RI1 ، RTS1 مربوط به واحد ارتباط سریال می باشد. پایه هایی که اضافه بر RXD1 و TXD1 برای این واحد وجود دارد مربوط به قابلیت ارتباط دو طرفه با اطمینان بالا ( Handshaking ) می باشد.
واحد SPI0 : پایه های SCK0 ، SSEL0 ، MISO0 و MOSI0
واحد SPI1/SSP : پایه های SCK1 ، SSEL1 ، MISO1 و MOSI1 که قابلیت برقراری هر دو پروتکل ارتباط سریال SPI و SSP را دارد.
واحد I2C0 : پایه های SDA0 و SCL0
واحد I2C1 : پایه های SDA1 و SCL1
واحد Timer : تمام پایه های به نام های CAP0.X و CAP1.X به عنوان ورودی واحد تایمر ( کانتر ) به کار می رود که در آن ها X عددی بین ۰ تا ۳ می باشد. همچنین تمام پایه های به نام های MAT0.X و MAT1.X به عنوان خروجی واحد تایمر به کار می رود که در آن X عددی بین ۰ تا ۳ می باشد.
واحد PWM : تمام پایه های به نام های PWMX که در آن X بین ۱ تا ۶ می باشد ، مربوط به واحد مجزای PWM است.
واحد JTAG : پایه هایی که به نام های TRST ، TMS ، TCK ، TDI ، TDO ، TCK وجود دارند ، مربوط به واحد برنامه ریزی و عیب یابی میکرو می باشند.
انواع روش های پروگرام کردن میکروکنترلرهای ARM
۱- از طریق واسط استاندارد JTAG :
با استفاده از پورت JTAG و پروگرامر J-Link-از شرکت Segger و انجام تنظیمات مربوطه در کامپایلر میتوان به صورت مستقیم و با سرعت بالا برنامه را به میکرو Download و سپس Debug نمود.
۲- از طریق پورت سریال صفرام :
همه میکروکنترلرهای ARM میتوانند از طریق پورت UART0 برنامه بگیرند. به این صورت که توسط مبدل USB به سریال یک سمت به کامپیوتر وصل می شود و در سمت دیگر Rx مبدل به TXD0 میکرو ، و Tx مبدل به RXD0 میکرو متصل می شود. سپس توسط نرم افزار Flash Magic ( فقط برای میکروکنترلرهای شرکت NXP ) میتوان فایل Hex ساخته شده را به میکروکنترلر انتقال و میکرو را پروگرام نمود. در شکل زیر ماژول USB به سریال FT232 را مشاهده می کنید که قابلیت عملکرد در ولتاژ 3.3 ولت را دارد.
۳- با استفاده از رابط USB در برخی میکروکنترلرها :
با استفاده از پورت USB به صورت مستقیم و بدون واسطه میتوان میکروکنترلرهای ARM که دارای واحد USB می باشند ( مانند LPC1768 ) را پروگرام نمود. به این صورت که پس از اتصال پایه های D+ و D- به پایه های مربوطه به میکرو ، به صورت اتوماتیک میکرو شبیه یک فلش توسط کامپیوتر شناسایی می شود و میتوان فایل Hex برنامه دلخواه را مستقیم داخل آن Copy نمود.
برد راه اندازی میکروکنترلرهای ARM
به علت اینکه این میکروکنترلرها فقط در بسته بندی smd وجود دارند ، نمیتوان آن ها را روی برد بورد به صورت مستقیم استفاده کرد. به همین علت معمولا برای کار کردن روی برد بورد از یک برد راه انداز استفاده می گردد. برد راه انداز تمامی سخت افزار لازم برای راه اندازی یک میکرو از قبیل رگولاتور ، خازن ، مقاومت ، سلف ، کریستال و … را در خود دارد. شکل زیر برد راه اندازی برای دو میکروکنترلر نمونه ۶۴ و ۱۰۰ پایه را نشان می دهد.
طراحی برد راه انداز برای میکروکنترلر LPC2138
میخواهیم بوردی طراحی کنیم که تمامی امکانات مورد نیاز ما برای کارکردن با این میکرو را فراهم کند. چنین بوردی از قسمت های مختلفی تشکیل شده است و دارای ویژگی های زیر است :
۱- طراحی ورودی و رگولاتور ۳٫۳V :
برای این منظور از یک ورودی 5v ، رگولاتور ۳٫۳ ولت و چند خازن به صورت مدار زیر استفاده می شود. از یک LED به منظور نشان دادن برقراری تغذیه استفاده شده است.
۲- طراحی رابط JTAG :
برای پروگرام کردن این میکروکنترلر از استاندارد JTAG به صورت مدار زیر استفاده می گردد.
۳- طراحی مدار Power On Reset :
برای اینکه میکروکنترلر در هنگام روشن شدن به صورت خودکار ریست شود و اینکه بتوان آن را به صورت دستی ریست نمود از مدار استاندارد زیر استفاده می گردد.
۴- طراحی کریستال ها :
به منظور راه اندازی این میکرو از یک کریستال ۱۲MHz و یک کریستال ساعت 32768 هرتز برای واحد RTC به صورت مدار زیر استفاده می شود.
۵- طراحی مدار پروگرام از طریق UART0 :
برای پروگرام بوسیله UART0 میبایست بتوانیم پایه P0.14 را در زمان پروگرام به زمین متصل کنیم. بنابراین مداری به صورت زیر خواهیم داشت.
۶- اتصال پایه VREF و تمهیدات کاهش نویز :
برای پایه VREF ( ولتاژ مرجع واحد ADC ) از یک سلف و خازن با مقادیر استاندارد به منظور کاهش نویز استفاده می کنیم. برای تغذیه واحد RTC ، پایه VBAT را به صورت شکل زیر به یک پین هدر متصل می کنیم تا بتوانیم در زمان دلخواه آن را به VCC داخل مدار یا به ولتاژی از بیرون مدار متصل نماییم.
۷- قراردادن دیپ سوئیچ :
به منظور کنترل روی قطع و وصل کردن حالت های Boot و Debug و همچنین اتصال یا عدم اتصال ولتاژ VREF از یک دیپ سوئیچ سه تایی به صورت شکل زیر استفاده می کنیم.
8 – قرار دادن پین هدر :
برای تمامی پایه های میکرو هدر در نظر می گیریم تا بتوان آن را روی برد بورد نصب کرد.
طراحی و ساخت PCB
بعد از طراحی شماتیک مدار بورد راه انداز نوبت به طراحی و ساخت فیبر مدارچاپی می رسد که با استفاده از نرم افزار Altium Designer این کار صورت می گیرد. شکل زیر مدار طراحی شده نهایی توسط الکترو ولت را نشان می دهد.
لینک خرید مستقیم هدر بورد LPC2138 از فروشگاه الکترو ولت
کامپایلرها و مفسرهای ARM
برای میکروکنترلرهای ARM کامپایلرها و مفسرهای مختلفی ارائه شده است. زبان برنامه نویسی اغلب این کامپایلرها C و C++ است.هر کدام از این کامپایلرها ویژگی ها و امکانات خاصی ارائه می دهند که در جدول زیر مهمترین آن ها را مشاهده می کنید.
از میان کامپایلرهای بالا به دلایل زیر کامپایلر قدرتمند Keil انتخاب می شود :
- دارای محیطی حرفه ای ، ویرایشگر قوی و کاربر پسند نسبت به سایرین
- پشتیبانی از تمامی میکروکنترلرهای ARM و امکانات جانبی آن ها
- دارای سیستم شبیه سازی با قابلیت شبیه سازی هسته و ادوات جانبی
- دارای کد هگز خروجی بهینه و با حجم کمتر نسبت به سایر کامپایلرها
برای ادامه آموزش ARM روی تصویر زیر کلیک کنید.
در صورتی که این مطلب مورد پسندتان بود لایک و اشتراک گذاری فراموش نشود
دیدگاه (11)
سلام ممنون بابت زحماتی که میکشین
چنتا سوال داشتم
1.با استفاده از برد راه اندار و بدون نیاز به پروگرامر jlinkمیشه میکرو رو پروگرام کرد دیگه؟
2.با هدر برد جهت پروگرام میایم از uart0استفاده میکنیم پس چرا یه مدار دگ برا jtag گذاشتین؟
jtag header چیه توی شماتیک؟ و اون دیباگ؟
سلام دوست عزیز ممنونم
بله می شود از طریق سریال یا با استفاده از JLINK پروگرام نمود و تنها تفاوت این است که در JLINK میتوان علاوه بر پروگرام عیب یابی ( دیباگ ) نیز انجام داد در هدر بورد از هر دو قابلیت میتوان استفاده کرد. پورت JTAG را اصطلاحا JtagHeader می گویند
سلام
الان بخواییم pcb رو طراحی کنیم میکرو که smd هستش چجوری روی برد سوار میشه؟
بقیه رو دریل میکنیم وبعدش لحیم.
اما میکرو چطور؟؟
سلام دوست عزیز بورد ساخته شده و آماده اش موجوده میتونید از طریق ایمیل یا تلگرام سفارش بدید
اونکه بله ممنون
فقط میشه بگین چجوری میکرویsmd میره رو pcb ؟
با هویه روی بورد لحیم میشه
سلام
دلیل این خطا در پروگرام کردن چیه
Td0 is constant high
ممنون
سلام دوست عزیز TDO is Constant High این خطا در زمانی است که اتصال بین پروگرامر و میکرو هدف برقرار نشود. بنابراین در صورتی که از درست بودن عملکرد پروگرامر خود اطمینان دارید شما باید موارد زیر را بررسی کنید :
– پایه های پورت JTAG برای برد هدف منطبق بر پایه های پورت JTAG پروگرامر باشد.
– پورت JTAG و حالت Debug روشن باشند. ( روی برد معمولا سوئیچ یا جامپر برای این کار تعبیه شده است )
– تنظیمات نوع میکرو در نرم افزار Keil یا J-Flash به درستی تنظیم شده باشد.
لطف کردید
اگر خطای عدم شناسایی core I’d را بدهد و آن را 0x00000000 در نظر بگیرد به جای 0x4f1f0f0f به خاطر اشکالات بالا می تونه باشه
سلام
میشه کسی مشکل منو حل کنه لطفا؟
lpc2138 رو نمیتونم تو keil اضافه کنم توی سرچ پیدا نمیکنه . توی pack installer هم رفرش می کنم پیدا نمیکنه باز 🙁
سلام دوست عزیز احتمالا شما پک مربوط به میکروکنترلرهای خانواده ARM7 از جمله LPC2138 را به keil اضافه نکردید. به این لینک مراجعه نمایید.