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
همان طور که در پست های قبلی ذکر شد و در عمل هم اجرا شد، یکی از قابلیت های میکروکنترلرهای ARM تبدیل شدن به رم ریدر توسط USB Device می باشد:
https://news.1rj.ru/str/armeducation/65
https://news.1rj.ru/str/armeducation/66
در نظر بگیرید در کاری مرتب باید در sd کارت توسط میکرو فایلی بریزید، سپس خود فایل و محتوای آن را چک کنید. هر بار باید sd کارت را از برد میکرو جدا کرده و به رم ریدر بزنید تا بتوانید این چک کردن را انجام دهید.
به جای این کار می توانید در برنامه تبدیل کننده میکروکنترلر ARM به رم ریدر توسط USB Device، کار خود را انجام دهید که هر بار که کابل یو اس بی را از pc به برد زدید محتویات داخل sd کارت هم مشاهده شود و دیگر نیازی به رم ریدر نباشد! در اینجا باید به این نکته که البته در پست های قبلی :
https://news.1rj.ru/str/armeducation/151
به آن اشاره شد توجه داشته باشید که در صورتی که چندین کار لازم باشد انجام شود ممکن است نتوان در یک پروژه با هم آنها را فعال کرد. مثلا تبدیل شدن میکرو به رم ریدر برای SD کارت با RL و هم زمان خواندن و نوشتن روی SD با RL .
@armeducation
Forwarded from armeducation (Mahdi Zarkoob)
در صورتی که مطالب آموزشی کانال را مفید می دانید شما معرف کانال به سایر دوستان خود باشید. 👇👇👇
با سپاس
@armeducation
یکی از امکانات میکروکنترلرها واحد PWM است.
حال ممکن است در میکرویی مانند LPC1768 دارای واحد مجزایی باشد یا در میکرویی مانند STM32F103 در واحد تایمر قرار داشته باشد. بنا به میکرو این واحد می تواند دارای امکانات و تعداد کانال های خروجی مختلفی باشد. در این واحد با مقداری که برای فرکانس مشخص می کنید می توانید duty cycle را در حین پالس دهی تغییر دهید. این تغییر duty cycle کاربردهای مختلفی می تواند داشته باشد. ساده ترین آن کم نور و پور نور کردن یک led متصل به میکرو می باشد. در کل(گاهی به جای DAC) در جایی که بخواهیم با کاهش و افزایش duty cycle مقدار dc ولتاژی را تغییر دهیم کاربرد دارد. نمونه دیگر کاربرد PWM ، در پخش فایل صوتی می باشد.
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
خروجی دیجیتال به آنالوگ(DAC) یک فایل صوتی در میکروکنترلرlpc1768 در سیمولاتور کیل.
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
مشاهده افزایش و کاهش تدریجی مقدار دیوتی سایکل یک پالس PWM در سیمولاتور کیل
@armeducation
یکی از مواردی که برای مبحث یادگیری میکروکنترلرهای ARM لازم است، استفاده از برد می باشد. این برد می تواند یک برد آموزشی آماده باشد یا بردی باشد که خود فرد طراحی کرده است. معمولا برای یادگیری و راه اندازی سریع تر بهتر است از برد آموزشی آماده استفاده شود. البته در پست های قبلی ذکر شد با هزینه کمتری آموزشهای مقدماتی میکروکنترلرهای ARM را با استفاده از یک هدر برد ساده به صورت عملی می توان پیاده سازی کنید:
https://news.1rj.ru/str/armeducation/203
برای ساخت یک دستگاه هم بهتر است ابتدا با یک Evaluation Board و بِرد بُرد تست های سخت افزار و برنامه انجام شود و سپس برد نهایی زده شود.
این پست در باره مواردی است که بهتر است برای یک برد آموزشی لحاظ شود تا کارایی بهتری داشته باشد، صحبت خواهد شد.
-در حالت کلی باید این امکان باشد که کلیه امکانات میکروکنترلر مخصوصا قسمت های پیشرفته مانند SD,USB,Ethernet,Can و ...تست شود.
- چند باتون از چند پورت وجود داشته باشد تا بتوان مبحث ورودی gpio و وقفه خارجی را در چند پایه انجام داد. یکی از این باتون ها ورودی کانتر باشد بهتر خواهد بود.
- چند led از پورت های مختلف برای خروجی gpio وجود داشته باشد. همچنین اگر یکی از این led ها از خروجی یکی از pwm ها و یکی از این led ها خروجی تاگل سخت افزاری تایمرها باشد، بهتر خواهد بود.
- یک درایو Serial to USB برای اتصال راحت به یو اس بی pc . شناسایی این درایو روی ویندوز 8 و 10 هم انجام شود بهتر خواهد بود.
- سخت افزار لازم برای اتصال یک میکروفن و اتصال به یکی از کانالهای ADC .
- یک سوکت برای اتصال به اسپیکر از خروجی DAC برای پخش صوت.
- پایه های هدر بر روی برد منطبق با TFT LCD بدون تداخل با پایه های اصلی دیگر مانند DAC و SD و ...
- ورودی تغذیه بین 5 تا 12 یا 24 ولت.
- استفاده از پایه insert در sd کارت.
بنابراین طراح با اشراف به عملکرد تمام پایه های میکرو و کاربرد آن می تواند محصول کاربرپسندتری ارائه کند.
@armeducation
ای کاش فعالان در صنف و حیطه الکترونیک خود را بیشتر همکاران هم بدانند تا رقبایی که هر کار غیر اخلاقی برای حذف دیگری می کنند. شرط همکار بودن حمایت معقول از هم می باشد :
https://news.1rj.ru/str/KnowledgePlus/602
- به همکاری گفته می شود این سخت افزار یا برنامه دستگاه ما که طراح یا برنامه نویس قبلی ما روی آن کار کرده ایراداتی دارد که شما آن را رفع کن. سوال این است که چرا خود طراح یا برنامه نویس قبلی رفع ایراد نمی کند!؟ ممکن است به غلط پاسخ داده شود که وقت نمی کند، یا دیگر با ما همکاری ندارد یا به او دسترسی نداریم. "بدون تحقیق" قبول می کنیم یا شاید فرد را هم بشناسیم پشت سر او بد هم می گوییم تا با خراب کردن همکار، کار را به ما بدهند! (در اینجا حالت های دیگری مانند تحویل ندادن درست کار به کارفرما هم هست که مد نظر نیست)
- در مجموعه ای که کاری در اختیار کسی دیگر بوده و فرد جدیدی قرار است آن را در اختیار بگیرد، مهم است که چرا با فرد یا افراد قبلی ترک همکاری شده است. در صورت "عدم تحقیق" در این مورد یا بی توجهی به علل آن و پذیرفتن آن کار، ممکن است همان اتفاق برای ما هم بیافتد.
@armeducation
Forwarded from armeducation (Mahdi Zarkoob)
از دوستان عزیز تقاضامندم در صورت تمایل، مطالب پست ها را تنها بصورت فوروارد در سایر گروها و کانال ها (و سایت ها) قرار دهند و از کپی کردن مطالب بدون ذکر مرجع خودداری کنند.
با تشکر
@armeducation
تجربه عملی برنامه نویسی یکی از دانشپذیران دوره آموزشی برای کاربا واحد ADC:
در روال گفته شده
https://news.1rj.ru/str/armeducation/216
برای خواندن آنالوگ به دیجیتال از رجیستر دیتا
ADC_StartCnv();
while (!ADC1->SR & (1 « 1)){};
ADC_StopCnv();
در دستور while جای پرانتز و ! کمی جابجا شده بود:
while ! (ADC1->SR & (1 « 1)){};
بنابراین این خط عملکرد خود را نداشت و برنامه در آن گیر می کرد و اصلا خارج نمی شد.
کوچکترین مشکلی در برنامه نویسی ممکن است منجر به عدم کارکرد صحیح در عمل شود. همچنان که عدم تنظیم یک بیت در اینیشیالیز (چالش یک بیت) می تواند منجر به عدم کارکرد آن پریفرال شود :
https://news.1rj.ru/str/armeducation/61
تا زمانی که دانشپذیران اقدام عملی برای برنامه نویسی و اجرا روی برد میکروکنترلر نکنند و با مشکل مواجه نشوند نمی توانند ایرادات خود را متوجه شوند.
@armeducation
با تمرینات ساده ترکیبی مرحله به مرحله در مباحث میکروکنترلرهای ARM که یک کاری را برای ما انجام می دهد، هم می توان با چند پریفرال از میکرو کار کرد و هم تسلط خود را به زبان برنامه نوسی C افزایش داد و از مرحله آشنایی به مرحله تسلط رسید.
@armeducation
به عنوان نمونه از تمرینات ساده ترکیبی تمرین از مبحث Timer و EXTI و ADC و GPIO و USART
به روش سنجش زمان یک پریود، فرکانس پالس ورودی را اندازه گیری کنید و در پورت سریال نمایش دهید. به این صورت که پالس ورودی به پایه وقفه خارجی متصل است و با لبه اول تایمر شروع به شمارش و در لبه دوم پالس، تایمر متوقف می شود. با محاسبات لازم، فرکانس محاسبه و در خروجی قرار داده می شود.
با تغییرات کوچکی در برنامه می توان دیوتی سایکل پالس ورودی را هم محاسبه نمود.
برای ایجاد پالس می توانید از یک تایمر دیگر استفاده کنید که با پتانسیومتر ورودی، مقدار فرکانس یا دیوتی سایکل را می توان تغییر داد. خروجی پالس تایمر دیگر را به ورودی وقفه خارجی متصل نمایید.
در صورتی که ADC از مقدار مشخصی بیشتر شد یک LED روشن و اگر کمتر شد LED خاموش شود.
آیا نمی توان بدون نیاز به وقفه خارجی، محاسبه فرکانس را انجام داد!؟
@armeducation
برای محاسبه زمان دقیق یک پروسه می توان از تایمر استفاده کرد:
https://news.1rj.ru/str/armeducation/215
در نظر بگیرید در ابتدای کار تایمر را فعال و در انتها آن را متوقف می کنید. عددی در شمارنده تایمر وجود دارد که از این عدد بایستی زمان پروسه را محاسبه کنید. این کار به سادگی بر اساس کلاک اعمالی به تایمر (و با محاسبات پیش دبستانی!) انجام می شود.
اگر کلاک اعمالی به تایمر CLOCK باشد بنابراین در 1 ثانیه شمارنده تایمر به عدد CLOCK می رسد. پس اگر عدد شمارنده تایمر SH شده باشد زمان پروسه به ثانیه با یک طرفین وسطین ساده بدست می آید :
Time = SH * 1 / CLOCK
حال اگر پروسه کمی طولانی بود و شمارنده تایمر سرریز داشت چگونه این زمان محاسبه می شود؟
@armeducation
در نظر بگیرید شما قصد دارید در جایی استخدام شوید. آن شرکت (چه کوچک چه بزرگ و معروف) یک شرایط کاری را برای شما مطرح می کند. به صورت شفاهی هم عنوان می شود که اگر کار شما خوب باشد طبیعتا همکاری ادامه دارد و ... . بعد از مدتی با توجه به حسن انجام کار(یا اتمام قرارداد) اعلام عدم نیاز می شود! و شما این را با آن حرف در تناقض میبینید. حالتی که ممکن است پیش آمده باشد بدین صورت است که به جای اینکه کار به صورت پروژه ای به کسی داده شود، فردی را مدتی استخدام می کنند و بعد از انجام پروژه اعلام عدم نیاز می شود. در کل نیاز موقت به فردی دارند ولی این نیاز به صورت طولانی مدت وانمود می شود.
@armeducation
GPIO_STM32F10x_MZarkoob.rar
2.7 MB
استفاده از GPIO در STM32CubeMX با کیل 4
@armeducation
گاهی موارد انجام جزییات کار یا پروژه ای بیش از انجام اصل خود کار زمان بر است!
بنابراین در انجام کاری کاملا باید جزییات کار مشخص باشد.
@armeducation
با استفاده از دستور atoi() در کتابخانه stdlib.h می توان یک رشته را به عدد تبدیل کرد. نمونه ای از کاربرد ساده این دستور در پورت سریال است که از دیتای دریافت شده که در رشته به عدد تبدیل شده، استفاده نمود.
@armeducation
بیشتر موارد با کپی کردن قسمت هایی از برنامه های مختلف، برنامه جدید خود را تکمیل می کنیم. بدین ترتیب در زمان خیلی کمتری کار جدیدی را شروع خواهیم کرد. در حین انجام این کار بسیار باید دقت کرد که به صورت درست محتوای کپی را مطابق میل بر اساس کار جدید، تغییر دهیم. زیرا بیشترین خطا در برنامه در همین جا رخ می دهد و اگر در این مرحله دقت نشود زمان بسیار بیشتری باید صرف رفع ایرادی کنیم که فکر می کنیم درست است!
@armeducation
در یک پروژه که کتابخانه های زیادی لازم است اضافه شود قائدتا هدرهای آنها نیز لازم است ابتدای برنامه include شود.
https://news.1rj.ru/str/armeducation/92
در اینجا می توان تمام این اینکلاد کردن ها را در داخل یک هدر دیگری قرار داد و فقط آن هدر را به ابتدای برنامه اینکلاد کرد. همچنین در صورتی که دیفاین های برنامه هم زیاد باشد می توان در همین هدر قرار داد و باعث خلوت تر صفحه کردن برنامه main شد. این موضوع بیشتر در استفاده از کتابخانه های SMSIS و HAL و... استفاده می شود.
@armeducation
در هدر stdint.h یک سری متغییر به صورت typedef قرار گرفته است که می توان به جای استفاده از
unsigned char
unsigned short int
و ... از آنها استفاده کرد. به عنوان نمونه :
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned __int64 uint64_t;
بدین ترتیب با عنوان مختصر تری می توان متغییرها را به صورت uint8_t و uint16_t و uint16_t و .. تعریف کرد.
@armeducation