بایگانی ماهیانه: اردیبهشت ۱۳۹۶

مطالب نوشتاری کانال

جهت اطلاع از مطالب آموزشی به کانال تلگرام ما بپیوندید :

armeducation@

در صورت عدم دسترسی به تلگرام از این کانال جهت اطلاع رسانی در پیام رسان سروش استفاده خواهد شد :
https://sapp.ir/armeducation

——————————————————-

در کانال سعی می شود مطالب تالیفی بنده قرار داده شود و در صورتی که مطلبی از جایی گرفته شود با ذکر منبع خواهد بود.
از دوستان عزیز تقاضامندم مطالب پست ها را تنها بصورت فوروارد در سایر گروها و کانال ها و سایت ها قرار دهند و از کپی کردن مطالب بدون ذکر مرجع خودداری کنند.

با تشکر

ترتیب مطالب از پایین به بالا! می باشد.

فیلم ها در آپارات قرار داده شده است.

——————————————————-

در انتشار یک مطلب علمی و یا آموزشی ، احترام به مالکیت معنوی ایجاب می کند که مطلب ذکر شده همراه با مرجع باشد. مشاهده می شود که در برخی سایت ها،گروهها و … کاربران ملزم به حذف نام مرجع یک مطلب(علمی و یا آموزشی) خواهند بود و در صورت فوروارد یک مطلب آموزشی، که همراه با مرجع آن می باشد ….. !
همگان می دانیم در انتشار یک مقاله علمی، عدم ذکر نام مراجع کپی برداری محسوب می شود و اصلا قابل پذیرش نیست.
به امید گسترش فرهنگ احترام به تولید کنندگان محتوا

armeducation@

——————————————————-

آیا شما از معرفین مطالب این کانال به سایر دوستان خود هستید!؟
در صورتی که مطالب آموزشی کانال را مفید می دانید شما معرف کانال به سایر دوستان خود باشید.
👇👇👇👇👇👇
@armeducation

با سپاس

armeducation@

 

——————————————————-

کاربردی از رم به رم در DMA
همان طور که ذکر شد در بعضی مدل میکروها برای کار با ال سی دی یک فضای رمی در نظر گرفته شده است که با قرار دادن دیتا در این فضا نمایش بر روی ال سی دی انجام می شود.
https://t.me/armeducation/90
https://t.me/armeducation/678
همچنین یکی از اقسام انتقال دیتا رم به رم می باشد:
https://t.me/armeducation/204
بنابراین به نظر شما با ترکیب این دو موضوع می توان به جای ارسال پیکسل به پیکسل توسط cpu به صورت polling به درایور ال سی دی یا خود ال سی دی از dma برای نمایش استفاده کرد!؟
آیا تاکنون این موضوع را اجرایی کرده اید؟
در اینجا هدف استفاده از امکانات میکرو برای

——————————————————-
در مبحث DMA :
https://t.me/armeducation/204
برای انتقال دیتا از رم به پریفرال قبلا به صورت اجرای عملی ذکر شد که می توان از رم به پورت سریال انتقال دیتا انجام داد:
https://t.me/armeducation/557
حال اگر بخواهید دیتاهایی را از رم بر روی یک پورت GPIO قرار دهید کافیست به جای آدرس پورت سریال از آدرس همان پورت gpio استفاده شود.
نکته ای که در اینجا باید در نظر بگیرید استفاده از یک تایمر برای تنظیم زمان ارسال دیتا به صورت مرتب است. به عنوان مثال می خواهید هر ۱ ثانیه یک بار یک انتقال انجام شود. در پریفرال 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 می توان یک اعلام اتمام قرار داد.
تفاوت در انتقال خودکار دیتاها در زمان مشخص شده بدون نیاز به وارد شدن به زیروال وقفه تایمر است.

——————————————————-

همان طور که در مورد نمایش در TFT LCD ملاحظه کردید انجام یک قسمت از کار مرحله به مرحله انجام شد و در هر مرحله اگر ایرادی مشاهده شد بایستی سعی در برطرف کردن آن داشت. هدف قرار دادن این چند فیلم این بوده که به صورت عملی قسمتی از این روند را مشاهده کنید.
موارد دیگری نیز برای تست وجود دارد.
۱- در اینجا به صورت فایلی قرائت از SD انجام شده است. به این دلیل که به سادگی عکس مورد نظر از را از کامپیوتر در sd کارت قرار می دهیم و نمایش می دهیم. ولی اگر بخواهیم به صورت سکتوری از sd بخوانیم مسلما باید سرعت خواندن بالاتر برود. البته به همان سادگی قبل دیگر عکس ها در sd قرار نمی گیرد.
۲- سرعت نمایش از نند فلش نیز تست شود.
۳- به جای فرمت BMP از فرمت JPG استفاده شود. برای این کار بایستی فرمت JPG دیکد شود.

——————————————————-

به عنوان یک تمرین ترکیبی:
– راه اندازی با TFT LCD
– خواندن از SD کارت
– خواندن نوشتن بر روی رم خارجی
می توان دیتا را ابتدا از SD کارت به رم خارجی میکرو منتقل کرد و سپس آن را بر روی TFT LCD قرار داد. مسلما انتقال دیتا از رم خارجی به TFT سریع تر از انتقال از SD به TFT خواهد بود.
——————————————————-
انتگرال بگیر !
در نظر شما وقتی برای کار به جایی مراجعه می کنید این است که همه تواناییتان را شرح دهید. حال در نظر بگیرید به همین دلیل که شما توانایی زیادی دارید ردتان کنند!
آن وقت باید بشید مثل این حکایت :
روزگاری یک ليسانسه که ریاضیش خوب بوده و البته پارتی نداشته، هر چقدر دنبال کار می گرده بهش کار نمیدادند. بعد از کلی تلاش، متوجه میشه شهرداری تعدادی رفتگر بی سواد استخدام می کنه!!
میره شهرداری خودش رو معرفی می کنه و مشغول به کار میشه…!
بعد از دو سه ماه میگن همه باید در کلاسهای نهضت شرکت کنید! این بنده خدا هم شرکت می کنه!!
یه روز معلم محترم در کلاس چهارم، ایشون رو می بره پای تخته تا مساحت یک شکلی رو حساب کنه! تو این فکر بوده که انتگرال بگیره یا نه که می بینه همه دارن داد می زنن:
انتگرال بگیر…!!! 😁
—————————-
البته ایشون نمی دونسته اگه فیلم از وضعیت کاری خودش بذاره در نت شاید از ریاست جمهوری هم بهش زنگ بزنند 😉

——————————————————-

ک تابع کاربردی زبان سی برای مقایسه دو آرایه :
memcmp
اگر تعداد اعداد داخل دو آرایه کم باشد به صورت چشمی می توان آنها را با هم مقایسه کرد. ولی اگر تعداد زیاد باشد یا بایستی در یک حلقه اعداد داخل این دو آرایه را با هم مقایسه کرد یا از این تابع که در هدر string.h قرار دارد استفاده کرد:
memcmp( WriteBuffer, ReadBuffer, SIZE ) == 0

——————————————————-

یک کاربردعدد ۱۰۰ هگزادسیمال :
۰x100 = 256
به عنوان مثال در نظر بگیرید عدد ۰x58ab را به ۰x100 تقسیم کرده اید :
۰x58ab / 0x100 = 0x58
یعنی قسمت با ارزش عددتان
و باقیمانده آن هم :
۰x58ab % 0x100 = 0xab
یعنی قسمت کم ارزش عددتان.
به این ترتیب در جایی که می خواهیم قسمت کم ارزش و باارزش دیتایتان را جدا کنید می توان از این روش استفاده کنید. همین کار را برای یک عدد ۳۲ بیتی تکرار کنید.
به چه روش دیگری می توان این کار را انجام داد؟

(۰x58ab & 0xff00) » ۸ = ۰x58
(۰x58ab & 0x00ff) = 0xab
کدام بهتر است!؟

——————————————————-

برای استفاده از یک وسیله ای که با مد SPI کار می کند، لازم است تابع پیکربندی و تابع ارسال دریافت دیتا را مطابق همان میکرویی که در حال استفاده هستیم تغییر داد. بنابراین به عنوان مثال اگر یک spi flash مانند
AT45DB161
یا
SST25VF016B
را با میکرویی مانند LPC1768 یا … راه اندازی کرده باشید با تغییراتی در این دو تابع بایستی بتوانید آن را با میکروهای دیگری مانند STM32 و STM8 و … راه اندازی کنید.

——————————————————-

مطالبی که در کانال قرار داده می شود بر اساس مقتضیات پیش آمده است. بنابراین ممکن است در مورد یک موضوع پراکنده به نظر برسد. می توانید یک جستجوی ساده از کلمه مورد نظر داشته باشید.

——————————————————-
ﺍﮔﻪ ﻣﯽ ﺧﻮﺍﻫﯽ ﮐﺴﯽ ﺭﻭ ﯾﮏ ﻭﻋﺪﻩ ﺳﯿﺮ ﮐﻨﯽ ، ﺑﻪ ﺍﻭﻥ ﻣﺎﻫﯽ ﺑﺪﻩ
ﻭﻟﯽ ﺍﮔﻪ ﻣﯽ ﺧﻮﺍﻫﯽ ﯾﮏ ﻋﻤﺮ ﺳﯿﺮﺵ ﮐﻨﯽ ﺑﻬﺶ ﻣﺎﻫﯽ ﮔﯿﺮﯼ ﯾﺎﺩ ﺑﺪﻩ …
در نظر بگیرید یاد گرفته باشید فقط از کدهایی که ایجاد شده است استفاده کنید. حال اگر برای کاری، این کدهای آماده وجود نداشت چگونه می خواهید آن وسیله را راه اندازی کنید؟
یادگیری نحوه ساختن یا صرفا یادگیری نحوه استفاده از توابع، خودش را در اینجا نشان می دهد. و مسلما یادگیری ساختن نیاز به صرف زمان و تمرین دارد.
همچنین آیا انجام کار مهمتر است یا اصرار به راه اندازی به صورت خاصی؟
https://t.me/armeducation/265
اصالت کار مشخصا اولویت بالاتری دارد:
https://t.me/KnowledgePlus/410

——————————————————-

دو مصیبت : نقصان مایه و شماتت همسایه!
بازرگانی را هزار دینار خسارت افتاد پسر را گفت نباید که این سخن با کسی در میان نهی. گفت ای پدر فرمان تراست، نگویم ولکن خواهم مرا بر فایده این مطلع گردانی که مصلحت در نهان داشتن چیست؟ گفت تا مصیبت دو نشود: یکی نقصان مایه و دیگر شماتت همسایه
————————————
در نظر بگیرید زمانی برای انجام پروژه ای صرف کرده اید و هزینه آن وصول نشده.
https://t.me/armeducation/432
در اینجا فکر می کنید مصیبت چند تا باشد!؟
۱- زمانی که میشد در جای دیگری صرف کرد.
۲- زمانی که بایستی صرف طلب وصول کرد.
۳- عدم همکاری مجدد طرفین
۴- تردید در همکاری برای سایر موارد کاری
حال این حکایت چه ارتباطی به این موضوع دارد!؟
شاید فعالان حیطه الکترونیک تجربه هایی که در این زمینه دارند را نقل نمی کنند که مصیبت شماتت همسایه به آن اضافه نشود!

——————————————————-

نامهایی که در رابطه با راه اندازی اترنت در میکروکنترلرهای ARM با آن مواجه می شوید :
MAC
IP
Port
ARP
broadcast
ICMP
UDP
TCP
SNMP
HTTP
SNMP
Telnet
FTP

——————————————————-
بنا به نیاز می توان به منابع مختلفی که سایت st برای STM8 قرار داده مراجعه نمود. به عنوان نمونه برای STM8S003F3 :
https://www.st.com/en/microcontrollers/stm8s003f3.html
– Product Specifications
– Application Notes
– Technical Notes & Articles
– User Manuals
– Reference Manuals
– Programming Manuals
– Errata Sheets
– Design Notes & Tips
– HW Model, CAD Libraries & SVD
– Presentations
– TOOLS AND SOFTWARE

