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





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









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









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





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

صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 11
  1. #1
    2009/10/19
    169
    2

    مشکل برای تاگل کردن LED و استفاده از تایمر

    با سلام به همگی
    من میخوام یه برنامه بنویسم که با یک میکرو سوئیچ LED هم روشن بشه و هم خاموش به این صورت که وقتی برای اولین بار میکروسوئیچ فشرده بشه LED روشن بشه و به محض اینکه دست رو از روی میکروسوئیچ بر دارم تایمر شروع به شمردن کنه و تا یک ثانیه بشمره حالا توی این یک ثانیه به ازای هر بار زدن میکروسوئیچ تایم یک ثانیه دوباره از اول محاسبه بشه و LED تغییر وضعیت نده ولی اگر بعد از سپری شدن یک ثانیه میکرو سویچ رو بزنم
    LED خاموش بشه و این کار تکرار بشه . برای ساده کردن برنامه بالا اول یه برنامه نوشتم برای اینکه یه LED رو با یک میکروسوویچ خاموش روشن کنم و بعد از روشن شدن LED به محض اینکه کاربر دستش رو از میکزوسوئیچ برداره تایمر شروع به شمردن کنه و بعد از یک ثانیه LED رو خاموش کنه البته با هر با فشردن میکروسوئیچ LED تاگل بشه خب اینم از کد های برنامه

    char flag1=1;
    char hhh=0;
    char count=0;
    void RegConfigration()
    {
    //Timer2 Registers Prescaler= 16 - TMR2 PostScaler = 16 - PR2 = 150
    t2con=0b01111011;
    PR2 = 150;
    tmr2=0;
    PIR1.TMR2IF = 0;
    PIE1.TMR2IE = 1;
    INTCON.GIE = 1;
    INTCON.PEIE = 1;
    }
    void pinsconfigration()
    {
    TRISB.f7 =0;
    PORTB.f7 =0;
    trisc.f3 =1;
    }
    void interrupt()
    {
    if (PIR1.TMR2IF == 1)
    {
    count++;
    PIR1.TMR2IF = 0;
    if (count==100)
    {
    PR2 = 150;
    tmr2=0;
    PORTB.F7 =0;
    count=0;
    t2con.tmr2on=0;
    }
    }
    }
    void main()
    {
    pinsConfigration();
    RegConfigration();
    hhh=0;
    flag1=1;
    flag2=0;
    while(1)
    {
    if (portc.f3==0) { if (hhh==0)
    { portb.f7=1;
    flag1=0;
    hhh=1;
    }
    }
    if (hhh==1) { if (portc.f3==1)
    {
    t2con.tmr2on=1;
    }
    }
    if (portc.f3==0) { if (flag1==0)
    {
    portb.f7=0;
    hhh=0;
    flag1=1;
    }
    }
    }
    }
    مشکلم اینه که بعضی وقتا باید چند بار میکروسویچ رو بزنم تا LED تغییر وضعیت بده !!!؟ و تایمرم که درست کار نمیکنه و سر یک ثانیه LED رو خاموش نمیکنه !! این مشکل ها که حل بشه میرم سر وقت صورت مسئله ی اصلی
    من از میکروسی استفاده می کنم و PIC 16f877

  2. #2
    2007/11/22
    تبریز
    2,483
    492

    پاسخ : مشکل براي تاگل کردن LED و استفاده از تايمر

    سلام.برنامه رو گذرا يه نگاهي انداختم.وقتي ميکرو سوييچ رو ميزني يه خرده دستت رو روي سوييچ نگه دار( در حد 1 ثانيه يا کمتر) ببين بازهم همين اتفاق ميفته؟

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت



    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  3. #3
    2009/10/19
    169
    2

    پاسخ : مشکل براي تاگل کردن LED و استفاده از تايمر

    نقل قول نوشته اصلی توسط شاهرخ
    سلام.برنامه رو گذرا يه نگاهي انداختم.وقتي ميکرو سوييچ رو ميزني يه خرده دستت رو روي سوييچ نگه دار( در حد 1 ثانيه يا کمتر) ببين بازهم همين اتفاق ميفته؟
    مشکلم سر همین حساس نبودن میکروسوئیچه اگه 1 ثانیه نگه دارم معمولا درست کار میکنه ولی من میخوام خیلی حساس باشه یعنی به محض اینکه میکرو سوویچ رو زدم عمل کنه و خطا هم نداشته باشه
  4. #4
    2007/11/22
    تبریز
    2,483
    492

    پاسخ : مشکل براي تاگل کردن LED و استفاده از تايمر

    چون فشرده شدن کليد رو دارين با if بررسي ميکنين اين طبيعي هست.اگه ميخواين بلافاصله تشخيص بدين که کليد فشرده شده بايد از اينتراپت خارجي استفاده کنين.

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت



    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

  5. #5
    2009/01/01
    422
    19

    پاسخ : مشکل برای تاگل کردن LED و استفاده از تایم

    سلام.

    اینتراپت تایمر 2 رو فعال کردی ولی ISRش رو نذاشتی. اینجوری وقتی تایمر 2 فعال میشه و اینتراپت میده، هی stack رو overflow میکنه.

    در ضمن نگفتی کلاک میکروت چقده؟
    [size=10pt]خویشتن را اصلاح کنید تا خداوند کارها را اصلاح کند. امیر المومنین علی (ع)[/size]
  6. #6
    2009/10/19
    169
    2

    پاسخ : پاسخ : مشکل برای تاگل کردن LED و استفاده از تایم

    نقل قول نوشته اصلی توسط hamed8419215
    سلام.

    اینتراپت تایمر 2 رو فعال کردی ولی ISRش رو نذاشتی. اینجوری وقتی تایمر 2 فعال میشه و اینتراپت میده، هی stack رو overflow میکنه.

    در ضمن نگفتی کلاک میکروت چقده؟
    مشکل تایمرم حل شد الان درست کار میکنه و مشکلش این بود که تایمر دائما روشن میشد برای همین دائما از اول شروع به شمردن می کرد . میشه درباره ی ISR بیشتر توضیح بدید ؟من اصلا آشنایی ندارم
  7. #7
    2009/10/19
    169
    2

    پاسخ : مشکل براي تاگل کردن LED و استفاده از تايمر

    نقل قول نوشته اصلی توسط شاهرخ
    چون فشرده شدن کليد رو دارين با if بررسي ميکنين اين طبيعي هست.اگه ميخواين بلافاصله تشخيص بدين که کليد فشرده شده بايد از اينتراپت خارجي استفاده کنين.
    لطفا بیشتر توضیح بدید من با اینتراپت خارجی اصلا آشنایی ندارم
  8. #8
    2009/01/01
    422
    19

    پاسخ : مشکل برای تاگل کردن LED و استفاده از تایم

    ISR مخفف Interrupt Service Routine هست.

    به زبون ساده:
    وقتی شما وقفه یک تایمر (یا هر ماژول دیگه ای) رو فعال میکنین، و اون ماژول یک وقفه ایجاد میکنه (مثلا تایمر سرریز بشه) باید به اون وقفه رسیدگی بشه و فلگ وقفه اون پاک بشه.
    در غیر اینصورت عملکرد میکرو مختل میشه.

    به زبون یه کم پیچیده:
    وقتی یک وقفه ایجاد میشه، آدرس فعلی PC داخل Stack ذخیره شده و سپس اجرای برنامه به بردار وقفه فرستاده میشه (در میکروهای سری Mid range فقط یک بردار وقفه وجود داره). در بردار وقفه آدرس زیر برنامه وقفه (یا همون ISR) قرار داره و اجرای برنامه رو به زیر برنامه وقفه هدایت میکنه (با یک دستور goto).
    داخل زیر برنامه وقفه به وقفه رسیدگی میشه و فلگ مربوطه پاک میشه (در PIC باید به صورت دستی فلگ وقفه پاک بشه). در آخرین خط زیر برنامه وقفه، اجرای برنامه به محل اول خود (یعنی جایی از برنامه اصلی که وقفه در اون جا رخ داده و آدرسش در Stack ذخیره شده) بر میگرده.
    در میکروهای سری mid range، اندازه Stack برابر 8 هست. یعنی بعد از 8 بار فراخوانی زیربرنامه، Stack سرریز خواهد شد.

    حال اگه فرض شه که وقفه ای فعال باشه و زیر برنامه وقفه نداشته باشه که به اون رسیدگی شه، میکرو پس از وقوع وقفه مدام به بردار وقفه میپره و برنامش قاط میزنه. :biggrin:
    [size=10pt]خویشتن را اصلاح کنید تا خداوند کارها را اصلاح کند. امیر المومنین علی (ع)[/size]
  9. #9
    2009/01/01
    422
    19

    پاسخ : مشکل برای تاگل کردن LED و استفاده از تایمر

    وقفه خارجی:

    بعضی از پین های میکرو میتونن این قابلیت رو بدن که هر وقت که وضعیتشون تغییر کرد، یه وقفه ایجاد کنن. برنامه نویس میتونه از این وقفه استفاده کنه و تغییر وضعیت یک این پین رو بدون چک کردن اون (اصطلاحا Polling) پین و معطل کردن برنامه تشخیص بده.
    این قابلیت وقتی خودش رو نشون میده که شما یه برنامه بزرگ نوشته باشین، اون وقت معطل شدن برای خوندن یک پین خیلی بد میشه.

    وقفه خارجی قابلیت تعریف در لبه بالا رونده یا پایین رونده رو داره. یعنی شما میتونین مشخص کنین که تغییر وضعیت از 0 به 1 وقفه ایجاد کنه یا تغییر وضعیت از 1 به 0.
    امیدوارم به درد خورده باشه.
    [size=10pt]خویشتن را اصلاح کنید تا خداوند کارها را اصلاح کند. امیر المومنین علی (ع)[/size]
  10. #10
    2009/10/19
    169
    2

    پاسخ : مشکل برای تاگل کردن LED و استفاده از تایمر

    نقل قول نوشته اصلی توسط hamed8419215
    وقفه خارجی:

    بعضی از پین های میکرو میتونن این قابلیت رو بدن که هر وقت که وضعیتشون تغییر کرد، یه وقفه ایجاد کنن. برنامه نویس میتونه از این وقفه استفاده کنه و تغییر وضعیت یک این پین رو بدون چک کردن اون (اصطلاحا Polling) پین و معطل کردن برنامه تشخیص بده.
    این قابلیت وقتی خودش رو نشون میده که شما یه برنامه بزرگ نوشته باشین، اون وقت معطل شدن برای خوندن یک پین خیلی بد میشه.

    وقفه خارجی قابلیت تعریف در لبه بالا رونده یا پایین رونده رو داره. یعنی شما میتونین مشخص کنین که تغییر وضعیت از 0 به 1 وقفه ایجاد کنه یا تغییر وضعیت از 1 به 0.
    امیدوارم به درد خورده باشه.
    ممنون از توضیحی که دادید من بررسی کردم و دیدم که فقط یه وقفه ی خارجی برای کل میکرو داریم پس اصلا منطقی نیست من بیام ازش استفاده کنم چون اگه تعداد میکرو سوئیچ ها بیشتر از یکی بود چی ؟ من فکر می کنم این مشکل بر میگرده به لغزش میکرو سوئیچ و با همین if میشه حلش کرد . فکر می کنم صورت سئوال بالا هم میخواد در نهایت همین مشکل رو حل کنه یعنی میکرو سوئیچ فقط توی یه زمان های خاصی فعال بشه در این صورت ذیگه این مشکل پیش نمی آد . البته امیدوارم :biggrin:
صفحه 1 از 2 12 آخرین
نمایش نتایج: از 1 به 10 از 11

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

  1. مشکل با glcd و استفاده از تایمر
    توسط student51 در انجمن میکروکنترلرهای AVR
    پاسخ: 3
    آخرين نوشته: 2015/12/07, 09:08
  2. سوییچ تاگل کردن PT2272M4 به کمک AVR
    توسط hamid_saeid در انجمن میکروکنترلرهای AVR
    پاسخ: 0
    آخرين نوشته: 2015/09/08, 19:10
  3. تاگل کردن یک پایه در کد ویژن
    توسط hoshang.am در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2015/07/01, 10:07
  4. تاگل کردن یه پایه برای روشن و خاموش کردن یه لامپ 220 ولت
    توسط 5180016096 در انجمن میکروکنترلرهای AVR
    پاسخ: 9
    آخرين نوشته: 2015/06/23, 21:28
  5. مشکل عجیب در استفاده از تایمر یک
    توسط akamseda در انجمن میکروکنترلرهای AVR
    پاسخ: 2
    آخرين نوشته: 2013/03/10, 21:52

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

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

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

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

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