اینجور مشکلات فقط و فقط با خوندن دیتاشیت حل میشه...خیلی چیزا هست که تو هیچ کدوم از کتاب های ترجمه شده فارسی نمیبینیم ولی توی دیتاشیت گفته شده و خیلی هم مهمه...
مثلا من تا همین چند وقت پیش نمیدونستم که واسه داشتن دقت 10 بیت با ADC باید Prescaler رو جوری تنظیم کرد که فرکانس کاری ADC بین 50 تا 200 کیلو هرتز باشه!!!
من اینو میدونستم :mrgreen: . البته از توی یه سایت خارجی متوجه شده بودم که طبیعتاً اونا هم رفرنسشون ، دیتاشیت بوده
شما تایمر رو روی مد CTC گذاشتید پس TOP تایمر میشه مقدار OCR درست؟
خب شما میخواید زمان هایی کوچک مثلا 6 میکرو ثانیه رو بسازید....وقتی وارد وقفه میشیم فلگ مقایسه 0 میشه و تایمر دوباره از 0 شروع میکنه به شمردن...
حالا شما مطمئنید که پروسه ورود به وقفه و انجام محاسبات داخلش و خروج از وقفه کمتر از 6 میکرو ثانیه طول میکشه؟؟؟؟
اگه محاسباتش بیشتر از 6میکرو طول بکشه طبیعیه که دوباره وقفه بوخوره...اینو حتما تست کنید....واسه تست هم میتونید برنامه رو دیباگ کنید و تعداد دستورهای اسمبلی رو نگاه کنید تا متوجه این موضوع بشید....
مطمئنا مشکل از اینجاست!
نوشته اصلی توسط وحیـد
دقیقاًآ من هم فکر میکنم علت مشکل ایشون از همینجا بوده ...
حالا مشکل ایشون که وقفه خوردن زودتر از موعد بوده ! ولی توی دیتاشیت میکرو ، دربارهء وقفه نخوردن هم توضیح داده و گفته که اگر مقادیر update شده برای OCR خیلی نزدیک به TCNT انتخاب بشه و پروسهء اجرای دستورات طولانی تر از زمان شمارش تایمر باشه ، ممکنه اون وقفه از دست بره که طبیعی هم هست .
من با نرم افزار که چک کردم دستوراتی که تو زیر برنامه وقفه انجام میشن چون به زبون c هستن حدود 3-4 میکروثانیه طول میکشن!
ولی حواسم به این مساله بوده واسه همین قبل از اینکه از وقفه بیرون بیام TCNT رو صفر میکردم
ocr روی 0x35 بود ولی تایمر روی 0xf وارد وقفه میشد
وقتی چک کردم دیدم اون موقعی که تایمر وارد زیر برنامه وقفه میشه فلگ وقفه compafre match رو که 1 شده بوده، صفر میکنه
ولی وقتی میخواد از زیر برنامه وقفه بیاد بیرون، دوباره اون فلگ 1 میشد
وقتی تو آخرین خط وقفه فلگ رو آوردم پایین درست شد و همه زمان بندی هام دیگه دیقیق در میاد
البته نمیدونم تا چقدر میشه رو این شبیه سازی و دیباگ کردنا حساب کرد
ممکنه تو عمل همچی به هم بریزه که اون موقع دیگه بدبخت میشم :mrgreen: :mrgreen: :mrgreen:
من با نرم افزار که چک کردم دستوراتی که تو زیر برنامه وقفه انجام میشن چون به زبون c هستن حدود 3-4 میکروثانیه طول میکشن!
ولی حواسم به این مساله بوده واسه همین قبل از اینکه از وقفه بیرون بیام TCNT رو صفر میکردم
ocr روی 0x35 بود ولی تایمر روی 0xf وارد وقفه میشد
وقتی چک کردم دیدم اون موقعی که تایمر وارد زیر برنامه وقفه میشه فلگ وقفه compafre match رو که 1 شده بوده، صفر میکنه
ولی وقتی میخواد از زیر برنامه وقفه بیاد بیرون، دوباره اون فلگ 1 میشد
وقتی تو آخرین خط وقفه فلگ رو آوردم پایین درست شد و همه زمان بندی هام دیگه دیقیق در میاد
البته نمیدونم تا چقدر میشه رو این شبیه سازی و دیباگ کردنا حساب کرد
ممکنه تو عمل همچی به هم بریزه که اون موقع دیگه بدبخت میشم :mrgreen: :mrgreen: :mrgreen:
مطمئن باش تو عمل اینجوری نیست....روی دیباگ جساب باز نکن...
خودم واسه همکلاسیام لکچر گذاشته بودم...خواستم بهشون نشون بدم که اینتراپت خارجی چجور کار میکنه....هر کار کردم وارد وقفه نشد...آبروم رفت!
نمیدونم با ویندوزم سازگار نبود یا مشکل از خود اتمل استودیو بود!
مطمئن باش تو عمل اینجوری نیست....روی دیباگ جساب باز نکن...
خودم واسه همکلاسیام لکچر گذاشته بودم...خواستم بهشون نشون بدم که اینتراپت خارجی چجور کار میکنه....هر کار کردم وارد وقفه نشد...آبروم رفت!
نمیدونم با ویندوزم سازگار نبود یا مشکل از خود اتمل استودیو بود!
نمیدونم...شایدم مشکل از ما بوده..شاید باید چیزای دیگه ای رو هم در نظر میگرفتیم...یا شاید هم مشکل از ویندوزمه...من خیلی بهش مشکوکم!این ویندوز 8.1 64بیتی پدر منو در آورده... :angry:
با پروتئوس هم خیلی مشکل داره....حالا نمیدونم مشکل رو بزارم ب حساب کرک پروتئوس یا ....
نمیدونم...شایدم مشکل از ما بوده..شاید باید چیزای دیگه ای رو هم در نظر میگرفتیم...یا شاید هم مشکل از ویندوزمه...من خیلی بهش مشکوکم!این ویندوز 8.1 64بیتی پدر منو در آورده... :angry:
با پروتئوس هم خیلی مشکل داره....حالا نمیدونم مشکل رو بزارم ب حساب کرک پروتئوس یا ....
والا من که تا حالا با پروتئوس هیچ مشکلی نداشتم ....
با این وجود که چند ساله با ورژنهای مختلف کار میکنم
در ضمن
ویندوز من هم 8 64 بیتی ست ...
اگه اشتباه نکنم اولین ورژنی که کار کردم 6.5 بود ...
خیلی از پروژه ها بوده که اصلا فکرش رو هم نمیکردم که اشکال از سمت خودم بوده ...
ولی واقعا" اشکال از خودم بود ...
نمیدونم...شایدم مشکل از ما بوده..شاید باید چیزای دیگه ای رو هم در نظر میگرفتیم...یا شاید هم مشکل از ویندوزمه...من خیلی بهش مشکوکم!این ویندوز 8.1 64بیتی پدر منو در آورده... :angry:
با پروتئوس هم خیلی مشکل داره....حالا نمیدونم مشکل رو بزارم ب حساب کرک پروتئوس یا ....
بعید میدونم از ویندوز یا ورژن پروتئوس بوده باشه . چون منم دارم از ویندوز 8 64 بیتی استفاده میکنم و هرگز باهاش مشکلی نداشتم ... البته تا این لحظه :agree:
نوشته اصلی توسط Saman.Asadi
والا من که تا حالا با پروتئوس هیچ مشکلی نداشتم ....
با این وجود که چند ساله با ورژنهای مختلف کار میکنم
در ضمن
ویندوز من هم 8 64 بیتی ست ...
اگه اشتباه نکنم اولین ورژنی که کار کردم 6.5 بود ...
خیلی از پروژه ها بوده که اصلا فکرش رو هم نمیکردم که اشکال از سمت خودم بوده ...
ولی واقعا" اشکال از خودم بود ...
شخصاً تأیید میکنم ... احتمال اشکال در برنامهء نوشته شده توسط خودمون از سایر احتمالات قویتره .
ولی این موضوع باعث شد کمی بیشتر راجع به AVR Stodio تأمل و تعمق به خرج بدم :-w
نظرم منم همین هست که اشکال از سمت خودمونه....ولی اون برنامه که گفتم رو با اسمبلی نوشتم....کاملا درست و منطقی بود....ولی وقتی فلگ اینتراپت رو یک میکردم وارد روتین اینتراپت نمیشد....یه مورد دیگه هم که دوستمون همینجا گفتن...
دیدگاه