armeducation
3.39K subscribers
341 photos
274 videos
109 files
312 links
آموزش حرفه ای میکروکنترلرهای ARM

ادمین:
@mzarkoob
مهندس مهدی زرکوب
استعلام وضعیت :
http://t.me/itdmcbot?start=armeducation
شروع مطالب :
https://t.me/armeducation/1
صفحه اینستاگرام :
@armeducation
همراه :
09359956361
وب سایت :
www.armeducation.ir
Download Telegram
در نظر بگیرید هر بار که دستگاهی که دارای یک تاچ باشد به تغذیه متصل شود، نیاز باشد 4 نقطه اولیه برای کالیبراسیون داده شود! برای اولین بار که کالیبراسیون انجام شد، بایستی این نقاط در محلی ذخیره شود تا در دفعات بعد نیازی به انجام این کار نباشد. در اعمال نقاط کالیبراسیون نیز می توان ملاحظاتی را در نظر گرفت تا هر نقطه ای را قبول نکند. زیرا در صورت اشتباه وارد کردن، تشخیص نقاط بعدی درست انجام نمی شود. همچنین یک باتون در قسمت تنظیمات می توان قرار داد تا در صورت نیاز در حین کار وارد کالیبراسیون شود.
@armeducation
نمایش عدد 1 درTFT به صورت 24*16
عدد هگز هر سطر جلوی آن قرار داده شده
در روال نمایش، بیت به بیت یک سطر چک می شود. در صورتی که 1 بود رنگ مورد قرار داده شده در غیر این صورت رنگ پس زمینه .
@armeducation
کاراکتر 1 به صورت هگزادسیمال در آرایه ASCII_16x24 :
const uint16_t ASCII_16x24[] ={
……
/* ‘0’ */
/* ‘1’ */
0x0000, 0x0100, 0x0180, 0x01C0, 0x01F0, 0x0198, 0x0188, 0x0180,
0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180, 0x0180,
0x0180, 0x0180, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
/* ‘2’ */
……
}
این آرایه در نمایش یک کاراکتر فراخوانی می شود :
ASCII_16x24[num*CHAR_H+pos];
@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
Forwarded from armeducation (Mahdi Zarkoob)
نحوه نمایش در TFT LCD ها به صورت پیکسلی می باشد. رنگ هرپیکسل یک عدد دو بایتی است. برای پاک کردن کل صفحه همه پیکسل ها تغییر می کند. بنابراین سرعت رفرش پردازنده مهم است.
@armeducation
Forwarded from armeducation (Mahdi Zarkoob)
مجموعه فیلم های آموزشی میکروکنترلرهای 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
—------------------------------—