——————————————————-
خواندن از ADC با DMA :
به صورت معمول خواندن از یک کانال ADC به این صورت انجام می شود :
۱- دستور آغاز تبدیل
۲- منتظر شدن برای تبدیل ولتاژ ورودی به مقدار دیجیتال خواندن این مقدار
۳- پایان تبدیل
(https://t.me/armeducation/216)
در صورتی که بخواهیم از DMA استفاده کنیم به صورتی که برای تبدیل مقدار آنالوگ به دیجیتال و انتقال دیتا به رم، CPU درگیر نشود می توان به صورت های زیر عمل کرد:
– تا یک انتقال از یک کانال ADC به رم میکرو انجام شد برنامه وارد زیروال وقفه DMA شود. این کار تفاوتی با وارد شدن به زیروال وقفه ADC وقتی بخواهیم از وقفه ADC استفاده کنیم، ندارد!
– وقتی به تعداد مورد نظر از یک کانال ADC به آرایه ای مقدار قرائت شده منتقل شد یک وقفه در DMA داده می شود.
– به صورت متوالی از چند کانال ADC به یک آرایه مقدار آنالوگ به دیجیتال ریخته می شود و هر موقع نیاز شد از دیتای داخل این آرایه استفاده می کنیم.

——————————————————-

کاربرد واحد کلاک و پاور برای مباحث مقدماتی :
سوالی که در اینجا پیش می آید این است که کاربرد این واحد چیست و چه فایده ای دارد؟
برای مباحث مقدماتی مطرح کردن کلاک و پاور ضرورتی چندانی ندارد زیرا کاربرد آن برای آرم آموزان 😀 ملموس نیست.
– به صورت پیش فرض پاور تعدادی از پریفرالهای LPC1768 فعال است و نیازی به فعال کردن آن برای شروع نیست. اولین جایی که لازم می شود واحد ADC است :
LPC_SC->PCONP |= (1 << 12); // Enable power to AD block
همچنین یک کلاک پیش فرض به تمام پریفرالها اعمال می شود.
– برای stm32 کلاک هر پریفرال که بخواهیم استفاده کنیم را بایستی فعال کنیم :
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN ;
بنابراین با همین خط کارمان راه می افتد مگر چیزهای دیگری نیاز شود.

——————————————————-

اندر احوالات کلاک!
به نظر شما چه موقع وجود کلاک در یک میکرو را احساس می کنید؟ این همان موقعی است که بایستی یک سرکی در واحد کلاک بکشید.
قسمت GPIO و EXTI را راه اندازی کرده اید و می خواهید پورت سریال را راه اندازی کنید. اگر کلاک اعمالی همان چیزی باشد که بایستی اعمال شود(۴۸ یا ۷۲ یا ۱۰۰ یا ۱۲۰ یا ۱۶۸ یا ۲۱۶ مگاهرتز) محاسبات باودریت هم صحیح خواهد بود و متن ارسالی از میکرو را می توانید در کامپیوتر مشاهده کنید. در غیر این صورت به جز کاراکترهای نامربوط چیزی نمی بینید.
در میکروهای ARM-Cortex کلاک در تابع SystemInit تنظیم می شود. این تابع در startup_***.s قرار دارد. کلاک به صورت معمول از اسیلاتور خارجی و در حالت ماکزیمم خود قرار می گیرد. در این حالت مشکلی نیست و به این زودیها نیازی به سرک کشیدن در این واحد وجود ندارد. ولی در بعضی مدل میکروها این تابع، این عمل را انجام نمی دهد. در این حالت است که اگر ندانید، مدتی سر کار خواهید رفت! چرا که مثلا فرض می کنید کلاک میکرو ۴۸ مگ است و تنظیم رجیستر باودریت را بر این اساس انجام می دهید ولی در عملی جوابی نمی گیرید. در میکروهای stm32 یک سری تنظیمات در این رابطه، به صورت اتوماتیک در نرم افزار STM32CubeMX انجام می شود.

——————————————————-
شبیه سازی مد i2c با استفاده از پریفرال gpio :
در نظر بگیرید به جای استفاده از پریفرال i2c مجبور باشید این پروتکل را با پایه های gpio شبیه سازی کنید. در این حالت تمام ست و ریست شدن پایه های دیتا و کلاک را باید خودمان انجام دهیم. مثلا برای ارسال یک دیتا :
while(i–)
{
SCL_L;
I2C_delay();
if( SendByte & 0x80 )
{
SDA_H;
}
else
{
SDA_L;
}
SendByte <<= 1;
I2C_delay();
SCL_H;
I2C_delay();
}
در حالی که در پریفرال i2c این کار خود به خود انجام می شد :
I2C1->DR = c;
شبیه سازی UART و SPI با GPIO نیز شبیه به همین عملکرد است.

——————————————————-

در قسمت i2c و به عنوان مثال خواندن و نوشتن در ایتوپرام، گستردگی مطلب زیاد است. البته اصل مطلب یکی است که به چند روش قابل انجام است:

۱- سمپلی که با توابع cmsis از پریفرال i2c خود میکرو استفاده کرده است.

۲- سمپلی که با توابع HAL از پریفرال i2c خود میکرو استفاده کرده است.

۳- سمپلی که با رجیستر، از پریفرال i2c استفاده کرده است.

۴- سمپلی که با استفاده از پریفرال gpio مد i2c را پیاده سازی کرده است هم با رجیستری هم با توابع cmsis و هم با HAl.

——————————————————-
حل دو معادله دو مجهول
ایراد از برد است یا از برنامه!؟
در مواردی یک برنامه روی برد شما کار نمی کند. یا خود برد زده این یا از برد آماده استفاده می کنید. یا خود برنامه نوشته اید یا از سمپل آماده استفاده کرده اید.
ایراد از کجاست؟ یک مقدار وقت صرف برنامه می کنید و کمی صرف سخت افزار. همه چیز هم درست می بینید.
در اینجا به شکلی باید از یک طرف اطمینان حاصل کنید. یا از برنامه یا از برد.
یک برنامه ای که بر روی یک برد کار می کند روی برد شما هم باید درست کار کند مگر آنکه سخت افزار شما مشکل داشته باشد(موارد عجیبه و استثناها بماند)

——————————————————-

تعریف درست نوع همکاری برای انجام پروژه :
برای پروژه تولید یک محصول، لازم است از نیروهای متخصصی استفاده شود. اگر نوع همکاری به صورت صحیح تعریف نشود نتایج مطلوبی حاصل نخواهد شد.
در نظر بگیرید به جای اینکه مشخص شود افراد تا انتهای تولید و بعد از آن حضور داشته باشند گفته شود شما فقط طراحی یا برنامه نویسی آن را انجام دهید و تحویل دهید، آنگاه اگر بعد از چند ماه ایراداتی در محصول مشاهده شد چطور قرار است این ایرادات برطرف شود؟ آیا خود کارفرما می تواند؟ اگر افراد مجری پروژه دیگر نتوانند وقتی برای پروژه بگذارند یا تعهدی نداشته باشند چه خواهد شد؟
خود کارفرما برای کاهش هزینه محصول تولیدی، نوع همکاری را این گونه تعریف می کند: شما سورس و برد نمونه را تحویل دهید و تمام!
مسلما بین کاری که مجری انجام پروژه تا مدتی مسئول رفع ایرادات باشد تا پروژه ای که بعد از جواب گرفتن تحویل داده شود و تمام، تفاوت وجود دارد.

——————————————————-

داستان ضرب المثل ناخوش خر خورده!
آیا تاکنون در روابط کاری مواجه با مصداق این داستان شده اید؟
مثلا دستگاه عملکرد لازم را ندارد ولی دلیلی برای آن یافت نشده است.
يك حكيمي بود كه پسرش از آب و گل درآمده بود و درسي خوانده بود و جناب حكيم‌باشي براي اينكه فوت و فن طبابت را به او ياد بدهد او را همراه خودش به عيادت مريض‌هايش مي‌برد. يك روز كه جناب حكيم‌باشي بالاي سر يكي از بيمارها رفت پسرش ديد حال مريض از طبابت بابا بدتر شده و تب او بالا رفته و بستگان مريض هم خيلي پريشان هستند اما بابا خودش را از تنگ و تا ننداخته و مشغول و رفتن به مريض است.

البته پسر حكيم كه جوان بود و بي‌تجربه حساب دستش نبود و نمي‌فهميد قضيه از چه قرار است و باباش چه خواهد كرد؟ اما حكيم‌باشي كاركشته كه بارها توي اين تنگناها گير كرده بود تكليف خودشو خوب مي‌دونست با طول و تفصيل و آب و تاب مريض را معاينه كرد و موقع معاينه كردن هم لفتش داد و بعد از معاينه اخم‌هاشو تو هم كرد و با اوقات تلخي و تغير گفت: «مگه من نگفتم مواظبش باشيد و نگذاريد ناپرهيزي كنه؟»

دور و بری های مريض كه منتظر چنين حرفي نبودند جا خوردند و هاج و واج به هم نگاه كردند و از ميان آنها يكيشون با من و من گفت: «نه خير ناپرهيزي نكرده، نگذاشتيم ناپرهيزي كنه» اما حكيم‌باشي با خاطرجمعي فراوان خيلي قرص و محكم جواب داد: «نه خير، حتماً ناپرهيزي كرده اگر ناپرهيزي نكرده بود با آن نسخه من تا حالا هم تبش بريده بود، هم حالش خوب شده بود»

توپ و تشر حكيم‌باشي كار خودش را كرد و يكي از كسان بيمار با لحني كه پشيماني و عذرخواهي ازش مي‌باريد گفت: «تقصير از ما شد كه روبه‌روي او خربزه پاره كرديم. او هم چشمش كه ديد دلش خواست، ديديم مريضه گناه داره، ما هم يك قاشق نازك بهش داديم».
@armeducation
پسر حكيم وقتي كه ديد همه با تعجب و تحسين به باباش نگاه مي‌كنند با غرور فراوان سراپاي پدرشو ورانداز كرد و باطناً خيلي خوشحال شد كه همچي پدري داره… اما از وقتي كه همراه پدرش به عيادت مريض مي‌رفت گرچه خيلي شگردها ازش ديده بود ولي اين يك چشمه را دفعه اول بود كه مي‌ديد.

وقتي بابا و بچه برگشتند خونه، پسر حكيم‌باشي با اصرار و سماجت از باباش خواست تا اين راز مگو را بهش بگه. حكيم‌باشي هم بادي به بروت انداخت و گفت: «بچه‌جون انقده كه ميگم هر روز مي‌ريم عيادت مريض حواست را جمع كن براي همينه.
مگه نديدي وقتي كه داشتيم مي‌رفتيم تو خونه سطل زباله‌شون پر بود از پوست خربوزه و پوست انار، هر وقت نسخه دادي و حال مريض خوب نشد به دور و بر رختخوابش، به اين ور و آن ور اتاق و حياط نگاه كن. اگه يه دونه اناري يا يه تكه پوست خربوزه افتاده بود بدان كه از اون به مريض هم دادند. هوش به خرج بده و به هوش خودت بگو مريض نا پرهيزي كرده».
@armeducation
مدتي از اين مقدمه گذشت و يك روز حكيم ‌باشي زكام سخت شد و ده روزي توي خونه افتاد و حكيم ‌باشي به اين خيال كه پسرش هم فوت و فن كار را ياد بگيره هم مريض‌هاش به سراغ حكيم ديگري نروند او را سر مريض فرستاد و تو محكمه نشوند.

از قضا يك روز اومدند دنبالش و بردنش به عيادت يك مريض، او هم نسخه داد و اومد. پس فرداش كه دوباره به عيارت مريض رفت ناخوش حالش بدتر شده بود پسر هم تمام آن ادا اطوارهاي بابا را درآورد و آخر سر بادي به گلو انداخت و گفت: «نگفتم نگذاريد ناپرهيزي كنه؟» يكي از بستگان ناخوش جواب داد: «ابداً… اصلاً… ما دست از پا خطا نكرده‌ايم، شما هرچي گفته‌ايد ما همون‌ها رو موبه‌مو انجام داديم»
@armeducation
پسر حكيم‌باشي با اوقات تلخي و بد لعابي ناشيونه فرياد زد: «نه خيز ناپرهيزي كرده… حتماً ناپرهيزي كرده نه خير همينه كه ميگم». خوشمزه اينكه هرچه بستگان بيمار بيشتر انكار مي‌كردند پسر حكيم‌باشي اصرارش بيشتر مي‌شد و از حرفش برنمي‌گشت به‌طوري كه سماجت و پافشاري او دور و بري‌هاي مريض را عاجز و ذله كرده بود. عاقبت هم دنباله اصرارش به اينجا رسيد كه فرياد زد: «نخير ناپرهيزي كرده و خر خورده!… نخير ناپرهيزي كرده و خر خورده كه اينجوري حالش بد شده» همين كه پسر حكيم‌باشي گفت خر خورده كه اينجوري حالش بد شده طاقت جمعيت طاق شد و بي‌اختيار زدند زير خنده و آقازاده از خجالت غرق عرق شد و مثل گربه كتك خورده غيبش زد.

حكيم‌باشي وقتي فهميد آقازاده چه دسته گلي به آب داده دودستي زد توي سرش و پرسيد: «از كجا به فكر خر خوري مريض افتادي!؟» بيچاره خنگ بيهوش گفت: «وقتي از تو حياط رد شدم ديدم يه پالون خر كنج حياط گذاشته‌اند. خيال كردم خر خورده…!!»
منبع:farsibooks.ir

——————————————————-

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

——————————————————-
تفاوت پیدا کردن دلیل یک ایراد یا رفع آن ایراد به هر طریقی
گاهی ایرادی پیدا می شود که هیچ دلیلی برای آن نمی توانید پیدا کنید. اگر بخواهید برای دلیل ایراد وقت صرف کنید زمان زیادی باید بگذارید و دست آخر هم ممکن است به نتیجه ای نرسید. در اینجا رفع ایراد به یک روشی می تواند بهتر از پیدا کردن دلیل آن باشد. زیرا در حال حاضر به نتیجه رسیدن برای شما مهمتر است از پیدا کردن دلیل ایراد.

——————————————————-

آشنایی مختصر با میکروکنترلر STM8
این خانواده از میکروکنترلرها جزو میکروهای ۸ بیتی هستند از شرکت ST که با توجه به قیمت ارزانتری که دارند در مقایسه با سایر میکوکنترلرهای ۸ بیتی امکانات بهتری را در اختیارمان قرار می دهند. معمولا قیمت و امکانات این میکروها با AVR ها مقایسه می شود.
در ابتدای دیتاشیت لیست امکانات این میکروها قرار دارد:
STM8S003K3 STM8S003F3
Value line, 16 MHz STM8S 8-bit MCU, 8 Kbytes Flash, 128 bytes data EEPROM, 10-bit ADC, 3 timers, UART, SPI, I²C
یعنی در حالت کلی یک میکروی ۸ بیتی با کلاک هسته ۱۶ مگاهرتز و حجم حافظه فلش ۸ کیلو و ایتوپرام داخلی ۱۲۸ بایت. دارای یک آنالوگ به دیجیتال با دقت ۱۰ بیت . سه تایمر و دارای پورت سریال و SPI و I2C. جزییات بیشتر در دیتاشیت می باشد.
– در صورتی که با میکروکنترلرهای ۳۲ بیتی STM32 کار کرده باشید و بر اساس نیاز از این سری از میکروها هم استفاده کنید می بینید شباهت های زیادی در نام گذاری رجیسترها و نام بیت رجیسترها وجود دارد. یعنی در حقیقت stm8 فرزند (خلف یا ناخلف !) stm32 است.
– برای کارهای سبک تر و تعداد بالا می توان این سری از میکروها را مورد بررسی قرار داد.
– با توجه به حجم فلاش و رم کمی که این مدل میکروها دارند با استفاده از توابع آماده برای یک سری عملکرد، مقدار بیشتری از این فضاها استفاده می شود. بنابراین ممکن است ملزم به استفاده از رجیسترها شوید.
– این سری از میکروها مانند stm32 دارای تنوع زیادی هستند که بر اساس نیاز می توان یکی را انتخاب کرد به نحوی که هزینه اضافی بابت امکاناتی که احتیاج نداریم نشود.

——————————————————-
آیا شما نمی خواهید دیگران از تجربیاتتان استفاده کنند و فقط قصد استفاده از تجربیات دیگران را دارید!؟
مسلما این گونه نیست.
هر فردی بر اساس کارهایی که انجام داده تجربیاتی دارد که دیگران ندارند. دیگران را در تجربیات خود سهیم کنید.
ارسال تجربیات :
🆔 -》 @mzarkoob

——————————————————-

تفاوت ساعت با ساعت قابل تنظیم
این مطلب یک تجربه است که تبدیل به خاطره شده است:
چندین سال قبل در یک پروژه کوچک و ساده عنوان شد که می خواهیم با روشن شدن برد میکرو، ساعت به همراه دما روی نمایشگر یک ال سی کاراکتری نمایش داده شود. بعد انجام کار گفته شد که این چه نمایش ساعتی است که هر دفعه برد را روشن می کنیم از یک زمان مشخص شده ای شروع به نمایش می کند !😡 در پاسخ گفته شد که شما در جزییات چنین چیزی را ذکر نکردید که چند کلید برای تنظیم ساعت هم بگذارید و طبیعتا اگر چنین چیزی گفته می شد ما از باتری هم استفاده می کردیم. ولی عنوان شد نیاز به گفتن نبود و این یک چیز مشخصی است خودتان باید انجام میدادید ☹️
در پروژه دیگری نیاز به چند کلید برای تنظیم ساعت بود ولی با توجه به سوالات پرسیده شد از کارفرما مشخص شد نیاز به باتری نیست.
👈 نتیجه این است که در پروژه بایستی کلیه موارد مشخص شود یا از طرف کارفرما یا از طرف شما

——————————————————-
AN3116
Application note
STM32™’s ADC modes
and their applications
مدهای مختلف آنالوگ به دیجیتال در این سری میکروها به این صورت ذکر شده است :
۱- Independent modes
۱٫۱ Single-channel, single conversion mode
۱٫۲ Multichannel (scan), single conversion mode
۱٫۳ Single-channel continuous conversion mode
۱٫۴ Multichannel (scan) continuous conversion mode
۱٫۵ Injected conversion mode

——————————————————-

استفاده از فلش داخلی میکرو برای نوشتن و خواندن :
EEPROM emulation in STM32F101xx and STM32F103xx microcontrollers (AN2594) :
http://www.st.com/content/st_com/en/products/embedded-software/mcus-embedded-software/stm32-embedded-software/stm32-standard-peripheral-library-expansion/stsw-stm32010.html#quickview-scroll

——————————————————-

۹٫ How to Resolve Can not connect to target for the STM32 and ST-Link
https://www.aparat.com/v/q0otQ

۱۰٫ How to Create a GPIO Input for ARM MCUs – Tutorial on Push Button Input and LED Output
https://www.aparat.com/v/gO28G

۱۱٫ How to Create a GPIO Input for ARM MCUs Part 2 – Tutorial on Control Registers and Code
https://www.aparat.com/v/4sjnS

۱۲٫ How to Create a GPIO Push Button Input for ARM Microcontrollers – Debouncing Tutorial Part 1
https://www.aparat.com/v/xZfTz

۱۳٫ How to create a GPIO Push Button Input for ARM Microcontrollers – Software Debouncing Part 2
https://www.aparat.com/v/tWvV1

——————————————————-

۵٫ How to Connect the STM32 and ST-Link v2 for ARM Microcontrollers – Tutorial and First Circuit
https://www.aparat.com/v/gdAhW

۶٫ How to Output to a Pin to Blink an LED for Arm Microcontrollers – GPIO Tutorial Part 1
https://www.aparat.com/v/5VhQ1

۷٫ How to Output to a Pin to Blink an LED for Arm Microcontrollers – GPIO Tutorial Part 2
https://www.aparat.com/v/71CsO

۸٫ How to Output to a Pin to Blink an LED for Arm Microcontrollers – GPIO Tutorial Part 3
https://www.aparat.com/v/cY0S9

——————————————————-
اجرای عملی تنظیم ساعت به عنوان یک تمرین برنامه نویسی :
در حین اجرای برنامه می توان ساعت را با زدن کلید منو تنظیم کرد.
با زدن کلید SET عدد تنظیم شده در میکرو ثبت و اعمال می شود.
https://www.aparat.com/v/iWvd7
می توان کلید set را نیز حذف کرد.
ملاحظات برنامه نویسی:
-برای سال و ماه و روز یک بازه قرار داده شود تا اعداد غلط را نتوان اعمال کرد.
– در موقع up زدن با رسیدن عدد به انتهای بازه مجدد به ابتدای بازه بازگردد.
– در موقع down زدن با رسیدن عدد به ابتدای بازه مجدد به انتهای بازه بازگردد.
-در صورت تمایل با نگه داستن up و down هر یک ثانیه یک بار یا کمتر عدد افزایش یا کاهش یابد.

——————————————————-

آیا همیشه اولین بودن به معنای بهترین بودن است؟ …

——————————————————-

فکر می کنید نتیجه این دو قانون چه باشد؟
۱- قبل از طرح سوال با جستجو از عدم وجود مطلب ارسالی مطمئن شوید . همچنین در صورت نتیجه مطلوب نگرفتن از جستجو در نت، سوال خود را مطرح نمایید.
۲- از گفتن کلمه “تو گوگل سرچ کن” اکیدا خودداری کنید. یا جواب شخص را کامل دهید یا آن مبحث را خود سرچ کرده و نتایج را در گروه قرار دهید.
لطفا از سیمولاتور برای رسیدن به پاسخ استفاده نشود!

——————————————————-

در صورتی که بخواهید از یک برد برای آموزشهای پیشرفته میکروکنترلرهای ARM استفاده کنید می توانید این پریفرالها را با بدین صورت فرا بگیرید :
– آشنایی با واحد کلاک (RCC) و پاور (PWR) . عدم نیاز به سخت افزار اضافه به غیر از یک مبدل usb به سریال جهت نمایش نتایج
– واحد WDT . عدم نیاز به سخت افزار اضافه به غیر از یک مبدل usb به سریال جهت نمایش نتایج
– واحد I2C و EEPROM خارجی با اتصال یک at24c02 به دو پایه i2c
– واحد SPI و SPI Flash با اتصال یک SPI Flash مانند AT45DB161D به ۴ پایه SPI
– راه اندازی TFT LCD به همراه تاچ با اتصال ۲۰ پایه مربوط به LCD از یک درایوری مانند ssd1963 به پایه های مربوطه در میکرو و ۵ پایه مربوط به تاچ از آی سی مانند XPT2046IPW بر روی برد درایور به پایه های مربوطه در میکرو .
– واحد DMA. عدم نیاز به سخت افزار اضافه به غیر از یک مبدل usb به سریال جهت نمایش نتایج
– راه اندازی SD کارت با استفاده از اتصال یک خشاب SD به پایه های مربوطه در میکرو .
– سیستم عامل مالتی تسک RTX. عدم نیاز به سخت افزار اضافه به غیر از یک مبدل usb به سریال جهت نمایش نتایج
– واحد CAN با اتصال یک ماژول SN65HVD230 به پایه های can روی میکرو
– واحد اترنت با اتصال ماژول آی سی اترنت مانند DP83848CVV یا … به پایه های مربوطه در میکرو.
برای انجام این مواردی که نیاز به سخت افزار خارجی است، استفاده از یک برد آموزشی (مانندبردهای LPC1768 و LPC1788 و STM32 کویر) در ابتدای کار باعث صرفه جویی در زمان می شود و ذهن درگیر یک موضوع برنامه نویسی می شود تا سیم بندی.

——————————————————-

در توضیحات فیلم های آموزشی میکروکنترلرهای ARM این موضوع ذکر شده که :
این آموزش ها کاملا کاربردی و عملی می باشد و روی بردهای شرکت کویرالکترونیک تست شده است.
آیا این بدان معنی است که برای استفاده از این آموزش ها حتما بایستی بردهای شرکت کویرالکترونیک را داشت ؟
در هر صورت برای عملی بودن بایستی مثالهای ایجاد شده بر روی یک برد تست شود که در این جا از این بردها استفاده شده است. طبیعی است با صرف زمان می توان با تغییر کانفیگ پایه ها ، از پایه های دیگری برای آن پریفرالی که مد نظر دارید استفاده کنید. ولی برد منطبق در وقت شما صرفه جویی میکند.
در ابتدای هر قسمت ابتدا قسمت سخت افزار (اتصالات و کانفیگ پایه ها) گفته شده و سپس برنامه نویسی.

——————————————————-

به اطلاع می رساند فیلم آموزش پیشرفته stm32f1 که سرفصل آن در فروم ایران میکرو قرار داده شده :
https://goo.gl/XVsMBf
به زودی در فروشگاه کویر ارائه خواهد شد.

armeducation@

——————————————————-

در پریفرال Power control یا PWR میکروهای سری stm32f10x، دارای سه مد کم مصرف می باشد :
Sleep mode
Stop mode
Standby mode
با توجه به نیاز می توان از هر کدام استفاده کرد.

armeducation@

——————————————————-

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

armeducation@

——————————————————-

یک تمرین برنامه نویسی :
در نظر بگیرید یک حافظه (فلاش داخلی، ایتوپرام خارجی، spi flash یا sd کارت) در اختیار دارید که هر بار دیتاهایی را می خواهید به همراه زمان روی آن ذخیره کنید.
دو کلید هم بر روی برد قرار دارد که می خواهید با استفاده از آن حافظه را در جهت بالا و پایین مرور کنید. در کلید رو به بالا با خواندن و نمایش آخرین محل حافظه ذخیره شده به ابتدا باز گردد و همچنین در کلید رو به پایین با رسیدن به اولین محل مجدد به آخرین محل باز گردد.
در اینجا راه اندازی وقفه خارجی و rtc و تایمر و محل ذخیره (فلاش داخلی، ایتوپرام خارجی، spi flash یا sd کارت) و پورت سریال (برای نمایش ) یا ال سی دی قسمت اولیه کار است. قسمت اصلی تبدیل الگوریتم به کد است :
https://t.me/armeducation/380
که بایستی تمام حالت های ممکن را پیش بینی کرد.
همچنین در نظر بگیرید بخواهید زمان را هم به دلخواه در طول کار تنظیم کنید. با قرار دادن یک باتون دیگر می توان این آپشن را هم فراهم کنید.

armeducation@

——————————————————-

استفاده از پورت سریال و نرم افزار Flash loader برای پروگرام کردن میکروکنترلر stm32 :
ابتدا کلید BOOT0 را نگه دارید و در همین حالت، کلید RESET را فشار دهید و بعد رها کنید و سپس نرم افزارFlash Loader را در کامپیوتر اجرا کنید. در اینجا بایستی پایه Tx و Rx یعنی PA9 و PA10 میکرو به یک مبدل یو اس بی به سریال متصل شده باشد.
پورت سریال مربوطه را انتخاب کنید و با انتخاب مدل میکرو می توانید فلش میکرو را پاک یا پروگرام کنید.

armeducation@

——————————————————-

تفاوت rtc در میکروکنترلر LPC1768 و STM32F10x :
در LPC1768 رجیسترهای جدایی برای ثانیه، دقیقه ساعت همین طور روز، ماه و سال وجود دارد که صرفا این مقادیر خوانده شده و نمایش داده می شود.
ولی در STM32F1 یک عدد به عنوان شمارنده (RTC counter register) وجود دارد که زمان و تاریخ باید به صورت نرم افزاری از آن استخراج شود. در توضیحات Clock/calendar implementation نحوه این تبدیل ذکر شده

armeducation@

——————————————————-

Application note

Clock/calendar implementation
on the STM32F10xxx microcontroller RTC

armeducation@

——————————————————-

در پروگرامر جیلینگ گاهی فریم ور می پرد و دیگر در کامپیوتر این پروگرامر شناسایی نمی شود و LED روی آن خاموش است.
۱٫ حل کردن پاک شدن فریم ور
دلیل اصلی پاک شدن فریم ور این می باشد که پایه ​erase میکروکنترلر at91sam7s64 خود جیلینک آزاد می باشد و نویز روی این پایه افتاده و باعث می شود برنامه پاک شود در اصل شما میکروکنترلر را پروگرام می کنید و هیچ مشکل خاصی نیست
برای اینکه دیگر این اتفاق نیفتد بسادگی شما می توانید این مشکل را حل کنید
در جیلینک ها تماما پایه earse میکرو وصل یک جمپر می باشد که با نام ERS معرفی شده ابتدا پایه earse وصل شده به جمپر earse در جیلینک رو باید با یک مقاومت ۱ کیلو زمین کنید و یک خازن ۱۰۰ نانو بین دو پایه جمپر ایرز قرار بدین (بین ۳٫۳ ولت و پایه ایرز میکرو می شود)
​البته با این وجود باز هم گاهی اتفاقی این مشکل ایجاد می شود.
۲٫ آپدیت کردن فریم ور
در برد پروگرامر دوتا پین هست یکی
ERS
TST
اول از همه کابل یو اسی بی رو قطع می کنید و جمپر
ERS
رو وصل میکنیم کابل رو وصل میکنید و چند ثانیه صبر میکنید حدودا ۸ ثانیه
مرحله بعد کابل و جمپر رو قطع کنید و بعد جمپر
TST
رو وصل کنید و سپس کابل یو اس بی رو وصل کنید و ۸ ثانیه صبر کنید
در مرحله آخر جمپر و کابل رو قطع کنید و این بار فقط کابل یو اس بی رو وصل کنید که میکروتون توسط سیستم شناسایی میشه و درایور میخواد نصب کنه.
بعد شما نرم افزار
samba prog
رو اجرا کنید بعد یک بار کایل یو اس بی رو قطع و وصل کنید اکتیو باید بشه و گزینه فلش هم فعال میشه بعد فایل باینری پروگرام کنید:

https://goo.gl/5uVKct

armeducation@

——————————————————-

تفاوت واتچ داگ وابسته و پنجره ( WWDG, IWDG ) :
– کلاک IWDG از طریق LSI تامین می شود.
– کلاک WWDG از طریق APB1 تامین می شود.
– بعد از کم شدن مقدار شمارنده واتچ Independent و رسیدن به صفر اگر واتچ داگ reload نشود، میکرو ریست می شود.
– بعد از کم شدن مقدار شمارنده واتچ Window “در یک بازه زمانی” اگر شمارنده بروز نشود میکرو ریست می شود.

armeducation@

——————————————————-

توجه به warning ها
در مواردی بعد از کامپایل برنامه با تعدادی warning مواجه می شویم. بیشتر مواقع این موضوع چیز مهمی نیست ولی بهتر است ابتدا به آنها توجه شود تا احیانا اگر مسئله ای بود رفع شود. مثلا بعد کامپایل :
“.\OBJ\STM32F10x_MZarkoob.axf” – 0 Error(s), 2 Warning(s).
و هشدار داده شده :
Source\main.c(151): warning: #223-D: function “printf” declared implicitly
که با توجه به استفاده از printf بایستی هدر stdio.h در ابتدای برنامه قرار داده شود.
مواردی هم وجود دارد که هشدارها اهمیت چندانی ندارد :
Source\serial\serial.c(84): warning: #1-D: last line of file ends without a newline

Source\main.c(50): warning: #177-D: variable “n” was declared but never referenced

Source\main.c(142): warning: #167-D: argument of type “uint8_t *” is incompatible with parameter of type “char *restrict”
sprintf(s,”\n\rUDP getbuf : %i “,buf[0]);

armeducation@

——————————————————-

در انجام یک پروژه تعیین قیمت یکی از مسائل اصلی بین طرفین می باشد. هر چند قبلا مواردی در کانال ذکر شده است :
https://t.me/armeducation/196
https://t.me/armeducation/193
در تعیین قیمت یک پارامتر مهم زمان انجام کار است. اگر کاری از قبل انجام شده باشد که این موضوع مشخص است. زیرا هر کس دیگری هم بخواهد همان کار را انجام دهد اگر باتجربه هم باشد مسلما حدود همین زمان بایستی صرف کند تا کاری انجام شود. ولی اگر آن کار انجام نشده باشد بسته به تجربه انجام کارهای قبلی می توان یک تخمینی از زمان اجرا و تخصص استفاده شده در آن در نظر گرفت. چیزی که این زمان در نظر گرفته (در نتیجه قیمت در نظر گرفته) را دچار خطا می کند مشکلاتی است که در حین اجرای کار به وجود می آید. ایراداتی که اصلا به فکرتان هم خطور نمی کرد. و می بینید زمان خیلی بیشتری باید در نظر بگیرید تا این مشکلات را حل کنید. گاه بعد از صرف زمان زیاد به این نتیجه می رسید اصلا این روش جواب خوبی نمی دهد و باید از میکرو یا وسایل دیگری استفاده کرد. مشکلاتی از قبیل راه اندازی گرفته تا پیاده سازی الگوریتم و طراحی برد و رفع نویز و … . در اینجا به این نتیجه می رسید که از این تجربه در سایر کارها استفاده کنید تا این زمانی که صرف کرده اید توجیه اقتصادی داشته باشد. پس کارهایی را قبول می کنید که در راستای کاری تان باشد. و اگر احیانا بخواهید کاری را صرفا برای کسی انجام دهید که بدانید در چندین سال آینده نه تنها به درد خود بلکه به درد کس دیگری هم نمی خورد همه زمانی که صرف کرده اید را در قیمت لحاظ می کنید.
اگر با این مورد مواجه شدید که در عمل کاری را مثلا یک تومن پیشنهاد قیمت داده اید ولی در انتها دیده اید دو سه برابر آن صرف آن کرده اید چه احساسی به شما دست می دهد؟ همچنین در کار بعدی اگر این موضوع را لحاظ کنید و قیمت واقعی تری ارائه کنید ولی مشتری اظهار کند زیاد است مجدد چه احساسی به شما دست می دهد!؟ 😊
نظرات و تجربیات خود را به اشتراک بگذارید.

armeducation@

——————————————————-

چندین سال پیش دقیقا ۱۲ اردیبهشت ۹۲(یادمه تحت عنوان پنجمین گردهمایی ایران میکروییها بود) ، در ملاقات با یکی از دوستان یک صحبتی کرد که با توجه به تجربه ای که داشتند جالب بود. ایشون گفتند ۱۰ درصد کار کد زدن است باقیش اینه که مواظب باشی کدتو ندزدند! این جمله می تواند خنده دار باشه ولی قسمتی از واقعیت است. تجربه ای که ممکنه براتون پیش اومده باشه که یک مدت زمانی را می گذارید تا کاری را انجام دهید و بعد از آن چندین برابر را باید بگذارید تا مطالبات وصول شود.
👈 پس از همان اول از طرف صادقانه بپرسید می خواهید زمان وصول طلب را جزو زمان پروژه لحاظ کنم یا از اول میدهی تا حساب نکنم! 😂

armeducation@

——————————————————-

با تشکر از دوستانی که با توجه به اعلام کانال
https://t.me/armeducation/379
نظرات خود را ارائه کردند و می کنند.
مسلما پذیرای نظرات، انتقادات، پیشنهادات و نقدهای منصفانه شما هستیم، زیرا کار خود را وجود آنکه وقت بسیاری برای آن گذاشته شده عاری از ایراد نمی دانیم و فیلم های بعدی بر اساس فیدبک ها می باشد.

armeducation@

——————————————————-

کامل ترین مجموعه لایبرری ها :
متن و فایل های ارسالی از طرف جناب آقای عارف زارعی راد :
با سلام خدمت دوستان عزیزم
ضمن تشکر از زحمات مدیران گروه ها(و کانالها و سایت ها)ی الکترونیک کشورمون که تک تکشون در شرایط سخت علمی کشورمون خیلی به پیشرفت تک تک ما ها کمک میکنن: امیدوارم روزی بیاد که بجای بهانه جویی ها و پشت سر هم حرف زدن ها و نان کسی را آجر کردن، به فکر همراهی و همکاری و همدلی با هم باشیم و برای پیشرفت بیشتر خودمان و جامعمان قدم برداریم. به عنوان یک هدیه از جانب بنده که رشته تحصیلی ام ربطی به الکترونیک ندارد، مجموعه ای جمع آوری کردم از #لایبرری های در سطح اینترنت و همین گروه ها. که شاید کامل ترین مجموعه لایبرری ها هست که یکجا جمع آوری شده. امیدوارم مفید واقع بشود. تنها خواسته ام از شما این است که بجای بهانه جویی های بی جهت و عیب جویی از دیگران و بحث های چپ و راستی، به فکر هم افزایی باشیم. اوضاع جامعمون واقعا اسفناک است. کمتر کسی پیدا میشود که علمش را برای رضای خدا در اختیار دیگران قرار دهد. با آرزوی موفقیت.
#altium
#library
.initlib
Library
#pcblib

فایل ها پس پس از پیغام ارسال میشوند.
—————————
@armeducation
فایل ها را در ۱۰ قسمت به صورت مستقل زیپ کرده ام
👇👇👇👇👇👇👇👇👇

لینک شروع در کانال :

armeducation/405

دانلود مستقیم :

لینک دانلود مستقیم کامل ترین مجموعه لایبرری ها :
http://zarkoob.persiangig.com/document/all%20libraries/

armeducation@

——————————————————-

ساخت یک کنترلر CNC بهانه من برای شروع یادگیری میکروکنترلرهای ARM !
یادمه سال ۱۳۸۹ بعد از فارغ التحصیلی، رفته بودم خدمت یکی از مهندسین باتجربه برق مهندس شکراللهی (البته الان دیگه دکتر هستند 😊 ) ایشون پیشنهاد کردند در زمینه ساخت کنترلر CNC کار کنم و حمایت هایی را در این زمینه خواهند داشت. هر چند حمایت ها به دلایل شرایط بازار ادامه پیدا نکرد و منجر به محصول خاصی نشد ولی این “سرآغازی بود برای آشنایی با میکروکنترلرهای ARM “. در ابتدا چون از میکروکنترلر LPC2378 که آن موقع رایج تر بود می خواستم استفاده کنم لازم بود پریفرال های مورد استفاده را راه اندازی کنم. با توجه به نبود منابع آموزشی در آن زمان، وقت بسیار زیادی صرف جستجو و … می شد تا یک راه اندازی انجام شود ، آن هم در مباحث مقدماتی! چه برسد به پیاده سازی اصل کار که هدف بود.
یادش بخیر اون قدیما در انجمن ایران میکرو به خاطر همین راه اندازی های ساده چه مباحثی بود. مثل الان خیلی آموزش ها در دسترس نبود. خیلی از دوستان و ارتباطات به خاطر همین فضاها شکل گرفت.

armeducation@

——————————————————-

برای کسی که با حیطه میکروکنترلرها و میکروکنترلرهای ARM مواجه می شود و احیانا بخواهد در آن وارد شود این سوال مطرح است که به فرض که اینها را یاد گرفتیم، “چه فایده و چه کاربردی دارد ” ؟
– مسلما کسانی که در این حیطه هستند لااقل قسمتی از کاربردها را می دانند و از اطلاعاتشان استفاده نیز می کنند و در این حین به اطلاعات خود نیز می افزایند.
– اگر بخواهید در این حیطه در جایی مشغول کار شوید که قطعا تسلط به میکروکنترلرهای ARM نیاز است. اینکه چقدر تسلط لازم است و چه میکروهایی بایستی کار کرده باشید بستگی به آن محل و نوع کارشان دارد.
– اگر هم بخواهید خودتان کار کنید که قطعا بایستی دانسته هایی داشته باشید و در حین پروژه ای که گرفته اید موارد مجهول را بتوانید حل کنید.
بهانه شروع یادگیری شما می تواند انجام یک کار باشد. مثلا ساخت X. یا ….
بهانه شروع یادگیری شما چه بوده است؟
در صورت تمایل به انتقال تجربه، بهانه شروع خود را به بنده ارسال فرمایید تا منتشر شود.

armeducation@

——————————————————-

تبدیل الگوریتم به کد
یکی از مشکلاتی که در کارآموزان مختلف مشاهده شده ضعف در تبدیل الگوریتم به کد است. در اینجا دیگر مشکل راه اندازی پریفرال های مختلف نیست، بلکه مشکل نحوه پیاده سازی یک کاری با این پریفرال هاست.
در نظر بگیرید می خواهید یک عملکردی را به کد تبدیل کنید. در اینجا بایستی بستگی به نوع عملکرد بتوانید مرحله به مرحله کار را توسعه دهید تا کار مورد نظر انجام شود . مهارت برنامه نویسی چیزی است که در اینجا خود را نشان می دهد و این مهارت جز با تمرین حاصل نمی شود. تمرین هم نیاز به صرف وقت دارد. این تمرین را، خود فرد باید بعد از دیدن آموزش انجام دهد. بنابراین تمرین قسمت بعدی فرایند آموزش برای یادگیری است. در اینجا اگر این تمرینات کاربردی باشد بعدا در کارهایی که انجام می شود نیز می توان استفاده کرد.
تمرینات ترکیبی شروع خوبی برای این کار است :
https://t.me/armeducation/236
همچنین تبدیل کارهای بزرگ به قسمتهای کوچکتر :
armeducation/127

armeducation@

——————————————————-

تفاوت آموزش و پروژه در چیست؟
در آموزش مسئول انجام پروژه های شخصی فرد نمی توان بود و در پروژه مسئول آموزش فرد. مگر آنکه ذکر شود.
این به چه معناست :
– در آموزش به راه اندازی ها و عملکردها وآشنایی با نحوه عملکرد توابع و نحوه تغییرات در آنها پرداخته می شود و خود فرد با فراگیری آن و تمرین بایستی بتواند خود پروژه ای که مد نظر دارد را انجام دهد .
– در پروژه تحویل داده شده، انجام درست کار مهم است و اینکه بتوان با تغییر دیفاین ها و … طبق نیاز کارهای متفاوتی انجام داد همین طور عملکرد کلی توابع و نحوه بهربرداری از آن، پشتیبانی و خدمات پس از فروش.

 

armeducation@

——————————————————-

به اطلاع می رساند سوالات مربوط به فیلم های مقدماتی آموزش کار با نرم افزار STM32CubeMX و توابع HAL که در کانال :
https://t.me/armeducation/359
و در وب سایت :

فیلم های آموزش مقدماتی کار با نرم افزار STM32CubeMX و توابع HAL


لینک آن قرار داده شده است، در فروم ایران میکرو تاپیک مخصوص آن مطرح نمایید:
goo.gl/g3Nvra
با سپاس 🙏

armeducation@

——————————————————-

در حیطه برنامه نوسی میکروکنترلرهای ARM می توان اطلاعات زیادی از منابع مختلف بدست آورد. چه از منابع آموزشی چه از رفرنس های اصلی مانند رفرنس منوال و … . مسئله ای که در اینجا مهم به نظر می رسد این است که این همه اطلاعات در کجا بدرد می خورد و چه کارایی دارد؟ بنابراین ابتدا باید در کاری این اطلاعات لازم باشد که شما برای دانستن آن به منابع مراجعه کنید و آن را یاد بگیرید. در غیر این صورت می بینید زمان زیادی گذاشته اید و انبوهی از اطلاعات دارید که بسیاری از آنها را هیچ گاه لازم نمیشود استفاده کنید. چه بسا این زمان صرف کاری میشد نتیجه ای بهتری هم حاصل می شد. بنابراین لازم است هدف گذاری داشته باشید و مطابق آن هدف اطلاعات لازم را کسب کنید.
اجازه بدهید واضح تر بیان کنم. در توضیحات رجیسترها میبینید شرح بیت های مختلفی که از آن در حالت عمومی تر استفاده نکرده اید داده شده است. یا سمپلهایی برای حالت های مختلف یک پریفرال وجود دارد. یا کامپایلرهای دیگری هم وجود دارد… به صورت کلی یک آشنایی با عملکرد داشته باشید بد نیست تا حداقل در جایی نیاز شد بدانید این قابلیت است و به آن مراجعه کنید. ولی اینکه زمان زیادی صرف آن بکنید تا آن را انجام دهید، بدون اینکه کاری با آن داشته باشید یا کارایی داشته باشد جالب به نظر نمی رسد. از این رو خواندن هزاران صفحه منوال و … برای شروع لازم نیست بلکه بر اساس نیاز به قسمت مربوطه مراجعه و استفاده نمود. به عنوان نمونه در کاری نیاز به استفاده از gpio و وقفه و سریال و ADC و تایمر و ال سی دی کاراکتری و SD کارت و اترنت است. در این بین ممکن است تنظیمات کلاک هم لازم شود. در حین کار ممکن است ببیند DMA هم لازم شده و نمونه گیری را با آن انجام دهد بهتر است، پس به سراغ این پریفرال هم می رود. و … بنابراین آیا در این حین فرد وقت خود را صرف usb Device می کند!؟ طبیعتا در حیطه کاری مربوطه هر چقدر لازم باشد دانش خود را زیاد می کند.

armeducation@

——————————————————-

در مورد استفاده از رجیسترها یک دیدگاه اینست که کار با رجیسترها مشکل است بنابراین بایستی صرفا از توابع cmsis و یا HAL یا … استفاده نمود. یکی از دلایلی هم که برای دشوار بودن ذکر می شود اینست که بایستی هزاران صفحه منوال میکرو را مطالعه کرد تا بتوان قسمتی را راه اندازی و استفاده کرد. ولی در صورتی که بنا به نیاز یا از سر یادگیری بیشتر و عمیق تر چند پریفرالی را به صورت رجیستری راه اندازی و استفاده کرده باشید متوجه می شود به این گونه که تصور هم می کردید هم نیست.
@armeducation
برای راه اندازی و استفاده از پریفرالی به صورت رجیستری، مانند:

GPIO,EXTI,UART,Timer,ADC,DAC,RTC
SPI,I2C ,DMA

و …
ممکن است نیازی نباشد تمام رجیسترهای آن را مطالعه کرد چه برسد هزاران صفحه منوال. همچنین گاها نیازی نیست تمام بیت های رجیسترها را بدانید چه کاری می کند و چه تنظیمی روی آن باید اعمال کنید. تنظیماتی روی تعدادی بیت از یک سری رجیسترهای یک پریفرال که انجام دهید برای پیکربندی و راه اندازی اولیه کافی است. در این حالت بهتر است جلوی هر خط در اینیشیالیز، توضیح مختصری از منوال ذکر شود تا در صورتی که بخواهیم تغییراتی در پیکربندی اعمال کنیم به سادگی این کار انجام شود. همچنین سایر موارد تبادل دیتا با توابعی انجام می شود که در داخل این تابع به صورت مستقیم از رجیستر مربوطه بدون موارد اضافه استفاده شده که فقط کافیست از این تابع استفاده شود.
البته باید به این مسئله دقت داشت که مواردی مانند SD – USB – Ethernet و .. مباحث پیشرفته ای هستند که اجرای عملی آن نیازمند دانش پایه از نحوه اجرای پروتکل های مربوطه می باشد :
armeducation/151
ابزار آموزش چه کمکی می تواند انجام دهد؟
armeducation/150

armeducation@

——————————————————-

لیستی از لینک فیلم های آموزشی قبلی برای دسترسی سریع تر :
– ایجاد یک پروژه اصولی و صحیح در کیل ۴٫۷۴ با میکرو STM32F103VE :
armeducation/72
– نصب کیل ۵ و …:
armeducation/75
– ایجاد پروژه در کیل ۵ در ۲ دقیقه! :
armeducation/76
– استفاده از سیمولاتور کیل :
armeducation/85
– اجرای عملی استفاده از نرم افزار Hyper Terminal :
armeducation/137
– اجرای عملی استفاده از نرم افزار Terminal :
armeducation/139
– شرح رجیسترهای systemtick :
armeducation/200
– شرح مثال systemtick :
armeducation/201

armeducation@

——————————————————-

نقل یک خاطره از اولین مشاوره :
سالها قبل فکر کنم سال ۹۱ یا ۹۲ که هنوز بحث میکروکنترلرهای ARM به این شکل فراگیر نبود و دانسته ها از آن کم بود، در یک دوره آموزشی با یک فن آموز که اکنون یک شرکت فعال در زمینه آسانسور دارند، با توجه به اینکه دید کاملی نسبت به انواع میکروکنترلرهای ARM نداشتند و تفاوتی هم برایشان نمی کرد چه میکرویی از این دسته میکروکنترلرهای ARM یاد بگیرند پیشنهاد شد به جای ARM7 از سری های ARM Cortex m3 استفاده شود.
به این ترتیب در سالهای بعد که بنا به نیاز کاری با مدل های جدیدتر و دیگری از میکروهای ARM مانند STM32 خواستند کار کنند زمان کمتری برای یادگیری آن صرف کردند. زیرا آنها نیز در دسته Cortex m3 قرار داشت .
همچنین پیشنهاد شد با توجه به مشابهت دو میکروی lpc1768 و lpc2368 ، جای میکروی lpc2368 بر روی برد آموزشی موجودی که در اختیار داشتند از lpc1768 استفاده شود. به این ترتیب دیگر نیازی نبود با صرف مبلغ ۲۰۰ -۲۵۰ تومان برد آموزشی دیگر تهیه شود.
صرفه جویی در زمان و هزینه، مسلما مطلوب همه ما می باشد.

armeducation@

——————————————————-

یک کاربرد اشاره گر در اشاره گر :
مواردی وجود دارد که بخواهید از طریق ادرس مقدار دهی انجام دهید که می توانید از این طریق انجام دهید. به عنوان نمونه :
void ّFunction(unsigned int index)
{
*(__IO uint16_t *) (ADDRESS)= index;

}

armeducation@

——————————————————-

مجموعه فیلم های آموزش کار با نرم افزار STM32CubeMX و توابع HAL

۱-۱- نحوه ایجاد پروژه در نرم افزار STM32CubeMX برای keil و پروگرام کردن بر روی برد
armeducation/270
۲-۱- نحوه تنظیمات در نرم افزار STM32CubeMX برای خروجی کردن پایه ها
armeducation/282
۲-۲- نحوه تنظیمات در نرم افزار STM32CubeMX برای ورودی کردن پایه ها
/armeducation/284
۳-۱- نحوه تنظیمات در نرم افزار STM32CubeMX برای وقفه خارجی
armeducation/287
۴-۱- نحوه تنظیمات در نرم افزار STM32CubeMX برای پورت سریال و ارسال یک رشته
https://t.me/armeducation/290
۴-۲- دریافت یک کاراکتر و رشته از پورت سریال با استفاده از توابع HAL
https://t.me/armeducation/295
۴-۳- دریافت یک کاراکتر از پورت سریال با استفاده از وقفه در توابع HAL
https://t.me/armeducation/301
۵-۱- راه اندازی تایمر و وقفه آن با تنظیمات در STM32CubeMX
https://t.me/armeducation/331
۵-۲- راه اندازی PWM با تنظیمات در STM32CubeMX
https://t.me/armeducation/334
۶-۱- راه اندازی ADC با تنظیمات در STM32CubeMX
https://t.me/armeducation/341
۶-۲- استفاده از وقفه در راه اندازی ADC با تنظیمات در STM32CubeMX
https://t.me/armeducation/343
۷-۱- راه اندازی DAC با تنظیمات در STM32CubeMX
https://t.me/armeducation/346
۸-۱- راه اندازی RTC با تنظیمات در STM32CubeMX
https://t.me/armeducation/353
۸-۲- وقفه RTC با تنظیمات در STM32CubeMX
https://t.me/armeducation/358

armeducation@

——————————————————-

همان طور که ذکر شد از کاربردهای واحد DAC پخش فایل صوتی wave است.
برای این کار لازم است دیتا در فایل صوتی به صورت مناسب در DAC قرار داده شود. از آنجا که فایل wav نیاز به دیکد خاصی ندارد ساده تر است ابتدا فایل صوتی با نرم افزارهای مبدل به این فرمت در بیاید و سپس در فلش خود میکرو یا sd کارت برای قرائت و پخش قرار داده شود. فرمت یک فایل wave بدین صورت می باشد :
http://soundfile.sapp.org/doc/WaveFormat/
همان طور که مشاهده می شود ۴۴ بایت اول اطلاعات فایل است و بعد از آن دیتا قرار دارد. پخش فایل صوتی می بایستی بر اساس این اطلاعات قرار داده شده در ابتدای فایل انجام شود. دیتای فایل صوتی دیکد نشده به صورت های ۸ بیت و ۱۶ بیت(mono,stereo) می باشد.

armeducation@

——————————————————-

بنا به نیاز می توان به منابع مختلفی که سایت NXP برای هر کدام از میکروکنترلرهای خود قرار داده مراجعه نمود. به عنوان نمونه برای LPC1768 :
Processors and Microcontrollers > Arm®-Based Processors and MCUs > LPC Cortex-M MCUs > LPC1700 Cortex-M3 > LPC1768FBD100
https://www.nxp.com/products/processors-and-microcontrollers/arm-based-processors-and-mcus/lpc-cortex-m-mcus/lpc1700-cortex-m3/512kb-flash-64kb-sram-ethernet-usb-lqfp100-package:LPC1768FBD100?tab=Documentation_Tab

armeducation@

——————————————————-

بنا به نیاز می توان به منابع مختلفی که سایت st برای هر کدام از میکروکنترلرهای خود قرار داده مراجعه نمود. به عنوان نمونه برای stm32f103ve :
Home > Microcontrollers > STM32 32-bit ARM Cortex MCUs > STM32 Mainstream MCUs > STM32F1 Series > STM32F103 > STM32F103VE
http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32-mainstream-mcus/stm32f1-series/stm32f103/stm32f103ve.html

armeducation@

——————————————————-

آیا کیفیت یک آموزش با تعداد ساعت تدریس رابطه مستقیم دارد!؟
در فیلم های آموزشی چه آنها که در کانال ارائه شده و چه در مجموعه های آموزشی که در فروشگاه کویر قرار دارد، سعی بر این بوده که در کمترین زمان ممکن، به صورت مناسب انتقال مطلب صورت پذیرد و بدین ترتیب زمان اضافه از فن آموز گرفته نشود. بلکه فن آموز زمان خود را صرف تمرین و رفع ایراداتی نماید که برای خودش پیش می آید. زمان اضافه شامل موارد مختلفی می شود که نیازی نیست به زمان فن آموز برای مشاهده فیلم اضافه شود. زمان باز شدن نرم افزار، زمان کامپایل شدن، زمان پیدا کردن متن مورد نظر، زمان تایپ یک برنامه و سکوت بین جملات و …
به این دلیل این موضوع ذکر شده که : در این مجموعه جهت تهیه پاورپونیت ها و تست عملی مثال ها، ضبط و “ویرایش فیلم ها”، وقت بسیار زیادی گذاشته شده است. این همه در جهت این بوده است که یک مجموعه آموزشی مفید و کاربردی و با محتوای خالص آموزش در اختیار شما قرار داده شود که مورد رضایت شما واقع شود.

armeducation@

——————————————————-

در این پست :
https://t.me/armeducation/80
این سوال مطرح شد که :
– عملکرد این ماکرو به چه نحو است :
#define LED1_ON(x) ((x) ? (LPC_GPIO1->FIOSET = LED1) : (LPC_GPIO1->FIOCLR = LED1));
در ماکرو می توان به یک عبارت دیفاین شده، یک ورودی شرطی تعریف کرد. به عنوان مثال در عبارت ذکر شده، در صورتی که ورودی x برابر ۱ باشد عبارت اول اجرا می شود (یعنی LPC_GPIO1->FIOSET = LED1) و اگر x برابر صفر باشد عبارت دوم اجرا می شود(یعنی LPC_GPIO1->FIOCLR = LED1) . عملگر (x) ? نیز یک if مختصر می باشد. به عنوان نمونه دیگر این ماکرو را در نظر بگیرید و عملکرد آن را بررسی کنید :
#define LCD_E(x) GPIOC->ODR = (GPIOC->ODR & ~PIN_E) | (x ? PIN_E : 0);

armeducation@

——————————————————-

مواردی که به عنوان نکات انجام کار و … ذکر می شود(و گاها ساده به نظر میرسد!) نتیجه تجربیاتی هست که بارها و بارها برای بنده اتفاق افتاده و شاهد مواجه شدن دیگران با این موارد نیز بوده ام. به عنوان نمونه آخر از فن آموزان، در کاری لازم بود USART1 را به USART2 تبدیل کنند تا در برد قابل استفاده باشد. فقط یک جا انداختن تبدیل نکردن USART1 را به USART2 و در نتیجه کارنکردن برنامه، باعث معطلی و اتلاف زمان بی مورد شده بود.

armeducation@

——————————————————-

 

یکی از مراحل انجام کار بعد از راه اندازی اولیه پریفرال ها و اجرای الگوریتم به کد، رفع ایرادات برنامه ( دیباگ) است. با رعایت کردن اصولی می توان جلوی بعضی ایرادات ساده را گرفت.
– در پست قبلی :
https://t.me/armeducation/245
یکی از موارد ایجاد باگ، کپی نادرست ذکر شد.
– در پیکربندی یک پریفرال تنظیماتی هم که به صورت پیش فرض انجام شده، نیز قرار دهید. به عنوان نمونه پاور در سریال ۰ در lpc1768 به صورت پیش فرض فعال است. ولی در سریال ۲ فعال نیست. در صورتی که این تنظیم را در سریال ۰ قرار ندهیم و بخواهیم در کاری سریال ۰ را به ۲ تغییر دهیم، فراموش می کنیم پاور را فعال نکرده ایم!
– تمام تنظیمات شامل کلاک و پاور، تنظیمات پایه، تنظیمات خود پریفرال تنظیمات زیرروال وقفه در یک جا قرار دهیم که در صورت نیاز به آن در برنامه دیگری با یک کپی بتوان همه تنظیمات را منتقل کرد و چیزی جا نمانده باشد.
– اینیشالیز به صورت درست انجام شده باشد و سایر را تنظیمات را تغییر ندهد :
https://t.me/armeducation/177
به این ترتیب یک تنظیم انجام شده، سایر تنظیمات در آن رجیستر را بهم نمی زند.
– در نظر بگیرید بیت ۰ رجیستری را به این صورت ست کرده باشید :
LPC_SC->EXTMODE = 1«۰;
حال اگر همین قسمت را بخواهیم توسعه دهیم برای بیت ۱ و .. :
LPC_SC->EXTMODE = 1«۱;
به این ترتیب با ست شدن بیت ۱، بیت ۰ که قبلا ست شده بود ریست می شود! در حالی که اگر از اول به جای= از |= استفاده کرده بودیم در توسعه چنین خطایی ایجاد نمی شد.

👈 با دیباگ کردن از روی برد می توان به بسیاری از خطاها با تطبیق عمل انجام شده با چیزی که در ذهن بوده و پیاده سازی شده، پی برد. به این نکته توجه داشته باشید که گاهی دیباگ و رفع ایراد ممکن است بیش از زمان انجام اصل کار زمان ببرد!

armeducation@

——————————————————-

در صورتی که بخواهید وسایل جانبی مانند ال سی دی کاراکتری،گرافیکی، ایتوپرام خارجی ، spi flash و …. را راه اندازی کنید تفاوتی در عملکرد وجود ندارد که لزوما این راه اندازی با رجیستر باشد یا توابع cmsis یا توابع HAL. بنابراین این سوال که کتابخانه ای می خواهم برای راه اندازی این موارد حتما با HAL یا .. ، مناسب نیست. در هر صورت بایستی کتابخانه ای اد شود و از توابع آن برای راه اندازی استفاده شود. حال اگر در کتابخانه این وسیله، از توابع cmsis یا توابع HAL استفاده شده باشد بایستی این کتابخانه ها هم به پروژه اد شود.

armeducation@

——————————————————-

نحوه استفاده از تاخیر delay با استفاده از systemtick شرح داده شده در :
https://t.me/armeducation/200
بدین صورت می باشد :
void SysTick_Handler (void)
{
SysTickCnt++;
}
/***************************/
void Delay (unsigned long tick)
{
unsigned long systickcnt;

systickcnt = SysTickCnt;
while ((SysTickCnt – systickcnt) < tick);
}
/*———————————–*/
/*———————————–*/
int main(void)
{
SysTick_Config(SystemFrequency/1000 – 1);
while (1)
{
//……
printf(“www.arm-education.ir”);
Delay (1000);
}
}

armeducation@

——————————————————-

تاخیر تخمینی که با تغییر عدد در حلقه for زمان تاخیر را می توان تغییر داد ،می تواند بدین صورت باشد:
void delay_ms (uint32_t Time)
{
uint32_t i;

i = 0;
while (Time–) {
for (i = 0; i < 16666; i++);
}
}
عدد ۱۶۶۶۶ برای کلاک ۱۰۰ مگاهرتز زمان حدود یک میلی ثانیه را تاخیر ایجاد خواهد کرد. با یک تایمر می توان این عدد را دقیق انتخاب کرد :
https://t.me/armeducation/238
این مدل تاخیر باعث اتلاف زمان پردازنده در مواردی که پردازنده بایستی کارهای دیگری را به صورت polling انجام دهد، خواهد شد.

armeducation@

——————————————————-

در برنامه نویسی لازم است در مواقعی از تابع تاخیر استفاده شود. مثلا بین هر ارسال در ال سی دی کاراکتری یا ارسال روی ماژول sim900 و زیروال وقفه و … (هر چند این موارد می تواند بدون تاخیر delay هم انجام داد) این delay میتواند یک تاخیر دقیق یا تخمینی (تاخیر کیلویی !) باشد. حال در نظر بگیرید برنامه را به میکروی دیگری با سرعت بیشتر یا کمتر منتقل کرده اید. طبیعتا تاخیر کیلویی متناسب با سرعت آن پردازنده عمل می کند و این ممکن است کار را خراب کند. استفاده از تاخیر دقیق با systemtick
https://t.me/armeducation/201
باعت می شود با تنظیم کلاک در ابتدا زمان تاخیر تغییر نکند.

armeducation@

——————————————————-

در بعضی سمپل ها فقط یک فونت کوچک برای نمایش روی TFT LCD قرار داده شده است. در صورت نیاز بایستی آرایه هگزادسیمال سایر فونت ها (ASCII_8x16 , ASCII_24x32,ASCII_16x24 و ..)را ایجاد کرد و از آن استفاده نمود. در اینجا یک پارامتر بایستی به ورودی تابع نمایش یک کاراکتر اضافه شود و آن هم فونت می باشد :
WriteOneChar(uint16_t x,uint16_t y, uint8_t num, uint16_t PenColor, uint16_t BackColor, uint8_t font)
به جای ورودی فونت به عنوان نمونه می توان موارد از قبل تعریف شده :
#define FONT_8x16 0
#define FONT_16x24 1
را قرار داد و در تابع نمایش یک کاراکتر شرط های مختلف به ازای ورودی فونت های مختلف قرار داد تا از آرایه همان فونت استفاده شود:
void WriteOneChar(uint16_t x, uint16_t y, uint8_t num, uint16_t PenColor, uint16_t BackColor, uint8_t font)
{

if( font==FONT_8x16){
….
}
if( font==FONT_16x24){
…..
}
…..

armeducation@

——————————————————-

کاراکتر ۱ به صورت هگزادسیمال در آرایه ASCII_16x24 :
const uint16_t ASCII_16x24[] ={
……
/* ‘۰’ */
/* ‘۱’ */
۰x0000, 0x0100, 0x0180, 0x01C0, 0x01F0, 0x0198, 0x0188, 0x0180,
۰x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
۰x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* ‘۲’ */
……
}
این آرایه در نمایش یک کاراکتر فراخوانی می شود :
ASCII_16x24[num*CHAR_H+pos];

armeducation@

——————————————————-

در نظر بگیرید هر بار که دستگاهی که دارای یک تاچ باشد به تغذیه متصل شود، نیاز باشد ۴ نقطه اولیه برای کالیبراسیون داده شود! برای اولین بار که کالیبراسیون انجام شد، بایستی این نقاط در محلی ذخیره شود تا در دفعات بعد نیازی به انجام این کار نباشد. در اعمال نقاط کالیبراسیون نیز می توان ملاحظاتی را در نظر گرفت تا هر نقطه ای را قبول نکند. زیرا در صورت اشتباه وارد کردن، تشخیص نقاط بعدی درست انجام نمی شود. همچنین یک باتون در قسمت تنظیمات می توان قرار داد تا در صورت نیاز در حین کار وارد کالیبراسیون شود.

armeducation@

——————————————————-

در نظر بگیرید در یک تاچ، مختصات ۴ نقطه خوانده شده به صورت زیر بدست بیاید :
Point0 : X=236, Y=3559
Point1 : X=3905, Y=3531
Point2 : X=179, Y=209
Point3 : X=3918, Y=158
بنابراین با لمس تاچ مختصاتی بدست می آید که در رنج این اعداد است. با چند شرط ساده می توان موقعیت لمس شده را بدست آورد.
بنابراین لمس درست ۴ نقطه اولیه برای تشخیص نقاط بعدی مهم می باشد.

armeducation@

——————————————————-

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

Netbeans
(https://netbeans.org/features/cpp/index.html) Eclipse CDT
(https://www.eclipse.org/cdt/) CodeLite
(https://codelite.org/) Geany
(http://www.geany.org/)

——————————————————-

در هدر 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@

——————————————————-

در یک پروژه که کتابخانه های زیادی لازم است اضافه شود قائدتا هدرهای آنها نیز لازم است ابتدای برنامه include شود.
https://t.me/armeducation/92
در اینجا می توان تمام این اینکلاد کردن ها را در داخل یک هدر دیگری قرار داد و فقط آن هدر را به ابتدای برنامه اینکلاد کرد. همچنین در صورتی که دیفاین های برنامه هم زیاد باشد می توان در همین هدر قرار داد و باعث خلوت تر صفحه کردن برنامه main شد. این موضوع بیشتر در استفاده از کتابخانه های SMSIS و HAL و… استفاده می شود.

armeducation@

——————————————————-

بیشتر موارد با کپی کردن قسمت هایی از برنامه های مختلف، برنامه جدید خود را تکمیل می کنیم. بدین ترتیب در زمان خیلی کمتری کار جدیدی را شروع خواهیم کرد. در حین انجام این کار بسیار باید دقت کرد که به صورت درست محتوای کپی را مطابق میل بر اساس کار جدید، تغییر دهیم. زیرا بیشترین خطا در برنامه در همین جا رخ می دهد و اگر در این مرحله دقت نشود زمان بسیار بیشتری باید صرف رفع ایرادی کنیم که فکر می کنیم درست است!

armeducation@

——————————————————-

با استفاده از دستور atoi() در کتابخانه stdlib.h می توان یک رشته را به عدد تبدیل کرد. نمونه ای از کاربرد ساده  این دستور در پورت سریال است که از دیتای دریافت شده که در رشته به عدد تبدیل شده، استفاده نمود.

armeducation@

——————————————————-

گاهی موارد انجام جزییات کار یا پروژه ای بیش از انجام اصل خود کار زمان بر است!
بنابراین در انجام کاری کاملا باید جزییات کار مشخص باشد.

armeducation@

——————————————————-

در این لینک :

بررسی gpio در میکروکنترلرهای STM32


به طور مختصر یک بررسی روی پریفرال gpio در میکروکنترلرهای STM32F10x برای ست و ریست کردن یک پایه انجام شده است. در این قسمت در یک پروژه به سادگی از توابع Hal استفاده شده است. ایجاد پروژه با STM32CubeMX انجام شده است.
دقت کنید تفاوت را بین پروژه ای که به سادگی کار می کند و پروژه ای که به سادگی از توابع استفاده می کند.

armeducation@

——————————————————-

در نظر بگیرید شما قصد دارید در جایی استخدام شوید. آن شرکت (چه کوچک چه بزرگ و معروف) یک شرایط کاری را برای شما مطرح می کند. به صورت شفاهی هم عنوان می شود که اگر کار شما خوب باشد طبیعتا همکاری ادامه دارد و … . بعد از مدتی با توجه به حسن انجام کار(یا اتمام قرارداد) اعلام عدم نیاز می شود! و شما این را با آن حرف در تناقض میبینید. حالتی که ممکن است پیش آمده باشد بدین صورت است که به جای اینکه کار به صورت پروژه ای به کسی داده شود، فردی را مدتی استخدام می کنند و بعد از انجام پروژه اعلام عدم نیاز می شود.  در کل نیاز موقت به فردی دارند ولی این نیاز به صورت طولانی مدت وانمود می شود.

armeducation@

——————————————————-

با تمرینات ساده ترکیبی مرحله به مرحله در مباحث میکروکنترلرهای ARM که یک کاری را برای ما انجام می دهد، هم می توان با چند پریفرال از میکرو کار کرد و هم تسلط خود را به زبان برنامه نوسی C افزایش داد و از مرحله آشنایی به مرحله تسلط رسید.

armeducation@

——————————————————-

به عنوان نمونه از تمرینات ساده ترکیبی تمرین از مبحث Timer و EXTI و ADC و GPIO و USART
به روش سنجش زمان یک پریود، فرکانس پالس ورودی را اندازه گیری کنید و در پورت سریال نمایش دهید. به این صورت که پالس ورودی به پایه وقفه خارجی متصل است و با لبه اول تایمر شروع به شمارش و در لبه دوم پالس، تایمر متوقف می شود. با محاسبات لازم، فرکانس محاسبه و در خروجی قرار داده می شود.
با تغییرات کوچکی در برنامه می توان دیوتی سایکل پالس ورودی را هم محاسبه نمود.
برای ایجاد پالس می توانید از یک تایمر دیگر استفاده کنید که با پتانسیومتر ورودی، مقدار فرکانس یا دیوتی سایکل را می توان تغییر داد. خروجی پالس تایمر دیگر را به ورودی وقفه خارجی متصل نمایید.
در صورتی که ADC از مقدار مشخصی بیشتر شد یک LED روشن و اگر کمتر شد LED خاموش شود.
آیا نمی توان بدون نیاز به وقفه خارجی، محاسبه فرکانس را انجام داد!؟

armeducation@

——————————————————-

تجربه عملی برنامه نویسی یکی از دانشپذیران دوره آموزشی برای کاربا واحد ADC:
در روال گفته شده
https://t.me/armeducation/216
برای خواندن آنالوگ به دیجیتال از رجیستر دیتا
ADC_StartCnv();
while (!ADC1->SR & (1 « ۱)){};
ADC_StopCnv();
در دستور while جای پرانتز و ! کمی جابجا شده بود:
while ! (ADC1->SR & (1 « ۱)){};
بنابراین این خط عملکرد خود را نداشت و برنامه در آن گیر می کرد و اصلا خارج نمی شد.
کوچکترین مشکلی در برنامه نویسی ممکن است منجر به عدم کارکرد صحیح در عمل شود. همچنان که عدم تنظیم یک بیت در اینیشیالیز (چالش یک بیت) می تواند منجر به عدم کارکرد آن پریفرال شود :
https://t.me/armeducation/61
تا زمانی که دانشپذیران اقدام عملی برای برنامه نویسی و اجرا روی برد میکروکنترلر نکنند و با مشکل مواجه نشوند نمی توانند ایرادات خود را متوجه شوند.

armeducation@

——————————————————-

ای کاش فعالان در صنف و حیطه الکترونیک خود را بیشتر همکاران هم بدانند تا رقبایی که هر کار غیر اخلاقی برای حذف دیگری می کنند. شرط همکار بودن حمایت معقول از هم می باشد :
https://t.me/KnowledgePlus/602
– به همکاری گفته می شود این سخت افزار یا برنامه دستگاه ما که طراح یا برنامه نویس قبلی ما روی آن کار کرده ایراداتی دارد که شما آن را رفع کن. سوال این است که چرا خود طراح یا برنامه نویس قبلی رفع ایراد نمی کند!؟ ممکن است به غلط پاسخ داده شود که وقت نمی کند، یا دیگر با ما همکاری ندارد یا به او دسترسی نداریم. “بدون تحقیق” قبول می کنیم یا شاید فرد را هم بشناسیم پشت سر او بد هم می گوییم تا با خراب کردن همکار، کار را به ما بدهند! (در اینجا حالت های دیگری مانند تحویل ندادن درست کار به کارفرما هم هست که مد نظر نیست)
– در مجموعه ای که کاری در اختیار کسی دیگر بوده و فرد جدیدی قرار است آن را در اختیار بگیرد، مهم است که چرا با فرد یا افراد قبلی ترک همکاری شده است. در صورت “عدم تحقیق” در این مورد یا بی توجهی به علل آن و پذیرفتن آن کار، ممکن است همان اتفاق برای ما هم بیافتد.

armeducation@

——————————————————-

یکی از مواردی که برای مبحث یادگیری میکروکنترلرهای ARM لازم است، استفاده از برد می باشد. این برد می تواند یک برد آموزشی آماده باشد یا بردی باشد که خود فرد طراحی کرده است. معمولا برای یادگیری و راه اندازی سریع تر بهتر است از برد آموزشی آماده استفاده شود. البته در پست های قبلی ذکر شد با هزینه کمتری آموزشهای مقدماتی میکروکنترلرهای ARM را با استفاده از یک هدر برد ساده به صورت عملی می توان پیاده سازی کنید:
https://t.me/armeducation/203
برای ساخت یک دستگاه هم بهتر است ابتدا با یک Evaluation Board و بِرد بُرد تست های سخت افزار و برنامه انجام شود و سپس برد نهایی زده شود.
این پست در باره مواردی است که بهتر است برای یک برد آموزشی لحاظ شود تا کارایی بهتری داشته باشد، صحبت خواهد شد.
-در حالت کلی باید این امکان باشد که کلیه امکانات میکروکنترلر مخصوصا قسمت های پیشرفته مانند SD,USB,Ethernet,Can و …تست شود.
– چند باتون از چند پورت وجود داشته باشد تا بتوان مبحث ورودی gpio و وقفه خارجی را در چند پایه انجام داد. یکی از این باتون ها ورودی کانتر باشد بهتر خواهد بود.
– چند led از پورت های مختلف برای خروجی gpio وجود داشته باشد. همچنین اگر یکی از این led ها از خروجی یکی از pwm ها و یکی از این led ها خروجی تاگل سخت افزاری تایمرها باشد، بهتر خواهد بود.
– یک درایو Serial to USB برای اتصال راحت به یو اس بی pc . شناسایی این درایو روی ویندوز ۸ و ۱۰ هم انجام شود بهتر خواهد بود.
– سخت افزار لازم برای اتصال یک میکروفن و اتصال به یکی از کانالهای ADC .
– یک سوکت برای اتصال به اسپیکر از خروجی DAC برای پخش صوت.
– پایه های هدر بر روی برد منطبق با TFT LCD بدون تداخل با پایه های اصلی دیگر مانند DAC و SD و …
– ورودی تغذیه بین ۵ تا ۱۲ یا ۲۴ ولت.
– استفاده از پایه insert در sd کارت.
بنابراین طراح با اشراف به عملکرد تمام پایه های میکرو و کاربرد آن می تواند محصول کاربرپسندتری ارائه کند.

armeducation@

——————————————————-

یکی از امکانات میکروکنترلرها واحد PWM است.
حال ممکن است در میکرویی مانند LPC1768 دارای واحد مجزایی باشد یا در میکرویی مانند STM32F103 در واحد تایمر قرار داشته باشد. بنا به میکرو این واحد می تواند دارای امکانات و تعداد کانال های خروجی مختلفی باشد. در این واحد با مقداری که برای فرکانس مشخص می کنید می توانید duty cycle را در حین پالس دهی تغییر دهید. این تغییر duty cycle کاربردهای مختلفی می تواند داشته باشد. ساده ترین آن کم نور و پور نور کردن یک led متصل به میکرو می باشد. در کل(گاهی به جای DAC) در جایی که بخواهیم با کاهش و افزایش duty cycle مقدار dc ولتاژی را تغییر دهیم کاربرد دارد. نمونه دیگر کاربرد PWM ، در پخش فایل صوتی می باشد.

armeducation@

——————————————————-

همان طور که در پست های قبلی ذکر شد و در عمل هم اجرا شد، یکی از قابلیت های میکروکنترلرهای ARM تبدیل شدن به رم ریدر توسط USB Device می باشد:
https://t.me/armeducation/65
https://t.me/armeducation/66
در نظر بگیرید در کاری مرتب باید در sd کارت توسط میکرو فایلی بریزید، سپس خود فایل و محتوای آن را چک کنید. هر بار باید sd کارت را از برد میکرو جدا کرده و به رم ریدر بزنید تا بتوانید این چک کردن را انجام دهید.
به جای این کار می توانید در برنامه تبدیل کننده میکروکنترلر ARM به رم ریدر توسط USB Device، کار خود را انجام دهید که هر بار که کابل یو اس بی را از pc به برد زدید محتویات داخل sd کارت هم مشاهده شود و دیگر نیازی به رم ریدر نباشد! در اینجا باید به این نکته که البته در پست های قبلی :
https://t.me/armeducation/151
به آن اشاره شد توجه داشته باشید که در صورتی که چندین کار لازم باشد انجام شود ممکن است نتوان در یک پروژه با هم آنها را فعال کرد. مثلا تبدیل شدن میکرو به رم ریدر برای SD کارت با RL و هم زمان خواندن و نوشتن روی SD با RL .

armeducation@

——————————————————-

همان طور که ذکر شد از کاربردهای واحد DAC پخش فایل صوتی wave است.
برای این کار لازم است دیتا در فایل صوتی به صورت مناسب در DAC قرار داده شود. از آنجا که فایل wav نیاز به دیکد خاصی ندارد ساده تر است ابتدا فایل صوتی با نرم افزارهای مبدل به این فرمت در بیاید و سپس در فلش خود میکرو یا sd کارت برای قرائت و پخش قرار داده شود. فرمت یک فایل wave بدین صورت می باشد :
http://soundfile.sapp.org/doc/WaveFormat/
همان طور که مشاهده می شود ۴۴ بایت اول اطلاعات فایل است و بعد از آن دیتا قرار دارد. پخش فایل صوتی می بایستی بر اساس این اطلاعات قرار داده شده در ابتدای فایل انجام شود. دیتای فایل صوتی دیکد نشده به صورت های ۸ بیت و ۱۶ بیت(mono,stereo) می باشد.

armeducation@

——————————————————-

کی از امکانات میکروکنترلرها واحد DAC است.
راه اندازی این واحد ساده است و بعد از تنظیمی ساده کافیست عددی در داخل رجیستر دیتا قرار داده شد تا به آنالوگ بین ۰ تا ۳٫۳ ولت تبدیل کند. از کاربردهای این واحد که در پست های قبلی هم از آن در عمل استفاده شد پخش فایل صوتی wave است.
در میکروی LPC1768 تعداد ۱ کانال دیجیتال به آنالوگ ۱۰ بیتی قرار داده شده است. در بعضی مدل میکروهای STM32F1 تعداد ۲ دیجیتال به آنالوگ ۱۲ بیتی قرار دارد و در بعضی دیگر چنین واحدی ندارد. امکاناتی هر کدام از این میکروها در این واحد در اختیار قرار می دهد :
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 :
• ۱۰-bit digital to analog converter
• Resistor string architecture
• Buffered output
• Power-down mode
• Selectable speed vs. power
• Maximum update rate of 1 MHz.

armeducation@

——————————————————-

در پست های قبلی ذکر شد انتخاب میکرو بایستی متناسب با کاری باشد که قرار است انجام شود.
https://t.me/armeducation/62
قیمت (در کنار امکانات) مورد مهمی است که مخصوصا برای کار تولیدی نمی توان آن را نادیده گرفت. بسیار گفته می شود که چون میکروهای stm قیمت کمتری دارد بنابراین با آن کار کن یا شروع کن! قیمت کمتر صحیح است ولی فقط قیمت نیست. اگر دو مدل میکرو تقریبا به یک میزان کار شما را راه می اندازد، احتمال زیاد آن که قیمت کمتری دارد را انتخاب می کنید.
به عنوان نمونه، دو میکروی هم رده مانند LPC1768 و STM32F107VC که هر دو cortex-m3 دارای ۱۰۰ پایه و اترنت و USB , CAN هستند. این دو را از همه لحاظ با هم مقایسه کنید. در حال حاضر قیمت LPC1768 دو سه هزار تومانی از STM32F107VC گرانتر است. موارد بارزتر:
LPC1768 :
کلاک ۱۰۰ مگاهرتز، ۵۱۲ کیلو فلش، ۸ ورودی ADC و یک خروجی DAC ، تعداد ۴ تایمر ۳۲ بیتی، ۴ سریال …
STM32F107VC :
کلاک ۷۲ مگاهرتز، ۲۵۶ کیلو فلش، ۱۶ ورودی ADC و دو خروجی DAC ، تعداد ۷ تایمر ۱۶ بیتی، ۵ سریال …
همان طور که مشاهده می شود در مواردی امکانات lpc بیشتر است در مواردی دیگر stm. بنابراین نوع کار، قیمت، چیدمان پایه ها، سمپل های مناسب، امکانات یک پریفرال مورد نیاز، پشتیبانی و … پارامترهای تعیین کننده در انتخاب میکرو هستند.

armeducation@

——————————————————-

کاربرد عبارت volatile :
ممکن است در برنامه ای با این کلمه در تعریف متغییر مواجه شده باشید. همچنین در دیفاین رجیسترها نیز به صورت __IO استفاده شده است :
__IO uint32_t FIODIR;
ممکن است متغییر در پردازش جاری تغییر نکند مثلا در وقفه مقدار آن تغییر کند، بدون آنکه کامپایلر متوجه این تغییر شود. و این تغییر را اعمال نکند. با استفاده از این کلمه در تعریف متغییر در هر بار فراخوانی اسم متغیر در طول برنامه اصلی، مقدار آن را از محل حافظه خوانده شده و اعمال می شود.

armeducation@

——————————————————-

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

armeducation@

——————————————————-

در پست :
https://t.me/armeducation/29
به صورت عملی ذکر شد که می توان با DAC پخش فایل صوتی انجام داد. در پست قبلی هم ذکر شد که با ADC می توان نمونه گیری از فایل صوتی داشت. با ترکیب این دو می توان نمونه گیری و پخش فایل صوتی به صورت “هم زمان” و “غیر همزمان” را انجام داد. در اینجا محاسبات نرخ نمونه برداری با ADC و زمان قرار دادن نمونه های گرفته شده در DAC برای استفاده از واحد تایمر اهمیت دارد.

armeducation@

——————————————————-

یکی از امکانات میکروکنترلرها واحد ADC است.
در میکروی LPC1768 تعداد ۸ کانال آنالوگ به دیجیتال قرار داده شده است و در میکروهای STM32F1 تعداد ۱۶ کانال ADC قرار دارد. امکانات واحد ADC در میکروهای مختلف متفاوت است.
ساده ترین عملکرد این واحد خواندن یک کانال است. بعد از پیکربندی اولیه روال کار در این حالت بدین صورت می باشد :
۱- دستور آغاز تبدیل
۲- منتظر شدن برای تبدیل ولتاژ ورودی به مقدار دیجیتال خواندن این مقدار
۳- پایان تبدیل
و نمایش مقدار قرائت شده برروی نمایشگر
حالت های مختلف دیگری برای استفاده از آنالوگ به دیجیتال وجود دارد. خواندن پشت سر هم از یک کانال و خواندن پشت سر هم از چند کانال از جمله این حالات هستند که تنظیمات خاص خود را دارد و بنا به نیاز از آنها استفاده خواهد شد. سرعت نمونه برداری و دقت نمونه برداری پارامترهای مهم این واحد هستند. .
از کاربردهای ADC خواندن سنسورهای آنالوگ و نمونه برداری از ولتاژ ورودی(مثلا ولتاژ برق شهر و سیگنال صوت ) می باشد.

armeducation@

——————————————————-

در میکروکنترلرهای ARM تعدادی تایمر قرار داده شده است. هر میکرویی تعدادی تایمر با امکانات مختلفی دارد. در این پست :
https://t.me/armeducation/59
اشاره ای به تفاوت تایمرها در میکروهای LPC و STM32 شده است.
در LPC1768 , LPC1788 از شرکت NXP تعداد ۴ تایمر ۳۲ بیتی وجود دارد و واحدهای pwm و mcpwm و QEM دارای پریفرال های جداگانه می باشند.
در میکروی stm32f103ve از شرکت ST تعداد ۸ تایمر ۱۶ بیتی وجود دارد که در دسته بندی های تایمر پیشرفته و عمومی و پایه قرار میگیرد. pwm و mcpwm و QEM نیز در همین تایمر قرار دارد و واحد مجزایی ندارد. تعداد تایمرها در مدل های میکروهای stm32 با هم یکسان نیست. بنابراین در انتخاب میکرو لازم است به نوع کاری که قصد انجام دارید توجه بیشتری داشته باشید که مطابق امکانات میکرو باشد.

armeducation@

——————————————————-

تفاوت کار فکری و یدی چیست!؟
ممکن است این تجربه را داشته باشید که در انجام کارهایی در حیطه الکترونیک (طراحی برد یا برنامه نویسی و …) ذهنتان آن قدر درگیر انجام کار است که شب موقع استراحت نیز نمی توانید ذهنتان از فکر چگونگی حل مشکلات انجام کار، خارج کنید.

armeducation@

——————————————————-

در مورد بحث کار و اشتغال مطلب مفیدی خواندم
که قسمتی از آن را باز نشر می کنم:
بیشترشان می‌خواهند کارمند شوند و حقوق بالاتر از یک‌میلیون و ٧٠٠‌هزار تومان درخواست می‌دهند. مهارت خاصی بلد نیستند و ته‌تهش به معدل بالای نمراتشان تأکید دارند یا مثلا می‌گویند در دانشگاه دولتی درس خوانده‌اند
مهارت کارجویان در سطح انتظار کارفرمایان نیست.
در فرهنگ ما ایرانی‌ها دکتر و مهندس‌شدن، مدیر و رئیس‌شدن از کودکی به‌عنوان ارزش شغلی به بچه‌ها آموخته می‌شود و بخش عمده‌ای از سیل تقاضای ورود به دانشگاه هم ناشی از همین نگاه است. جالب است که رشته‌های فنی و حرفه‌ای با همین نگاه از ابتدا مورد استقبال قرار نگرفت و خانواده‌های زیادی خواهان تحصیل بچه‌هایشان در رشته‌هایی بودند که از آنها دکتر و مهندس تولید می‌شود.
مهارت‌های دانشگاهی با مهارت‌هایی که بازار کار به آنها نیاز دارد، تطابقی ندارد.
در کشورمان آموزش‌ها براساس نیاز بازار کار نیست و در شرایطی که افراد آموزش‌های تئوری را در دانشگاه‌ها دریافت می‌کنند، نیاز بازار کار چیز دیگری است.
مشکل فرهنگی-> جوانان آموزش ندیده‌اند و خانواده‌ها به کارمندی و آب باریکه از گذشته روی آورده‌اند و به آن یقین دارند.

armeducation@

——————————————————-

در پست های قبلی بر روی این مطلب تاکید شد که
• پیش نیاز کار با میکروکنترلرهای ARM ، آشنایی با زبان C می باشد.
https://t.me/armeducation/78
برای یک دوره مقدماتی میکروکنترلرهای ARM مواری از زبان برنامه نویسی C که بیشتر در عمل به کار می آید بدین صورت می باشد :
۱- انواع داده، متغییر، ثوابت و عمگرها
۲- استفاده از توابع stdio -> در پورت سریال استفاده خواهد شد.
۳- حلقه while و for و شرط if و switch
۴- آرایه و رشته
۵- تابع و توابع کتابخانه ای
۶- اشاره گرها
اینها مواردی هستند که در عمل از آن استفاده می شود.
بنابراین حداقل لازم برای یک دوره مقدماتی میکروکنترلرهای ARM ، ، آشنایی با زبان C و یک هدر برد :
https://t.me/armeducation/203
والبته پروگرامر می باشد.

armeducation@

——————————————————-

با توجه به پست قبلی :
https://t.me/armeducation/153
در میکروکنترلر lpc1788 نیز برنامه SD کارت با توابع RLکیل که با کیل ۴ ایجاد شده بود و با کیل ۵ کامپایل و بر روی برد ریخته شد بود، کار نکرد.
بنابراین به تفاوت کیل در عدم کارکرد دقت داشته باشید.

armeducation@

——————————————————-

در DMA بایستی نوع انتقال را مشخص نماییم :
Mem-Mem
Mem-Peripheral
Peripheral –Mem
Peripheral-Peripheral
مثلا در Mem-Peripheral در نظر بگیرید کاراکترها در رشته ای قرار دارد و قرار است توسط پورت سریال ارسال شود. مبدا حافظه رم و مقصد پورت سریال و آغاز انتقال . بدین ترتیب بدون استفاده از تابعی مانند UART0_SendString و معطل شدن در این تابع ارسال انجام می شود!

armeducation@

——————————————————-

در صورتی که بخواهید با هزینه کمتری آموزشهای مقدماتی میکروکنترلرهای ARM را به صورت عملی پیاده سازی کنید می توانید از یک هدربرد استفاده کنید. در هدر برد امکاناتی بر روی برد قرار داده نشده و فقط خود میکرو و خروجی Jtag یا SW جهت پروگرام کردن وجود دارد و سایر پایه ها جهت هر استفاده ای بیرون کشیده شده است. شاید هم یک LED متصل به یکی از پایه های میکرو گذاشته باشند!
با قرار دادن چند LED و مقاومت روی بِرد بُرد و اتصال پایه های خروجی برد میکرو به آن قسمت خروجی GPIO تست می شود.
با قرار دادن چند سوییچ و Pull up کردن آن و اتصال پایه های برد میکرو به آن، قسمت خروجی GPIO و وقفه خارجی تست می شود.
با استفاده از یک مبدل یو اس بی به سریال و اتصال پایه های سریال به آن، قسمت UART را می توان به صورت عملی اجرا کرد.
با استفاده از یک پتانسیومتر و اتصال سر وسط آن به پایه های ورودی آنالوگ و قرار دادن نتیجه در سریال، واحد ADC را می توان استفاده کرد.
با اتصال پایه خروجی DAC در میکرو به یک اسپیکر می توان پخش فایل صوتی انجام داد.
خروجی تایمر و PWM را یا می توان توسط اسیلوسکوپ مشاهده یا به LED های روی برد برد متصل و با کاهش فرکانس امکان مشاهده آن را فراهم کرد.
نتیجه RTC روی همان پورت سریال قابل مشاهده است.
اتصال LCD کاراکتری و کیپد و سون سگمنت هم به هدر برد به سادگی انجام می شود.

armeducation@

——————————————————-

در این پست
https://t.me/armeducation/140
ذکر شد که ممکن است وقفه متوالی گزینه مطلوبی نباشد و در روند کارمان اختلال ایجاد کند. به عنوان یک راه حل می توان از DMA استفاده نمود. DMA مخفف Direct memory access به معنای دسترسی مستقیم به حافظه بدون درگیر شدن cpu می باشد. این دسترسی چه مشکلی از ما حل می کند!؟ با تنظیماتی که در این واحد انجام می شود آدرس مبدا دیتا مشخص می شود(در اینجا مثلا رجیستر دیتای سریال) و آدرس مقصد هم مشخص می شود(در اینجا یک آرایه در فضای رم) و با مشخص بودن تعداد انتقال همین طور طول انتقال، آغاز کار انجام شده و در انتها بر اساس تنظیم وقفه مربوطه اعلام می شود که انتقال انجام شده و می توانید هر کاری صلاح میدانید انجام دهید!
در اینجا درگیر نبودن cpu برای انتقال دیتا مسئله مهمی است که تا در عمل در کاری با این مشکل مواجه نشوید پی به اهمیت آن نخواهید برد.

armeducation@

——————————————————-

در مبحثی مانند 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@

——————————————————-

در تمام میکروکنترلرهای arm-cortex m واحد system tick timer قرار داده شده است. این تایمر ۲۴ بیتی با تابع SysTick_Config که در هدر core_cm3.h قرار دارد، فعال شده و بر اساس زمان ورودی تابع وارد زیرروال وقفه خود می شود:
void SysTick_Handler (void)
{
SysTickCnt++;
}
به سادگی می توان از این متغییر شمارنده SysTickCnt برای محاسبه زمان دقیق استفاده کرد. به عنوان نمونه با تنظیم ورودی تابع، هر ۱۰ میلی ثانیه یک بار وارد زیروال وقفه شده و یکی به شمارنده SysTickCnt اضافه می شود.

armeducation@

——————————————————-

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

armeducation@

——————————————————-

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

armeducation@

——————————————————-

معمولا کسانی که تازه به حیطه اجرای پروژه های الکترونیک وارد شده اند، قیمت کمتری (شاید هم خیلی کمتری) برای انجام کار طلب می کنند. پارامترهای مختلفی وجود دارد که باعث می شود بعد از مدتی دیگر با قیمت پایین کار نکنند. یکی از آنها این است که کاملا به عدم تناسب بین هزینه و درآمدشان واقف می شوند. بدین معنا که می بینند به ازای خدمتی که در جامعه دیگران برای آنها انجام می دهند چه قیمتی باید پرداخت کنند و خودشان به چه قیمتی خدمتی را ارائه می کنند. مدت زمانی که به این نتیجه میرسند در افراد مختلف متفاوت است.
مسئله جالبی که بعد از به این نتیجه رسیدن برایشان به وجود می آید، این است که : از کسانی که به قیمت پایینی خدمتی در این حیطه انجام می دهند گله مند می شوند (البته در همه صنف ها بدین گونه است) غافل از اینکه خود این گونه بوده اند!

armeducation@

——————————————————-

گاهی لازم است یک متغییر در کتابخانه ای که به پروژه اد شده تغییر کند و در برنامه اصلی از آن استفاده شود. به سادگی با تعریف این متغییر از نوع extern این کار انجام می شود. در تایع اصلی متغییر تعریف می شود :
extern int x;
و همین طور در کتابخانه ای که به پروژه اد شده به این شکل تعریف شده و می تواند مقدار دهی شود :
int x;

armeducation@

——————————————————-

در واحد اترنت میکروکنترلرهای ARM پروتکل های مختلفی پشتیبانی می شود که به شرح زیر می باشد :
– UDP
– TCP/IP
– Http
– SNMP
– SMTP
– …

armeducation@

——————————————————-

در صورتی که با نوعی از میکرو کار کرده اید و برای کاری نیاز شده با مدل دیگری کار کنید ممکن است این دیدگاه را داشته باشید که هر دوی اینها از یک شرکت هستند، پس تنظیمات مثل هم است. موقعی متوجه این دیدگاه اشتباه می شوید که تنظیمی را عینا بدون دیدن منوال میکرو از مدل دیگر کپی کرده اید و وقت زیادی هم صرف شده که چرا کار نمی کند? . با خود می گویید مگر در مدل دیگر کار نمی کرد پس اینجا هم باید کار کند! ? غافل از اینکه ممکن است حتی در یک بیت اختلاف تنظیم وجود داشته باشد یا اختلاف اساسی تر باشد.
تفاوت هایی بین lpc1768 و lpc1788 هست. همچنین بین سری های STM32 (STM32F0,STM32F1 ..)
وقتی هدری که ابتدا include می کنید عوض شود وجود تفاوت هایی را بایستی مد نظر قرار داد. در هر صورت رفرنس یورز منوال یا رفرنس منوال همان سری می باشد.

armeducation@

——————————————————-

در صورتی که بخواهید از پریفرالی استفاده کنید بایستی یک پیکربندی(اینیشیالیز) انجام شود. در اینجا لازم است ابتدا رجیسترهای مربوطه ریست شود و سپس مقدار دهی شود. مثلا :

GPIOD->CRL &= ~0xF000000;
GPIOD->CRL |= 0x2000000 ;

این موضوع با توجه به پست

armeducation/80

در رابطه با عملگر ~=& می باشد.
به نظر شما این کار چه ضرورتی دارد!؟

armeducation@

——————————————————-

در بعضی از میکروکنترلرهای ARM واحد اترنت وجود دارد(Ethernet 10/100 MAC) و یک آی سی مانند DP83848CVV یا LAN8720A  فقط وظیفه ایجاد یک لایه فیزیکی را دارد. در میکروکنترلرهایی که این واحد را ندارند می بایستی از یک آسی مانند ENC28J60 استفاده شود که میکرو و آی سی به صورت spi  با هم تبادل دیتا دارند و تبادل دیتا با lan را همگی این آی سی انجام می دهد.

armeducation@

——————————————————-

در کنترلرهای مختلف بنا به کاربرد، امکانات مورد نظر و قیمت … ، از میکروکنترلرهای مختلفی استفاده می شود. به عنوان نمونه در این کنترلر، میکروکنترلر مورد استفاده ۳۲Bit TI TMS 570 Dual-core از شرکت تگزاس اینسترومنت معرفی شده است.در پست

armeducation/44

اشاره ای به این میکرو شده است.

armeducation@

——————————————————-

به دلیل گستردگی مباحث و کاربرد زیاد بعضی پریفرال های میکروکنترلرهای ARM،استفاده کامل از بعضی قسمت های میکروکنترلر نیاز به یک فوق تخصص دارد. بدین معنا که غیر از مبحث راه اندازی اولیه، وقت فراوانی بایستی برای صرف شود تا بتوان به تمام ابعاد آن مسلط شد. این زمانی اتفاق می افتد که بخواهید کاری انجام دهید.
به عنوان نمونه کوچک :
– بعد از راه اندازی اترنت و .. چگونه می توان Modbus TCP و … را پیاده سازی کرد؟
– پیاده سازی پروتکل های ارتباطی بین میکرو و PLC و درایو و .. را چگونه انجام داد؟
– چگونه از راه دور برد میکروکنترلر را پروگرام کرد؟
– …
صرف چنین زمانی برای انجام کارهای کاربردی و این چنینی، ارزش افزوه بیشتری برای شما خواهد داشت.

armeducation@

——————————————————-

از توابع ChaN برای کار با SD کارت (همچنین USB Flash) نیز می توان استفاده کرد.
این توابع open Source در وب سایت Chan شرح داده شده است :

http://elm-chan.org/fsw/ff/00index_e.html

با استفاده از این توابع می توان به صورت فایلی و سکتوری با SD کارت (همچنین USB Flash) ارتباط داشت. این توابع قابل استفاده در میکروکنترلرهای مختلفی می باشد و فقط کافیست با اینیشیالیز اولیه آن را بر روی میکروکنترلر مربوطه پورت کرد.
– در صورتی که بخواهیم هم زمان قسمت SD کارت و USB را راه اندازی کنیم می توان یکی را با استفاده از این توابع و دیگری را با RL کیل راه اندازی کرد.
– البته قبلا ذکر شد که :

armeducation/105

– اگر بتوان توابع پایه نند فلش را جایگزین توابع پایه کار با sd کارت کرد (مانند جایگزین توابع پایه برای usb flash) شاید بتوان با نند فلش هم با این توابع به صورت فایلی کار کرد.

armeducation@

——————————————————-

گاهی برای ساخت یک برنامه اجرایی گرافیکی بین برد میکروکنترلر و pc، نیاز است در pc از ویژاآل استدیو برای ساخت این واسط گرافیکی استفاده شود. در این پست

https://t.me/armeducation/142

یک تمرین ساده از این خصوص داده شد.
در این جا چکیده ای از کار با ویژآل C# قرار داده می شود. امید است مفید واقع شود .
??????

در کانال قرار دارد.

armeducation@

——————————————————-

گاهی موارد مشاهده می کنید در انجام یک کار انگار فقط خودتان هستید که بروی این موضوع کار می کنید و کس دیگری را پیدا نمی کنید که بتواند به شما کمک کند یا روی این موضوع کار کرده باشد و به نتیجه رسیده باشد یا به شما این تجربه را نمی دهد.
اینجاست که تمام راه های ممکن را امتحان می کنید، تمام جزییات را باید بررسی کنید، تمام وقت خود را صرف آن کنید …
ارزش و قیمت این تجربه چقدر است!؟

armeducation@

——————————————————-

به جهت تعیین سرعت ارسال دیتا یا خواندن دیتا برای تست سرعت در SD کارت می توان دیتای حجیمی را پشت سر هم بر روی SD قرار داد یا از SD کارت خواند. به صورت کاربردی تر این دیتای خوانده شده می تواند یک فایل عکس باشد.

در نظر بگیرید قرار است یک عکس ۸۰۰ در ۴۸۰ پیکسل ۲۴ بیتی(سه بایتی) را روی FTF LCD 7 اینچ نمایش دهید. برای هر پیکسل لازم است سه بایت دیتا از SD کارت خوانده شود :

a = fgetc
b = fgetc
c = fgetc

و به نحو مقتضی در TFT قرار داده شود.
بنابراین لازم است این کار ۸۰۰*۴۸۰ = ۳۸۴۰۰۰ بار انجام شود یعنی ۳۸۴۰۰۰*۳ بایت = ۱۱۵۲۰۰۰ بایت معادل ۱٫۱۵ مگا بایت.
البته برای سنجش دقیق زمان می توان از تایمر استفاده کرد. بدین صورت که ابتدای پروسه تایمر فعال انتهای پروسه هم مقدار شمارنده در متغییری قرار داده شود و با یک محاسبه کوچک زمان دقیق پروسه بدست می آید.

armeducation@

——————————————————-

در صورتی که فایل های لازم در یک پروژه با RL کیل که با کیل ۴ ایجاد شده باشد (فایل های lib. هم داخل آنها وجود داشته باشد) در پوشه پروژه وجود داشته باشد، با کیل ۵ هم باز شده و اجرا خواهد شد.
تا کنون تنها موردی که مشاهده شد برنامه SD کارت که با کیل ۴ ایجاد شده است و با کیل ۵ که بروی برد ریخته شد،ولی کار نکرد در برد میکروکنترلر stm32f103ve بوده است!

armeducation@

——————————————————-

همان طور که ذکر شد از توابع RL کیل و همچنین توابع ChaN برای کار با SD کارت (همچنین USB Flash) می توان استفاده کرد.
مواردی مانند SD – USB – Ethernet  و .. مباحث پیشرفته ای هستند که اجرای عملی آن نیازمند دانش پایه از نحوه اجرای پروتکل های مربوطه می باشد. همچنین در یک میکروکنترلر رجیسترهای بسیار زیادی برای این پریفرال ها وجود دارد.
در اینجا محاسن و معایب یک پروژه که از توابع RL کیل استفاده شده بر اساس تجربه ذکر می شود :
–  همینکه در مباحث پیشرفته که دارای پیچیدگی های زیادی است، توابعی باشد که بدون درگیر شدن با جزییات بتوان کار مورد نظر را انجام داد، بسیار خوب است. در صورتی که بخواهیم خودمان توابعی را بنویسیم که به عنوان نمونه به صورت فایلی کاری را در SD کارت انجام دهد و … نیازمند صرف زمان زیادی خواهیم بود.
–  در صورتی که سرعت تبادل مهم باشد، ممکن است این توابع نتواند نیاز ما را تامین کند.
–  در صورتی که چندین کار لازم باشد انجام شود ممکن است نتوان در یک پروژه با هم آنها را فعال کرد. مثلا هم زمانی استفاده از USB و SD کارت، تبدیل شدن میکرو به رم ریدر برای SD کارت و هم زمان خواندن و نوشتن روی SD ،و …

armeducation@

——————————————————-

یکی از قابلیت های میکروکنترلرهای ARM ارتباط با SD کارت می باشد.
میکروکنترلرهایی که فقط دارای پریفرال SPI می باشند، با استفاده از رابط  SPI با SD کارت ارتباط برقرار می کنند.
میکروکنترلرهایی که دارای پریفرال SDIO می باشند، با استفاده از این رابط  با SD کارت ارتباط برقرار می کنند:

 https://t.me/sisoog/35

ساده ترین حالت خواندن و نوشتن در SD کارت، سکتوری است.
با استفاده از توابعی می توان به صورت فایلی با SD کارت کار کرد. یک فایل ایجاد کرد و داخل دیتا قرار داد، فایلی را باز کرد و اطلاعات آن را خواند و …
توابع RL کیل و همچنین توابع ChaN این قابلیت را ایجاد می کنند که به صورت فایلی با SD کارت کار کرد.

armeducation@

——————————————————-

? ابزار آموزش چه کمکی می تواند انجام دهد؟
–  آموزش تسهیل کننده فرایند آشنایی، راه اندازی و نحوه انجام کار است. بنابراین وقت اصلی افراد بعد از یادگیری و آموزش، صرف انجام کاری می شود که قصد انجام آن را دارند. زیرا کارآموزان وقت زیادی صرف راه اندازی قسمت های مختلف نخواهند کرد.
? یک آموزش دارای چه ویژگی هایی باید باشد؟
–  از پایه مطلب شروع شود و مرحله به مرحله با مثال به جلو رود. مثال های مرحله به مرحله نقش مهمی در یاددهی نحوه توسعه کار خواهد داشت.
–  عملی باشد. یعنی با توجه به مطالب ذکر شده به صورت عملی همان موقع اجرا شود و نتیجه مشاهده شود. بنابراین داشتن تجهیزات کافی لازمه کار می باشد.
–  به غیر از مواردی که جهت انجام یادگیری، بایستی از ابتدا انجام شود سایر موارد از قبل انجام و تست شده باشد.
–  دارای جزوه مناسب باشد.
–  دارای محیط مناسب و نظم برگزاری باشد.
? کارآموز دارای چه ویژگی هایی باشد؟
–  پیش نیازهای مطلب را بداند. در غیر این صورت با مواردی مواجه می شود که بایستی از آنها در کار استفاده کند ولی با آنها آشنا نیست.
–  هر جلسه موارد انجام شده را انجام دهد و تمرینات داده شده را اجرا کند. مشکل اصلی در اینجا “حوصله و وقت” ندارم است :
“حوصله ندارم”
این عبارت مانع بزرگی برای رشد علمی در رشته الکترونیک است. یک شرط لازم برای پیشرفت در الکترونیک و برنامه نویسی، وجود حوصله زیاد برای پرداختن به جزییات پیچیده و وقت گیر است.

https://t.me/KnowledgePlus/307

✔ در یک جمله وظیفه مدرس داشتن دایکیومنت آموزشی قوی و انتقال مطلب مناسب و وظیفه فن آموز تمرین مطالب گفته شده می باشد.

armeducation@

——————————————————-

یک تمرین ساده با پورت سریال :
میکروکنترلر با دریافت متنی از پورت سریال، عملی را انجام دهد:
در صورتی که پیام led1on آمد ال ای دی ۱ روشن و وقتی led1off آمد ال ای دی ۱خاموش شود. برای led2 نیز همین طور. همچنین با روشن شدن هر ال ای دی متنی به پورت سریال ارسال شود مثلا ۱onok یا ۱offok …
حال به جای نرم افزار ترمینال در PC، در ویژال C# یا … یک برنامه گرافیکی طراحی کنید که ارسال دستورات سریال را با زدن باتونها فراهم کند و با دریافت متن سریال به آن واکنش نشان دهد.

armeducation@

——————————————————-

مقدار باودریت در سریال با استفاده از تنظیماتی در یک رجیستر در میکروکنترلرها انجام می شود. این تنظیم رابطه مستقیمی با کلاک اعمالی به پریفرال uart دارد که در منوال ذکر شده است. بنابراین در صورتی که تنظیمات کلاک میکرو برروی مقدار مورد نظر نباشد،بدیهیست مقدار باودریت ایجاد شده نیز غلط خواهد بود و در عمل در ترمینال PC چرند دریافت خواهیم کرد.
برای ارتباط بین میکرو و PC لازم است باودریت مقادیر مشخصی باشد مانند ۹۶۰۰ و ۱۱۵۲۰۰ و … . ولی بین ذو میکرو ضرورتی ندارد و می توان مقادیر رند که البته دارای خطای کمتری است، قرار داد.

armeducation@

——————————————————-

در پورت سریال در حالت معمول، وقتی دیتایی در حال دریافت است برنامه منتظر می ماند تا دیتا دریافت شود سپس ادامه کار انجام می شود. خوب این جالب نیست که برنامه متتظر بماند و کار دیگری نتواند انجام دهد.
با استفاده از وقفه به محض دریافت هر کاراکتر برنامه وارد زیروال وقفه شده و می توانیم دیتا را دریافت و ادامه اجرای برنامه انجام می شود.
کلیت تنظیم مربوطه فعال کردن یک بیت در یک رجیستر (بنا به نوع میکرو) و فعال کردن زیروال وقفه سریال می باشد.
هر کاراکتر که به سریال میکرو وارد می شود برنامه وارد زیروال وقفه شده، آن را بررسی می کند که اینتر نباشد و در داخل آرایه ای قرار می دهد. در صورت وارد شدن اینتر، می توان یک فلگ را ست کرد تا در طول برنامه از رشته مربوطه استفاده شود.
حال در نظر بگیرید در کاری مرتب دیتا از پورت سریال وارد می شود. به این ترتیب برنامه مرتب بایستی وارد زیروال وقفه شده تا کاراکترها را دریافت کند و …. .فکر می کنید راه حل چیست!؟

armeducation@

——————————————————-

دستور پیش پردازنده

#ifdef
#ifndef

در مواردی که می خواهید با یک دیفاین سوییچ کردن بین چند مورد را انجام دهید بسیار مفید خواهد بود. در این حالت حجم کدها در حالتی که دیفاین نشده در برنامه در نظر گرفته نمی شود.
به عنوان مثال با تعریف _UART0 از سریال ۰ استفاده شده و در غیر این صورت پیشفرض سریال۱ خواهد بود :

#ifdef __UART0
#define UART LPC_UART0
#else
#define UART LPC_UART1
#endif

armeducation@

——————————————————-

یکی از کاربردهای پورت سریال برای مانیتورینگ برنامه است. بدین ترتیب با خروجی که در هر مرحله داده می شود همین طور اعداد بدست آمده می توان به روند اجرای برنامه نظارت داشت و در صورت بروز مشکل به رفع آن کمک می کند. بهتر است یک کتابخانه ساده داشته باشید که با اضافه کردن آن به پروژه بتوانید نمایش رشته را داشته باشید:

UART0_SendString(“\n\r www.arm-education.ir”);

در صورتی که لازم باشد از سایر پورت های سریال استفاده شود بعد از اینیشیالیز مربوطه با تغییر کوچک، تابع ارسال رشته تغییر خواهد کرد:

UART1_SendString(“\n\r www.arm-education.ir”);

در صورتی که نیاز است رشته و متغییر با هم چاپ شود از printf به سادگی می توان با شناساندن به برنامه،استفاده کرد:

R = 3;
M = 3;
S = 1396;
printf(“\n\r @armeducation. %i / %i / %i “,S,M,S);

armeducation@

——————————————————-

برای نمایش یک عکس معمولی BMP چگونه بایستی دیکد را انجام داد؟
عکس BMP دیکد خاصی ندارد و فقط کافیست اطلاعات اولیه عکس از ابتدای آن خوانده شده:

https://en.wikipedia.org/wiki/BMP_file_format

و بر اساس آن نمایش از The offset, به بعد انجام شود. اطلاعات مهم قابل استخراج :

The bitmap width in pixels
The bitmap width in pixels
The number of bits per pixel
The number of bits per pixel

armeducation@

——————————————————-

آیا کتابخانه های مورد استفاده اجازه را می دهد از چند پریفرال همزمان استفاده شود ؟ تا بحال با این مسئله مواجه شده اید؟
به عنوان نمونه برای راه اندازی اولیه کاری با استفاده از توابع RL کیل، قسمت SD کارت و USB را راه اندازی کرده اید. حال می خواهید هر دو با هم کار کند؟ آیا چنین امکانی با استفاده از توابع RL کیل داده شده است!؟
می خواهید USB و CAN همزمان در STM32 کار کند. آیا چنین امکانی در این میکرو داده شده است!؟

armeducation@

——————————————————-

انجام یک کار بزرگ با تقسیم آن به قسمت های کوچک قابل انجام تر است.
قبلا در پست های گذشته ذکر شد که ممکن است افرادی نتوانند پریفرال ها و قسمت های مختلف را با هم ترکیب کنند که منجر به انجام کاری شود.
به عنوان مثال کوچک، قسمتی جزیی از یک کار نمایش عکس روی TFT است. عکس ها در SD یا USB Flash است و سرعت نمایش مهم است. مراحل کار:
– خواندن یک فایل از SD کارت
– نحوه دیکد کردن یک عکس( عکس با فرمت BMP ساده تر و فرمت های دیگری مثل JPG مشکل تر)
– کار با TFT LCD و نحوه عملکرد آن
حال از ترکیب این که چند مرحله یک نمایش عکس ایجاد می شود. در صورت نمایش صحیح با این مسئله مواجه می شوید که چگونه سرعت نمایش را بالا برد!؟ به سراغ بهینه کردین برنامه ها می روید. سعی در استفاده از حداکثر توان CPU خواهید کرد. راه حل های مختلفی را امتحان می کنید . مانند ریختن در یک فضایی و سپس قرار دادن در ال سی دی که نخواهید مستقیما از SD کارت نمایش انجام شود. در صورت مطلب نبودن ممکن است دنبال یک میکروی قوی تر باشید. اکنون باید برنامه های قبلا نوشته شده را به میکرو جدید منتقل کنید و …..

armeducation@

← چقدر مدت زمان صرف شده تا یک قسمت کوچک به نحو مطلوب انجام شود؟
سایر قسمت ها باقی مانده است! ممکن است همزمان لازم باشد از چند پریفرال استفاده شود. آیا کتابخانه های مورد استفاده این اجازه را می دهد؟ یا خود میکرو چنین امکانی دارد؟
حجمی از دیتا مرتب بایستی منتقل شود و نباید زمان CPU میکرو صرف آن شود چون از انجام سایر کارها باز می مانند. چندین کار بایستی با تقسیم زمان بین آنها انجام شود ….
در اینجا مشخص است که بین راه اندازی اولیه یک یا چند پریفرال تا پیاده سازی یک کار، تفاوت بسیار است.

armeducation@

——————————————————-

در USB Host می توان از دو کلاس کاری برای تبادل دیتا استفاده کرد :

  •  (human interface device class (HID
  •  (mass storage device class (MSC

– کاربرد HID در اتصال کیبورد یو اس بی به میکروکنترلر است.
– کاربرد MSC در اتصال یو اس بی فلاش به میکروکنترلر است.
می توان اتصال پرینتر به USB Host میکروکنترلر را نیز انجام داد و پرینت گرفت!
شرح بیشتر و اجرای عملی جهت آشنایی با HID و MSC در USB Host ذکر خواهد شد.

——————————————————-

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

armeducation@

——————————————————-

در کار با کلاس کاری CDC در USB Device به موارد زیر دقت داشته باشید:
– صرفا ریختن سمپلی که چنین کاری را انجام می دهد مد نظر نیست و این تست جهت آشنایی با این عملکرد می باشد.
– با کار کردن با سمپل مربوطه می توان نقاط ضعف و قوت آن را پیدا کرد.
– اینکه بر اساس نیاز در کجا چه تغییری باید داده شود تا به هدف رسید، مسئله مهمی می باشد.
– در صورتی که سرعت تبادل دیتا مهم باشد باید تست شود آیا این سمپل می تواند این نیاز را برآورده کند!؟

armeducation@

——————————————————-

در USB Device می توان از چند کلاس کاری برای تبادل دیتا استفاده کرد :

Communication Device (CDC) – to realize a virtual COM port
(human interface device class (HID
(mass storage device class (MSC
Audio Device (ADC) – to exchange streaming audio data

شرح بیشتر و اجرای عملی جهت آشنایی با این موارد ذکر خواهد شد.

armeducation@

——————————————————-

سخت افزار USB Device :

(در کانال)
دو پایه D+ و D- مستقیما به پایه های میکرو متصل شده است.
با یک مقاومت پایه D+ به صورت Pull up شده است. با این کار LED مربوطه روشن می شود.

armeducation@

——————————————————-

یکی از امکانات میکروکنترلرهای ARM وجود پریفرال USB است. بدین معنا که دیگر نیازی به یک آی سی واسط برای اتصال به USB نیست و دو پایه D+ و D- مستقیما به پایه های میکرو متصل خواهد شد. در میکروکنترلرهایی که پریفرال USB را داشته باشد بدین صورت آمده است :

 lpc1768 : USB 2.0 full-speed Device controller and Host/OTG controller with DMA
lpc1788 : USB 2.0 full-speed controller configurable for either device, Host, or OTG
stm32f103 : USB 2.0 Full Speed Interface
stm32f107 : USB 2.0 Full Speed Device/Host/OTG Controller with on-chip PHY
میکروکنترلر stm32f103 فقط USB Device دارد و USB HOST ندارد.

در USB Device اتصال بین برد میکروکنترلری و کامپیوتر انجام می شود و در USB HOST اتصال وسیله ای مثل یو اس بی فلش به برد انجام می شود.
و در انتها OTG می تواند هم هاست باشد و هم دیوایس.

armeducation@

——————————————————-

در کار با بعضی پریفرال های یک میکرو مانند SD کارت و … ، صرف آشنایی با عملکرد توابع کافی نیست بلکه مسئله اصلی وجود پروژه ای است که این توابع در آن درست کار کند. در نت نیز آموزش های برای این توابع وجود دارد ولی تا پروژه ای نباشد که این توابع در آن برای میکروکنترلر مورد نظر شما کار کند، عملا فایده ای ندارد!

armeducation@

——————————————————-

ساده ترین و ارزان ترین اینترفیس بین دستگاه و کاربر، led می باشد!
در بعضی دستگاه های صنعتی و تجاری به جهت نیاز نبودن قرار دادن LCD، کاهش هزینه و طول عمر بالاتر از چند led در دستگاه استفاده می شود. مثلا یک led چشمک زن برای نشان دادن اینکه دستگاه در حال اجرای برنامه است، قطع و وصل شده میکرو سوییچ و سنسورها و ..
مثلا برای اینکه مشخص شود چه خطایی در دستگاه اتفاق افتاده چند led قرار داده می شود و عدد باینری که led ها نشان می دهد، نمایان گر نوع خطای رخ داده است. (البته با مراجعه با راهنمای دستگاه) .
در صورتی که صرفا عدد در خروجی قرار است نمایش داده شود طبیعی است که ۷segment دارای وضوح بیشتر و ارزان از LCD می باشد.
بنابراین نمی توان تصور کرد که چون از پروسسوری با قابلیت بالا یا میکروکنترلرهای ARM استفاده می کنید حتما برای دستگاه یک TFT LCD چند اینچ باید قرار داده شود! میکروکنترلرهای ARM قابلیت های دیگری به غیر از TFT LCD ها دارند که لازم می شود از آنها استفاده شود ولی نمایشگر یک ۷Seg یا چند led باشد. البته دستگاهی که دارای نمایشگر LCD هم باشد کاربرپسندتر و دارای ارزش افزوده بیشتری است(به شرط طول عمر مناسب LCD استفاده شده)

armeducation@

——————————————————-

مشاور چه نقشی ایفا می کند؟
برای یک شرکت یا سازمان یا شخصی، اینکه یک کاری چگونه انجام شود از اهمیت زیادی برخوردار است.زیرا در صورت تشخیص اشتباه وقت و هزینه زیادی تلف خواهد شد.
مثلا در حیطه الکترونیک یک کاری با فلان میکرو قابل انجام است ولی با FPGA انجام می شود! یا وجود یک fpga در کنار یک میکرو باعث بهبود عملکرد دستگاه می شود و ….
ممکن است انجام دهنده کار چنین تشخیصی نداشته باشد و فقط کاری که به او محول شده انجام دهد ولی یک مشاور تعیین جهت کلی را انجام می دهد.
دیده شده که به خاطر صرفه جویی یا بی اعتقاد بودن به این مسئله، کاری انجام شده و در عمل این تجربه حاصل شده. یعنی با صرف زمان و هزینه تجربه حاصل شده ولی از تجربه شخص دیگری به عنوان مشاور استفاده نشده است.

armeducation@

——————————————————

بنا به در خواست، لینک فروشگاه و فروم فیلم های آموزشی در کانال برای دسترسی سریع تر قرار داده می شود :

مجموعه فیلم های آموزشی میکروکنترلرهای ARM :
————————————
آموزش کاربردی زبان C در میکروکنترلرهای ARM :
http://goo.gl/PoYFu1
تاپیک در فروم ایران میکرو :
http://goo.gl/hKvO0J
————————————
آموزش مقدماتی میکروکنترلر LPC1788 :
https://goo.gl/l4MmGP
تاپیک :
https://goo.gl/JEo7f9
————————————
آموزش پیشرفته میکروکنترلر LPC1788 :
https://goo.gl/kKt72J
تاپیک :
https://goo.gl/qccMOi
————————————
آموزش مقدماتی میکروکنترلر LPC1768 ورژن جدید :
http://goo.gl/vBlK6N
تاپیک :
http://goo.gl/FVaEnI
————————————
آموزش تکمیلی و پیشرفته میکروکنترلر LPC1768 :
http://goo.gl/YHLD0J
تاپیک :
http://goo.gl/HnLQAH
————————————

——————————————————-

در حالت معمولی با قرار دادن دیتا در پایه های a تا g و dat و فعال کردن سگمنت مربوطه، نمایش در سون سگمنت انجام می شود. ولی می توان با تغییر الگوریتم کار، به شکل دیگری عمل کرد.
در نظر بگیرید برای نمایش ۸ یا ۹ یا .. تعداد بیشتری از سگمنت ها در سون سگمنت روشن شود. طبیعتا جریان کشی بیشتر خواهد شد. می توان در هر بار فقط یک سگمنت را روشن کرد و این کار به صورت چرخشی ادامه پیدا کند. مثلا می خواهید عدد ۲ را نشان دهید. ابتدا فعال کردن شماره سون سگمنت۱ -> a روشن و بعد a خاموش ، بعد b روشن و بعد b خاموش ، d روشن و بعد d خاموش ، e روشن و بعد e خاموش، g روشن و بعد g خاموش. بعد از این سراغ شماره بعدی سون سگمنت و عددی که قرار هست روی آن نمایش داده شود به همین شکل …..
فکر می کنید چه موقع نیاز به تغییر الگوریتم برنامه نویسی به منظور کاهش جریان کشی خواهید شد!؟

armeducation@

——————————————————-

گاهی آنقدر در کاری که در حال انجام آن هستیم غرق می شویم که اصول اولیه را فراموش می کنیم.
– ایرادی در عدم کارکرد پریفرالی وجود دارد، فراموش می کنیم چک کنیم پاور و کلاک آن درست است؟ پایه ها درست کانفیگ شده؟ اصلا تابع اینیشیالیز در برنامه اصلی فراخوانی شده!؟
– فراموش می کنیم هر مرحله کار که پیش می رود در یک پوشه جدید انجام دهیم تا اگر مشکلی پیش آمد بتوان به یک مرحله قبل که کار می کرد باز گشت و ادامه داد.
– اتصال پروگرامر به برد انجام نشده دنبال این هستیم چرا موقع پروگرام خطا میدهد و چرا پروگرامر را نمی شناسد ! ?
گاهی کمی تامل، استراحت و شروع از صفر لازم است. ?

armeducation@

——————————————————-

استفاده از توابع آماده مسئله ای است که تمام افراد تازه وارد به حیطه برنامه نویسی میکروکنترلرهای ARM با آن مواجه و ممکن است استفاده از آن برایشان جذاب باشد. در صورتی که آشنایی با این مقوله ندارید :

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

در میکروکنترلرهای STM32 نیز کتابخانه ها و توابع HAL بدین منظور استفاده می شود که با نرم افزار STM32CubeMX نیز قابل ایجاد است.
و اما به نکاتی در این زمینه توجه داشته باشید:
– این کتابخانه ها به نظر سهولت در تنظیمات رجیسترها برای کسانی که نمی خواهند یا نمی توانند تنظیمات را رجیستری انجام دهند، ایجاد شده است.
– در صورتی که همیشه قصد دارید از توابع آماده برای کار استفاده کنید این موضوع را مد نظر داشته باشید که یک کاربر سطح پایین میکرو هستید. در صورتی که مشکلی در تنظیمات و … پیش بیاید قادر به پیدا کردن ایراد نیستید. زیرا نمی دانید داخل این توابع چه کاری انجام شده و باید بشود و آیا درست انجام شده یا نه. توانایی رفع ایراد در صورت بروز مسئله مهمی است که نمی توان آن را نادیده گرفت. اینکه افرادی می گویند من تا الان استفاده کرده ام و دچارمشکل نشدم معیار نیست. اگر شما ایراد پیدا کردید و گیر کردید چه می کنید!؟ فیدبک هایی که از دیگران بوده مواردیکه با آن مواجه شده ایم نشان دهنده این است که ایرادتی وجود دارد.
– در صورتی که پریفرالهایی با رجیستر قبلا پیکربندی اولیه شده است و با توابعی می توان با آن عملی را انجام داد چه ضرورتی دارد حتما از توابع آماده CMSIS و یا HAL برای پیکربندی استفاده شود!؟
– اینکه نرم افزاری هست که خود ایجاد پروژه می کند جالب است ولی مگر چند بار برای یک میکرو نیاز به ایجاد پروژه است؟ (فقط یک بار) و مگر در انجام یک کار که چند ماه ممکن است طول بکشد چند بار می خواهید پریفرال ها را کانفیگ کنید و تغییر دهید؟ شاید یک بار بیشتر لازم نباشد بعد مهم اجرای الگوریم پیاده سازی کار است.
– در جایی که سرعت اجرا مهم است، استفاده از تابع در تابع باعث کاهش سرعت می شود. بنابراین بایستی مستقیما از رجیسترها برای مقدار دهی و مقدار خواندن استفاده شود.
– در صورتی که حجم فلش حافظه میکرویی محدود باشد (STM8) طبیعتا استفاده از کتابخانه های آماده ما را در حجم برنامه محدود می کند.
– اگر مدل میکرویی لازم باشد استفاده کنید که توابع آماده ایی برای آن نباشد، در صورتی که صرفا یادگرفته باشید با توابع آماده کار کنید نمی توانید راه اندازی اولیه ای از پریفرالها و تغییر در آن داشته باشید.

armeducation@

——————————————————-

یکی از موارد پایه در ایجاد پروژه، نحوه ایجاد کتابخانه جدید و اضافه کردن آن به پروژه می باشد.
روش کار به این صورت است که تمام توابع در یک کتابخانه با فرمت c. مثلا name.c قرار داده و به پروژه اضافه می شود. تیتر تمام توابع که قصد داریم در جای دیگری استفاده کنیم در یک فایل با فرمت h. مثلا name.h قرار داده شده و در ابتدای هر فایلی که لازم داریم include می کنیم. در نرم افزار keil لازم است مسیر فایل های هدر h. در پروژه مشخص شود.

armeducation@

——————————————————-

روال خواندن از تاچ به این صورت است که ابتدا موقعیت چهار نقطه در گوشه های صفحه تاچ گرفته می شود (کالیبراسیون). سپس سایر نقاط بر اساس این ۴ نقطه مقایسه و موقعیت لمس شده تشخیص داده می شود. می توان توسط تابعی موقعیت لمس شده را به واحد پیکسل در tft lcd تبدیل کرد و نمایش داد تا بتوان درستی تاچ را تست کرد.
این چهار نقطه را می توان در جایی ذخیره کرد تا در دفعه بعد دستگاه روشن می شود لازم نباشد مجدد کالیبراسیون انجام شود.
روال خواندن یک نقطه نیز بدین صورت است : به محض اینکه توسط پایه TP_IRQ در لبه پایین رونده تشخیص زده شده شدن تاچ انجام شود، تعدادی موقعیت توسط تابعی خوانده می شود. این موقعیت ها از کوچک به بزرگ مرتب شده و چند نقطه ابتدا و انتها حذف و از سایر نقاط میانگین گرفته می شود.

armeducation@

——————————————————-

کی از کاربردهای میکروکنترلرهای ARM استفاده از TFT LCD ها می باشد. سرعت پایین نمایش در میکروهایی که دارای کلاک کمی هستند و همچنین عدم وجود پریفرال داخلی برای کنترل TFT، کاربران را “مجبور به استفاده از میکروکنترلرهای ARM ” نموده است! در میکروکنترلرهای ARM، سرعت بالای نمایش و پریفرال داخلی در بعضی از مدل ها برای کنترل TFT، وجود دارد.
– در میکروکنترلر LPC1768 با توجه به عدوم وجود پریفرال داخلی برای کنترل TFT، سرعت نمایش قابل توجه است. کلاک هسته در این میکروکنترلر ۱۰۰ مگاهرتز می باشد. در این میکرو بایستی از درایور برای کنترلر TFT LCD ها استفاده شود.
– در میکروکنترلر LPC1788 با توجه به وجود پریفرال داخلی برای کنترل TFT و کلاک هسته بالاتر(۱۲۰ مگاهرتز)، سرعت رفرش صفحه بیشتر از lpc1768 می باشد. در این میکرو نیازی به استفاده از درایور برای کنترلر TFT LCD ها نمی باشد.
– در مدل های بالاتر LPC ضمن وجود پریفرال داخلی برای کنترل TFT، کلاک هسته نیز بالاتر می باشد.
– در میکروکنترلر STM32F103VE با توجه به وجود پریفرال داخلی (FSMC) برای کنترل TFT، سرعت نمایش قابل توجه است. این در حالیست که وجود این پریفرال FSMC باعث بهبود سرعت نمایش با توجه به کلاک هسته ۷۲ مگاهرتزی آن شده است. در این میکرو بایستی از درایور برای کنترلر TFT LCD ها استفاده شود.
– در میکروکنترلر STM32F429 و STM32F439 هم دارای کلاک هسته ۱۸۰ مگاهرتزی و هم دارای پریفرال داخلی برای کنترل TFT می باشند.

armeducation@

——————————————————-

هر پریفرالی دارای کاربردهای مختلفی می باشد که بدون انجام آن کاربردها نمی توان گفت آن قسمت کار کرده شده یا یاد گرفته شده است. بنابراین صرف مشاهده یک عملی از یک پریفرال کافی نیست!
به چند مثال توجه کنید:
– در پریفرال gpio ست و ریست کردن پایه ها و همچنین خواندن وضعیت آنها انجام می شود. به صورت ساده می توان یک ال ای دی را با آن خاموش روشن کرد. ولی دارای کاربرهایی مانند سون سگمنت، ال سی دی کاراکتری، ال سی دی گرافیکی، TFT LCD ها، کیبرد و … می باشد. همچنین می توان پروتکل هایی مانند سریال و I2C و SPI را با آن gpio شبیه سازی کرد.
– با پریفرال DAC به صورت ساده می تواند یک شکل موج سینوسی را نمایش داد. ولی می توان پخش فایل صوتی از فلش خود میکرو یا spi flash یا sd کارت را در عمل با این پریفرال انجام داد.
– ماژول های مختلفی وجود دارد که با استفاده از پریفرال های UART و I2C و SPI و CAN و اترنت بایستی با آنها ارتباط برقرار کرد.
بنابراین به راه اندازی تا استفاده عملی دقت داشته باشید.

armeducation@

——————————————————-

معمولا کسانی که می خواهند با میکروکنترلرهای ARM شروع به کار می کنند با توجه به تنوع مدل ها و کامپایلرها سوالاتی وجود دارد مانند :
– با چه میکروکنترلری کار کنم؟ LPC را انتخاب کنم یا STM32 ؟ STM8 هم هست! با کدام مدل شروع کنم!؟ از چه پروگرامری استفاده کنم؟ ….
– از چه کامپایلری استفاده کنم؟ Keil بهتره یا IAR ؟ خود شرکت سازنده میکرو،کامپایلری ارائه نکرده؟ از همون کامپایلر شرکت سازنده بهتر نیست استفاده کنیم!؟
– چه منبع آموزشی مناسبی وجود دارد؟
در فروم ها و شبکه های اجتماعی این سوالات بوده و خواهد بود. البته کمی هم حق دارند. مثل قدیم نیست که یه مدل میکرو باشه و یک کامپایلر! هر چه تنوع بیشتر سردرگمی هم بیشتر. مثلا وقتی شما برای خرید وارد یک فروشگاه بزرگ می شوید چه حسی خواهید داشت!؟ تنها چیزی که شما را از سردرگمی در این حالت نجات می دهد لیست خرید است.
قبلا ذکر شد انتخاب میکرو بر اساس نوع کار است. یعنی لیست خریدتان در اینجا کاری است که می خواهید انجام دهید. بنابراین بایستی به دنبال امکاناتی باشید که یک میکرو در اختیارتان قرار می دهد و البته در کنار قیمت. البته ممکن بگویید کارمان کجا بود. می خواهیم میکروهای ARM یاد بگیریم تا کار پیدا کنیم! خوب در اینجا مدل های رایج تر می توانید انتخاب کنید. طبیعتا بایستی چندین مدل را کار کنید. مثلا lpc1788 ، stm32f103ve ، stm8s003 و … یعنی مدل هایی که برد آموزشی ارزان قیمتی دارد و آموزش هایی هم برای شروع هست.
-> برای شروع کار بهتر است از کامپایلر Keil استفاده کنید و بعد ها در صورتی که جایی احساس نیاز کردید از IAR استفاده کنید . ولی به این موضوع توجه داشته باشید که هر دوی اینها نیاز به لایسنس دارند. درست است که با کرک مشکل حل می شود ولی در یک جایی در پروژه تجاری صنعتی ممکن است به مشکل بربخورید و طبیعتا ساپورتی از طرف شرکت سازنده انجام نمی شود.
-> کسانی که دارای تجره کاری هستند دنبال ایجاد محصول جدید و بهینه سازی آن، خدمات پس از فروش بهتر، نحوه پیاده سازی یک کار و پیاده سازی الگوریتم آن به برنامه مناسب تر و .. هستند. بنابراین وقتی برای صرف در امور حاشیه ندارند.

armeducation@

——————————————————-

معمولا به همراه یک برد آموزشی سمپل هایی قرار داده می شود. می توان این سمپل ها را به سه دسته تقسیم کرد:
۱- سمپل هایی که کار می کند و ساده است و می توان متوجه عملکرد آنها شد و در آنها تغییرات لازم را اعمال کرد.
۲- سمپل هایی که صرفا یک راه اندازی را انجام می دهد ولی به دلیل پیچیدگی نمی توان از آن سر در آورد، بنابراین ایجاد تغییرات لازم بر اساس نیاز در آن مشکل است.
۳- سمپل هایی که کار نمی کند!

بنابراین صرف کارکردن یک سمپل کافی نیست. باید بتوان فهمید که همه توابع آن چگونه کار می کند و چگونه باید آن را بر اساس نیاز تغییر داد. تغییراتی که لازم است در یک سمپل اعمال کرد شامل تغییر کانفیگ پایه ها، توسعه توابع آن و تغییرات لازم برای بردن به یک مدل دیگر میکرو می باشد.

armeducation@

——————————————————-

سوالات اولیه ای که معمولا برای کسانی که به کار با میکروکنترلرهای ARM شروع می کنند بسیار پیش آمده است و بسیار پرسیده شده است :
– این دستوراتی مثل

LPC_GPIO0->FIOSET = 0x03

و

LPC_GPIO0->FIOSET = (0x03) « ۱۶;

چه بیت هایی را ست می کند. عملگر » در اینجا چه کاری انجام می دهد؟
– عباراتی که با =| و ~=& به کار برده می شوند چه مفهومی دارند؟
– تعریف یک متغییر با int32_t و int8_t به چه معناست؟
– چگونه چک کردن یک بیت از یک رجیستر انجام می شود؟ مثلا چک کردن ۰ شدن بیت ۱۱ از رجیستری مثلا رجیستر PIN این گونه انجام شده:

(LPC_GPIO2->FIOPIN & 1«۱۱) ==۰

پس چک کردن ۱ شدن بیت ۱۱ از رجیستر PIN چگونه انجام می شود؟ چرا وقتی من از دستور :

LPC_GPIO2->FIOPIN & (1«۱۱))== ۱

برای چک کردن ست شدن بیت ۱۱ استفاده می کنم، کار نمی کند!؟
– عملکرد این ماکرو به چه نحو است :

#define LED1_ON(x) ((x) ? (LPC_GPIO1->FIOSET = LED1) : (LPC_GPIO1->FIOCLR = LED1))

– نحوه تبدیل یک متغییر به یک رشته چگونه است؟
– چگونه ورودی ها و خروجی ها را در یک تابع مشخص کنیم؟
– چگونه یک کتابخانه درست کنیم و به پروژه اضافه کنیم؟
– و ….
شما چه سوالات ابتدایی برایتان پیش آمده است!؟

armeducation@

——————————————————-

قبل از کار با میکروکنترلرهای ARM و در راه اندازی پریفرال های میکروکنترلرهای ARM، بایستی به این موضوع توجه شود که :
• پیش نیاز کار با میکروکنترلرهای ARM ، آشنایی با زبان C می باشد.
• پیش نیاز اجرای پروژه میکروکنترلرهای ARM ، تسلط به زبان C و تسلط به خود میکروکنترلر می باشد.
• تسلط به زبان C و تسلط به خود میکروکنترلرهای ARM، نیاز به تمرین و صرف زمان دارد.
در توضیح پیش نیاز بودن آشنایی با زبان برنامه نویسی سی، کارآموز در حین شرح رجیسترها و برنامه ها و کار با توابع با ایراد و سوال برنامه نویسی C مواجه نمی شود و توجه خود را صرف نحوه تنظیمات رجیسترها و نحوه استفاده از آنها و سایر تنظیمات می کند.
(فیلم آموزش کاربردی زبان سی در میکروکنترلرهای ARM :

http://goo.gl/PoYFu1

به منظور پر کردن این خلا می باشد.)
حال سوال اینجاست که صرف یادگیری راه اندازی پریفرال های میکروکنترلرهای ARM، کافیست!؟

armeducation@

——————————————————-

بعد از انتخاب میکرو و ایجاد پروژه، لازم است بر اساس نیاز پریفرال های مختلف میکروکنترلر راه اندازی شود. به عنوان مثال این پریفرال ها بسته به نوع میکرو و قابلیت های آن،می تواند شامل موارد زیر باشد:
۱-GOIO
۲-EXTI
۳-USART
۴-Timer
۵-ADC
۶-DAC
۷-PWM
۸-RTC
۹-کلاک و پاور
۱۰-WDT
۱۱-I2C
۱۲-SPI
۱۳-DMA
۱۴-SD-MMC
۱۵-USB(Device-Host)
۱۷-Eternet(UDP-TCP-Http-SNMP,…)
۱۸-CAN
۱۹-TFT_LCD
….
قبلا ذکر شد که انتخاب میکرو بایستی متناسب با کاری باشد که قرار است انجام شود و کار هم بر اساس نیاز تعریف می شود.

armeducation@

——————————————————-

کارکرد یک پریفرالی که در یک میکرو وجود دارد و به صورت عملی در فیلمی نشان داده می شود به این صورت است که حتی الامکان پروژه آن توسط خودم ایجاد شده و از رجیسترها برای راه اندازی آن استفاده شود.
– در اینکه در انجام کاری پروژه توسط خود شخص ایجاد شود نکات آموزشی جدیدی وجود دارد که وقتی از پروژه آماده استفاده شود با آن مواجه نمی شود.
– حتی المکان استفاده از رجیسترها جهت اینیشیالیز اولیه و … باعث تسهیل در کار و سادگی پروژه و بی نیازی به اضافه کردن کتابخانه های اضافی خواهد شد.

armeducation@

——————————————————-

وقتی کیل ۵ را (MDK-ARM) :

http://www.keil.com/download/product

نصب کرده باشید و بخواهید با آن پروژه ای که با کیل ۴ ایجاد کرده اید باز کنید، صفحه ای باز می شود. با زدن migrate to device pack پروژه با کیل۵ باز می شود و دیگر با کیل ۴ باز نمی شود! با زدن install legacy support مرورگر به آدرسی هدایت می شود:

http://www2.keil.com/mdk5/legacy

که می توان پکی دانلود کرد(بسته به نوع میکرو و ورژن کیل۵) که با نصب آن پروژه هایی با کیل ۴ ایجاد شده باشد با کیل ۵ بدون مشکل باز و کامپایل شود. و با زدن گزینه cancel پنجره ای حاوی یک خطا باز می شود : error: Device not found !

armeducation@

——————————————————-

بعد از مشخص شدن نوع میکرو، “شروع” کار، ایجاد یک پروژه و پروگرام کردن روی برد می باشد. کاری که بایستی به درستی انجام شود.
-پروژه بایستی به صورت صحیح و اصولی ایجاد شود تا از مشکلات بعدی جلوگیری شود.
در نظر بگیرید محل نصب کامپایلر عوض شود یا برنامه را برای فردی بفرستید که در محل دیگری برنامه را نصب داشته باشد یا ورژن کامپایلری مثل keil ارتقا یابد. آیا پروژه باز می شود و بدون خطا کامپایل می شود!؟ -》 وقتی همه کتابخانه ها و هدرهای لازم، در داخل پوشه پروژه قرار داشته باشد چنین مشکلاتی ایجاد نمی شود. به این مساله توجه کنید که برای یک میکرو فقط یک بار نیاز به ایجاد پروژه است! پس کمی بیشتر وقت گذاشتن به جایی بر نمی خورد.
-تا زمانی که پروژه پروگرام نشود چگونه می شود راه اندازی پریفرال ها و انجام کار را به صورت عملی انجام داد!؟
خشت اول گر نهد معمار کج
تا ثریا میرود دیوار کج

armeducation@

——————————————————-

از دوستان عزیز تقاضامندم مطالب پست ها را تنها بصورت فوروارد در سایر گروها و کانال ها و سایت ها قرار دهند و از کپی کردن مطالب بدون ذکر مرجع خودداری کنند.

با تشکر

armeducation@

——————————————————-