ايران ويج

نسخه‌ی کامل: چگونگي فعال نمودن چند pwm توسط يك ميكرو
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام خدمت دوستان عزيز
در ابتدا اگر شكل سوالات نابجا يا اشتباه است به بزرگواريتان ببخشيد و اصلاح نماييد
به چه طريقي مي توان توسط يك ميكرو ( مثلا مگا32 ) چند ( 4 ) پالس pwm با ويژگي عملكرد يكسان توليد نمود
چند متغير از نوع سينگل در برنامه دارم كه البته در صورت نياز مي تونم به بايت هم تبديل كنم
چون دو تا از تايمرهاي ميكرو مشغول هست و نمي تونم از روشهاي ارتباطي چند ميكرو استفاده كنم ( تايپيك قبل )
به چه طريقي ميشه از پايه هاي 0و1 ميكرو براي راه اندازي pwm ستفاده كرد
15 پايه از 32 پايه ميكرو استفاده نمي شوند
لطفا اگر به قطعات ديگري نياز است معرفي كنيد
از اعداد باينري كه براي انتخاب چند حالت استفاده مي شوند ( مثل فيوزبيتها ) مي توان با 0 و 1 پايه ها بهره برد ؟ مثلا براي راه اندازي يه آيسي خارجي

متشكر
سلام.

آقا مشكلت حل شد ؟
atmega 32 چندتا تايمر كانتر داره ؟ مگه بيشتر از 2 تاست ؟

کد:
از اعداد باينري كه براي انتخاب چند حالت استفاده مي شوند ( مثل فيوزبيتها ) مي توان با 0 و 1 پايه ها بهره برد ؟ مثلا براي راه اندازي يه آيسي خارجي

متوجه نشدم ، مي شه دقيق تر بگي ...

البته من مبتدي هستم ...

يا علي.
sharin جان سلام و از توجهت سپاسگزارم
لطفا يه نگاهي به تايپيك "نحوه چيدمان ارتباطي چند ميكرو " بينداز
همون طور كه حدث زدم سوالم مبهم بود ، ببخشيد
سوالم را بنيادين مي پرسم تا با درك بيشتري از مدار راهنمايي كنيد
4 موتور كه هركدام توسط pwm با خصوصيت يكسان ولي مقادير لحظه اي متفاوت كنترل مي شود ( مثلا اگر pwm يكي 100 با سرعت 25 و ديگري 200 باشه با سرعت 50 ، اگر مقادير pwm جابجا شد مقادير سرعت هاشون هم دقيقا جابجا بشه )
هر pwm توسط يك سري روابط رياضي تعيين مي گردد ، پارامتر هاي اين روابط يك سري اعداد اوليه و يك سري اطلاعات سنسوري مي باشد
بنابراين در ابتدا يك ميكروي مدير و محاسب به عنوان مستر و چهار اسليو براي پردازش نهايي فرمانهاي مستر و ايجاد pwm قرار دادم و براي ارتباط آنها از spi و i2c كمك گرفتم ولي در هر دو روش ارتباطي نتونستم يك ارتباط دو طرفه مطمئن و بي نقص براي تبادل مقادير چند متغير بايت ورد و سينگل در يك اسكن برنامه ايجاد كنم حتي براي يه ميكروي اسليو
همكنون مستر را حذف كرده ام و اطلاعات اوليه را براي تك تك ميكروها مي فرستم تا پردازش كامل ولي مستقل را انجام دهند
از آنجا كه هماهنگي كامل هر 4 ميكرو الزامي مي باشد و موعد دفاع پايان نامه هم نزديك ، فعلا با همين اندك خطا هم مي سازم تا در بعد از دفاع با فرصت بيشتر جهت تكميل و افزايش دقت آن اقدام كنم
قصدم اين بود كه ببينم آيا روش دقيقي هست ( هر روش با هر قطعه ديگر ) كه بشه جداي از تايمرهاي ميكرو ،حداقل 4 pwm با مقادير مستقل را در يك ميكرو ايجاد كنيم ؟
منظورم خروجي ديجيتال براي تهيه pwm بود ، بازم ببخشيد
سلام رضا جان ...