@armeducation
در برنامه نویسی لازم است در مواقعی از تابع تاخیر استفاده شود. مثلا بین هر ارسال در ال سی دی کاراکتری یا ارسال روی ماژول sim900 و زیروال وقفه و ... (هر چند این موارد می تواند بدون تاخیر delay هم انجام داد) این delay میتواند یک تاخیر دقیق یا تخمینی (تاخیر کیلویی !) باشد. حال در نظر بگیرید برنامه را به میکروی دیگری با سرعت بیشتر یا کمتر منتقل کرده اید. طبیعتا تاخیر کیلویی متناسب با سرعت آن پردازنده عمل می کند و این ممکن است کار را خراب کند. استفاده از تاخیر دقیق با systemtick
https://t.me/armeducation/201
باعت می شود با تنظیم کلاک در ابتدا زمان تاخیر تغییر نکند.
@armeducation
تاخیر تخمینی که با تغییر عدد در حلقه for زمان تاخیر را می توان تغییر داد ،می تواند بدین صورت باشد:
void delay_ms (uint32_t Time)
{
uint32_t i;

i = 0;
while (Time--) {
for (i = 0; i < 16666; i++);
}
}
عدد 16666 برای کلاک 100 مگاهرتز زمان حدود یک میلی ثانیه را تاخیر ایجاد خواهد کرد. با یک تایمر می توان این عدد را دقیق انتخاب کرد :
https://t.me/armeducation/238
این مدل تاخیر باعث اتلاف زمان پردازنده در مواردی که پردازنده بایستی کارهای دیگری را به صورت polling انجام دهد، خواهد شد.
@armeducation
Forwarded from armeducation (Mahdi Zarkoob)
با ارائه نظرات، پیشنهادات و انتقادات ، باعث دلگرمی ما باشید و هم باعث بهبود مطالب آموزشی.
ادمین:
@mzarkoob
با سپاس
@armeducation
نحوه استفاده از تاخیر delay با استفاده از systemtick شرح داده شده در :
https://t.me/armeducation/200
بدین صورت می باشد :
void SysTick_Handler (void)
{
SysTickCnt++;
}
/*******/
void Delay (unsign
ed long tick)
{
unsigned long systickcnt;

systickcnt = SysTickCnt;
while ((SysTickCnt - systickcnt) < tick);
}
/*-----------------------------------*/
/*-----------------------------------*/
int main(void)
{
SysTick_Config(SystemFrequency/1000 - 1);
while (1)
{
//......
printf("www.armeducation.ir");
Delay (1000);
}
}
@armeducation
در صورتی که بخواهید وسایل جانبی مانند ال سی دی کاراکتری،گرافیکی، ایتوپرام خارجی ، spi flash و .... را راه اندازی کنید تفاوتی در عملکرد وجود ندارد که لزوما این راه اندازی با رجیستر باشد یا توابع cmsis یا توابع HAL. بنابراین این سوال که کتابخانه ای می خواهم برای راه اندازی این موارد حتما با HAL یا .. ، مناسب نیست. در هر صورت بایستی کتابخانه ای اد شود و از توابع آن برای راه اندازی استفاده شود. حال اگر در کتابخانه این وسیله، از توابع cmsis یا توابع HAL استفاده شده باشد بایستی این کتابخانه ها هم به پروژه اد شود.
@armeducation
Forwarded from armeducation (Mahdi Zarkoob)
در صورتی که مطالب آموزشی کانال را مفید می دانید شما معرف کانال به سایر دوستان خود باشید. 👇👇👇
با سپاس
@armeducation
یکی از مراحل انجام کار بعد از راه اندازی اولیه پریفرال ها و اجرای الگوریتم به کد، رفع ایرادات برنامه ( دیباگ) است. با رعایت کردن اصولی می توان جلوی بعضی ایرادات ساده را گرفت.
- در پست قبلی :
https://t.me/armeducation/245
یکی از موارد ایجاد باگ، کپی نادرست ذکر شد.
- در پیکربندی یک پریفرال تنظیماتی هم که به صورت پیش فرض انجام شده، نیز قرار دهید. به عنوان نمونه پاور در سریال 0 در lpc1768 به صورت پیش فرض فعال است. ولی در سریال 2 فعال نیست. در صورتی که این تنظیم را در سریال 0 قرار ندهیم و بخواهیم در کاری سریال 0 را به 2 تغییر دهیم، فراموش می کنیم پاور را فعال نکرده ایم!
- تمام تنظیمات شامل کلاک و پاور، تنظیمات پایه، تنظیمات خود پریفرال تنظیمات زیرروال وقفه در یک جا قرار دهیم که در صورت نیاز به آن در برنامه دیگری با یک کپی بتوان همه تنظیمات را منتقل کرد و چیزی جا نمانده باشد.
- اینیشالیز به صورت درست انجام شده باشد و سایر را تنظیمات را تغییر ندهد :
https://t.me/armeducation/177
به این ترتیب یک تنظیم انجام شده، سایر تنظیمات در آن رجیستر را بهم نمی زند.
- در نظر بگیرید بیت 0 رجیستری را به این صورت ست کرده باشید :
LPC_SC->EXTMODE = 1«0;
حال اگر همین قسمت را بخواهیم توسعه دهیم برای بیت 1 و .. :
LPC_SC->EXTMODE = 1«1;
به این ترتیب با ست شدن بیت 1، بیت 0 که قبلا ست شده بود ریست می شود! در حالی که اگر از اول به جای= از |= استفاده کرده بودیم در توسعه چنین خطایی ایجاد نمی شد.

