با سلام
می خوام با AVR در کدویژن برنامه ای بنویسم که بایکبار فشار شاسی سیستم روشن وبا نگه داشتن آن خاموش بشه. لطفا راهنمایی کنید.
یه سوال دیگه اگه یه برنامه طولانی داشته باشیم وقتی سوییچ می کنیم برنامه باید تا آخر بره وبعد سوییچ می کنه می خواستم بدونم راهی هست که بمحض سوییچ برنامه متوقف بشه؟
ممنون
سلام
سیستمی که در ابتدا خاموش به نظر خودت میتونه چیزی رو کنترل کنه؟
مگر اینکه سیستم روشن باشه اما در حالت خواب یا همون WatchDog یا سگ نگهبان
بعد از فعال کردن این امکان به محض فشار یک کلید یا هر تحریک دیگه میکرو روشن میشه اگر کلید هنوز فشرده شده باشه، یه تایمر رو شرو به شمردن میکن و مثلا وقتی رسید به عدد 250 اگر کلید همچنان فشرده شده باشه از برنامه خارج میشه. چطور؟ در ادامه بخون
معمولا برنامه های میکرو در یک حلقه بی انتها قرار دارند که میتونی برای do loop یک شرط بزاری و یا به ازای فشار یک سوئیچ از دستور Exit Do استفاده کنی.
البته من به زبان شیرین بسکام نوشتم زحمت معادل سازی به زبان C با خودته.
ببخشید . منظوره من از روشن شدن سیستم خروجی های میکرو بود. چون من تا ورودی 1را (به عنوان مثال) 1می کنم خروجی 1 می شه ولی بمحض اینکه ورودی 0 می شه خروجی هم 0 می شه .
سلام
یه کاری کن، سورس برنامه تو بزار ببین موضوع چیه. شاید بتونم خدمتی کنم.
سلام رفقا
من توی کدویژن به یه مشکلی بر خوردم
میکرو رو درست انتخاب میکنم اما هی این ارور رو میده:
chip signature mismatch
read:byte0=0xFF :byte1=0xFF:byte2=0xFF
must be byte0=0x1E:byte1=0x95:byte2=0x02
با 5 تا میکرو تست کردم هی همینو میده چه ایرادی داره اگه کسی بگه ممنون میشم
(۲۲-تير-۱۳۹۰, ۱۹:۵۵:۳۸)alfaalarm نوشته است: [ -> ]کد:
while(1)
{
if(PIND.0==1)
{
PORTA=0b1;
}
if(pinD.0==0)
{PORTA=0b0;
}
};
}
سلام.
ببينيد ، بسته به فركانس كاري ميكرو ( مثلا 1MHZ ) اگر زمان اجرا شدن هر دستور رو به ازاي يك پالس كلاك بگيريم ، در هر ثانيه 1 ميليون دستور اجرا مي شه ...
برنامه هم دست كم چند هزار بار ...
با برنامه اي كه نوشتيد ، مشخصا هر وقت ورودي رو 0 كنيد شرط برقرار هست و هر وقت ورودي رو 1 كنيد ، شرط ديگري برقرار است و اين شرط ها لحظه اي چك مي شوند ... .
خوب حالا شما هر چقدر شاسي رو سري فشار بديد و رها كنيد ، در اين مدت چندين بار ورودي چك شده و لحظه ي تعيين كننده ، لحظه ي آخر هست كه دستتون رو بر مي داريد ...( يعني يه حالت تصادفي پيش مي ياد )
به همين جهت در بسكام از دستور debounce براي ايجاد كمي تاخير استفاده مي شه .
شما هم در codvision بايد بعد از شرط if حدود 100ms تاخير بذاريد ، كه تصادفي بودن اين حالت برطرف بشه ...( تا اون موقع دست بلند شده باشه )
----------------------
براي اينكه مثلا بعد از 2ثانيه گرفتن كليد ، خروجي صفر بشه ...
خوب اين هم ساده هست.
همون چيزيه كه بالا گفتم ، فقط اون زمان تاخير رو به اندازه ي 2 ثانيه مي گيريد و بعد دوباره شرط رو چك مي كنيد كه بايد همون شرط قبلي باشه ( يعني هنوز دست بايد دكمه رو فشار بده ... )
و بعد از اون هم يه تاخير 100 ميلي ثانيه ايه ديگه و دستور 0 كردن خروجي .
موفق باشيد.
يا علي.
(۲۱-تير-۱۳۹۰, ۱۶:۳۰:۴۰)alfaalarm نوشته است: [ -> ]ببخشید . منظوره من از روشن شدن سیستم خروجی های میکرو بود. چون من تا ورودی 1را (به عنوان مثال) 1می کنم خروجی 1 می شه ولی بمحض اینکه ورودی 0 می شه خروجی هم 0 می شه .
سلام
من سورس برنامه رو دیدم و به زبان بیسیک میشه این
pushed=0
if pina.0=1 then
pushed=1
i=0
while
incr i
if pina.0=0 then
pushed=0
exit while
endif
wend i>= 500
end if
waitms 10
set porta.1
'در اینجا اگر از تایمر استفاده کنی میتونی اون متغیر رو با ثانیه بشمری مثلا بگی اگر 5ثانیه شاسی فشرده شد حالا از حلقه خارج شده و هر کاری بخوای رو برات انجام میده. مثلا من پین 1 از پورت a رو روشن کردن.این متن کاملا تست شده است.