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
کاربرد عبارت volatile :
ممکن است در برنامه ای با این کلمه در تعریف متغییر مواجه شده باشید. همچنین در دیفاین رجیسترها نیز به صورت __IO استفاده شده است :
__IO uint32_t FIODIR;
ممکن است متغییر در پردازش جاری تغییر نکند مثلا در وقفه مقدار آن تغییر کند، بدون آنکه کامپایلر متوجه این تغییر شود. و این تغییر را اعمال نکند. با استفاده از این کلمه در تعریف متغییر در هر بار فراخوانی اسم متغیر در طول برنامه اصلی، مقدار آن را از محل حافظه خوانده شده و اعمال می شود.
@armeducation
نمونه ای از تبلیغاتی که موارد متعددی از آن هم مشاهده شده، کسانی هستند که قصد دارند تازه وارد بازار کار شوند و خود اقدام به جذب مشتری نمایند. مشاهده می شود انواع مختلف کارها ذکر شده است!
@armeducation
در پست های قبلی ذکر شد انتخاب میکرو بایستی متناسب با کاری باشد که قرار است انجام شود.
https://news.1rj.ru/str/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
همان طور که ذکر شد از کاربردهای واحد DAC پخش فایل صوتی wave است.
برای این کار لازم است دیتا در فایل صوتی به صورت مناسب در DAC قرار داده شود. از آنجا که فایل wav نیاز به دیکد خاصی ندارد ساده تر است ابتدا فایل صوتی با نرم افزارهای مبدل به این فرمت در بیاید و سپس در فلش خود میکرو یا sd کارت برای قرائت و پخش قرار داده شود. فرمت یک فایل wave بدین صورت می باشد :
http://soundfile.sapp.org/doc/WaveFormat/
همان طور که مشاهده می شود 44 بایت اول اطلاعات فایل است و بعد از آن دیتا قرار دارد. پخش فایل صوتی می بایستی بر اساس این اطلاعات قرار داده شده در ابتدای فایل انجام شود. دیتای فایل صوتی دیکد نشده به صورت های 8 بیت و 16 بیت(mono,stereo) می باشد.
@armeducation
همان طور که در پست های قبلی ذکر شد و در عمل هم اجرا شد، یکی از قابلیت های میکروکنترلرهای 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