سلام دوستان با چه دستوری میشه سه میکرو سوییچ که هر کدوم به یک پایه وصل هستن رو مدام چک کنیم و در هر جای برنامه که باشیم اگه هر کدوم از میکروسویچ ها که فشار داده بشه دستورات مربوط به اون کلید اجرا بشه
اطلاعیه
Collapse
No announcement yet.
چک کردن مداوم سه پین میکرو
Collapse
X
-
پاسخ : چک کردن مداوم سه پین میکرو
سلام
یک راه وصل کردن کلید ها به پایه های اینتراپت خارجی می باشد در این صورت هر وقت کلید فشار داده شود برنامه باید برود و اینتراپت مربوطه را انجام دهد.
راه دوم اینکه از یک تایمر اینتراپت استفاده کنی و چک کردن را در اینتراپت تایمر انجام دهی.
من این دو راه را بلد بودم!!!دکتر چمران در 1311 در تهران متولد شد
وی در زمان اقامت در آمریکا انجمن اسلامی آمریکا را تأسیس کرد که منجر به قطع بورسیه وی توسط شاه شد.
او با اینکه یکی از دانشمندان مطرح آمریکا به حساب می آمد بدون توجه به مدرک به مصر رفت و آموزش نظامی دید.
-
پاسخ : چک کردن مداوم سه پین میکرو
البته من خودم هر پین را به یک اینتراپت خارجی وصل کرده بودم ولی الآن شما تعداد پایه هایتان زیاد استنوشته اصلی توسط s.m.alaviاین سه پین رو چطوری میشه به یه اینتراپت وصل کرد ؟
کی پد چطور ؟ 4 تا پین چطوری به یه اینتراپت وصل میشه ؟
یک راه به ذهنم می رسد باید تست بشه:
اگر کی پد پول پ است
همه ی پایه ها ی ورودی را به آند دیودها بزنید و بعد کاتد هر دیود را به یک خازن مثلا 220 نانو بدی سر دیگر خازن ها را به هم بزنی و بعد سر مشترک را هم به یک اینتراپت خارجی وصل کنی و هم به یک مقاومتی که به زمین خورده است.
البته من کاری که در بالا گفتم را تست نکردم ابداع ذهنمه می توانی چک کنی
البته کار راه تر همین استفاده از یک تایمر اینتراپت است که اسکن صفحه را داخلش انجام بدهی اونوقت وقتی به مقدار زمان خاصی که رسید صفحه کلید را چک می کند.دکتر چمران در 1311 در تهران متولد شد
وی در زمان اقامت در آمریکا انجمن اسلامی آمریکا را تأسیس کرد که منجر به قطع بورسیه وی توسط شاه شد.
او با اینکه یکی از دانشمندان مطرح آمریکا به حساب می آمد بدون توجه به مدرک به مصر رفت و آموزش نظامی دید.
دیدگاه
-
پاسخ : چک کردن مداوم سه پین میکرو
سلام، نه دیگه چرا میکرو بنده خدا رو الکی با وقفه های یه تایمر معطل کنیم؟ :NO:
این جور مواقع باید یه مداری طبق شماتیک زیر ببندیم:
و یه کدش هم تو محیط بسکام میشه:
اون عبارت low level توی پیکره بندی وقفه باعث میشه تا زمانی که یکی از کلید ها رو نگه داشتیم وقه مرتب به روتین read_keys پرش کنه و اگه همزمان چند تا کلید رو هم قطع و وصل کردیم مقدارشون رو اسکن کنه. دیود ها هم سطع ولتاژ صفر رو از کلید ها میگیرن و میدن به وقفه شماره صفر. تستش کردم، کار میکنه! :applause:کد:'read 3 keys with interrupts by Behnam Zakizadeh [2013] http://avr64.com $regfile="m8def.dat" $crystal=1000000 config lcdpin=pin, rs=pinb.0, e=pinb.1, db4=pinb.2, db5=pinb.3, db6=pinb.4, db7=pinb.5 config lcd=16*2 ddrd.7 = 0 'input ddrd.6 = 0 'input ddrd.5 = 0 'input portd.7 = 1 'active pull-up portd.6 = 1 'active pull-up portd.5 = 1 'active pull-up key1 alias pind.7 key2 alias pind.6 key3 alias pind.5 config INT0= LOW LEVEL on int0 read_keys enable INT0 enable INTERRUPTS cls:cursor off do 'your code here loop end read_keys: cls lcd "keys status:" lowerline lcd "k1:";key1;" k2:";key2;" k3:";key3 return
دیدگاه
-
پاسخ : چک کردن مداوم سه پین میکرو
البته منم همینو گفتم که فکر می کنم همانطور که گفتم باید از مقاومت و خازن نیز استفاده کنید.نوشته اصلی توسط بهنام زکی زادهسلام، نه دیگه چرا میکرو بنده خدا رو الکی با وقفه های یه تایمر معطل کنیم؟ :NO:
این جور مواقع باید یه مداری طبق شماتیک زیر ببندیم:
و یه کدش هم تو محیط بسکام میشه:
اون عبارت low level توی پیکره بندی وقفه باعث میشه تا زمانی که یکی از کلید ها رو نگه داشتیم وقه مرتب به روتین read_keys پرش کنه و اگه همزمان چند تا کلید رو هم قطع و وصل کردیم مقدارشون رو اسکن کنه. دیود ها هم سطع ولتاژ صفر رو از کلید ها میگیرن و میدن به وقفه شماره صفر. تستش کردم، کار میکنه! :applause:کد:'read 3 keys with interrupts by Behnam Zakizadeh [2013] http://avr64.com $regfile="m8def.dat" $crystal=1000000 config lcdpin=pin, rs=pinb.0, e=pinb.1, db4=pinb.2, db5=pinb.3, db6=pinb.4, db7=pinb.5 config lcd=16*2 ddrd.7 = 0 'input ddrd.6 = 0 'input ddrd.5 = 0 'input portd.7 = 1 'active pull-up portd.6 = 1 'active pull-up portd.5 = 1 'active pull-up key1 alias pind.7 key2 alias pind.6 key3 alias pind.5 config INT0= LOW LEVEL on int0 read_keys enable INT0 enable INTERRUPTS cls:cursor off do 'your code here loop end read_keys: cls lcd "keys status:" lowerline lcd "k1:";key1;" k2:";key2;" k3:";key3 return
عیب مدا:
وقتی دیود فعال شدش و پایه را یک کرد چه کسی صفرش باید بکند!!!؟؟؟
البته خازن سری با دیود هم برای اینکه لرزش و ... را بگیرد در واقع یک تریگ برای اینتراپت خارجی کافی می باشد.دکتر چمران در 1311 در تهران متولد شد
وی در زمان اقامت در آمریکا انجمن اسلامی آمریکا را تأسیس کرد که منجر به قطع بورسیه وی توسط شاه شد.
او با اینکه یکی از دانشمندان مطرح آمریکا به حساب می آمد بدون توجه به مدرک به مصر رفت و آموزش نظامی دید.
دیدگاه
-
پاسخ : چک کردن مداوم سه پین میکرو
چرا خودتون رو اذیت می کنین؟؟
یه دستور هست به اسم "debounce" که به طور تقریبی هر 10ms میاد هر پینی که بهش گفتین رو چک می کنه . اگر آن پین وضعیتی که شما می خواین رو داشت بعد از 25ms دو باره میاد و چک می کنه و اگه باز هم همونطور بود این را به منزله ی فشرده شدن کلید می گیره و به lable ای که بهش گقتین پرش می کنه هر چند تا پین رو هم خواستید کنترل کنین با این دستور میشه
شکل کلی:
اگه SUB رو هم بنویسید باید به جای lable اسم یه زیر برنامه باید بنویسین.کد:debounce PINx.y , state , lable [, SUB]
[glow=green,2,300][b]بشر ممکن الخطاست
درخت هرچه پربار تر سر به زیر تر[/glow]
دیدگاه
-
پاسخ : چک کردن مداوم سه پین میکرو
دیودها با فشردن هر کلید صفر میشن نه یک چون سر مشترک کلید ها رو به زمین وصل کردم، (سیمبول زمین توی KiCad به شکل یه فلش رو به پایینه). آره حرف شما درسته پایه INT0 یه مقاومت پول پ خارجی نیاز داره که به VCC وصلش کنه و تو حالت عادی پایه اینتراپت رو یک کنه. (فکر نکنم بشه از Pull-up داخلی برای INT استفاده کرد).وقتی دیود فعال شدش و پایه را یک کرد چه کسی صفرش باید بکند!!!؟؟؟

بله خازن هم باشه بهتره ولی راستش من تا حالا اینکارو نکردم و برای یه کلید با اولین لرزش اینتراپت اتفاق میفته و وارد روتین میشیم و اونجا میشه با Wait نویزها رو گرفت. ضمناً تو حالت low level تا زمانی که کلید فشرده هست یکسره روتین اجرا میشه تا اگه همزمان یه کلید دیگه رو هم فشار دادیم بشه وضعیتش رو اسکن کرد. همچنین برای کلید ها هم از پول پ داخلی استفاده شده که به محض رها کردنشون پایه 1 میشه و درنهایت اینکه وضعیت کلید ها به ترتیب توی متغیر های key1 تا key3 ذخیره میشه.البته خازن سری با دیود هم برای اینکه لرزش و ... را بگیرد در واقع یک تریگ برای اینتراپت خارجی کافی می باشد.
بله با Debounce هم میشه، راستش من debounce رو هر کاری میکنم در عمل جواب نمیگیرم! :angry: باید بعداً با حوصله چکش کنم ببینم مشکلش چیه.چرا خودتون رو اذیت می کنین؟؟
یه دستور هست به اسم "debounce" که به طور تقریبی هر 10ms میاد هر پینی که بهش گفتین رو چک می کنه . اگر آن پین وضعیتی که شما می خواین رو داشت بعد از 25ms دو باره میاد و چک می کنه و اگه باز هم همونطور بود این را به منزله ی فشرده شدن کلید می گیره و به lable ای که بهش گقتین پرش می کنه هر چند تا پین رو هم خواستید کنترل کنین
دیدگاه








دیدگاه