امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
کمک در مورد سنجش زمان توسط تایمر 0 و 1 در مگا 8 و کدویژن
نویسنده پیام
MicrowaveCO آفلاین
كاربر دو ستاره
**

ارسال‌ها: 129
موضوع‌ها: 28
تاریخ عضویت: تير ۱۳۸۷

تشکرها : 19
( 66 تشکر در 36 ارسال )
ارسال: #1
کمک در مورد سنجش زمان توسط تایمر 0 و 1 در مگا 8 و کدویژن
باسلام خدمت همه

من نشستمو تقریبا هرچی اطلاعات درمورد تایمر صفر بود رو خوندم و نشستم بصورت زیر حساب کردم که :
/*
1: 8000000/64=125000Hz
2: 1/125000=8us
3: 8us*250=2ms ==> TCNT0=(256-250)=6
4: (1sec=1000ms ==> 1000/2ms=250 ==> if(c>=500
*/
با این حساب من با تایمر 0 بعد از 250 شمارش یه زمان 2 میلی ثانیه ای درست میکنم حالا اگه 500 بار این اتفاق بیافته میشه یک ثانیه

میخوام بدونم که چطور میشه این 500 بار شمارشو مثلا با تایمر 1 یا 2 بصورت کانتر انجام بدم و توی برنامم از وقفه این تایمر/کانتر بعنوان 1 ثانیه استفاده کنم .