آقا لينكاش رو مي دادي خوب ... ، اما اين دومي رو كه الان شده اولي ديدم ... .
خوب اول خودم يه سوال بپرسم :d
پايه ي PD7 يكي از توانايي هاش OC2 هست .
توضيحاتي بسكام در موردش داده ...
اولش گفته خروجي مقايسه اي تايمر كانتر 2 هست و آخرش گفته مي تونه براي مد PWM تابع تايمر هم استفاده بشه ...
حالا سوالم اينه كه پايه ي خود timer2 كجاست ؟!!!!!
من فقط t0 و t1 رو مي تونم ببينم !! وقتي timer2 هم كانفيگ مي كنيم ايراد مي گيره !! ( فكر كنم )
در atmega 128 هم مورد مشابه ديدم ! t0 نداره !! و ...
داستان چيه ؟!
نظرتون چيه ؟ ( هر كس مي دونه بگه لطفا ... )

--------------
اطلاعات تئوريم كمه در اين زمينه ، عمليم هم كمتر ... ، اما تا جايي كه مي دوم timer/counter/PWM ، از بين اينها فقط يكي رو براي هر timer اي كه اين ويژگي رو داشته باشه مي شه استفاده كرد. ، يعني با اين شرايط خود timer درگير محاسبه براي مد pWM مي شه ... .
ATMEGA128 پايه هاي تايمر كانتر بيشتري داره ، يكيشون هم 3تا كانال داشت( PWM ) . يكي ديگه هم 2كاناله (PWM)، و يكي هم تايمركانتر خالي . ( اگر درست گفته باشم !! )
با اين نوع يا نوع هاي پيشرفته تر كارتون راه مي يفته ؟
حالا باز يه سوال !
مدولاسيون عرض پالس رو مي دونم چيه ... ، اما مقداري كه به pwm1 و pwm2 مي ديم ، چه چيزي رو تعيين مي كنه و حداكثرش چقدر مي تونه باشه ؟ ( درصد سيكلي كه در مقدار منطقي 1 هست رو نشون مي ده ؟! )
اگر آره ،

مثلا اين رو ببين :
کد:
do
set portb.4
waitus 1
reset portb.4
waitus 3
loop
خوب اگر تو اين حلقه ،‌پارامتر ها رو با روابط رياضي درگير كنيم، مي تونيم عرض پالس رو تغيير بديم.( مي دونم wait دقيق نيست ،‌براي فهموندن ايده به كار بردمش ... )
البته كار احمقانه ايه ، چون بلآخره تايمر رو داريم درگير مي كنيم ، اما اگر مقادير دقيق مدنظر نيست ، شايد از wait هم بشه استفاده كرد ، البته تايمر كه در حال شمارش هست ، مي شه ما هم در برنامه جوري كد نويسي كنيم كه از مقادير اون هم براي درست كردن زمان استفاده كنيم ، البته هم زمان cpu رو مي گيريم و هم ممكنه بعضي جاها بخاطر وقفه تداخل پيش بياد و در كل شايد به زحمتش نيرزه ... !!
اما در كل فكر نمي كنم بتوني تايمر رو از Pwm جدا كني ، چون 2تاشون يكي هست !
فقط مي شه از قطعه اي استفاده كرد كه كانال هاي تايمر كانتر بيشتري داشته باشه ، ببين atmega128 يا 64 ، مي تونه كارت رو راه بندازه يا نه ، اگه نه ، بايد بري سراغ نوع هاي جديد تر كه نمي دونم تو ايران پيدا مي شه يا نه ...

در جريان كارت قرارمون بده ، ببينيم آخرش چه مي كني ...
شرمنده كه سوادم به اين حد نمي كشه ... آخه خيلي تازه كارم ...

موفق باشي.
يا علي.



