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
armeducation
@armeducation انجام یک کار بزرگ با تقسیم آن به قسمت های کوچک قابل انجام تر است. قبلا در پست های گذشته ذکر شد که ممکن است افرادی نتوانند پریفرال ها و قسمت های مختلف را با هم ترکیب کنند که منجر به انجام کاری شود. به عنوان مثال کوچک، قسمتی جزیی از یک کار نمایش…
به عنوان یک تمرین ترکیبی:
- راه اندازی با TFT LCD
- خواندن از SD کارت
- خواندن نوشتن بر روی رم خارجی
می توان دیتا را ابتدا از SD کارت به رم خارجی میکرو منتقل کرد و سپس آن را بر روی TFT LCD قرار داد. مسلما انتقال دیتا از رم خارجی به TFT سریع تر از انتقال از SD به TFT خواهد بود.
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
نمایش عکس 24 بیت BMP در میکروکنترلر LPC1788 از روی رم خارجی.
ابتدا از SD به رم و سپس از رم به TFT جهت تست سرعت.
البته این کار بدون ایراد هم نیست.
@armeducation
همان طور که در مورد نمایش در TFT LCD ملاحظه کردید انجام یک قسمت از کار مرحله به مرحله انجام شد و در هر مرحله اگر ایرادی مشاهده شد بایستی سعی در برطرف کردن آن داشت. هدف قرار دادن این چند فیلم این بوده که به صورت عملی قسمتی از این روند را مشاهده کنید.
موارد دیگری نیز برای تست وجود دارد.
1- در اینجا به صورت فایلی قرائت از SD انجام شده است. به این دلیل که به سادگی عکس مورد نظر از را از کامپیوتر در sd کارت قرار می دهیم و نمایش می دهیم. ولی اگر بخواهیم به صورت سکتوری از sd بخوانیم مسلما باید سرعت خواندن بالاتر برود. البته به همان سادگی قبل دیگر عکس ها در sd قرار نمی گیرد.
2- سرعت نمایش از نند فلش نیز تست شود.
3- به جای فرمت BMP از فرمت JPG استفاده شود. برای این کار بایستی فرمت JPG دیکد شود.
4- ...
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
نمایش عکس 24 بیت BMP در LPC1788 از روی رم خارجی.
ابتدا از SD به رم :
704 میلی ثانیه
و سپس از رم به TFT :
346 میلی ثانیه
رفع ایراد نمایش.
مقایسه رفرش با :
https://news.1rj.ru/str/armeducation/667
@armeducation
در مبحث DMA :
https://news.1rj.ru/str/armeducation/204
برای انتقال دیتا از رم به پریفرال قبلا به صورت اجرای عملی ذکر شد که می توان از رم به پورت سریال انتقال دیتا انجام داد:
https://news.1rj.ru/str/armeducation/557
حال اگر بخواهید دیتاهایی را از رم بر روی یک پورت GPIO قرار دهید کافیست به جای آدرس پورت سریال از آدرس همان پورت gpio استفاده شود.
نکته ای که در اینجا باید در نظر بگیرید استفاده از یک تایمر برای تنظیم زمان ارسال دیتا به صورت مرتب است. به عنوان مثال می خواهید هر 1 ثانیه یک بار یک انتقال انجام شود. در پریفرال DMA میکروهای STM32 هر تایمر برای یک کانال خاص از DMA قابل استفاده است. در حالی که این محدودیت در میکروهای NXP وجود ندارد.
اگر می خواستید به صورت معمول در هر زیرروال وقفه تایمر، عمل انتقال دیتا از یک آرایه به یک پورت gpio انجام شود :
————————
void TIM2_IRQHandler (void)
{
GPIOD->ODR = Data[i++];
....
}
int main (void) {
SystemInit();
GPIO_Init ();
TIM2_Init ();
while (1)
{
}
}
@armeducation
—————————————
اگر بخواهید با DMA ، عمل انتقال از آرایه به gpio انجام شود :
int main (void) {
SystemInit();
GPIO_Init ();
TIM2_Init ();
DMA_Init ();
while (1)
{
}
}
و در نهایت بعد انتقال دیتا به تعداد مشخص شده، در زیروال وقفه DMA می توان یک اعلام اتمام قرار داد.
تفاوت در انتقال خودکار دیتاها در زمان مشخص شده بدون نیاز به وارد شدن به زیروال وقفه تایمر است.
@armeducation
تفاوت بین ارسال یک پیکسل برروی TFT در STM32F103RE و STM32F103VE
میکرو STM32F103VE دارای مد FSMC است.
میکروکنترلر STM32F103RE ارسال دیتا به صورت goio به ssd1963
تفاوت قابل تشخیص است!؟
@armeducation
Forwarded from armeducation (Mahdi Zarkoob)
کانال کاملا تخصصی میکروکنترلرهای ARM
شما معرف کانال به سایر دوستان خود باشید.
👇👇👇👇👇👇
@armeducation
با سپاس
@armeducation
کاربردی از رم به رم در DMA
همان طور که ذکر شد در بعضی مدل میکروها برای کار با ال سی دی یک فضای رمی در نظر گرفته شده است که با قرار دادن دیتا در این فضا نمایش بر روی ال سی دی انجام می شود.
https://news.1rj.ru/str/armeducation/90
https://news.1rj.ru/str/armeducation/678
همچنین یکی از اقسام انتقال دیتا رم به رم می باشد:
https://news.1rj.ru/str/armeducation/204
بنابراین به نظر شما با ترکیب این دو موضوع می توان به جای ارسال پیکسل به پیکسل توسط cpu به صورت polling به درایور ال سی دی یا خود ال سی دی از dma برای نمایش استفاده کرد!؟
آیا تاکنون این موضوع را اجرایی کرده اید؟
در اینجا هدف استفاده از امکانات میکرو برای نمایش سریع تر در TFT LCD است.
@armeducation
اولین پروژه با ARM بعد از دوره آموزشی میکروکنترلر stm32
درایور ۴ کانال موتور براشلس ، موتورهای اسکوتر
با تشکر از آقای مهندس رضا محزون بابت ارسال
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
اجرای عملی درایو ۴ کانال موتورهای براشلس
قابلیت کنترل مجزای سرعت و جهت ۴ عدد موتور براشلس
@armeducation
توضیح مختصر ارسالی از عملکرد درایور :
درایو ۴ کانال موتورهای براشلس
قابلیت کنترل مجزای سرعت و جهت ۴ عدد موتور براشلس سنسور دار (مثل موتور اسکوتر) از طریق سیگنال های مختلف ورودی (i2c,pwm,analog)