اصلا اینکار امکان پذیر هستش ؟
لازمه توضیح بدم که از کدویژن 3.12 دارم استفاده میکنم و برنامه نویسی زبان C رو تقریبا سه هفتس شرو کردمو وارد نیستم ( تمام این مدت داشتم با سنسور 18B20 سروکله میزدم که خوشبختانه تونستم ازش جواب بگیرم) لطفا اگر ممکنه یه نمونه از این چیزی که گفتم برام مثال بزنید و بهم توضیح بدید ( البته اگر اینی که گفتمو میشه انجام داد ) .
باتشکر
(آخرین ویرایش در این ارسال: ۲۷-فروردین-۱۳۹۴, ۱۳:۵۱:۳۶، توسط MicrowaveCO.)
۲۷-فروردین-۱۳۹۴, ۱۳:۵۰:۳۷
ارسال‌ها
پاسخ
behzady آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,169
موضوع‌ها: 57
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 4094
( 6339 تشکر در 2085 ارسال )
ارسال: #2
RE: کمک در مورد سنجش زمان توسط تایمر 0 و 1 در مگا 8 و کدویژن
اینتراپت سراسری رو فعال کن و
کد:
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0x06;
waitv++;
}
void wait()
{
TCNT0=0;
TIMSK|=(1<<TOIE0);
waitv=0;
while(waitv<500);
TIMSK&=~(1<<TOIE0);
حالا چرا از تایع delay خود کدویژن استفاده نمی کنی؟! اونم دقیق هست ها

به همه عشق بورز، به معدودی اعتماد کن و در حق کسی بدی نکن.
ویلیام شکسپیر

نباید ایمان به انسانیت را از دست دهید. انسانیت یک اقیانوس است؛ اگر قطرات اندکی از اقیانوس کثیف است، اقیانوس کثیف نمی‌شود.
مهاتما گاندی

يَا أَيُّهَا الَّذِينَ آمَنُواْ اسْتَعِينُواْ بِالصَّبْرِ وَالصَّلاَةِ إِنَّ اللّهَ مَعَ الصَّابِرِينَ
(آخرین ویرایش در این ارسال: ۲۷-فروردین-۱۳۹۴, ۱۸:۲۹:۵۵، توسط behzady.)
۲۷-فروردین-۱۳۹۴, ۱۴:۰۷:۲۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : alimogmov, MicrowaveCO, رسول
MicrowaveCO آفلاین
كاربر دو ستاره
**

ارسال‌ها: 129
موضوع‌ها: 28
تاریخ عضویت: تير ۱۳۸۷

تشکرها : 19
( 66 تشکر در 36 ارسال )
ارسال: #3
RE: کمک در مورد سنجش زمان توسط تایمر 0 و 1 در مگا 8 و کدویژن
دوباره سلام

آقا بابت کمکت ممنونم ( البته راستش خیلی سر در نیاوردم ) ولی خب یه ایده ای به ذهنم رسید که راحت تر بودش ، به این صورت که :
کد:
while (1){
         if(c==500) {
            second++;
            if(second==60){
               minute++;
               second=0;
               if(minute==60){
                  hour++;
                  minute=0;
                  if(hour==24){
                     hour=0;
                     }
                  }
               }
          sprintf(lcd_buffer,"Time = %d:%d:%d",hour,minute,second);
          lcd_clear();
          lcd_puts(lcd_buffer);
          c=0;              
       }  
       }
حالا یه مشکل کوچولو دارم ، اونم اینه که موقع نمایش که با Sprintf قالب بندیش کردم عددامو بصورت تک رقمی نشون میده و موقعی که شمارش به دورقم رسید میادو رقم جدیدو اضافه میکنه برا همین میخوام بپرسم که :
- پطور میشه اعدادو جوری نشون داد که هرکدوم دو رقم دو رقم باشن از همون اول ؟ یعنی : 00:00:00
(آخرین ویرایش در این ارسال: ۲۷-فروردین-۱۳۹۴, ۲۲:۲۸:۱۴، توسط behzady.)
۲۷-فروردین-۱۳۹۴, ۱۹:۴۵:۵۳
ارسال‌ها
پاسخ
تشکر شده توسط : alimogmov
behzady آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 1,169
موضوع‌ها: 57
تاریخ عضویت: آبان ۱۳۹۰

تشکرها : 4094
( 6339 تشکر در 2085 ارسال )
ارسال: #4
RE: کمک در مورد سنجش زمان توسط تایمر 0 و 1 در مگا 8 و کدویژن
اتفاقی که میوفته اینه که هر 2 میلی ثانیه تایمر وقفش فعال میشه و یه متغییری رو زیاد می کنه وقتی 500 بار این عمل تکرار بشه 1 ثانیه وقفه ایجاد شده.
برای مشکل طول میدان این کارو بکن
کد:
sprintf(lcd_buffer,"Time = %2d:%2d:%2d",hour,minute,second);
برای اطلاع از فرمت بندی خروجی ها در C به این لینک برو

به همه عشق بورز، به معدودی اعتماد کن و در حق کسی بدی نکن.
ویلیام شکسپیر

نباید ایمان به انسانیت را از دست دهید. انسانیت یک اقیانوس است؛ اگر قطرات اندکی از اقیانوس کثیف است، اقیانوس کثیف نمی‌شود.
مهاتما گاندی

يَا أَيُّهَا الَّذِينَ آمَنُواْ اسْتَعِينُواْ بِالصَّبْرِ وَالصَّلاَةِ إِنَّ اللّهَ مَعَ الصَّابِرِينَ
۲۷-فروردین-۱۳۹۴, ۲۲:۳۵:۰۱
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : omid_phoenix, alimogmov, MicrowaveCO, hamze_b
MicrowaveCO آفلاین
كاربر دو ستاره
**

ارسال‌ها: 129
موضوع‌ها: 28
تاریخ عضویت: تير ۱۳۸۷

تشکرها : 19
( 66 تشکر در 36 ارسال )
ارسال: #5
RE: کمک در مورد سنجش زمان توسط تایمر 0 و 1 در مگا 8 و کدویژن
سلام سلام

خیلی خیلی ممنون که کمکم میکنی ، الان جای نشان دادن کاراکترای نمایش دورقمی شده و دیگه روی ال سی دی اعدادم جابجا نمیشن ولی هنوز یه عیب کوچولوی دیگه وجود داره .
اعداد بصورت : 0 :0 :0 نشون داده میشن و قسمت خالی وقتی عدد دورقمی میشه نشون داده میشه
چطور میشه کاری کرد که همون اول 00:00:00 باشن و موقع شمارش وقتی عدد تک رقمی هم که هست قسمت دهگانش وجود داشته باش؟ یعنی بعنوان مثال : 26:01:08
ربطی به نوع تعرف متغییرهام داره ؟ من اونارو unsigned char second,minute,hour; تعریف کردم
مثلا موقع تعریف متغییرشون میشه گفت دورقمی باشن ؟ اصلا اگه باشن چطور باید بصورت 00 مقدار دهی بشن چون در این صورت هم احتمالا رقم اولو فقط نشون میده !
- احتمالا باید یه نکته توی نوشتن برنامه باشه چون وقتی برای نمای اعشار %f میزنیم اگه براش رقم اعشار تعیین کنیم خودش به اندازه رقم های تعیین کرده ما صفر میزاره ولی اینحا با 2d اینکارو نکردش، ممنون میشم اگه نظرتونو بگید .
(آخرین ویرایش در این ارسال: ۲۸-فروردین-۱۳۹۴, ۰۷:۵۸:۱۶، توسط MicrowaveCO.)
۲۸-فروردین-۱۳۹۴, ۰۷:۵۵:۵۳
ارسال‌ها
پاسخ
MicrowaveCO آفلاین
كاربر دو ستاره
**

ارسال‌ها: 129
موضوع‌ها: 28
تاریخ عضویت: تير ۱۳۸۷

تشکرها : 19
( 66 تشکر در 36 ارسال )
ارسال: #6
RE: کمک در مورد سنجش زمان توسط تایمر 0 و 1 در مگا 8 و کدویژن
دوباره سلام
آقا behzady بگمونم مشکل حل شد ، توی همون لینکی که برای اطلاع از " فرمت بندی خروجی ها در C " گذاشته بودید برام بین نمونه کدهاش دیدم بعضی جاها قبل تعیین کردن ارقام ، 0 گذاشته منم امتحان کردم دیدم که جواب داد . حالا شما هم لطف کن بگو نظر شما هم همین هستش و این راه اصولیشه ؟
۲۸-فروردین-۱۳۹۴, ۰۸:۴۵:۰۱
ارسال‌ها
پاسخ
MicrowaveCO آفلاین
كاربر دو ستاره
**

ارسال‌ها: 129
موضوع‌ها: 28
تاریخ عضویت: تير ۱۳۸۷

تشکرها : 19
( 66 تشکر در 36 ارسال )
ارسال: #7
RE: کمک در مورد سنجش زمان توسط تایمر 0 و 1 در مگا 8 و کدویژن
سلام


دوباره به یه مشکل برخوردم ، میشه ینفر یه مثال برام بزنه که باهاش یه عدد اعشاریو توی حافظه EEPROM ذخیره کنه ؟
خیلی گشتم اما انگار عملا نمیشه ازش جواب گرفت . یعنی میدونم باید یه متغییر از نوع فلوت توی EEPROM تعریف کنم و بعد از نوشتن توش حدود 4 میلی ثانیه صبر کنم و بعد ادامه برنامه اما انگار اعشاری نمیشه ذخیره کرد نمیدونم چرا !!!!

کسی تجربه برخورد با همچین چیزیو داره ؟ میتونین یه چیز عملی برام مثال بزنین ؟
ممنون
۰۸-اردیبهشت-۱۳۹۴, ۱۵:۵۳:۰۷
ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  مشکل برنامه تایمر با بیسکام soy1345 7 2,026 ۲۲-فروردین-۱۳۹۸, ۲۰:۴۸:۰۶
آخرین ارسال: 1نفر
  راه اندازی ماژول gy-955 با AVR و کدویژن hadikh73 6 7,689 ۰۴-شهریور-۱۳۹۷, ۱۲:۰۸:۲۱
آخرین ارسال: hadikh73
  [فوری] عدم شناسایی میکرو توسط پروگرامر منیره مرادی 1 2,525 ۲۹-مرداد-۱۳۹۷, ۲۰:۵۷:۳۰
آخرین ارسال: 1نفر
  ماژول pn532 و کدویژن AVR hadikh73 1 4,205 ۰۴-خرداد-۱۳۹۶, ۰۱:۲۱:۲۴
آخرین ارسال: babyy
  مشکل در کار با تایمر 1 در بسکام klick 3 4,535 ۳۰-بهمن-۱۳۹۵, ۰۴:۰۴:۴۲
آخرین ارسال: omid_phoenix
  پیکربندی SPI نرم افزاری در کدویژن pedram032 2 3,661 ۱۷-دى-۱۳۹۵, ۲۲:۳۷:۱۴
آخرین ارسال: omid_phoenix
  کمک در برنامه nrf24 با کدویژن sniper-70 0 2,893 ۱۹-آبان-۱۳۹۵, ۰۰:۱۶:۱۵
آخرین ارسال: sniper-70
  مشکل در ساخت تایمر لطفا کمک کنید omidsafari 8 6,502 ۰۹-مرداد-۱۳۹۵, ۱۷:۲۸:۰۹
آخرین ارسال: omidsafari
  [سوال] پیکربندی تایمر mostafa-m 5 4,271 ۲۹-خرداد-۱۳۹۵, ۲۲:۴۸:۰۷
آخرین ارسال: mostafa-m
Exclamation [فوری] مشکل نوشتن برنامه AVR با تایمر مد مقایسه dr.mohammad 7 4,184 ۲۹-دى-۱۳۹۴, ۱۳:۲۸:۴۹
آخرین ارسال: sharin

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 2 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS