من برنامه ای دارم به شکل زیر:
کد php:
$regfile = "m8def.dat" : $crystal = 1000000
Ddrd = 2 : Portd = 1
Do
Debounce Pind.0 , 0 , Ant , Gosub
Loop
Ant:
Toggle Portd.1
Return
حالا میخوام وقتی d.0 صفرشد آنگاه d.1 یک بشه بمدت زمان خاصی وبعد خاموش بشه البته میدونم که باید دستور تاگل رو بردارم وتاخیر بذارم و ...
اما میخوام وقتی که مثلا این d.0 صفر شده و d.1 روشنه همینطور که روشنه اگه دوباره d.0 صفر بشه d.1 همینطور روشن باشه
یعنی گه در وسط برنامه شستی دوباره فشار داده شد برنامه را از اول شارژ کنه بدون اینکه d.1 خاموش بشه
اما اگه شستی دیگه فشار داده نشه بعد از تاخیر خروجی خاموش بشه
امیدوارم منظورمو فهمیده باشین و راهنمایی کنین ...
مهندس با تایمرها خیلی راحت می تونی این کارو انجام بده !
یا اینکه تو مدت زمان تاخیر یه تاخیر کوچولو بذاری مثلا یه میلی ثانیه و این تاخیر تو حلقه فور باشه ( مثلا تا 1000 بار حلقه تکرار شه ) و تون اون حلقه دوباره کلید رو بخونی و اگه فشر داده شد بره به ابتدای حلقه تاخیر !!
نمی دونم مفهوم رو رسوندم یا نه !!!
ویرایش جدید :
خوشم میاد تو برنامه شما هم مثل همه برنامه های من اثری از ANT پیدا میشه !!
من با یه برنامه ساده وگذاشتن یه خازن ظرفیت بالا و ... تونستم یکمی حلش کنم اما قطعاتش زیاد شد و خیلی هم دقیق نیست ...
اما درمورد A.N.T
خوب معلومه دیگه علی جون من بیشتر بیسکامو از شما یاد گرفتم وبیشتر برنامه های موجود در بیسکامم همون برنامه های شما هستن دیگه



جالبه با یه 555 خیلی راحت این کارو انجام بدی !
حالا تاخیر چند ثانیه لازم داری ؟
این کارو انجام بده ! ( می تونی از تایمر یک استفاده کنی )
هر موقع کلید فشار داده بشه این کار بشه :
خروجی یک بشه !
تو تایمر صفر بارگذاری بشه ! ( یا برای زمان های دیگه بای یه عدد دیگه )
تایمر رو روشن کن !
تو وقفه تایمر فوق :
خروجی رو صفر کن !!
تایمر رو خاموش کن !!
آره منم به 555 داشتم فکر می کردم
تاخیر مثلا 5 دقیقه ای می خوام
این برنامه رو واسه لامپ هوشمند با PIR می خوام واسه آشپز خونه ...
من چند تا مدار با 555 و4001 بستم اما جواب نداد
یعنی وقتی شستی رو فشار میدم خروجی روشن میشه ودر وسط هم اگه شستی رو بزنم اصلا اثری نداره وباید خروجی خاموش بشه وبعد دوباره شستی روبزنم
که این واسه کارم نمیاد
در مورد میکرو ویا بدون میکرو هم اگه مداری باشه راهنمایی کنید لطفا...
مگه چجوری 555 رو بستی!
مشکلی نداره ها !!!
این برنامه با میکرو واسه 67.1 ثانیه !
واسه زمان های بیشتر یکم فکر کن !!
کد php:
$regfile = "m8def.dat" : $crystal = 1000000
Ddrd = 2 : Portd = 1
Config Timer1 = Timer , Prescale = 1024
On Timer1 Ali : Enable Timer1 : Enable Interrupts : Stop Timer1
Do
Debounce Pind.0 , 0 , Ant , Gosub
Loop
Ant:
Set Portd.1
Timer1 = 0 : Start Timer1
Return
Ali:
Stop Timer1 : Reset Portd.1
Return
ممنون حالا اونی که می خواستم شد
بازم ممنون
برای تغییر تایمر حتما باید اینو تغییر بدم:
نه !
اون تقسیم فرکانس تایمره و نمیشه عدد بیشتز از اون گذاشت !
می خوای زمانو کم کنی می تونی عدد کمتر بذاری ! ( مثلا 256 ) !!
به متغیر تو وقفه تایمر بذار و کاری کن تا اگر چهار بار به وقفه تایمر مراجعه شد خروجی رو صفر کنه !
موقع فشردن کلید هم فراموش نکنی اون متغییره رو هم صفر کنی !!!
اینجاشو دیگه به خودت میسپرم !
حالا میخواهم که اینمدت 5 دقیقه ای باشه
متغیر مثلا طوری نوشته بشه که داخلش مثل عدد باشه که با کم وزیاد کردن اون عدد مدت زمان هم کم وزیاد بشه .........
؟؟؟؟؟؟؟؟
سلام
اگه یه تایمر میخوای که بعد از یه زمانی (؟=A) یه port را ست یا ریست کنه
در پایین میذارم
مقدار A نشان دهنده ی زمان شماس مثلا اگه از کریستال خارجی استفاده نکنی مقداری که توسط محاسبات بدست میاد درست نیست ولی چیزی من خودم برای میکرویی پایین استفاده کردم برای 1 ثانیه 18=A و برای 1 دقیقه فکر کنم 888=A گذاشتم
کد php:
$regfile = "m16def.dat"
$crystal = 8000000
Config Portd = Output
Config Timer0 = Timer , Prescale = 256
Dim A As Word
Enable Interrupts
Enable Timer0
On Timer0 Show
Do
Loop
End
Show:
Timer0 = 6
Incr A
If A = 18 Then
Toggle Portd.2
Timer0 = 0
A = 0
End If
Return