ولتاژ ورودی ۴۲ ولت و توان هر خروجی ۵۰۰ وات

کاربرد اینگونه درایو موتورها استفاده در ربات های سنگین وزن نظامی به منظور راه اندازی سیستم حرکتی ، ویلچر ، موتور سیکلت و دوچرخه های برقی و تمامی سیستم هایی که از موتورهای براشلس به منظور نیروی حرکتی استفاده میکنند
@armeducation
استفاده از IDE کد بلاکز
Code Blocks
در صورتی که بخواهید برای برنامه نویسی از یک کامپایلر استفاده کنید یکی از گزینه ها کدبلاکز است:
http://www.codeblocks.org/
البته گزینه های دیگری هم وجود دارد:
چند نمونه از ویرایشگرهای پر طرفدار و متن‌باز (به نقل از سیسوگ) :

Netbeans
Eclipse CDT
CodeLite
Geany
Qt Creator
@armeducation
Code::Blocks
The open source, cross platform, free C, C++ and Fortran IDE.
صفحه دانلود Source Code :
http://www.codeblocks.org/downloads/25
@armeducation
codeblocks-17.12-setup.rar
35.3 MB
دانلود نرم افزار کدبلاکز

پسورد :
@armeducation
armeducation pinned Deleted message
دلایل عدم ایجاد کتابخانه و نتایج :
ممکن است خیلی برای شما پیش آمده باشد که در پروژه ای وسیله ای را راه اندازی کرده اید و می خواهید در کار دیگری از آن استفاده کنید ولی بدلیل اینکه آن را مرتب نکرده اید و برای آن کتابخانه ایجاد نکرده اید و توضیحات مربوطه را هم ننوشته اید، به این سادگی ها در کار دیگری نمی توانید استفاده کنید و باید زمان بیشتری برای پورت کردن آن صرف کنید.
ایجاد کتابخانه و استفاده از آن از موارد پایه است:
https://news.1rj.ru/str/armeducation/92
که البته در این کار نحوه اعمال ورودی ها و خروجی گرفتن از توابع و ... از موارد دارای اهمیت هستند.
و اما دلایلی که باعت عدم انجام این کار می شود:
- حوصله ندارم! در اینجا ما هم حرفی برای گفتن نداریم. 😊
-وقت ندارم. در اینجا مهم از نظر شما انجام پروژه است و ایجاد دایکیومنت ها به طوری که بعدا در جای دیگری قابل استفاده باشد مهم نیست. این کار انجام می شود ولی در کار دیگری باز باید همان زمان را بگذاریم. در حالی که اگر امکانش بود با صرف وقت کمی می شد کاری کرد که قسمتی از کارمان برای کاربردهای بعد قابل استفاده باشد. عاملی دیگری که در اینجا مانع انجام این کار می شود این است که بگویم مگر این کار چقدر برایمان دارد که تازه این وقت اضافه هم برایش بگذاریم؟ البته اگر قرار باشد کارهای دیگری انجام دهیم و کار از خودمان باشد این زمان را برای خودمان داریم کار می کنیم .
- برای دیگران کار می کنیم که رعایت این چنین موارد جزیی و ... بستگی به نظر یا دقت نظر کارفرما دارد.
- بلد نیستم . اگر زمان برایتان اهمیت دارد بایستی زمانی را صرف یادگیری کنید. در کل این زمان و احیانا هزینه یک سرمایه گذاری برای کارتان محسوب می شود.
@armeducation
مهندس متبحر...

