armeducation
3.6K subscribers
377 photos
329 videos
115 files
376 links
آموزش حرفه ای میکروکنترلرهای ARM

ادمین:
@mzarkoob
مهندس مهدی زرکوب
شروع مطالب :
https://t.iss.one/armeducation/1
اینستاگرام :
@armeducation
کانال ایتا:
https://eitaa.com/armeducation
همراه :
09359956361
Download Telegram
در مبحثی مانند DMA آشنایی با فضای حافظه میکرو ضرورت پیدا می کند. در میکروکنترلرهای stm32 در دیتاشیت و در LPC در یوزرمنوال به معرفی فضای رم پرداخته است. به دیفاین ها و آدرس دهی با اشاره گر در هدر یک میکرو stm32 توجه کنید :
#define PERIPH_BASE ((uint32_t)0x40000000)
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
typedef struct
{
__IO uint32_t CRL;
__IO uint32_t CRH;
__IO uint32_t IDR;
__IO uint32_t ODR;
__IO uint32_t BSRR;
__IO uint32_t BRR;
__IO uint32_t LCKR;
} GPIO_TypeDef;
بنابراین وقتی از دستور :
GPIOA->CRL |= 0x3 ; // PA0 output
استفاده می کنیم از قبل در هدر تعاریف لازم انجام شده و به فضای حافظه مربوطه ارجاع انجام شده است.
بیس برنامه نویسی سی لازم در این موارد مبحث اشاره گرها و struct می باشد.
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
شرح رجیسترهای systemtick
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
شرح مثال systemtick قسمت اول
@armeducation
در این پست
https://t.iss.one/armeducation/140
ذکر شد که ممکن است وقفه متوالی گزینه مطلوبی نباشد و در روند کارمان اختلال ایجاد کند. به عنوان یک راه حل می توان از DMA استفاده نمود. DMA مخفف Direct memory access به معنای دسترسی مستقیم به حافظه بدون درگیر شدن cpu می باشد. این دسترسی چه مشکلی از ما حل می کند!؟ با تنظیماتی که در این واحد انجام می شود آدرس مبدا دیتا مشخص می شود(در اینجا مثلا رجیستر دیتای سریال) و آدرس مقصد هم مشخص می شود(در اینجا یک آرایه در فضای رم) و با مشخص بودن تعداد انتقال همین طور طول انتقال، آغاز کار انجام شده و در انتها بر اساس تنظیم وقفه مربوطه اعلام می شود که انتقال انجام شده و می توانید هر کاری صلاح میدانید انجام دهید!
در اینجا درگیر نبودن cpu برای انتقال دیتا مسئله مهمی است که تا در عمل در کاری با این مشکل مواجه نشوید پی به اهمیت آن نخواهید برد.
@armeducation
در صورتی که بخواهید با هزینه کمتری آموزشهای مقدماتی میکروکنترلرهای ARM را به صورت عملی پیاده سازی کنید می توانید از یک هدربرد استفاده کنید. در هدر برد امکاناتی بر روی برد قرار داده نشده و فقط خود میکرو و خروجی Jtag یا SW جهت پروگرام کردن وجود دارد و سایر پایه ها جهت هر استفاده ای بیرون کشیده شده است. شاید هم یک LED متصل به یکی از پایه های میکرو گذاشته باشند!
با قرار دادن چند LED و مقاومت روی بِرد بُرد و اتصال پایه های خروجی برد میکرو به آن قسمت خروجی GPIO تست می شود.
با قرار دادن چند سوییچ و Pull up کردن آن و اتصال پایه های برد میکرو به آن، قسمت خروجی GPIO و وقفه خارجی تست می شود.
با استفاده از یک مبدل یو اس بی به سریال و اتصال پایه های سریال به آن، قسمت UART را می توان به صورت عملی اجرا کرد.
با استفاده از یک پتانسیومتر و اتصال سر وسط آن به پایه های ورودی آنالوگ و قرار دادن نتیجه در سریال، واحد ADC را می توان استفاده کرد.
با اتصال پایه خروجی DAC در میکرو به یک اسپیکر می توان پخش فایل صوتی انجام داد.
خروجی تایمر و PWM را یا می توان توسط اسیلوسکوپ مشاهده یا به LED های روی برد برد متصل و با کاهش فرکانس امکان مشاهده آن را فراهم کرد.
نتیجه RTC روی همان پورت سریال قابل مشاهده است.
اتصال LCD کاراکتری و کیپد و سون سگمنت هم به هدر برد به سادگی انجام می شود.
البته داشتن یک برد کامل تر که دارای امکانات جانبی باشد، باعث صرفه جویی در زمان شما خواهد شد.
@armeducation
در DMA بایستی نوع انتقال را مشخص نماییم :
Mem-Mem
Mem-Peripheral
Peripheral –Mem
Peripheral-Peripheral
مثلا در Mem-Peripheral در نظر بگیرید کاراکترها در رشته ای قرار دارد و قرار است توسط پورت سریال ارسال شود. مبدا حافظه رم و مقصد پورت سریال و آغاز انتقال . بدین ترتیب بدون استفاده از تابعی مانند UART0_SendString و معطل شدن در این تابع ارسال انجام می شود!
@armeducation
در مورد بحث کار و اشتغال مطلب مفیدی خواندم
که قسمتی از آن را باز نشر می کنم:
بیشترشان می‌خواهند کارمند شوند و حقوق بالاتر از یک‌میلیون و ٧٠٠‌هزار تومان درخواست می‌دهند. مهارت خاصی بلد نیستند و ته‌تهش به معدل بالای نمراتشان تأکید دارند یا مثلا می‌گویند در دانشگاه دولتی درس خوانده‌اند
درس‌خوانده‌ها کار تولیدی را در شأن خود نمی‌دانند.... جالب است بدانید حتی تحصیلکرده رشته‌های فنی هم حاضر نیستند وارد کارخانه‌ها شوند
مهارت کارجویان در سطح انتظار کارفرمایان نیست.
در فرهنگ ما ایرانی‌ها دکتر و مهندس‌شدن، مدیر و رئیس‌شدن از کودکی به‌عنوان ارزش شغلی به بچه‌ها آموخته می‌شود و بخش عمده‌ای از سیل تقاضای ورود به دانشگاه هم ناشی از همین نگاه است. جالب است که رشته‌های فنی و حرفه‌ای با همین نگاه از ابتدا مورد استقبال قرار نگرفت و خانواده‌های زیادی خواهان تحصیل بچه‌هایشان در رشته‌هایی بودند که از آنها دکتر و مهندس تولید می‌شود.
مهارت‌های دانشگاهی با مهارت‌هایی که بازار کار به آنها نیاز دارد، تطابقی ندارد.
در کشورمان آموزش‌ها براساس نیاز بازار کار نیست و در شرایطی که افراد آموزش‌های تئوری را در دانشگاه‌ها دریافت می‌کنند، نیاز بازار کار چیز دیگری است.
مشکل فرهنگی-> جوانان آموزش ندیده‌اند و خانواده‌ها به کارمندی و آب باریکه از گذشته روی آورده‌اند و به آن یقین دارند.

