PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تایمر یا کانتر؟



sobhan537
21-08-2013, 15:05
سلام...
یک کلید فشاری به یکی از پین های میکرو وصله. به محض فشار دادن این کلید، led متناظر روشن میشه و با رها کردن کلید، led خاموش میشه.
حالا میخوام مدت زمان دقیق که این کلید رو فشار دادم رو داخل یک متغییر داشته باشم.

نمیدونم باید از تایمر استفاده کنم یا کانتر؟ تایمر/کانتر شماره چند؟

Ma3ood
21-08-2013, 15:51
یه راه پیشنهادی و البته ساده شما میتونی به محض فعال شدن کلیدی متغییری را در وقفه یکی از تایمرها فعال کرده و شروع کنید به شمارش بعد زمانی که دستتون را از کلید برداشتید مقدار زمان را بخونید
مثلا نمونه کدی را براتون مثال میزنم


interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
if(t_flg)
s_time++
}

void main(void)
{while (1)
{
if(PINB.0==1){
t_flag=1;
s_time=0;
,....

}
else
t_flag=0;
,.....


مقدار شمارش در متغییر s_time قرار میگیره و بعدا میتونی تغییرات و ... روی اون انجام بدی شما مثلا تایمرتو طوری فعال کن که هر 10 میلی ثانیه سرریز بشه
این روش هرجند دارای خطا هست و مقداری تاخیر داره ولی ساده هست .
موفق باشی

sobhan537
01-09-2013, 17:29
سلام
الآن 7تا کلید فشاری به 7تا از پین های میکرو مگا16 وصله. به محض فشار دادن هر کلید، led متناظر روشن میشه و با رها کردن کلید، led مربوطه خاموش میشه. همچنین مدت زمان دقیق که هر کلید رو فشار دادم؛ با استفاده از تایمر1 داخل متغییرهای مربوطه ذخیره میشه.

الآن میخوام با زدن یک کلید فشاری مخصوص، همه 7تا LED به طور همزمان روشن بشن و هر LED به اندازه مدت زمان داخل متغییر مربوطه اش، روشن بمونه و بعد خاموش بشه.

به نظر خودم برای اینکار احتیاج با 7 تا تایمر دارم که همه با هم شروع به کار کنن و وقتی زمان هر تایمر به متغییر مربوطه رسید، LED مربوطه خاموش بشه.

اما نمیدونم این کار شدنیه یا نه؟ دوستان اگه راه حل یا پیشنهادی دارید لطفا دریغ نکنید...

Hesam1984
01-09-2013, 18:49
نه 7 تا تایمر نمی خواهد.

وقتی کلید مخصوص رو فشار میدی اول همه رو روشن می کنه و خط بعدش یک تایمر از صفر شروع به کار می کنه و در روتین وقفه تایمر هر وقت مقدار شمارنده شما که داره اضافه می شه با مقدار متغیر هر LED برابر شد، اون رو Toggle یا هر کار دیگه بکنه. فکر کنم با Select case بنویسیش خوبه.

blu1351
03-09-2013, 18:27
درود بیکران به دوستان
در مد کپچر AVR ، من می خواستم بجای اینکه از پین سخت افزاری ICP1 برای نمونه برداری از کانتر 1 در مگا 169 استفاده کنم اینکار رو بصورت نرم افزاری بهش فرمان Capture بدم. ولی نمیدونم چطور میشه این کارو کرد. ممنون میشم کسی منو تو این زمینه یاری کنه . با کنترل کدام بیت از کدام رجیستر بصورت نرم افزاری می توان فرمان Capture را داد؟
تو دیتا شیتش نوشته :
An Input Capture can be triggered by software by controlling the port of the ICP1 pin
ولی من متوجه نشدم.
با کدویژن دارم کد می نویسم.
ببخشید اگر جای نامناسبی مطرح کردم ولی خیلی گیرم .
ممنونم