پاسخ : چگونه با ولوم Rotary Encoders کار کنیم؟ [آموزشی]
با سلام
بله. معمولا دارن.
اطلاعیه
Collapse
No announcement yet.
چگونه با ولوم Rotary Encoders کار کنیم؟ [آموزشی]
Collapse
X
-
پاسخ : چگونه با ولوم Rotary Encoders کار کنیم؟ [آموزشی]
سلام این رو تاری های تو بازار کلید وسط فشاری داره؟
یک دیدگاه بنویسید:
-
پاسخ : چگونه با ولوم Rotary Encoders کار کنیم؟ [آموزشی]
درودنوشته اصلی توسط masoud_l66حالا چطوری از ظاهر بتونیم تشخیص بدیم که نوع اول یا دوم ؟؟؟؟ فروشنده ها هم که معمولا نمیشناسن قطعاتو
اون رو دیگه باید از فرشنده سوال کنید ...
اگر هم نمیدونست خودتون باید به فروشنده بگید که همونجا یه مالتی متر دیجیتالی بهتون بده و همون جا امتحانش کنید ...
روش امتحان کردنش هم ساده است ...
اگر پایه وسط به پایه 1 و 3 وصل نبود و در دندانه بعدی هم به همین شکل بود بدانید که نوع اول هست (دوره کامل در هر دندانه)
اگر پایه وسط به هردو پایه دیگر وصل یا قطع بود و در دندانه بعدی مخالف این بود بدانید که نوع دوم است (نیم دوره در هر دندانه)
نوع سوم هم بستگی داره به کدوم طرف بچرخونید ... ولی در کل این مراحل را دارا هستند:
00 - 10 - 11 - 01 - 00
حالا اگر به راست چرخش کنید اول 01 بعدش 11 و 10 و 00 ولی به چپ بروید برعکس این میشه ...
موفق باشید
یک دیدگاه بنویسید:
-
پاسخ : چگونه با ولوم Rotary Encoders کار کنیم؟ [آموزشی]
حالا چطوری از ظاهر بتونیم تشخیص بدیم که نوع اول یا دوم ؟؟؟؟ فروشنده ها هم که معمولا نمیشناسن قطعاتو
یک دیدگاه بنویسید:
-
پاسخ : چگونه با ولوم Rotary Encoders کار کنیم؟ [آموزشی]
آقا خیلی شرمنده کردی، اینقد توجه لازم نبود به خدا راضی به زحمت نبودیم :biggrin: :biggrin: :biggrin:
خیلی اطلاعات خوبی بود ،اون 3تا شکل از سه نوع روتاری خیلی خوب بود من نمیدونستم اینطوریه
من نگفتم پالس تولید میشه گفتم شکل مربعی نمیدن فقط تغییر لول دارن! :biggrin:تاپیکم رو کامل بخونید متوجه می شوید که من در هیچ جای این تاپیک نگفته ام که این قطعات پالس درست میکنه ...
تو پروتئوس libraryش رو گذاشتن بچه ها ولی از نوع 1 هست و باگ هم دارهاون مداری هم که میبینید به خاطر این هست که چون در پروتئوس این قطعه نداشتیم ، خواستم به صورت عملی تر شبیه سازی کنم ...
من اصلا قصد این کار رو نداشتم!!! موج منفی چرا؟؟؟نه بابا ... این چه حرفیه ... اتفاقا" حال میکنم با این موج های منفی ... چون بادبادک وقتی بالا میره که با باد مخالف روبرو بشه !!!
دمت هم گرم میدونم کار پر زحمتی انجام دادی من قبلش هم تشکر کردم هم گفتم قصد جسارت ندارم :rolleyes:
به هر حال مرسی از این توجه و مطالب مفیدی که گذاشتی :icon_razz:
یک دیدگاه بنویسید:
-
پاسخ : چگونه با Rotary Encoders کار کنیم؟ [آموزشی]
خیلی ممنون از اینکه نظرتون رو اعلام میکنید ...
:redface: پناه بر خدا ... مگه روتاری اینکدر شما چطوریه؟نوشته اصلی توسط ameen.khفقط یه مساله ای هست ، اینکه روتاری هایی که توی بازار هستندطرز کارشون به این صورت نیست
نمیدونم حالا اینایی که ما داریم اینطوریه یا همش :biggrin:
ولی من چند مدل امتحان کردم و همش مثل هم بود
فقط قبل از اینکه بحثی صورت بگیره این رو لازم میدونم بگم ...
سه نوع ولوم روتاری انکودر وجود داره که من خودم شخصا دو نمونه اول رو دیدم
نوع اول که در این تاپیک کاملا بحث شده و بیشتر عمومی هست ...
نوع دوم که همین دو هفته پیش رفتم تهران خریدم (برنامه آن ساده تره)
و نوع سوم که ندیدم تا حالا ....
دلیل این که میگید همه مثل هم بوده به خاطر اینه که با اهم متر فقط تستش کردید ...
دوستان برای اینکه بهتر متوجه بشوید که شکل موج به چه صورتی هست و بهتر آن را درک کنید مدار زیر را ببندید و مشاهده کنید .
مدار خیلی ساده ...
خوب حالا خیلی آروم آروم ولوم رو بچرخونید و هر دفعه روی هر دندانه صبر کنید ...
میبینید و مشاهده میکنید که شکل موج به چه صورتی است ... و از همه مهمتر بهتر درک میکنید ...
حالا من خودم از نوع اول و دوم استفاده کردم و دیدم که با هم تفاوت دارند ...
بگذریم ...
بله ... جواب هم گرفتم ...نوشته اصلی توسط ameen.khنمیدونم شما هم به صورت عملی تست کردی یا نه!
تاپیکم رو کامل بخونید متوجه می شوید که من در هیچ جای این تاپیک نگفته ام که این قطعات پالس درست میکنه ...نوشته اصلی توسط ameen.khتو عمل ،روتاری پالسی نمیده! بلکه با هر تیک چرخش، هر دو خروجیش تغییر لول پیدا میکنن و این تغییر لول با یه اختلاف زمانی کوچکی انجام میشه.
اون مداری هم که میبینید به خاطر این هست که چون در پروتئوس این قطعه نداشتیم ، خواستم به صورت عملی تر شبیه سازی کنم ...
اون ولومی هم که شما خریدید از نوع دوم هست ...نوشته اصلی توسط ameen.khولی تا یه تیک دیگه نچرخه، سطح ولتاژ خروجی به حالت قبلی بر نمیگرده!
من فقط روش سخت افزاری رو پیشنهاد دادم ... که دلیل اون هم همونطور که میدونید اگر مدار دیبانس گذاشته نشه برنامه چندبار به روتین وقفه رفته واین باعث میشود که پردازش بیشتر صورت گیرد ... ولی اگر مدار دیبانس بگذاریم فقط یکبار به روتین مربوطه می رود ...نوشته اصلی توسط ameen.khبرنامش هم اصلا پیچیده نیست، نه نیازی به هدر فایل داره نه به این همه روش های مختلف واسه دیبانس!
نه بابا ... این چه حرفیه ... اتفاقا" حال میکنم با این موج های منفی ... چون بادبادک وقتی بالا میره که با باد مخالف روبرو بشه !!!نوشته اصلی توسط ameen.khالبته من چون خودم تو عمل ازش به خوبی جواب گرفتم اینو میگم وگرنه اصلا قصد جسارت ندارم :biggrin: :biggrin: :biggrin:
خواهش میکنم ... صاحب اجازه هستید عزیز ...نوشته اصلی توسط ameen.khمیخواستم با اجازتون کد خودمو بذارم واسه اونایی که قصد دارن تو عمل استفادش کنن ولی درست جواب نگرفتن!
فقط کافیه این یه تیکه رو با یه سری معرفی ها (در حد 3-4 خط) تو برنامه اضافه کنن.همین!
البته من هنوز این تاپیک رو کامل نکرده بودم ... ولوم نوع دوم رو از بازار خریدم و میخواستم برنامه اون رو بگذارم که شما دیگه پیش دستی کردید ...نوشته اصلی توسط ameen.khتوضیح برنامه :
من با یه مگا128 کار میکنم که واسه انکودر وقفه خارجیش رو تو حالت anychange فعال کردم و یکی از خروجی های انکودر رو به این وقفه وصل کردم و خروجی دیگش رو به یه پایه دلخواه( اینجا من وقفه رو روی PE.4 و پایه دلخواهمو PE.7 در نظر گرفتم)
هر تیک چرخش و تغییر سطح در خروجی انکودر(که به وقفه خارجی وصله) وقفه رو فعال میکنه.
به خاطر اختلاف زمانی که دو خروجی با هم دارن، بسته به اینکه روتاری از کدوم طرف چرخیده باشه اون دوتا پایه مقادیر مختلفی نسبت به هم میتونن داشته باشن
تو لحظه ای که وقفه اتفاق می افته PORTE رو روی یه متغیر save میکنم که اون حالت اولیه رو از دست ندم
بعد اون دوتا بیت که مربوط به پایه های خروجی انکودر هست رو جدا میکنم
بعد چک میکنم که از کدوم طرف چرخیده و بنا به نتیجش متغیر rotary رو کم یا زیاد میکنم
تنها تغییری که شما باید تو برنامه بدین اینه :کد:interrupt [EXT_INT4] void ext_int4_isr(void){ pe_save=PINE; pe_save&=0x90; if(pe_save==0x80 || pe_save==0x10) { ++rotary; return; } if(pe_save==0x90 || pe_save==0x00){ --rotary; return; } }
1- دوتا متغیر pe_save و rotary رو تعریف کنین
2- تنظیمات رجیسترهای مربوط به وقفه خارجی رو روی حالت anychange انجام بدین (فقط یک وقفه کافیه)
3- اگه از میکروی دیگه ای استفاده میکنین اسم پورت و شماره پایه وقفه عوض میشه
اگه متوجه توضیحاتم نشدین بگین تا بیشتر توضیح بدم :biggrin:
انشالله وقت کردم کاملترش هم میکنم ...
ممنون
موفق و پاینده باشید
یک دیدگاه بنویسید:
-
پاسخ : چگونه با Rotary Encoders کار کنیم؟ [آموزشی]
آقای اسدی عزیز سلام و دستت درد نکنه بابت مطالب مفیدی که گذاشتی
فقط یه مساله ای هست ، اینکه روتاری هایی که توی بازار هستندطرز کارشون به این صورت نیست
نمیدونم حالا اینایی که ما داریم اینطوریه یا همش :biggrin:
ولی من چند مدل امتحان کردم و همش مثل هم بود
نمیدونم شما هم به صورت عملی تست کردی یا نه!
تو عمل ،روتاری پالسی نمیده! بلکه با هر تیک چرخش، هر دو خروجیش تغییر لول پیدا میکنن و این تغییر لول با یه اختلاف زمانی کوچکی انجام میشه.
ولی تا یه تیک دیگه نچرخه، سطح ولتاژ خروجی به حالت قبلی بر نمیگرده!
برنامش هم اصلا پیچیده نیست، نه نیازی به هدر فایل داره نه به این همه روش های مختلف واسه دیبانس!
البته من چون خودم تو عمل ازش به خوبی جواب گرفتم اینو میگم وگرنه اصلا قصد جسارت ندارم :biggrin: :biggrin: :biggrin:
میخواستم با اجازتون کد خودمو بذارم واسه اونایی که قصد دارن تو عمل استفادش کنن ولی درست جواب نگرفتن!
فقط کافیه این یه تیکه رو با یه سری معرفی ها (در حد 3-4 خط) تو برنامه اضافه کنن.همین!
توضیح برنامه :
من با یه مگا128 کار میکنم که واسه انکودر وقفه خارجیش رو تو حالت anychange فعال کردم و یکی از خروجی های انکودر رو به این وقفه وصل کردم و خروجی دیگش رو به یه پایه دلخواه( اینجا من وقفه رو روی PE.4 و پایه دلخواهمو PE.7 در نظر گرفتم)
هر تیک چرخش و تغییر سطح در خروجی انکودر(که به وقفه خارجی وصله) وقفه رو فعال میکنه.
به خاطر اختلاف زمانی که دو خروجی با هم دارن، بسته به اینکه روتاری از کدوم طرف چرخیده باشه اون دوتا پایه مقادیر مختلفی نسبت به هم میتونن داشته باشن
تو لحظه ای که وقفه اتفاق می افته PORTE رو روی یه متغیر save میکنم که اون حالت اولیه رو از دست ندم
بعد اون دوتا بیت که مربوط به پایه های خروجی انکودر هست رو جدا میکنم
بعد چک میکنم که از کدوم طرف چرخیده و بنا به نتیجش متغیر rotary رو کم یا زیاد میکنم
تنها تغییری که شما باید تو برنامه بدین اینه :کد:interrupt [EXT_INT4] void ext_int4_isr(void){ pe_save=PINE; pe_save&=0x90; if(pe_save==0x80 || pe_save==0x10) { ++rotary; return; } if(pe_save==0x90 || pe_save==0x00){ --rotary; return; } }
1- دوتا متغیر pe_save و rotary رو تعریف کنین
2- تنظیمات رجیسترهای مربوط به وقفه خارجی رو روی حالت anychange انجام بدین (فقط یک وقفه کافیه)
3- اگه از میکروی دیگه ای استفاده میکنین اسم پورت و شماره پایه وقفه عوض میشه
اگه متوجه توضیحاتم نشدین بگین تا بیشتر توضیح بدم :biggrin:
- تشکرها 2
یک دیدگاه بنویسید:
-
پاسخ : چگونه با Rotary Encoders کار کنیم؟ [آموزشی]
فکر کنم روتاری انکدر یا روتاری سوئیچ (ولوم هرزگرد قدیم!! :mrgreen: ) خوب باشه!
یک دیدگاه بنویسید:
-
پاسخ : چگونه با Rotary Encoders کار کنیم؟ [آموزشی]
سلامنوشته اصلی توسط شاهرخ مستقیمیسلام.
یه خرده دیره واسه جواب دادن، ولی خواستم بگم نسخه ی راه اندازی روتاری سوئیچ با میکرو PIC هم داریم واسه متقاضیان! :nerd:
راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A
منم اسم تاپیک رو عوض کنم یا همین خوبه؟
ممنون که لینک دادید
والا همونطور که مشاهده کردید عنوان تاپیک تقریبا مثل شما بود ولی به دلیل پیشنهاد دوستان اون رو عوض کردم ...
فکر کنم این اسم مناسبتر باشه
Volume Rotary Encoder
نظر شما چیه؟
یک دیدگاه بنویسید:
-
پاسخ : چگونه با Rotary Encoders کار کنیم؟ [آموزشی]
سلام.
یه خرده دیره واسه جواب دادن، ولی خواستم بگم نسخه ی راه اندازی روتاری سوئیچ با میکرو PIC هم داریم واسه متقاضیان! :nerd:
راه اندازی روتاری سوئیچ(ولوم هرزگرد) با PIC16F628A
منم اسم تاپیک رو عوض کنم یا همین خوبه؟
یک دیدگاه بنویسید:
-
پاسخ : چگونه با ولومهای هرزگرد(Rotary Encoders)کار کنیم؟ [آموزشی] "کافیه یکبار بخوانید"
ممنون دوستان
نمیدونم چرا هر آموزشی که میخوام بدم همیشه خوب که میگردم اون مطالبی هم که تو انجمن هست تو تورم نمیخوره ؟؟؟
مثلا همین تاپیک که میخواستم باز کنم خیلی تو انجمن گشتم ولی چیز خوبی پیدا نکردم ...
یه بنده خدایی همون اوایل یه پیام خصوصی داد ولی من زیاد توجه نکردم ... البته اینو بگم که اون لینک مربوط میشد به یک تاپیکی که توی اون زیاد محتوایی نداشت ولی توی اون تاپیک یک لینک رو گذاشته بودن که آقای شهرام نوربخش راد درباره همین مطالب یه توضیح داده بودند و حتی یک کتابخونه هم نوشته بودند!! ، ولی من قبلش ندیده بودم ...
http://www.eca.ir/forum2/index.php?topic=64260.msg367962#msg367962
http://www.eca.ir/forum2/index.php?topic=64260.msg368165#msg368165
http://www.eca.ir/forum2/index.php?topic=64260.msg371452#msg371452
جا داره همینجا از استاد بزرگ آقای شهرام نوربخش راد تشکر کنم ... :applause:
بله ... دقیقا همه رو سرچ کردم ...نوشته اصلی توسط داود رهاییخب دلیلی که چیزی پیدا نکردید شاید این باشه که اسمش رو اشتباه دارید میگید
این رو هم بگم که بیشتر موقع ها سایت یا بالا نمیاد یا نمیشه جستجو کنیم یا پستی میخوایم جواب بدیم اصلا بالا نمیاد و ...
خلاصه اینکه اعصابم
میشه
اسمهای مختلفی هستنوشته اصلی توسط داود رهاییاسم اینها ولوم نیست بلکه روتاری انکودر هست
Rotary encoder switch
Volume Rotary Encoder
Rotary Encoder
خیلی خوشحال میشم که برای این قطعه یک واژه فارسی پیدا کنیم ... :applause:
---------------------------------------------------------------------------------------------------------------
به روی چشم ... اصلاح کردمنوشته اصلی توسط voyager2020من چندین بار تو انجمن دیدم به روتاری انکودر ها به اشتباه میگن ولوم هرزگرد! اقای رهایی هم درست ایراد گرفتند-ولوم هرزگرد جریانش کاملا با روتاری انکودر متفاوت هست و قیمت ولوم هرزگرد هم خیلی خیلی بالاتره! از 100 تومن شروع میشه تا چند میلیون!!! بهتر هست عنوان تاپیک اصلاح و روتاری انکودر باقی بمونه!
- تشکرها 1
یک دیدگاه بنویسید:
-
پاسخ : چگونه با ولومهای هرزگرد(Rotary Encoders)کار کنیم؟ [آموزشی] "کافیه یکبار بخوانید"
با تشکر از دوست گرامی و مطلب اموزشیشون در سایتنوشته اصلی توسط ناصر منتظری
oo:
oo:
oo:
عنوان تاپیک رو ببین لطفا و یه بار بخون لطفا و پست بی مورد نده لطفا :angry: !!
با تشکر فراوان از سامان اسدی عزیز به خاطر مطالب فوق العادش :applause: :applause: :applause:
من چندین بار تو انجمن دیدم به روتاری انکودر ها به اشتباه میگن ولوم هرزگرد! اقای رهایی هم درست ایراد گرفتند-ولوم هرزگرد جریانش کاملا با روتاری انکودر متفاوت هست و قیمت ولوم هرزگرد هم خیلی خیلی بالاتره! از 100 تومن شروع میشه تا چند میلیون!!! بهتر هست عنوان تاپیک اصلاح و روتاری انکودر باقی بمونه!
یک دیدگاه بنویسید:
-
پاسخ : چگونه با ولومهای هرزگرد(Rotary Encoders)کار کنیم؟ [آموزشی] "کافیه یکبار بخوانید"
---
یک دیدگاه بنویسید:
-
پاسخ : چگونه با ولومهای هرزگرد(Rotary Encoders)کار کنیم؟ [آموزشی] "کافیه یکبار بخوانید"
با تشکر از دوست گرامی
یک اموزش مفید و کامل بود
امیدوارم باز هم شاهد اموزش های شما دوست گرامی باشیم
- تشکرها 1
یک دیدگاه بنویسید:
-
چگونه با Rotary Encoders کار کنیم؟؟ (ادامه بخش چهارم)
ادامه بخش چهارم :
استفاده از وقفه های PIN Change:
همونطور که تو شبیه سازی ملاحظه می کنید پایه های 4 و 5 میکروی ATmega48 پایه های وقفه PIN Change است که با نامهای PCINT18 و PCINT19 مشخص شده است . بنابراین ما باید وقفه های PCINT18 و PCINT19 را فعال کنیم . برای اینکار باید رجیستر های مربوطه را تغییر دهیم .
برنامه برای Atmel Studio 6.1 :
برنامه برایCodeVision :کد:#include <avr/io.h> #include <avr/iom48.h> #include <util/delay.h> #include <avr/interrupt.h> uint8_t RE=0 , Status , Counter; void USART_Transmit( uint8_t data ) { while ( !( UCSR0A & (1<<UDRE0)) ); UDR0 = data; } void USART_puts(char *str) { uint8_t i=0; while(str[i]) { USART_Transmit(str[i]); i++; } } void USART_put_uint8(uint8_t data) { uint8_t a,b=0,c; c=data; for(a=0;a<100;a++) { if(c==0)break; c/=10; if(b==0)b++; else b*=10; } if(b==0)USART_Transmit('0'); for(a=b;a>0;a/=10) { c = data/a; data = data - (c*a); USART_Transmit(c+48); } } #define Enter \ {\ USART_Transmit(0x0D);\ USART_Transmit(0x0A);\ } void Rotary_Encoder(uint8_t Input_PhaseA_PhaseB,uint8_t PIN,uint8_t *Var,uint8_t *Status,uint8_t *Counter) { uint8_t bit_Right=0 , x ; x = PIN & Input_PhaseA_PhaseB; for(uint8_t q = 1;q<200;q <<= 1) if(Input_PhaseA_PhaseB & q) { bit_Right = q; break; } if(x < Input_PhaseA_PhaseB) { if(!(x & bit_Right))*Counter += 1; *Status = x; } else if((x == Input_PhaseA_PhaseB) && (*Counter == 2)) { if (*Status == bit_Right) *Var += 1; // راستگرد else *Var -= 1; // چپگرد *Status = 0; *Counter= 0; } else { *Status = 0; *Counter = 0; } } ISR(PCINT2_vect) { Rotary_Encoder(0x0C,PIND,&RE,&Status,&Counter); } int main(void) { // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off // USART Transmitter: On // USART0 Mode: Asynchronous // USART Baud Rate: 9600 UCSR0A=0x00; UCSR0B=0x08; UCSR0C=0x06; UBRR0H=0x00; UBRR0L=0x33; // External Interrupt(s) initialization // PCINT18 : on // PCINT19 : on EICRA=0x00; EIMSK=0x00; PCICR=0x04; PCMSK2=0x0C; PCIFR=0x04; sei(); uint8_t x=10; while(1) { if(RE!=x) { USART_puts("RE="); USART_put_uint8(RE); Enter; x=RE; } _delay_ms(50); } }
این هم مثل برنامه قبل امتحانش کنید و با آن کار کنید ...کد:/***************************************************** Project : Rotary Encoder Version : 1.0 Date : 4/19/2014 Author : Saman.Asadi Chip type : ATmega48 AVR Core Clock frequency: 8.000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 128 *****************************************************/ #include <mega48.h> #include <stdio.h> #include <delay.h> unsigned char RE=0 , Status , Counter; #define Enter \ {\ putchar(0x0D);\ putchar(0x0A);\ } void Rotary_Encoder(unsigned char Input_PhaseA_PhaseB, unsigned char PIN, unsigned char *Var, unsigned char *Status, unsigned char *Counter) { unsigned char bit_Right=0 ,x ,q ; x = PIN & Input_PhaseA_PhaseB; for(q = 1;q<200;q <<= 1) if(Input_PhaseA_PhaseB & q) { bit_Right = q; break; } if(x < Input_PhaseA_PhaseB) { if(!(x & bit_Right))*Counter += 1; *Status = x; } else if((x == Input_PhaseA_PhaseB) && (*Counter == 2)) { if (*Status == bit_Right)*Var += 1; // راستگرد else *Var -= 1; // چپگرد *Status = 0; *Counter= 0; } else { *Status = 0; *Counter = 0; } } interrupt [PC_INT2] void pin_change_isr2(void) { Rotary_Encoder(0x0C,PIND,&RE,&Status,&Counter); } void main(void) { unsigned char x=10; CLKPR=0x80; CLKPR=0x00; // USART initialization // Communication Parameters: 8 Data, 1 Stop, No Parity // USART Receiver: Off // USART Transmitter: On // USART0 Mode: Asynchronous // USART Baud Rate: 9600 UCSR0A=0x00; UCSR0B=0x08; UCSR0C=0x06; UBRR0H=0x00; UBRR0L=0x33; // External Interrupt(s) initialization //PCINT18 : on //PCINT19 : on EICRA=0x00; EIMSK=0x00; PCICR=0x04; PCMSK2=0x0C; PCIFR=0x04; #asm("sei") while(1) { if(RE!=x) { printf("RE=%u",RE); Enter; x=RE; } delay_ms(50); } }
--------------------------------------------------------------------
خوب عزیزان این بخش هم به پایان رسید :wow:
امیدوارم که خوب توضیح داده باشم ... :redface:
موفق و کامیاب باشید
- تشکرها 4
یک دیدگاه بنویسید:
یک دیدگاه بنویسید: