ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.






جهت تبلیغ در وب سایت ECA کلیک کنید.

کاربران برچسب زده شده

نمایش نتایج: از 1 به 6 از 6
  1. #1
    2012/06/15
    54
    0

    طريقه استفاده از کانتر

    سلام. جان من ديگه اينو جواب بدين هر چي سوال پرسيدم تا حالا هيچکي جواب نداد انگار هيچ بني بشري به اين مشکلات تا حالا برنخورده :eek:
    من سيگنال حاصل از شفت را وصل کردم به پايه T1 که تعداد TCNT1 رو بدست بيارم
    تو تايمر 2 هم زمان يک ثانيه رو ايجاد ميکنم
    مثلا 4 مگ کلاکم باشه ميشه 245 (تقسيم بر 64 )
    ولي درست جواب نميده چرا؟؟؟؟؟؟؟؟
    [interrupt [TIM1_OVF] void timer1_ovf_isr(void)
    {
    TCNT1++;
    i1++;

    }
    ////////////////////////////////////////////////////////////////////////////////
    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
    { count++;
    if (count== 245)
    {

    count= 0;
    TCNT1=0;
    }
    }
    تو main هم دارم
    TCCR2=0x04;
    TCNT2=0x00;
    OCR2=0x00;
    TCCR1A=0x00;
    TCCR1B=0x07;
    ..........
    TIMSK=0x44;
    #asm("sei&quot

    يه مشکل ديگه هم که دارم نميدونم بايد مقدار1 TCNT رو تو همون تابع اينتراپت 2 بخونم يا تو MAIN
    جان من جواب بدين :cry2:
  2. #2
    2010/07/08
    134
    3
    aed

    پاسخ : طريقه استفاده از کانتر

    سلام من از برنامه شما سر در نیاوردم ولی اگر هدفتون به دست آوردن تعداد شمارش کانتر 1 در 1 ثانیه است روشی رو که میگم آزمایش کنید احتمالا جواب میده.
    در وقفه تایمر 2 (وقفه 1 ثانیه ای) مقدار TCNT1 رو بخوانید و در یک متغیر سراسری (مثلا A) بریزید (مقدار شمارش شده در 1 ثانیه). سپس مقدار 0 را در TCNT1 بریزید. حال می توانید از متغییر سراسری A در تابع main برنامه استفاده کنید. این متغیر هر 1 ثانیه به 1 ثانیه، به روز می شود. فقط اولین مقداری که از TCNT1 می خوانید اشتباه است و دفعات بعدی درست است.
    نیازی به وقفه TCNT1 هم نیست.
  3. #3
    2012/06/15
    54
    0

    پاسخ : طريقه استفاده از کانتر

    نقل قول نوشته اصلی توسط aed
    سلام من از برنامه شما سر در نياوردم ولي اگر هدفتون به دست آوردن تعداد شمارش کانتر 1 در 1 ثانيه است روشي رو که ميگم آزمايش کنيد احتمالا جواب ميده.
    در وقفه تايمر 2 (وقفه 1 ثانيه اي) مقدار TCNT1 رو بخوانيد و در يک متغير سراسري (مثلا A) بريزيد (مقدار شمارش شده در 1 ثانيه). سپس مقدار 0 را در TCNT1 بريزيد. حال مي توانيد از متغيير سراسري A در تابع main برنامه استفاده کنيد. اين متغير هر 1 ثانيه به 1 ثانيه، به روز مي شود. فقط اولين مقداري که از TCNT1 مي خوانيد اشتباه است و دفعات بعدي درست است.
    نيازي به وقفه TCNT1 هم نيست.
    من زمانو واسه يه ثانيه تنظيم کردم ولي خيلي ديرتر نشون ميده بعد ببخشيد چرا اولين مقدار tcnt1 غلطه؟
  4. #4
    2010/07/08
    134
    3
    aed

    پاسخ : طريقه استفاده از کانتر

    تایمر دو را در حالت Asynchron تنظیم کنید. کلاک تایمر رو تقسیم بر 128 قرار دهید و یک کریستال 32.768 کیلوهرتزی به پایه های TOSC1 , TOSC2 وصل کنید (اگر میکروکنترلر شما این قابلیت را دارد مثل مگا 8 و مگا 16 و مگا 32 و مگا 128). در این صورت تایمر در هر یک ثانیه سرریز میشود و اگر وقفه OVF تایمر 2 فعال باشد، یک وقفه در هر ثانیه روی می دهد.
    ممکن است اولین شمارش تایمر در ظرف مدت یک ثانیه نباشد (یعنی لحظه شروع شمارش با لحظه شروع محاسبه زمان 1 ثانیه برابر نباشد). اما در دفعات بعد چون کانتر را صفر کرده اید و دقیقا یک ثانیه بعد آن را می خوانید و سپس صفر می کنید، شمارش صحیح است.
  5. #5
    2012/06/15
    54
    0

    پاسخ : طريقه استفاده از کانتر

    نقل قول نوشته اصلی توسط aed
    تايمر دو را در حالت Asynchron تنظيم کنيد. کلاک تايمر رو تقسيم بر 128 قرار دهيد و يک کريستال 32.768 کيلوهرتزي به پايه هاي TOSC1 , TOSC2 وصل کنيد (اگر ميکروکنترلر شما اين قابليت را دارد مثل مگا 8 و مگا 16 و مگا 32 و مگا 128). در اين صورت تايمر در هر يک ثانيه سرريز ميشود و اگر وقفه OVF تايمر 2 فعال باشد، يک وقفه در هر ثانيه روي مي دهد.
    ممکن است اولين شمارش تايمر در ظرف مدت يک ثانيه نباشد (يعني لحظه شروع شمارش با لحظه شروع محاسبه زمان 1 ثانيه برابر نباشد). اما در دفعات بعد چون کانتر را صفر کرده ايد و دقيقا يک ثانيه بعد آن را مي خوانيد و سپس صفر مي کنيد، شمارش صحيح است.
    اين کارم کردم ولي بازم عددي که ميده به عنوان فرکانس خيلي اختلاف داره با مقدار واقعيش :cry2:
  6. #6
    2011/04/23
    822
    5

    پاسخ : طريقه استفاده از کانتر

    نقل قول نوشته اصلی توسط sara789
    اين کارم کردم ولي بازم عددي که ميده به عنوان فرکانس خيلي اختلاف داره با مقدار واقعيش :cry2:
    با پروتئوس شبیه سازی می کنید یا عملی می بندید مدار رو؟
    در صورت حالت اول، لطفا فایل پروژه کدویژن+پروتئوس(فشردش کنید لطفا) رو قرار بدید تا بررسی بشه
    [size=10pt]اونچيزي که در دانشگاه ياد ميگيريد، "الفبايي" هست براي نوشتن يک "رمان" !! [/size]
نمایش نتایج: از 1 به 6 از 6

موضوعات مشابه

  1. طريقه استفاده از ژنراتور
    توسط mohsen_330 در انجمن ترانسفورماتورها و ماشين هاي الکتريکي
    پاسخ: 2
    آخرين نوشته: 2013/02/12, 08:32
  2. طريقه استفاده از تابع read_adc
    توسط mehran.safavy در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2012/07/30, 17:15
  3. طريقه استفاده از پروگرمرavrisp mkii
    توسط jafar2000 در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2010/06/29, 09:14
  4. طريقه پيكر بندي و استفاده از تايمرها در avr
    توسط farzinsh در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2008/10/06, 17:53
  5. طريقه استفاده از سنسورهاي مادون قرمز و ارتباط آنها با ميکرو
    توسط arem در انجمن سایر مطالب مرتبط با ميکرو ها و پروسسورها
    پاسخ: 4
    آخرين نوشته: 2006/10/26, 07:17

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •