armeducation – Telegram
armeducation
3.58K subscribers
367 photos
326 videos
115 files
370 links
آموزش حرفه ای میکروکنترلرهای ARM

ادمین:
@mzarkoob
مهندس مهدی زرکوب
شروع مطالب :
https://news.1rj.ru/str/armeducation/1
اینستاگرام :
@armeducation
کانال ایتا:
https://eitaa.com/armeducation
همراه :
09359956361
Download Telegram
This media is not supported in your browser
VIEW IN TELEGRAM
-نصب کیل 5
-نحوه کرک کردن
- نصب پک های آن
- باز کردن پروژه ای که قبلا با کیل 4 ایجاد شده با کیل5
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
ایجاد پروژه در کیل 5 در 2 دقیقه! و پروگرام کردن روی برد
میکروکنترلر : STM32F103VE
@armeducation
بعد از انتخاب میکرو و ایجاد پروژه، لازم است بر اساس نیاز پریفرال های مختلف میکروکنترلر راه اندازی شود. به عنوان مثال این پریفرال ها بسته به نوع میکرو و قابلیت های آن،می تواند شامل موارد زیر باشد:
1-GOIO
2-EXTI
3-USART
4-Timer
5-ADC
6-DAC
7-PWM
8-RTC
9-کلاک و پاور
10-WDT
11-I2C
12-SPI
13-DMA
14-SD-MMC
15-USB(Device-Host)
17-Eternet(UDP-TCP-Http-SNMP,…)
18-CAN
19-TFT_LCD
….
قبلا ذکر شد که انتخاب میکرو بایستی متناسب با کاری باشد که قرار است انجام شود و کار هم بر اساس نیاز تعریف می شود.
@armeducation
قبل از کار با میکروکنترلرهای ARM و در راه اندازی پریفرال های میکروکنترلرهای ARM، بایستی به این موضوع توجه شود که :
• پیش نیاز کار با میکروکنترلرهای ARM ، آشنایی با زبان C می باشد.
• پیش نیاز اجرای پروژه میکروکنترلرهای ARM ، تسلط به زبان C و تسلط به خود میکروکنترلر می باشد.
• تسلط به زبان C و تسلط به خود میکروکنترلرهای ARM، نیاز به تمرین و صرف زمان دارد.
در توضیح پیش نیاز بودن آشنایی با زبان برنامه نویسی سی، کارآموز در حین شرح رجیسترها و برنامه ها و کار با توابع با ایراد و سوال برنامه نویسی C مواجه نمی شود و توجه خود را صرف نحوه تنظیمات رجیسترها و نحوه استفاده از آنها ، استفاده از توابع ، توسعه برنامه نویسی به منظور انجام کار و ... می کند.
فیلم آموزش کاربردی زبان سی در میکروکنترلرهای ARM :
http://goo.gl/PoYFu1
به منظور پر کردن این خلا می باشد.
حال سوال اینجاست که صرف یادگیری راه اندازی پریفرال های میکروکنترلرهای ARM، کافیست!؟
@armeducation
چهارچوب کلی یک برنامه main در یک پروژه.
نحوه تعریف ثوابت و ماکروها، متغییرها و توابع، آشنایی با عملگرها وحلقه while و for و شرط if و switch و... از موارد اولیه آشنایی با زبان سی می باشد.
@armeducation
سوالات اولیه ای که معمولا برای کسانی که به کار با میکروکنترلرهای ARM شروع می کنند بسیار پیش آمده است و بسیار پرسیده شده است :
- این دستوراتی مثل
LPC_GPIO0->FIOSET = 0x03
و
LPC_GPIO0->FIOSET = (0x03) « 16;
چه بیت هایی را ست می کند. عملگر » در اینجا چه کاری انجام می دهد؟
- عباراتی که با =| و ~=& به کار برده می شوند چه مفهومی دارند؟
- تعریف یک متغییر با int32_t و int8_t به چه معناست؟
- چگونه چک کردن یک بیت از یک رجیستر انجام می شود؟ مثلا چک کردن 0 شدن بیت 11 از رجیستری مثلا رجیستر PIN این گونه انجام شده:
(LPC_GPIO2->FIOPIN & 1«11) ==0
پس چک کردن 1 شدن بیت 11 از رجیستر PIN چگونه انجام می شود؟ چرا وقتی من از دستور :
LPC_GPIO2->FIOPIN & (1«11))== 1

