دوستان عزيز سلام
من با مگا32 كار ميكنم ، تو ديتاشيتش نوشته كه تايمر يك 16 بيتيه و بايد تا 65535 بشماره اما من با
كانتر و
pwm كارميكنم ولي تا 256 بيشتر نميشماره
لطفا منو از اين ابهام در بياوريد
PWM اگه اشتباه نکنم یه مد داشت که ۲۵۵ تاییش می کرد
ولی برای کانتر نباید مشکلی داشته باشه یه CTC هم داره که می توی رو یه عددی مثلا ۲۰۰ ست کنی تا ریست بشه
دوست عزيز سلام
ميشه درمورد pwm و counter توضيح بدي چطوري اين مشكلش را حل كنم / از كلاك داخلي استفاده ميكنم/
در مورد كانتر نياز به شمارش 16بيتي دارم-بدون نياز به وقفه سرريز-
اینم از کتاب سعید 1nafar
میکرو های AVR نهایتا دارای سه تایمر / کانتر هستند (به جز,MEGA64,MEGA162, MEGA128 وتعداد محدود دیگرکه 4 تایمر دارند) . این تایمر / کانتر ها به نام های تایمر کانتر 0 و تایمر کانتر1 و تایمر کانتر2 و تایمر کانتر سه ، نام گذاری میشوند .کار تایمر ها شمردن تا یک عدد خاص و کار کانتر ها شمردن یک پالس ، که به پایه مخصوص اعمال میشود است ، از تایمر و کانتر استفاده های دیگری نیز میشود ، مانند ساخت پالس PWM و ...که در ادامه انها را معرفی میکنیم.
اولین تایمر/کانتری که معرفی میشود تایمر صفر است ، در زیر مشخات این مورد را مشاهده میفرمایید:
1- این تایمر/ کانتر 8 بیتی است ، و نهایتا میتواند تا 8^2 (255( بشمارد.
2- کلاک این تایمر میتواند تو سط نوسان ساز داخلی یا نوسان ساز خارجی تامین شود (مقدار فرکانس نوسان ساز بر عدد
PREACALE تقسیم میشود).
3- این تایمر دارای چندین منبع وقفه میباشد که شما میتوانید انها را در هر قسمت از برنامه فعال یا غیر فعال کنید.
از این منابع و قفه میتوان ،وقفه سرریزی را نام برد.
4- این تایمر/کانتر میتواند در مد تایمر و کانتر راه اندازی شود.
5- ورودی کانتر پایه T0 (در میکرو مگا 16 پورت B.0 ، پایه شماره1)میباشد
>>تایمر کانتری یک:
در زیر مشخات این مورد را مشاهده میفرمایید:
1- این تایمر کانتر 16 بیتی است ، و نهایتا میتواند تا 16^2 (65535( بشمارد.
2- کلاک این تایمر میتواند تو سط نوسان ساز داخلی یا نوسان ساز خارجی یا از پایه t1 (در مگا 16 پایه شماره2
(portb.1) توسط پالس خارجی، تامین شود (مقدار فرکانس نوسان ساز بر عدد PREACALE تقسیم میشود).
3- تایمر / کانتر یک دارای دو خروجی مقایسه ای است که دو رجیستر OCR1A و OCR1B 3مقدار مقایسه ای را در خود
جای می دهند و با محتوای تایمر/کانتر مقایسه می شوند .
4- در زمان تساوی محتوای رجیستر مقایسه و محتوای تایمر/کانتر ، وضعیت پایه های خروجی مد مقایسه ای OC1A و OC1B
می تواند تغییر کند.
5- تایمر /کانتر در مد CAPTURE نیز می تواند به کار رود . با تحریک پایه ICP می توان محتوای تایمر/ کانتر را در رجیستر
ورودی CAPTURE(ICR1) قرار داد.
6- خروجی مقایسه کننده آنالوگ نیز می تواند به عنوان تریگر ورودی CAPTURE قرار گیرد.
7- این تایمر دارای چندین منبع وقفه میباشد که شما میتوانید انها را در هر قسمت از برنامه فعال یا غیر فعال کنید.
از این منابع و قفه میتوان ،وقفه سرریزی را نام برد.
8- این تایمر کانتر میتواند در مد تایمر و کانتر وpwm راه اندازی شود.
9- ورودی کانتر پایه T1 (در میکرو مگا 16 پورت B.0 ، پایه شماره1)میباشد و خروجی پالس pwm پایه های oc1a و
10- oc1b (در میکرو مگا 16 به ترتیب پایه های 18و19 (portd.4 و d.5)است همچنین د وپایه ی فوق میتوانند به عنوان
خروجی مد مقایسه ای تایمر مورد استفاده قرار بگیرند.
لینکی که آقا هادی معرفی کرده باز میشه!
من امتحان کردم!
دوست عزيز سلام
در مورد كانتر1 بگم كه وقتي روي lcd نشونش ميدم ( چه روي مدار چه روي پروتئوس) اعدادي فقط سه رقمي را نشان ميده كه تا 255 قابل تشخيصه ولي بعد از اون ترتيبش بهم ميخوره . حتي در برنامه دستور پاك كردن صفحه را دادم(cls) ولي ترتيبش غير عاديه . متغير هم از نوع byte و هم از نوع word تعريف كردم اما بازم تغيير نكرد در آخر مجبور شدم با كانتر0 كار كنم كه جواب داد / با اينكه pwm از همان ابتدا 255 عددي را ميشمرد و دوباره صفر ميشد ، آيا ممكنه مشكل اين باشه كه هر دو (pwm 1, counter 1) را باهم استفاده ميكنم
لطفا مرا از اين ابهام خارج كنيد
فكر كنم بخاطر ديالاپ بودن ايترنتم لینکی که آقا هادی معرفی کرده را نتوانستم كه باز كنم !
نقل قول: در مورد كانتر1 بگم كه وقتي روي lcd نشونش ميدم ( چه روي مدار چه روي پروتئوس) اعدادي فقط سه رقمي را نشان ميده كه تا 255 قابل تشخيصه ولي بعد از اون ترتيبش بهم ميخوره . حتي در برنامه دستور پاك كردن صفحه را دادم(cls) ولي ترتيبش غير عاديه . متغير هم از نوع byte و هم از نوع word تعريف كردم اما بازم تغيير نكرد در آخر مجبور شدم با كانتر0 كار كنم كه جواب داد /
تا اینجا را فهمیدم که چیکار کردی
فکر نمی کنم مشکل از نوع کانتر 0 یا یک بودن باشه!!!! اگر متغیرت را از نوع int می ذاشتی حل می شد.
و اما بقیه مطلب که گفتی را نگرفتم که چی شد
دوست عزيز سلام
امرت را انجام دادم ولي تغييري رخ نداد چه مستقيما counter1 را در lcd نمايش بدم و چه در يه متغير بريزم و نمايش بدم ولي با كانتر 0 اصلا مشكلي ندارم
در مورد بقيه اش هم : همكنون دارم از pwm1 براي موتورهام استفاده ميكنم با اينكه 16 بيتيه اما تا 255 بيشتر نميشماره - البته با اين مشكلي ندارم - كه اينم موجب تعجبه !!
متني كه يك نفر منتشر كرده - كه واقعا عاليه - را چند بار مرور كردم ولي مشكلم را نفهميدم
pwm که استفاده میکنی 16 بیتیه؟؟؟؟؟؟؟؟؟
میکرو تا 10 بیت بیشتر نداره که!!!!!!!!!!!
اگر از تایمر در مد 10 بیت استفاده کنی، تا 1024 میشماره، اما من تا حالا نشیدم که میکرو تایمرش 16 بیته!!!!!
آهااااااان! تایمر 1 16 بیت هست!! اما دوتا تایمر 8 بیت جدا از هم که روی هم میشه 16 بیت. مشکل شما اینجاست که فکر میکنی که یه تایمر 16 بیتی تک و تنهاست!!!
در مورد کانتر هم ، من توی متغیر int ریختم و ذخیره کردم، مشکلی نداشت!! یه جای کار ایراد داره!! برنامت را بزار.