نقل قول: ولي پدرم در اومد از بس آزمون و خطا كردم لطفا" كمكم كنيد
اين كه فقط يك كليدهه ...
هنوز مونده تا ...
... و چه آزمون خطا هايي پيش روست !
کد:
interrupt [EXT_INT0] void ext_int0_isr(void)
{
if (n<6)
{
n=n+1;
}
if (n=6)
{
n=1;
}
}
اين درسته ، اما كار اضافه انجام دادي ، به سبك پايين مي توني بهينه اش كني.
کد php:
interrupt [EXT_INT0] void ext_int0_isr(void)
{
n++;
}
if (n>5)
{
n=1;
}
}
شرط هاي حلقه ي For رو هم شايد بهتر باشه به سبك زير بنويسي ...
مثلا :
کد:
for(i = 1; i <= 64; i = i*4)
رو به صورت زير بنويس :
کد php:
for(i = 1; i < 65; i = i*4)
در كل مشكل خاصي به چشم نخورد ...
شما وقتي كليد رو هنوز طراحي نكرديد ، پس نبايد انتظار داشته باشيد مقدار n هم زياد بشه ...
اين كه كليد رو چطوري طراحي كنيد ، راحت ترين كار اينه كه يك نمونه ببينيد. ( توي net يه سرچي بزنيد يا از كتاب هايي كه پروژه انجام شده دارن ، سخت افزار كليد رو نگاه كنيد. )
بعد اون رو تحليل كنيد و لبه ي پايين و يا بالا رونده ساز بودن اش رو درك كنيد.
منظورم از آزمون خطا اين نيست كه همينجوري الكي وصل كني ! ، بلكه اينه كه يه ايده ي پايه داشته باشي و از همه ي لحاظ تستش كني و اشكالاتش رو پيدا كني و بتوني به طراحي درست برسي.
ايده ي پايه : پايه ي ميكرو رو پول آپ ( PULLUP ) مي كني ، يك سر كليد رو به همون پايه مي زني و سر ديگه اش رو به زمين.
اينطوري در حالت عادي ولتاژ پايه 5V هست ، وقتي كليد رو بزني ، پايه به زمين وصل مي شه و ولتاژ پايه صفر خواهد شد.
پس ، تغيير وضعيت از 5V به 0V يعني چي ؟ يعني لبه ي پايين رونده.
از نظر تئوري اين مدار كليد كاملا درست هست. مي ري جلوتر مي بيني كه يه سري مشكلاتي در عمل دارهه !
( وقتي به صورت مكانيكي ارتباطي رو برقرار مي كني ، در سيگنال يه لرزشي به وجود مي ياد )
حالا بايد براي حل اين ايده بدي . به صورت نرم افزاري مي شه حل اش كرد ، به صورت سخت افزاري هم با استفاده از يك خازن ( در نقش فيلتر پايين گذر ) ( يا سازنده ي تاخير به قولي ! ) مي شه مشكل رو برطرف كرد و ...
منظورم از آزمون خطا اينه ...
كمي سرچ كنيد + آزمون خطا به سبك بالا ...