برای چک کردن ست شدن بیت 11 استفاده می کنم، کار نمی کند!؟
- عملکرد این ماکرو به چه نحو است :
#define LED1_ON(x) ((x) ? (LPC_GPIO1->FIOSET = LED1) : (LPC_GPIO1->FIOCLR = LED1))

- نحوه تبدیل یک متغییر به یک رشته چگونه است؟
- چگونه ورودی ها و خروجی ها را در یک تابع مشخص کنیم؟
- چگونه یک کتابخانه درست کنیم و به پروژه اضافه کنیم؟
- و ....
شما چه سوالات ابتدایی برایتان پیش آمده است!؟
@armeducation
معمولا به همراه یک برد آموزشی سمپل هایی قرار داده می شود. می توان این سمپل ها را به سه دسته تقسیم کرد:
1- سمپل هایی که کار می کند و ساده است و می توان متوجه عملکرد آنها شد و در آنها تغییرات لازم را اعمال کرد.
2- سمپل هایی که صرفا یک راه اندازی را انجام می دهد ولی به دلیل پیچیدگی نمی توان از آن سر در آورد، بنابراین ایجاد تغییرات لازم بر اساس نیاز در آن مشکل است.
3- سمپل هایی که کار نمی کند!

بنابراین صرف کارکردن یک سمپل کافی نیست. باید بتوان فهمید که همه توابع آن چگونه کار می کند و چگونه باید آن را بر اساس نیاز تغییر داد. تغییراتی که لازم است در یک سمپل اعمال کرد شامل تغییر کانفیگ پایه ها، توسعه توابع آن و تغییرات لازم برای بردن به یک مدل دیگر میکرو می باشد.
@armeducation
معمولا کسانی که می خواهند با میکروکنترلرهای ARM شروع به کار می کنند با توجه به تنوع مدل ها و کامپایلرها سوالاتی وجود دارد مانند :
- با چه میکروکنترلری کار کنم؟ LPC را انتخاب کنم یا STM32 ؟ STM8 هم هست! با کدام مدل شروع کنم!؟ از چه پروگرامری استفاده کنم؟ ....
- از چه کامپایلری استفاده کنم؟ Keil بهتره یا IAR ؟ خود شرکت سازنده میکرو،کامپایلری ارائه نکرده؟ از همون کامپایلر شرکت سازنده بهتر نیست استفاده کنیم!؟
- چه منبع آموزشی مناسبی وجود دارد؟
در فروم ها و شبکه های اجتماعی این سوالات بوده و خواهد بود. البته کمی هم حق دارند. مثل قدیم نیست که یه مدل میکرو باشه و یک کامپایلر! هر چه تنوع بیشتر سردرگمی هم بیشتر. مثلا وقتی شما برای خرید وارد یک فروشگاه بزرگ می شوید چه حسی خواهید داشت!؟ تنها چیزی که شما را از سردرگمی در این حالت نجات می دهد لیست خرید است.
قبلا ذکر شد انتخاب میکرو بر اساس نوع کار است. یعنی لیست خریدتان در اینجا کاری است که می خواهید انجام دهید. بنابراین بایستی به دنبال امکاناتی باشید که یک میکرو در اختیارتان قرار می دهد و البته در کنار قیمت. البته ممکن بگویید کارمان کجا بود. می خواهیم میکروهای ARM یاد بگیریم تا کار پیدا کنیم! خوب در اینجا مدل های رایج تر می توانید انتخاب کنید. طبیعتا بایستی چندین مدل را کار کنید. مثلا lpc1788 ، stm32f103ve ، stm8s003 و ... یعنی مدل هایی که برد آموزشی ارزان قیمتی دارد و آموزش هایی هم برای شروع هست.
-> برای شروع کار بهتر است از کامپایلر Keil استفاده کنید و بعد ها در صورتی که جایی احساس نیاز کردید از IAR استفاده کنید . ولی به این موضوع توجه داشته باشید که هر دوی اینها نیاز به لایسنس دارند. درست است که با کرک مشکل حل می شود ولی در یک جایی در پروژه تجاری صنعتی ممکن است به مشکل بربخورید و طبیعتا ساپورتی از طرف شرکت سازنده انجام نمی شود.
-> کسانی که دارای تجره کاری هستند دنبال ایجاد محصول جدید و بهینه سازی آن، خدمات پس از فروش بهتر، نحوه پیاده سازی یک کار و پیاده سازی الگوریتم آن به برنامه مناسب تر و .. هستند. بنابراین وقتی برای صرف در امور حاشیه ندارند.
@armeducation
هر پریفرالی دارای کاربردهای مختلفی می باشد که بدون انجام آن کاربردها نمی توان گفت آن قسمت کار کرده شده یا یاد گرفته شده است. بنابراین صرف مشاهده یک عملی از یک پریفرال کافی نیست!
به چند مثال توجه کنید:
- در پریفرال gpio ست و ریست کردن پایه ها و همچنین خواندن وضعیت آنها انجام می شود. به صورت ساده می توان یک ال ای دی را با آن خاموش روشن کرد. ولی دارای کاربرهایی مانند سون سگمنت، ال سی دی کاراکتری، ال سی دی گرافیکی، TFT LCD ها، کیبرد و ... می باشد. همچنین می توان پروتکل هایی مانند سریال و I2C و SPI را با آن gpio شبیه سازی کرد.
- با پریفرال DAC به صورت ساده می تواند یک شکل موج سینوسی را نمایش داد. ولی می توان پخش فایل صوتی از فلش خود میکرو یا spi flash یا sd کارت را در عمل با این پریفرال انجام داد.
- ماژول های مختلفی وجود دارد که با استفاده از پریفرال های UART و I2C و SPI و CAN و اترنت بایستی با آنها ارتباط برقرار کرد.
بنابراین به راه اندازی تا استفاده عملی دقت داشته باشید.
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
یکی از ویژگی های کیل سیمولاتور آن است که قابلیت مشاهده بیتی در رجیسترها را فراهم می کند. برای کسانی که شروع کار و آموزش داشته باشند جنبه آموزشی خوبی خواهد داشت.
@armeducation
یکی از کاربردهای میکروکنترلرهای ARM استفاده از TFT LCD ها می باشد. سرعت پایین نمایش در میکروهایی که دارای کلاک کمی هستند و همچنین عدم وجود پریفرال داخلی برای کنترل TFT، کاربران را "مجبور به استفاده از میکروکنترلرهای ARM " نموده است! در میکروکنترلرهای ARM، سرعت بالای نمایش و پریفرال داخلی در بعضی از مدل ها برای کنترل TFT، وجود دارد.
- در میکروکنترلر LPC1768 با توجه به عدوم وجود پریفرال داخلی برای کنترل TFT، سرعت نمایش قابل توجه است. کلاک هسته در این میکروکنترلر 100 مگاهرتز می باشد. در این میکرو بایستی از درایور برای کنترلر TFT LCD ها استفاده شود.
- در میکروکنترلر LPC1788 با توجه به وجود پریفرال داخلی برای کنترل TFT و کلاک هسته بالاتر(120 مگاهرتز)، سرعت رفرش صفحه بیشتر از lpc1768 می باشد. در این میکرو نیازی به استفاده از درایور برای کنترلر TFT LCD ها نمی باشد.
- در مدل های بالاتر LPC ضمن وجود پریفرال داخلی برای کنترل TFT، کلاک هسته نیز بالاتر می باشد.
- در میکروکنترلر STM32F103VE با توجه به وجود پریفرال داخلی (FSMC) برای کنترل TFT، سرعت نمایش قابل توجه است. این در حالیست که وجود این پریفرال FSMC باعث بهبود سرعت نمایش با توجه به کلاک هسته 72 مگاهرتزی آن شده است. در این میکرو بایستی از درایور برای کنترلر TFT LCD ها استفاده شود.
- در میکروکنترلر STM32F429 و STM32F439 هم دارای کلاک هسته 180 مگاهرتزی و هم دارای پریفرال داخلی برای کنترل TFT می باشند.
@armeducation
نحوه نمایش در TFT LCD ها به صورت پیکسلی می باشد. رنگ هرپیکسل یک عدد دو بایتی است. برای پاک کردن کل صفحه همه پیکسل ها تغییر می کند. بنابراین سرعت رفرش پردازنده مهم است.
@armeducation
چهار پایه خروجی فلت تاچ به یک IC متصل است و میکروکنترلر با استفاده از پریفرال SPI موقع لمس تاچ، خواندن موقعیت از آن را انجام می دهد. تشخیص لمس تاچ با پایه PENIRG انجام می شود.
@armeducation
روال خواندن از تاچ به این صورت است که ابتدا موقعیت چهار نقطه در گوشه های صفحه تاچ گرفته می شود (کالیبراسیون). سپس سایر نقاط بر اساس این 4 نقطه مقایسه و موقعیت لمس شده تشخیص داده می شود. می توان توسط تابعی موقعیت لمس شده را به واحد پیکسل در tft lcd تبدیل کرد و نمایش داد تا بتوان درستی تاچ را تست کرد.
این چهار نقطه را می توان در جایی ذخیره کرد تا در دفعه بعد دستگاه روشن می شود لازم نباشد مجدد کالیبراسیون انجام شود.
روال خواندن یک نقطه نیز بدین صورت است : به محض اینکه توسط پایه TP_IRQ در لبه پایین رونده تشخیص زده شده شدن تاچ انجام شود، تعدادی موقعیت توسط تابعی خوانده می شود. این موقعیت ها از کوچک به بزرگ مرتب شده و چند نقطه ابتدا و انتها حذف و از سایر نقاط میانگین گرفته می شود.
@armeducation
تفاوت بین ارسال یک پیکسل برروی TFT در میکروکنترلر LPC1788 و LPC1768
میکروکنترلر LPC1788 دارای کنترلر LCD داخلی
میکروکنترلر LPC1768 توسط درایو، به LCD متصل است.
تفاوت قابل تشخیص است!؟
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
تست اولیه تاچ  4.3 اینچ در میکروکنترلر stm32f103rb با توجه به موارد ذکر شده
@armeducation
یکی از موارد پایه در ایجاد پروژه، نحوه ایجاد کتابخانه جدید و اضافه کردن آن به پروژه می باشد.
روش کار به این صورت است که تمام توابع در یک کتابخانه با فرمت c. مثلا name.c قرار داده و به پروژه اضافه می شود. تیتر تمام توابع که قصد داریم در جای دیگری استفاده کنیم در یک فایل با فرمت h. مثلا name.h قرار داده شده و در ابتدای هر فایلی که لازم داریم include می کنیم. در نرم افزار keil لازم است مسیر فایل های هدر h. در پروژه مشخص شود.
@armeducation
استفاده از توابع آماده مسئله ای است که تمام افراد تازه وارد به حیطه برنامه نویسی میکروکنترلرهای ARM با آن مواجه و ممکن است استفاده از آن برایشان جذاب باشد. در صورتی که آشنایی با این مقوله ندارید :
http://www.arm-education.ir/?p=102
در میکروکنترلرهای STM32 نیز کتابخانه ها و توابع HAL بدین منظور استفاده می شود که با نرم افزار STM32CubeMX نیز قابل ایجاد است.
و اما به نکاتی در این زمینه توجه داشته باشید:
- این کتابخانه ها به نظر سهولت در تنظیمات رجیسترها برای کسانی که نمی خواهند یا نمی توانند تنظیمات را رجیستری انجام دهند، ایجاد شده است.
- در صورتی که همیشه قصد دارید از توابع آماده برای کار استفاده کنید این موضوع را مد نظر داشته باشید که یک کاربر سطح پایین میکرو هستید. در صورتی که مشکلی در تنظیمات و ... پیش بیاید قادر به پیدا کردن ایراد نیستید. زیرا نمی دانید داخل این توابع چه کاری انجام شده و باید بشود و آیا درست انجام شده یا نه. توانایی رفع ایراد در صورت بروز مسئله مهمی است که نمی توان آن را نادیده گرفت. اینکه افرادی می گویند من تا الان استفاده کرده ام و دچارمشکل نشدم معیار نیست. اگر شما ایراد پیدا کردید و گیر کردید چه می کنید!؟ فیدبک هایی که از دیگران بوده مواردیکه با آن مواجه شده ایم نشان دهنده این است که ایرادتی وجود دارد.
- در صورتی که پریفرالهایی با رجیستر قبلا پیکربندی اولیه شده است و با توابعی می توان با آن عملی را انجام داد چه ضرورتی دارد حتما از توابع آماده CMSIS و یا HAL برای پیکربندی استفاده شود!؟
- اینکه نرم افزاری هست که خود ایجاد پروژه می کند جالب است ولی مگر چند بار برای یک میکرو نیاز به ایجاد پروژه است؟ (فقط یک بار) و مگر در انجام یک کار که چند ماه ممکن است طول بکشد چند بار می خواهید پریفرال ها را کانفیگ کنید و تغییر دهید؟ شاید یک بار بیشتر لازم نباشد بعد مهم اجرای الگوریم پیاده سازی کار است.
- در جایی که سرعت اجرا مهم است، استفاده از تابع در تابع باعث کاهش سرعت می شود. بنابراین بایستی مستقیما از رجیسترها برای مقدار دهی و مقدار خواندن استفاده شود.
- در صورتی که حجم فلش حافظه میکرویی محدود باشد (STM8) طبیعتا استفاده از کتابخانه های آماده ما را در حجم برنامه محدود می کند.
- اگر مدل میکرویی لازم باشد استفاده کنید که توابع آماده ایی برای آن نباشد، در صورتی که صرفا یادگرفته باشید با توابع آماده کار کنید نمی توانید راه اندازی اولیه ای از پریفرالها و تغییر در آن داشته باشید.
@armeducation
گاهی آنقدر در کاری که در حال انجام آن هستیم غرق می شویم که اصول اولیه را فراموش می کنیم.
- ایرادی در عدم کارکرد پریفرالی وجود دارد، فراموش می کنیم چک کنیم پاور و کلاک آن درست است؟ پایه ها درست کانفیگ شده؟ اصلا تابع اینیشیالیز در برنامه اصلی فراخوانی شده!؟
- فراموش می کنیم هر مرحله کار که پیش می رود در یک پوشه جدید انجام دهیم تا اگر مشکلی پیش آمد بتوان به یک مرحله قبل که کار می کرد باز گشت و ادامه داد.
- اتصال پروگرامر به برد انجام نشده دنبال این هستیم چرا موقع پروگرام خطا میدهد و چرا پروگرامر را نمی شناسد ! 😂
گاهی کمی تامل، استراحت و شروع از صفر لازم است. 👍
....
@armeducation
فیلم آموزش پیشرفته میکروکنترلر LPC1788 (کاملا کاربردی)
فروشگاه :
https://goo.gl/kKt72J
فروم ایران میکرو:
https://goo.gl/qccMOi

@armeducation