نه تابع MILLIS این حرفا سرش نمیشه
از وقتی پاور میدی میشماره
برای ماژول های ساعت ترجیحا از دقیقش استفاده کن
البته من اخیرا این تایمر رو کشف کردم :
Make an accurate Arduino clock using only one wire - NO external hardware needed! - All
نه تابع MILLIS این حرفا سرش نمیشه
از وقتی پاور میدی میشماره
برای ماژول های ساعت ترجیحا از دقیقش استفاده کن
البته من اخیرا این تایمر رو کشف کردم :
Make an accurate Arduino clock using only one wire - NO external hardware needed! - All
ممنون جالب بود ،
چنتا سوال
1- اینکه فرکانس pwm همیشه ثابته و با گرم شدن و در طول زمان تغییر نمیکنه؟
2- به جای اینکه pwm رو روی 127 قرار بده ، اگه مثلا روی 50 یا هر عدد دیگه ای غیر از 0 و 255 قرار میداد نتیجه فرق میکرد؟
3- الان تو این برد آردوینو چنتا نوسان ساز هست کلا و کدوم دقتش بیشتره؟
نمیدونم چطوری این اتفاق افتاد براتون
چون با نوشتن عدد 127 در واقع قصد داشته شکل موجی با dutycycle برابر 50 درصد بوجود بیاره ولی وقتی عدد تغییر کنه شکل موج های زیر بوجود میاد در واقع
بعد داستانی که هست اینه که اینتراپت میاد روی لبه های بالارونده تابه اینتراپتوش صدا میزنه
اگه قرارباشه با عددهای به جز 127 هم این کار رو بکنه زمان مساوی از بین میره چون در دو شکل پایین یک پریود به صورت مساوی زمانی پخش نمیشه
این برای من بسیار عجیبه !
کار یکه شما کردید با لبه پایین رونده فعال کردید که باز هم همین ایده تکرار میشه !
طبق چیزی که من از کد متوجه شدم کاری که شما کردید تغییر 127 باید داغون کنه برنامه رو
شما از کد چه چیزی متوجه شدید؟
شما هم اگه بخواین میتونین امتحان کنین
خب تصور من اینه که این عدد هرچیزی باشه فرکانس موج مقدار ثابتی هست(490 هرتز) و همینطور دوره (T=1/490)،
و در همه حالات هم ( pwm های متفاوت) در مدت زمان T یک نوسان اتفاق میوفته و اون تابع شمارنده زمان هم داره این نوسان ها رو میشماره
چه اینکه ولتاژ بره بالا زود بیاد پایین یا بره بالا و بیشتر بمونه و بعد بیاد پایین از اون جایی که در هر دورهT یه بار فقط بالا میره و تابع شمارنده فقط بالا رفتن (یا پایین اومدن ها رو میشماره) مقدار pwm روی نتیجه شمارش تاثیر نداره
قبلا با millis() که ساعت رو اجرا کردم توی هر ساعت 4 ثانیه خطا داشت و آردوینو از زمان واقعی جلو میفتاد ، یا این سیم هم که اجرا کردم (با توجه به اینکه فرکانس pwm معمول برای پایه های آردیونو 490 هست) خطایی که به دست اومد 5 ثانیه بود و باز هم آردوینو جلو افتاد از زمان واقعی ، به نظر میاد این هم اونقدا دقیق نیست
و اونقدری که من میدونم همون millis() هم با استفاده از وقفه و یه کانتر داخلی داره شمرده میشه