فکر می کنم یک بخش از خطا هم مربوط به نحوه برنامه نویسی شماست
وقتی توی تابع وقفه تایمر مقدار تایمر رو عوض می کنید کار دقیقی نمیشه
اگه با اسمبلی بنویسید اونجا زمانی که به یک تابع پرش می کنید یک رجیستر هست به اسم status باید اون رو ذخیره کنید و موقع برگشت از تابع دوباره لودش کنید یک زمانی هم برای این از بین میره اگه با اسمبلی بنویسید چون میتونید زمان اجرای هر دستور رو دقیق حساب کنید می تونید یک موج خیلی دقیق حساب کنید ولی با c یا باید نحوه برنامه نویسیتون رو عوض کنید (یعنی توی تابع مقدار تایمر رو عوض نکید) یا با آزمون و خطا به دقت مورد نظرتون برسید.
اگه با گراف ها و با mixed شکل موجتون رو ببینید نه با اسکوپ پروتوس به جواب بهتری میرسید.یعنی اینجوری