sharin عزيز براي توجه و راهنماييت سپاسگزارم
نقل قول: پايه ي PD7 يكي از توانايي هاش OC2 هست .
توضيحاتي بسكام در موردش داده ...
اولش گفته خروجي مقايسه اي تايمر كانتر 2 هست و آخرش گفته مي تونه براي مد PWM تابع تايمر هم استفاده بشه ...
حالا سوالم اينه كه پايه ي خود timer2 كجاست ؟!!!!!
من فقط t0 و t1 رو مي تونم ببينم !! وقتي timer2 هم كانفيگ مي كنيم ايراد مي گيره !! ( فكر كنم )
در atmega 128 هم مورد مشابه ديدم ! t0 نداره !! و ...
داستان چيه ؟!
نظرتون چيه ؟ ( هر كس مي دونه بگه لطفا ... )
راستش تا بحال فقط با t1 و t0 براي شمارنده استفاده كرده بودم و اصلا به t2 دقت نكرده بودم ظاهرا پايه 32 مگا64 داره ولي مگا32 نداره بنابراين تو مگا32 حدث ميزنم نشه از كانتر 2 استفاده كرد
نقل قول: ATMEGA128 پايه هاي تايمر كانتر بيشتري داره ، يكيشون هم 3تا كانال داشت( PWM ) . يكي ديگه هم 2كاناله (PWM)، و يكي هم تايمركانتر خالي . ( اگر درست گفته باشم !! )
با اين نوع يا نوع هاي پيشرفته تر كارتون راه مي يفته ؟
راستش يه بار از دو كانال pwm تايمر يك خواستم به طور مستقل استفاده كنم ولي دست و پا شكسته جواب گرفتم و چون تايمر1 براي كار ديگه اي مشغول شد ديگه پيگيرش نشدم
بايد تست كنم ببينم مي تونم از 4 كانال مگا32 استفاده كنم يا نه و اگر شد بايد ببينم رفتار خروجيشون در مقابل وروديشون يكسانه يا نه
نقل قول: حالا باز يه سوال !
مدولاسيون عرض پالس رو مي دونم چيه ... ، اما مقداري كه به pwm1 و pwm2 مي ديم ، چه چيزي رو تعيين مي كنه و حداكثرش چقدر مي تونه باشه ؟ ( درصد سيكلي كه در مقدار منطقي 1 هست رو نشون مي ده ؟! )
يه عدد بين 0 تا 255 را مثلا در تايمر يك در مقابل pwm1a يا pwm1b قرار مي دهيم با توجه به لبه بالارونده يا پايين رونده درصد ديوتي سايكل را مشخص مي كنيم pwm*100/256=%
نقل قول: اين رو ببين :
کد:
do
set portb.4
waitus 1
reset portb.4
waitus 3
loop
خوب اگر تو اين حلقه ،‌پارامتر ها رو با روابط رياضي درگير كنيم، مي تونيم عرض پالس رو تغيير بديم.( مي دونم wait دقيق نيست ،‌براي فهموندن ايده به كار بردمش ... )
البته كار احمقانه ايه ، چون بلآخره تايمر رو داريم درگير مي كنيم ، اما اگر مقادير دقيق مدنظر نيست ، شايد از wait هم بشه استفاده كرد ، البته تايمر كه در حال شمارش هست ، مي شه ما هم در برنامه جوري كد نويسي كنيم كه از مقادير اون هم براي درست كردن زمان استفاده كنيم ، البته هم زمان cpu رو مي گيريم و هم ممكنه بعضي جاها بخاطر وقفه تداخل پيش بياد و در كل شايد به زحمتش نيرزه ... !!
درسته ، به نظر منم شايد بشه تو يه برنامه خيلي ساده بدون دقت تا حدي جواب گرفت چون هنوز تست نكردم ولي تو يه برنامه اي كه مدام وقفه ميخوره و بار روي cpu مدام تغيير ميكنه و دقت حياتيه ، كاربردي نداره
نقل قول: مي شه از قطعه اي استفاده كرد كه كانال هاي تايمر كانتر بيشتري داشته باشه ، ببين atmega128 يا 64 ، مي تونه كارت رو راه بندازه يا نه ، اگه نه ، بايد بري سراغ نوع هاي جديد تر كه نمي دونم تو ايران پيدا مي شه يا نه ...
مگا64 و مگا644 را بررسي كردم البته اگر بتونم 4 تا از كانالهاش را راه اندازي كنم و رفتارشون هم يكسان باشه و بتونم با پروگرمر usbasp هم پروگرمش كنم حتما ازشون استفاده مي كنم

تا اينجاش كه سنگ تموم گذاشتي ، ممنون
پاينده باشيد