مهندسی بود که در تعمیر دستگاه های مکانیکی استعداد و تبحر داشت. او پس از۳۰ سال خدمت صادقانه با یاد و خاطری خوش باز نشسته شد. دو سال بعد، از طرف شرکت درباره رفع اشکال به ظاهر لاینحل یکی از دستگاه های چندین میلیون دلاری با اوتماس گرفتند. آنها هر کاری که از دستشان برمی آمد انجام داده بودند و هیچ کسی نتوانسته بود اشکال را رفع کند بنابراین، نومیدانه به او متوسل شده بودند که در رفع بسیاری از این مشکلات موفق بوده است.

مهندس، این امر را به رغبت می پذیرد. او یک روز تمام به وارسی دستگاه می پردازد و در پایان کار، با یک تکه گچ علامت ضربدر روی یک قطعه مخصوص دستگاه می کشد و با سربلندی می گوید : اشکال اینجاست آن قطعه تعمیر می شود و دستگاه بار دیگر به کار می افتد. مهندس دستمزد خود را ۵۰۰۰۰ دلار معرفی می کند.

حسابداری تقاضای ارائه گزارش و صورتحساب مواد مصرفی می کند و او بطور مختصر این گزارش را می دهد:
بابت یک قطعه گچ: ۱ دلار و بابت دانستن اینکه ضربدر را کجا بزنم : ۴۹۹۹۹ دلار
کپی از asriran
—————————————————-
آیا شما از این ضربدرها زده اید؟☺️
@armeducation
👍2
Forwarded from armeducation (Mahdi Zarkoob)
مجموعه فیلم های آموزش کار با نرم افزار STM32CubeMX و توابع HAL

1-1- نحوه ایجاد پروژه در نرم افزار STM32CubeMX برای keil و پروگرام کردن بر روی برد
https://news.1rj.ru/str/armeducation/270
2-1- نحوه تنظیمات در نرم افزار STM32CubeMX برای خروجی کردن پایه ها
https://news.1rj.ru/str/armeducation/282
2-2- نحوه تنظیمات در نرم افزار STM32CubeMX برای ورودی کردن پایه ها
https://news.1rj.ru/str/armeducation/284
3-1- نحوه تنظیمات در نرم افزار STM32CubeMX برای وقفه خارجی
https://news.1rj.ru/str/armeducation/287
4-1- نحوه تنظیمات در نرم افزار STM32CubeMX برای پورت سریال و ارسال یک رشته
https://news.1rj.ru/str/armeducation/290
4-2- دریافت یک کاراکتر و رشته از پورت سریال با استفاده از توابع HAL
https://news.1rj.ru/str/armeducation/295
4-3- دریافت یک کاراکتر از پورت سریال با استفاده از وقفه در توابع HAL
https://news.1rj.ru/str/armeducation/301
5-1- راه اندازی تایمر و وقفه آن با تنظیمات در STM32CubeMX
https://news.1rj.ru/str/armeducation/331
5-2- راه اندازی PWM با تنظیمات در STM32CubeMX
https://news.1rj.ru/str/armeducation/334
6-1- راه اندازی ADC با تنظیمات در STM32CubeMX
https://news.1rj.ru/str/armeducation/341
6-2- استفاده از وقفه در راه اندازی ADC با تنظیمات در STM32CubeMX
https://news.1rj.ru/str/armeducation/343
7-1- راه اندازی DAC با تنظیمات در STM32CubeMX
https://news.1rj.ru/str/armeducation/346
8-1- راه اندازی RTC با تنظیمات در STM32CubeMX
https://news.1rj.ru/str/armeducation/353
8-2- وقفه RTC با تنظیمات در STM32CubeMX
https://news.1rj.ru/str/armeducation/358

@armeducation
Forwarded from armeducation (Mahdi Zarkoob)
مجموعه فیلم های آموزش کار با نرم افزار STM32CubeMX و توابع HAL :

http://www.arm-education.ir/?p=342

@armeducation
عدم استفاده از printf :
برای ارسال متن و متغییر بر روی پورت سریال به سادگی می توان با اعمال تنظیماتی از تابع printf استفاده کرد:
https://news.1rj.ru/str/armeducation/135
در صورتی که نتوانید یا نخواهید از printf استفاده کنید چگونه می خواهید یک متغییر را بر روی پورت سریال قرار دهید؟
یکی از دلایل این نتوانستن این است که حجم کد بیشتری نیاز می شود و برنامه در یک میکرو کوچک جا نمی شود. همچنین برای نمایش عدد بر روی سون سگمنت از printf استفاده نمی شود.
اگر یک عدد 12345 را بخواهید به صورت کاراکتر به کارکتر نمایش دهید چطور این کار را انجام می دهید؟
ابتدا با تقسیمات متوالی یکی یکی اعداد را جدا کرده و با تابع Send_Char ارسال می کنید.
آیا نمی توان این اعداد را در یک آرایه قرار داد و از تابع Send_String استفاده کرد؟
-> همیشه بایستی یک راه حل برنامه نوسی به عنوان جایگزین برای مواقعی که برای استفاده از یک تابع یا الگوریتم یا کتابخانه دچار مشکل می شوید، داشته باشید.
https://news.1rj.ru/str/armeducation/128
@armeducation