👈 با دیباگ کردن از روی برد می توان به بسیاری از خطاها با تطبیق عمل انجام شده با چیزی که در ذهن بوده و پیاده سازی شده، پی برد. به این نکته توجه داشته باشید که گاهی دیباگ و رفع ایراد ممکن است بیش از زمان انجام اصل کار زمان ببرد!
@armeducation
مواردی که به عنوان نکات انجام کار و ... ذکر می شود(و گاها ساده به نظر میرسد!) نتیجه تجربیاتی هست که بارها و بارها برای بنده اتفاق افتاده و شاهد مواجه شدن دیگران با این موارد نیز بوده ام. به عنوان نمونه آخر از فن آموزان، در کاری لازم بود USART1 را به USART2 تبدیل کنند تا در برد قابل استفاده باشد. فقط یک جا انداختن تبدیل نکردن USART1 را به USART2 و در نتیجه کارنکردن برنامه، باعث معطلی و اتلاف زمان بی مورد شده بود.
@armeducation
Forwarded from armeducation (Mahdi Zarkoob)
از دوستان عزیز تقاضامندم در صورت تمایل، مطالب پست ها را تنها بصورت فوروارد در سایر گروها و کانال ها (و سایت ها) قرار دهند و از کپی کردن مطالب بدون ذکر مرجع خودداری کنند.
با تشکر
@armeducation
This media is not supported in your browser
VIEW IN TELEGRAM
1-1- نحوه ایجاد پروژه در نرم افزار STM32CubeMX برای keil و پروگرام کردن بر روی میکروی stm32f103ve
لینک مشاهده در آپارات :
https://www.aparat.com/v/fExms
#آموزش_توابع_هال_F1
@armeducation
همان طور که در فیلم آموزشی ایجاد پروژه در کیل با نرم افزار STM32CubeMX ذکر شد از این نرم افزار به عنوان کمکی برای تنظیمات اولیه پریفرال ها و ایجاد پروژه می توان استفاده کرد. این نرم افزار به همراه پک های آن را می توانید از سایت st دانلود نمایید :
http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html
در قسمت Get Software خود نرم افزار STM32CubeMX قابل دانلود است که هر بار ورژن جدیدتر قرار داده می شود.
در قسمت Embedded Software نیز پک های هر سری از میکروهای stm32 قرار دارد که در که در فیلم آموزشی نیز ملاحظه شد چگونه از STM32CubeF1 استفاده شده است.
@armeducation
در این پست :
https://t.me/armeducation/80
این سوال مطرح شد که :
- عملکرد این ماکرو به چه نحو است :
#define LED1_ON(x) ((x) ? (LPC_GPIO1->FIOSET = LED1) : (LPC_GPIO1->FIOCLR = LED1));
در ماکرو می توان به یک عبارت دیفاین شده، یک ورودی شرطی تعریف کرد. به عنوان مثال در عبارت ذکر شده، در صورتی که ورودی x برابر 1 باشد عبارت اول اجرا می شود (یعنی 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
This media is not supported in your browser
VIEW IN TELEGRAM
با استفاده از سمپل کیل و اعمال تغییرات در آن، می توان روی پورت و پایه های مطلوب، نمایشی روی LCD کاراکتری انجام داد.
در اینجا با استفاده از میکروکنترلر STM32F103VE این نمایش انجام شده است.
@armeducation
CLCD_stm32.rar
3.3 KB
کتابخانه کیل برای راه اندازی ال سی دی کاراکتری در میکروکنترلرهای stm32f10x
@armeducation
GLCD.rar
61.6 KB
کتابخانه راه اندازی ال سی دی گرافیکی (GLCD) با چیپ ks108
با تغییر دیفاین ها و اینیشیالیز اولیه، می توان برای میکروکنترلرهای مختلف از آن استفاده کرد.
برگرفته از فروم ایران میکرو
@armeducation