با سلام خدمت استاد طراح
چند وقت پیش در انجمن avr با توجه به مشکلات پیش آمده در خواندن مقدار انکدر و بعد از مشورت با شما یه مدار با xmega برای خوندن انکدر طراحی کردم . الان مدار رو مونتاژ کردم و از کدی که شما در سایتتون قرار دادین نیز استفاده کردم و تونستم با مدار خودم تعداد پالسهای انکدر رو بخونم . انکدر من در هر دور 334 پالس تولید میکنه . مقدار پریود رو برای کانتر مربوطه 1335 قرار دادم . اینطوری در هر دور مقدار TCC1_CNT صفر میشه و من نیاز دارم تا مقدار کل پالسهای شمرده شده رو برای نمایش مکان فعلی داشته باشم . اومدم وقفه مربوط به overflow شدن کانتر رو فعال کردم و در روتین وقفه مربوطه مقدار یه متغیری به نام TotalCNT رو یکی یکی اضافه کردم تا اینطوری بتونم تعداد کل پالسها رو داشته باشم . اما مشکل اینجاست که در موقع overflow شدن این وقفه فعال میشه ولی نیاز هست تا در هنگام به صفر رسیدن مقدار TCC1_CNT نیز یک وقفه فعال شود تا مقدار متغیر TotalCNT کم بشه . ممکنه در مورد فعال کردن وقفه در موقع underflow شدن راهنمایی بفرمایید ؟
اصلا میشه مقدار پریود رو خیلی زیاد در نظر بگیرم (مثلا حدود 500000 ) تا در طول کل مسیر این مقدار مکررا صفر نشه ؟
ممنون
لینک مدار مربوط به خوندن انکدر با xmega
http://s1.picofile.com/file/78256671...uller.pdf.html
چند وقت پیش در انجمن avr با توجه به مشکلات پیش آمده در خواندن مقدار انکدر و بعد از مشورت با شما یه مدار با xmega برای خوندن انکدر طراحی کردم . الان مدار رو مونتاژ کردم و از کدی که شما در سایتتون قرار دادین نیز استفاده کردم و تونستم با مدار خودم تعداد پالسهای انکدر رو بخونم . انکدر من در هر دور 334 پالس تولید میکنه . مقدار پریود رو برای کانتر مربوطه 1335 قرار دادم . اینطوری در هر دور مقدار TCC1_CNT صفر میشه و من نیاز دارم تا مقدار کل پالسهای شمرده شده رو برای نمایش مکان فعلی داشته باشم . اومدم وقفه مربوط به overflow شدن کانتر رو فعال کردم و در روتین وقفه مربوطه مقدار یه متغیری به نام TotalCNT رو یکی یکی اضافه کردم تا اینطوری بتونم تعداد کل پالسها رو داشته باشم . اما مشکل اینجاست که در موقع overflow شدن این وقفه فعال میشه ولی نیاز هست تا در هنگام به صفر رسیدن مقدار TCC1_CNT نیز یک وقفه فعال شود تا مقدار متغیر TotalCNT کم بشه . ممکنه در مورد فعال کردن وقفه در موقع underflow شدن راهنمایی بفرمایید ؟
اصلا میشه مقدار پریود رو خیلی زیاد در نظر بگیرم (مثلا حدود 500000 ) تا در طول کل مسیر این مقدار مکررا صفر نشه ؟
ممنون
کد:
ISR(TCC1_OVF_vect) { TotalCNT++; } void main() { unsigned int TIMER_value; unsigned char i; PORTA_PIN0CTRL=PORT_ISC_LEVEL_gc; // QDPH0 PORTA_PIN1CTRL=PORT_ISC_LEVEL_gc; // QDPH90 init_7seg(); init_key(); __enable_interrupt(); show_7seg(DIGITS,0x00,0x00); TCC1_PER=1335; EVSYS_CH0MUX=EVSYS_CHMUX_PORTA_PIN0_gc; EVSYS_CH0CTRL=EVSYS_QDEN_bm|EVSYS_DIGFILT_2SAMPLES_gc; TCC1_CTRLD=TC_EVACT_QDEC_gc|TC_EVSEL_CH0_gc; TCC1_CTRLA=TC_CLKSEL_DIV1_gc; TCC1_INTCTRLA = ( TC1_OVFINTLVL0_bm); ... ... ... }
لینک مدار مربوط به خوندن انکدر با xmega
http://s1.picofile.com/file/78256671...uller.pdf.html
دیدگاه