سیسوگ در قسمت شانزدهمآموزش میکروکنترلر STM8 انواع تایمرهای STM8 را به شما معرفی کرد. در این قسمت از مجموعه مقالات آموزش میکروکنترلر STM8 قصد دارد تایمر 2 را آموزش دهد. با سیسوگ همراه باشید.
تایمر 2 :
تایمر 2 اساسیترین ویژگی هر تایمر است و همچنین نیازهای ضروری هر سیستم در آن جاسازی شده است. این حالت را میتوان با وقفه و یا بدون وقفه استفاده کرد. ما ابتدا این را بدون وقفه و سپس با وقفه مورد بررسی قرار میدهیم.
در تایمر 2، میتوانیم با استفاده از تأخیر، حلقه و روشهای دیگر زمان دقیق را بدست آوریم. تایمر 2 با استفاده از سختافزار تایمر و مستقل از بقیه قسمتها کار می کند. این تایمر کاربردهای بسیاری دارد. به عنوان مثال، با استفاده از این تایمر میتوانیم از تأخیر نرمافزار جلوگیری کنیم، شکافهای زمانی در سیستم بلادرنگ (RTOS) تولید کرد و غیره.
تمام تایمرهای STM8 مشابه هستند و تنها چند تفاوت دارند. به عنوان مثال، تایمر 1 یک شمارنده تکرار است. این مانند شمارندهای به دنبال شمارنده دیگر است. تایمرهای دیگر این بخش را ندارند. تمامی تایمرها شمارنده رو به بالا هستند، در حالیکه تایمرهای پیشرفته میتوانند شمارنده معکوس نیز باشند.
تئوری اصلی تایمر 2 به این صورت است که شما یک کلاک داخلی دارید که آن را بر حسب نیاز خود تقسیم بندی میکنید. بنابراین شما آن را تنظیم میکنید و از کلاک جدید برای شمارنده استفاده میکنید. شمارنده از 0 تا 100 شروع به شمارش میکند و بعد از اینکه به 100 رسید مجدداً از 0 شروع به شمارش میکند. رابطه زیر زمان تایمر را نشان میدهد:
فرمول بالا نشان دهنده مدت زمان سپری شده قبل از وقوع سرریز تایمر است پس از آن تایمر شمارش را از اول شروع می کند.
در این مثال، کلاک اصلی روی 2 مگاهرتز تنظیم شده است. تایمر 2 پس از تقریبا 2 ثانیه دوباره بارگذاری میشود. ما این کلاک را به 2048 قسمت تقسیم میکنیم و که در این حالت شمارنده پس از شماره 1952 مجدداً بارگیری میشود. توجه داشته باشید که تایمر 2 شمارنده تکرار ندارد و روی 1 تنظیم می شود.
اتصالات سخت افزاری
نمونه کد تایمر 2
در این مثال، LED بدون تأخیر زمانی نرم افزار چشمک می زند. تایمر 2 در اینجا برای ایجاد تأخیر زمانی استفاده میشود.
همانطور که قبلاً توضیح داده شد، برای اینکه تایمر هر 2 ثانیه یکبار مجدداً بارگیری شود باید شمارنده را به 2048 قسمت تقسیم بندی کنیم و شمارنده روی 1952 بارگیری شود. این تنظیمات کد در زیر نشان داده شده است:
C++
1
2
3
4
5
6
voidTIM2_setup(void)
{
TIM2_DeInit();
TIM2_TimeBaseInit(TIM2_PRESCALER_2048,1952);
TIM2_Cmd(ENABLE);
}
هدف ما این است که LED برای 1 ثانیه روشن و برای 1 ثانیه خاموش باشد. برای ایجاد این زمان 2 ثانیه ای شمارنده تا شماره 1952 پیش می رود بنابرین وقتی شمارنده تا 976 پیش برود مدت زمان 1 ثانیه سپری می شود. بنابراین در حلقه اصلی مقدار شمارنده تایمر 2 را چک می کنیم. وقتی شمارنده از 0 تا 976 را می شمارد LED روشن و وقتی از 977 تا 1952 را می شمارد LED خاموش می شود. توجه داشته باشید که پایه مثبت LED به VDD متصل است و وقتی PD3 مقدار کمی دارد روشن می شود.
C++
1
2
3
4
5
6
7
8
if(TIM2_GetCounter()>976)
{
GPIO_WriteHigh(GPIOD,GPIO_PIN_3);
}
else
{
GPIO_WriteLow(GPIOD,GPIO_PIN_3);
}
سیسوگ در قسمت های بعدی تایمرهای دیگر STM8 را مورد بررسی قرار می دهیم. در قسمت هجدهم تایمر 4 را مورد بررسی قرار میدهد. با سیسوگ همراه باشید.
سلام وقت بخیر و عرض تبریک و تشکر بابت مطالبتون
سوال از خدمتتون داشتم که میشه بفرمایین که ما چطور با چه سینتکی میتونیم کلاک تایمر رو اکسترنال کنیم؟ینی منبع کلاک تایمر کلاک اصلی میکرو نباشه و روی یک پایه میکرو باشه به عبارت دیگر میخوام یک کانتر داشته باشم
ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموتهای درب بازکن تا ریموتهای دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی میکنند و آنهم ارسال اطلاعات بهصورت بیسیم است....
امنیت همیشه و در همهی اعصار، مقولهی مهم و قابلتوجه ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموتهای کنترل خواهیم پرداخت....
سلام. می تونید یه نمونه کد برای overflow تایمر 2 بگید؟ فقط میخوام بدونم تابعش چجوری نوشته میشه.
سلام
منظورتون از نمونه کد، دقیقا کدام قسمتش هست
کانفیگش یا اینتراپتش ؟!
سلام وقت بخیر و عرض تبریک و تشکر بابت مطالبتون
سوال از خدمتتون داشتم که میشه بفرمایین که ما چطور با چه سینتکی میتونیم کلاک تایمر رو اکسترنال کنیم؟ینی منبع کلاک تایمر کلاک اصلی میکرو نباشه و روی یک پایه میکرو باشه به عبارت دیگر میخوام یک کانتر داشته باشم