https://tabnak.ir/fa/news/712673/%D8%A7%D9%81%D8%A7%D8%AF%D9%87%E2%80%8C%D9%87%D8%A7%DB%8C-%D8%A8%DB%8C%DA%A9%D8%A7%D8%B1%D8%A7%D9%86-%D8%A7%DB%8C%D8%B1%D8%A7%D9%86%DB%8C
—----------------------------
البته در مورد کارفرمایان مواردی به طور تجربی دیده شده که در پست های بعدی ذکر خواهد شد.

@armeducation
پریفرالهایی که از آنها استفاده می کنیم به صورت فایل .c به پروژه اضافه می شود:
https://t.iss.one/armeducation/92
وقتی تعداد این فایل ها زیاد باشد می توان به این صورت در پروژه ایجاد شده در کیل دسته بندی کرد
با توجه به پست قبلی :
https://t.iss.one/armeducation/153
در میکروکنترلر lpc1788 نیز برنامه SD کارت با توابع RLکیل که با کیل 4 ایجاد شده بود و با کیل 5 کامپایل و بر روی برد ریخته شد بود، کار نکرد.
بنابراین به تفاوت کیل در عدم کارکرد دقت داشته باشید.
@armeducation
در پست های قبلی بر روی این مطلب تاکید شد که
• پیش نیاز کار با میکروکنترلرهای ARM ، آشنایی با زبان C می باشد.
https://t.iss.one/armeducation/78
برای یک دوره مقدماتی میکروکنترلرهای ARM مواری از زبان برنامه نویسی C که بیشتر در عمل به کار می آید بدین صورت می باشد :
1- انواع داده، متغییر، ثوابت و عمگرها
2- استفاده از توابع stdio -> در پورت سریال استفاده خواهد شد.
3- حلقه while و for و شرط if و switch
4- آرایه و رشته
5- تابع و توابع کتابخانه ای
6- اشاره گرها
اینها مواردی هستند که در عمل از آن استفاده می شود.
بنابراین حداقل لازم برای یک دوره مقدماتی میکروکنترلرهای ARM ، آشنایی با زبان C و یک هدر برد :
https://t.iss.one/armeducation/203
والبته پروگرامر می باشد.
@armeducation
در استفاده از سیمولاتور کیل ممکن است موارد مختلفی پیش بیاد. برای بعضی میکروها از خود سیمولاتور کیل و هم از روی برد قابل استفاده اند و رجیسترها هم به صورت ویژآل دیده می شوند. بعضی فقط از روی برد قابل دیباگ کردن هستند . بعضی میکروها تنظیماتی در debug باید انجام شود تا پریفرالهای میکرو در سیمولاتور به صورت ویژآل دیده شود. و در بعضی مدل میکروها در دیباگ از روی برد تغییرات رجیسترها در پنجره های ویژآل اعمال نمی شود.
@armeducation
👍1
تفاوت کار فکری و یدی چیست!؟
ممکن است این تجربه را داشته باشید که در انجام کارهایی در حیطه الکترونیک (طراحی برد یا برنامه نویسی و ...) ذهنتان آن قدر درگیر انجام کار است که شب موقع استراحت نیز نمی توانید ذهنتان از فکر چگونگی حل مشکلات انجام کار، خارج کنید.
@armeducation
ممکن است در پروژه ای فایل های اد شده قفل باشد و نتوان در آنها تغییر ایجاد کرد. برای حل این موضوع در پوشه پروژه با کلیک راست بر روی فایل مذکور و زدن properties تیک read only برداشته شود.
@armeducation
👍1
در میکروکنترلرهای ARM تعدادی تایمر قرار داده شده است. هر میکرویی تعدادی تایمر با امکانات مختلفی دارد. در این پست :
https://t.iss.one/armeducation/59
اشاره ای به تفاوت تایمرها در میکروهای LPC و STM32 شده است.
در LPC1768 , LPC1788 از شرکت NXP تعداد 4 تایمر 32 بیتی وجود دارد و واحدهای pwm و mcpwm و QEM دارای پریفرال های جداگانه می باشند.
در میکروی stm32f103ve از شرکت ST تعداد 8 تایمر 16 بیتی وجود دارد که در دسته بندی های تایمر پیشرفته و عمومی و پایه قرار میگیرد. pwm و mcpwm و QEM نیز در همین تایمر قرار دارد و واحد مجزایی ندارد. تعداد تایمرها در مدل های میکروهای stm32 با هم یکسان نیست. بنابراین در انتخاب میکرو لازم است به نوع کاری که قصد انجام دارید توجه بیشتری داشته باشید که مطابق امکانات میکرو باشد.
@armeducation
یکی از امکانات میکروکنترلرها واحد ADC است.
در میکروی LPC1768 تعداد 8 کانال آنالوگ به دیجیتال قرار داده شده است و در میکروهای STM32F1 تعداد 16 کانال ADC قرار دارد. امکانات واحد ADC در میکروهای مختلف متفاوت است.
ساده ترین عملکرد این واحد خواندن یک کانال است. بعد از پیکربندی اولیه روال کار در این حالت بدین صورت می باشد :
1- دستور آغاز تبدیل
2- منتظر شدن برای تبدیل ولتاژ ورودی به مقدار دیجیتال خواندن این مقدار
3- پایان تبدیل
و نمایش مقدار قرائت شده برروی نمایشگر
حالت های مختلف دیگری برای استفاده از آنالوگ به دیجیتال وجود دارد. خواندن پشت سر هم از یک کانال و خواندن پشت سر هم از چند کانال از جمله این حالات هستند که تنظیمات خاص خود را دارد و بنا به نیاز از آنها استفاده خواهد شد. سرعت نمونه برداری و دقت نمونه برداری پارامترهای مهم این واحد هستند. .
از کاربردهای ADC خواندن سنسورهای آنالوگ و نمونه برداری از ولتاژ ورودی(مثلا ولتاژ برق شهر و سیگنال صوت ) می باشد.
@armeducation
در پست :
https://t.iss.one/armeducation/29
به صورت عملی ذکر شد که می توان با DAC پخش فایل صوتی انجام داد. در پست قبلی هم ذکر شد که با ADC می توان نمونه گیری از فایل صوتی داشت. با ترکیب این دو می توان نمونه گیری و پخش فایل صوتی به صورت "هم زمان" و "غیر همزمان" را انجام داد. در اینجا محاسبات نرخ نمونه برداری با ADC و زمان قرار دادن نمونه های گرفته شده در DAC برای استفاده از واحد تایمر اهمیت دارد.
@armeducation
برای انجام کار یا پروژه ای داشته هایی لازم است. مهتر آن، استفاده این داشته ها در موقع مناسب خود است. گاهی در حین کار، متوجه نداشته هایی می شویم که لازم است فرا بگیریم. اینجاست که قدر آن اطلاعات را بیشتر می دانیم.
چیزی هم که بر فن آموزان لازم است قدر دانستن مطالبیست که در حال فراگیری هستند.
@armeducation
کاربرد عبارت volatile :
ممکن است در برنامه ای با این کلمه در تعریف متغییر مواجه شده باشید. همچنین در دیفاین رجیسترها نیز به صورت __IO استفاده شده است :
__IO uint32_t FIODIR;
ممکن است متغییر در پردازش جاری تغییر نکند مثلا در وقفه مقدار آن تغییر کند، بدون آنکه کامپایلر متوجه این تغییر شود. و این تغییر را اعمال نکند. با استفاده از این کلمه در تعریف متغییر در هر بار فراخوانی اسم متغیر در طول برنامه اصلی، مقدار آن را از محل حافظه خوانده شده و اعمال می شود.
@armeducation
نمونه ای از تبلیغاتی که موارد متعددی از آن هم مشاهده شده، کسانی هستند که قصد دارند تازه وارد بازار کار شوند و خود اقدام به جذب مشتری نمایند. مشاهده می شود انواع مختلف کارها ذکر شده است!
@armeducation
در پست های قبلی ذکر شد انتخاب میکرو بایستی متناسب با کاری باشد که قرار است انجام شود.
https://t.iss.one/armeducation/62
قیمت (در کنار امکانات) مورد مهمی است که مخصوصا برای کار تولیدی نمی توان آن را نادیده گرفت. بسیار گفته می شود که چون میکروهای stm قیمت کمتری دارد بنابراین با آن کار کن یا شروع کن! قیمت کمتر صحیح است ولی فقط قیمت نیست. اگر دو مدل میکرو تقریبا به یک میزان کار شما را راه می اندازد، احتمال زیاد آن که قیمت کمتری دارد را انتخاب می کنید.
به عنوان نمونه، دو میکروی هم رده مانند LPC1768 و STM32F107VC که هر دو cortex-m3 دارای 100 پایه و اترنت و USB , CAN هستند. این دو را از همه لحاظ با هم مقایسه کنید. در حال حاضر قیمت LPC1768 دو سه هزار تومانی از STM32F107VC گرانتر است. موارد بارزتر:
LPC1768 :
کلاک 100 مگاهرتز، 512 کیلو فلش، 8 ورودی ADC و یک خروجی DAC ، تعداد 4 تایمر 32 بیتی، 4 سریال ...
STM32F107VC :
کلاک 72 مگاهرتز، 256 کیلو فلش، 16 ورودی ADC و دو خروجی DAC ، تعداد 7 تایمر 16 بیتی، 5 سریال ...
همان طور که مشاهده می شود در مواردی امکانات lpc بیشتر است در مواردی دیگر stm. بنابراین نوع کار، قیمت، چیدمان پایه ها، سمپل های مناسب، امکانات یک پریفرال مورد نیاز، پشتیبانی و ... پارامترهای تعیین کننده در انتخاب میکرو هستند.
@armeducation
یکی از امکانات میکروکنترلرها واحد DAC است.
راه اندازی این واحد ساده است و بعد از تنظیمی ساده کافیست عددی در داخل رجیستر دیتا قرار داده شد تا به آنالوگ بین 0 تا 3.3 ولت تبدیل کند. از کاربردهای این واحد که در پست های قبلی هم از آن در عمل استفاده شد پخش فایل صوتی wave است.
در میکروی LPC1768 تعداد 1 کانال دیجیتال به آنالوگ 10 بیتی قرار داده شده است. در بعضی مدل میکروهای STM32F1 تعداد 2 دیجیتال به آنالوگ 12 بیتی قرار دارد و در بعضی دیگر چنین واحدی ندارد. امکاناتی هر کدام از این میکروها در این واحد در اختیار قرار می دهد :
STM32F10x:
●Two DAC converters: one output channel each
● Left or right data alignment in 12-bit mode
● Synchronized update capability
● Noise-wave generation
● Triangular-wave generation
● Dual DAC channel independent or simultaneous conversions
● DMA capability for each channel
● External triggers for conversion
●Input voltage reference VREF+

LPC1768 :
• 10-bit digital to analog converter
• Resistor string architecture
• Buffered output
• Power-down mode
• Selectable speed vs. power
• Maximum update rate of 1 MHz.
@armeducation