مشکل delay در چراغ چشمک زن
سلام
من با کد ویژن یه برنامه چراغ چشمک زن نوشتم
و هرعددی رو بریا delay_ms میدم
اصلا برای delay اهمیتی قائل نیست و باز همون آهنگ خاموش روشن شدن خود رو دنبال میکنه
ممنون میشم کمک کنید اینم سورس
#include <mega16.h>
#include <delay.h>
void main ()
{
PORTA=0x00;
DDRA=0xFF;
for(;;)
{
if(PORTA.0==0)
{
PORTA.1=1;
delay_ms(5);
}
if(PORTA.1==1)
{
PORTA.0=0;
}
if(PORTA.1==0)
{
PORTA.0=1;
delay_ms (5);
}
}
}
نقل قول: مشکل delay در چراغ چشمک زن
فکر می کنم فیوز بیت ها رو موقع پروگرام کردن بردتون ست نکرده اید.
شما میبایست با ست کردن فیوزبیت ها مشخص کنید که میکروکنترلر از اسیلاتور داخلی استفاده کند یا از اسیلاتور متصل به میکرو بر روی برد (اگر چنین قطعه ای در مدارتان وجود دارد).
نقل قول: مشکل delay در چراغ چشمک زن
نقل قول:
نوشته شده توسط
javady_joon
سلام
من با کد ویژن یه برنامه چراغ چشمک زن نوشتم
و هرعددی رو بریا delay_ms میدم
اصلا برای delay اهمیتی قائل نیست و باز همون آهنگ خاموش روشن شدن خود رو دنبال میکنه
ممنون میشم کمک کنید اینم سورس
#include <mega16.h>
#include <delay.h>
void main ()
{
PORTA=0x00;
DDRA=0xFF;
for(;;)
{
if(PORTA.0==0)
{
PORTA.1=1;
delay_ms(5);
}
if(PORTA.1==1)
{
PORTA.0=0;
}
if(PORTA.1==0)
{
PORTA.0=1;
delay_ms (5);
}
}
}
اگه میخواید چشمک زن بنویسید چرا پیچیدش کردید؟ الگوریتم برنامتون مشکل داره:
پورت a رو خروجی تعریف کردید و از 2 تا پایه اش استفاده کردید. اول چک می کنه پایه 0 خاموشه (که هست) بعد میاد پایه 1 رو روشن می کنه، بعد بررسی میکنه پایه 1 روشنه (که همین الان روشن شده!) در نتیجه پایه 0 رو خاموش میکنه (که لازم هم نیست چون از اول خاموش بوده). بعد چک میشه که پایه 1 خاموشه (که نیست!) و میره اول لوپ.
در واقع این شرطهایی که گذاشتید اضافی هستند.پس برنامه شما درواقع اینه:
void main ()
{
PORTA=0x00;
DDRA=0xFF;
for(;;)
{
PORTA.1=1;
delay_ms(5);
}
}
با این برنامه ای که شما اینجا گذاشتید اصلا نباید چشمک بزنه!؟
نقل قول: مشکل delay در چراغ چشمک زن
#include <mega16.h>
#include <delay.h>
void main ()
{
PORTA=0x00;
DDRA=0xFF;
PORTA.0=0;
while(1)
{
PORTA.0=1;
delay_ms(500)
PORTA.0=1;
delay_ms(500);
}
}
این ساده ترین روش برای چشمک زدن ال ای دی:لبخند:
نقل قول: مشکل delay در چراغ چشمک زن
این ساده تره :
void main ()
{
PORTA=0x00;
DDRA=0x01;
while(1)
{
PORTA.0=~(PORTA.0);
delay_ms(500);
}
}
قیوز بیتاسیلاتور چک کن درست ست کرده باشی
نقل قول: مشکل delay در چراغ چشمک زن
سلام
تو برنامتون مقدار 5 برای delay خیلی خیلی کمه که اصلا به چشم نمیاد. 5میلی ثانیه!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
از 1000 میلی استتفاده کنید که بشه 1 ثانیه
نقل قول: مشکل delay در چراغ چشمک زن
از آنجا که چشم انسان قادر به دیدن تغییرات زیر 20ms نمی باشد در نتیجه شما احساس می کنید که هیچ تغییری در روند برنامتون ایجاد نمیشه . از همین ضعف انسان هست که فیلمسازان قادرند فیلم را برای ما به نمایش بذارند و یا اینکه فیلمی که با دوربین خودتون میگیرید رو مشاهده می کنید.(تحقیقات در این مورد رو میذرام به عهده خودتون)
مطلب بعدی که باید مد نظر داشته باشی اینه که نباید توقع داشته باشید عینه همون delay که شما تو برنامتون استفاده میکنید در عمل هم همون میزان تاخیر ایجاد بشه!!!!!!!! مثلاً اگر برا 1 ثانیه تاخیر نوشتید delay_ms(1000) مطمئناً تو عمل درست در نمیاد.!!! چون با توجه به فرکانس کاری میکرو و زمانی که هر دستور برا اجرا نیاز داره باعث ایجاد اختلاف خواهد شد که برا رفع این مورد یعنی دقیقتر شدن میتونید خودتون یه تابع جدید بنویسید که در اون تاخیر رو ایجاد کنید یا اینکه از تایمر میکرو استفاده کنید.
امیدوارم نوش دارو بعداز مرگ سهراب نبوده باشه:قهقهه: