اطلاعیه

Collapse
No announcement yet.

کمک در مورد سروو موتور

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : کمک در مورد سروو موتور

    نوشته اصلی توسط Intersil
    تو برنامتون چند تا مورد وجود داره. شما پورت B رو به صورت خروجی پیکره بندی نکردید. نمیدونم چطور تو PIC16F84 کار کرده؟ ضمناً شما در زمان پروگرم کردن گزینه برنامه ریزی ولتاژ پائین (LVP) رو غیر فعال کردید یا نه؟ در غیر این صورت موقعی که مدار PIC16F877 رو بستید پایه RB3 رو به زمین وصل کردید یا نه؟
    مورد دیگه اینکه فکر نمیکنید تاخیر 20ms در دستور pause 20 کمی زیاده؟ اگه 19 میلی ثانیه قرار بدید بهتر نیست؟
    در مورد کنترل چند تا سروو باید بگم بعیده بتونید با دستورات تاخیر و پالس اونا رو کنترل کنید. اگه یک سروو داشته باشیم زیاد پیچیده نیست. علتش هم اینه که به هرحال شما دستوراتی رو که مینویسید به صورت سریال اجرا میشن. وقتی یک مجموعه دستور شامل تاخیر برای یک سروو انجام میشه و سپس دستورات دیگه ای برای سروو دیگه در هر صورت تاخیر ناشی از هر یک از این مجموعه دستورات با تاخیر های بعدی سری میشه و باعث میشه فرکانس 50 هرتز سروو به هم بخوره و فرکانس پائین بیاد و سروو کنترل نشه.
    چاره کار اینه که فرکانس مربوط به هر سروو رو هر طوری که ممکنه به صورت موازی با سروو های دیگه تولید کنید. برای اینکار میتونید از میکروکنترلر هایی استفاده کنید که به تعداد سروو های مورد نیاز شما خروجی PWM داشته باشند. و یا اینکه به تعداد سروو ها از میکروهای کوچک استفاده کنید و هر کدوم از این میکروها برای یک سروو پالس تولید کنند.
    سلام و بسیار ممنون جناب Intersil از توجهتون
    و معزرت خواهی بابت تاخیر جواب
    راجع به سوال اولتون منظورتون دستور trisb = %11111110 هستش که بیت صفرم تو پورت b به عنوان خروجی تعریف بشه؟
    منظورتون از LVP رو نمیدونم چیه و اینکه چجوری باید این کارو بکنم و پایه RB3 رو هم تو f877a زمین نکردم، باید این کارو بکنم؟ :sad: من واسه راه انداختن f877a فقط پایه MCLR رو با یه مقاومت 4.7 کیلو به پایه11 و 32 (VDD) واز اونجا به 5 ولت وصل کردم وپایه های 12 و 31 رو به GND و پایه های 13 و 14 رو هم با یه اسیلاتور 4M و دو تا خازن 22P به زمین آوردم ، کار دیگه ای نکردم!
    راجع به سرووها منظورتون اینه که f877a از لحاظ سخت افزاری قادر به کنترل چند سروو نیست و باید از چند میکرو واسه چرخوندن چند سروو و رابطه ی بین میکرویی استفاده کنیم؟
    من خیلی تو pic و کار با سرووها مبتدی ام خیلی ممنونم که کمکم میکنید و ایرادهای کارمو میگید :job:




    اضافه شده در تاریخ :
    سلام
    از شما و نظر لطفتون بسیارممنونم جناب کاخکی :smile:
    مشکل زاویه ی سروو هم به لطف دوستان حل شد شکر خدا :wow:
    زندگی برگ بودن در مسیر باد نیست
    امتحان ریشه هاست
    ریشه هم هرگز اسیر باد نیست
    زندگی چون پیچک است
    انتهایش میرسد پیش خدا!

    دیدگاه


      #17
      پاسخ : کمک در مورد سروو موتور

      نوشته اصلی توسط pama
      راجع به سوال اولتون منظورتون دستور trisb = %11111110 هستش که بیت صفرم تو پورت b به عنوان خروجی تعریف بشه؟
      سلام.
      آره. شما اول باید پین 0 رو خروجی پیکره بندی میکردید.
      نوشته اصلی توسط pama
      منظورتون از LVP رو نمیدونم چیه و اینکه چجوری باید این کارو بکنم و پایه RB3 رو هم تو f877a زمین نکردم، باید این کارو بکنم؟ :sad: من واسه راه انداختن f877a فقط پایه MCLR رو با یه مقاومت 4.7 کیلو به پایه11 و 32 (VDD) واز اونجا به 5 ولت وصل کردم وپایه های 12 و 31 رو به GND و پایه های 13 و 14 رو هم با یه اسیلاتور 4M و دو تا خازن 22P به زمین آوردم ، کار دیگه ای نکردم!
      اغلب میکروهای PIC میتونند توسط دو مد برنامه ریزی ولتاژ کم و پروگرم شدن با ولتاژ بالا برنامه ریزی بشن. مد ولتاژ بالا مد اصلی و همیشگیه، یعنی شما با پروگرمر ولتاژ بالا میتونید راحت میکرو رو پروگرم کنید. مد ولتاژ پائین هم به طور پیشفرض فعاله و شما میکرو رو با یک پروگرمر ولتاژ پائین هم میتونید پروگرم کنید. منتهی اگر در زمان پروگرم کردن بیت مربوط به برنامه ریزی ولتاژ پائین رو غیر فعال کنید دفعه بعد میکرو با پروگرمر ولتاژ پائین پروگرم نمیشه. برای برگشت به حالت قبل باید از یک پروگرمر ولتاژبالا استفاده کنید و دو باره این بیت رو فعال کنید.
      مسئله ای که وجود داره اینه که پایه PORTB3 به طور پیشفرض برای برنامه ریزی ولتاژ پائین اختصاص داده شده و شما نمیتونید از اون به عنوان IO استفاده کنید. در ضمن اگر زمان پروگرم کردن مد ولتاژ پائین رو غیر فعال نکردید بعد از برنامه ریزی و زمان استفاده حتما باید این پایه رو به زمین وصل کنید وگرنه میکرو کار نمیکنه و حالتی شبیه به اتصال پایه ریست به زمین پیش میاد.
      برای اینکه بتونید از RB3 به عنوان ورودی خروجی استفاده کنید باید در زمان پروگرم کردن مد LVP رو غیر فعال کنید. در این صورت نیازی نیست که این پینو به زمین متصل کنید.

      نوشته اصلی توسط pama
      راجع به سرووها منظورتون اینه که f877a از لحاظ سخت افزاری قادر به کنترل چند سروو نیست و باید از چند میکرو واسه چرخوندن چند سروو و رابطه ی بین میکرویی استفاده کنیم؟
      من خیلی تو pic و کار با سرووها مبتدی ام خیلی ممنونم که کمکم میکنید و ایرادهای کارمو میگید :job:
      در این مورد باید همونطوری که دوستمون آقای perfect به طور کامل توضیح دادند ، میکروهای 8 بیتی PIC نمیتونند به راحتی فرکانس PWM مورد نظر شما رو تولید کنند. تازه اگه هم بشه(که نمیشه) میکرو PIC16F877 و ... فقط دو تا ماژول CCP دارند . یعنی حد اکثر دو تا سروو رو میتونید کنترل کنید. یک راه حل اینه که از چند تا میکرو کوچیک و ارزان قیمت استفاده کنید و PWM رو به صورت نرم افزاری برای هر سروو تولید کنید و با یک میکرو که نقش Master رو داره اونا رو کنترل کنید.
      یک راه دیگه هم داره. میتونید PIC رو بی خیال بشید برید از XMEGA استفاده کنید.

      دیدگاه


        #18
        پاسخ : کمک در مورد سروو موتور

        بیا از همین AVR استفاده کن و با استفاده از بسکام میتونی تا 14 سروو رو با یک دستور کنترل کنی!
        البته با استفاده از تایمر و بدون استفاده از دستور مخصوص هم میتونی همین کار رو بکنی
        پروردگارا: به من زیستنی عطا کن که در لحظه مرگ بر بی ثمری لحظه ای که برای زیستن گذشته است حسرت نخورم، و مردنی عطا کن که بر بیهودگیش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست میداری

        دیدگاه


          #19
          پاسخ : کمک در مورد سروو موتور

          واقعا :surprised:
          ممنونم از حسن نیتتون جناب کاخکی :agree:
          ولی بنده مدت زمان زیادی رو صرف یاد گرفتن چیزای دست و پا شکسته ای در مورد pic کردم که الان بلدم! و همه میکروها و پروگرمری هم که تهیه کردم مربوط به این میکروهان،و زمان زیادی هم برای برگشت به AVR و رو روال عادی اومدن تو اون میکروها رو ندارم، ولی برام خیلی جالبه که با یه میکرو AVR میشه تا 14 تا سروو رو کنترل کرد و اگه واستون امکان داشته باشه و بفرمایید چجوری میشه این کارو کرد بنده و سایر دوستان ممنون میشیم :job:

          اضافه شده در تاریخ :
          از بنده هم مجددا سلام و عرض تشکر زیاد از لطف و توجهتون جناب Intersil
          نوشته اصلی توسط Intersil
          مد ولتاژ بالا مد اصلی و همیشگیه، یعنی شما با پروگرمر ولتاژ بالا میتونید راحت میکرو رو پروگرم کنید. مد ولتاژ پائین هم به طور پیشفرض فعاله و شما میکرو رو با یک پروگرمر ولتاژ پائین هم میتونید پروگرم کنید. منتهی اگر در زمان پروگرم کردن بیت مربوط به برنامه ریزی ولتاژ پائین رو غیر فعال کنید دفعه بعد میکرو با پروگرمر ولتاژ پائین پروگرم نمیشه. برای برگشت به حالت قبل باید از یک پروگرمر ولتاژبالا استفاده کنید و دو باره این بیت رو فعال کنید.
          مسئله ای که وجود داره اینه که پایه PORTB3 به طور پیشفرض برای برنامه ریزی ولتاژ پائین اختصاص داده شده و شما نمیتونید از اون به عنوان IO استفاده کنید. در ضمن اگر زمان پروگرم کردن مد ولتاژ پائین رو غیر فعال نکردید بعد از برنامه ریزی و زمان استفاده حتما باید این پایه رو به زمین وصل کنید وگرنه میکرو کار نمیکنه و حالتی شبیه به اتصال پایه ریست به زمین پیش میاد.
          برای اینکه بتونید از RB3 به عنوان ورودی خروجی استفاده کنید باید در زمان پروگرم کردن مد LVP رو غیر فعال کنید. در این صورت نیازی نیست که این پینو به زمین متصل کنید.
          راستشو بخواید دوست من توضیحات شما خیلی کامل و عالیه منتها من زیادی تازه کار و ناواردم و زیاد سر در نمیارم! پس من الان که از این پایه به عنوان IO استفاده نمیکنم لزومی نداره که اونو زمین کنم،درسته؟ و آیا کلا مشکل بیت ولتاژ پایین و ولتاژ بالا واسه کار با این میکرو واسه من حل شده است یا این که نه من باید تنظیمات خاصی رو جایی انجام بدم اگه امکان داره لطفا بگید که بنده باید دقیقا چه کار کنم تا LVPای که شما میفرمایید واسه من حل بشه
          نوشته اصلی توسط Intersil
          در این مورد باید همونطوری که دوستمون آقای perfect به طور کامل توضیح دادند ، میکروهای 8 بیتی PIC نمیتونند به راحتی فرکانس PWM مورد نظر شما رو تولید کنند. تازه اگه هم بشه(که نمیشه) میکرو PIC16F877 و ... فقط دو تا ماژول CCP دارند . یعنی حد اکثر دو تا سروو رو میتونید کنترل کنید. یک راه حل اینه که از چند تا میکرو کوچیک و ارزان قیمت استفاده کنید و PWM رو به صورت نرم افزاری برای هر سروو تولید کنید و با یک میکرو که نقش Master رو داره اونا رو کنترل کنید.
          یک راه دیگه هم داره. میتونید PIC رو بی خیال بشید برید از XMEGA استفاده کنید.
          در این مورد هم بسیار ممنونم از راهنماییتون، ولی من تو یه کتابی برنامه کنترل 5 تا سروو به صورت نرم افزاری رو با 16f873 دیدم که هر سروو با یک کلید تک پل دو طرفه میچرخید،منم فکر کردم که به جای هر کلید دستورات و شرطهای مربوط به حرکت هر سروو رو بذارم و به این وسیله چند تا سروو با یه میکرو کنترل بشن، برنامشو مینویسم وخیلی زود میذارم.
          زندگی برگ بودن در مسیر باد نیست
          امتحان ریشه هاست
          ریشه هم هرگز اسیر باد نیست
          زندگی چون پیچک است
          انتهایش میرسد پیش خدا!

          دیدگاه


            #20
            پاسخ : کمک در مورد سروو موتور

            نوشته اصلی توسط pama
            واقعا :surprised:
            ممنونم از حسن نیتتون جناب کاخکی :agree:
            ولی بنده مدت زمان زیادی رو صرف یاد گرفتن چیزای دست و پا شکسته ای در مورد pic کردم که الان بلدم! و همه میکروها و پروگرمری هم که تهیه کردم مربوط به این میکروهان،و زمان زیادی هم برای برگشت به AVR و رو روال عادی اومدن تو اون میکروها رو ندارم، ولی برام خیلی جالبه که با یه میکرو AVR میشه تا 14 تا سروو رو کنترل کرد و اگه واستون امکان داشته باشه و بفرمایید چجوری میشه این کارو کرد بنده و سایر دوستان ممنون میشیم :job:
            تو بسکام که یک دستور خیلی ساده داره
            CONFIG SERVOS = X , Servo1 = Portb.0 , Servo2 = Portb.1 , Servox =x ,Reload = rl

            Servo(x) =y

            به همین راحتی!
            اگه به هلپ بسکام مراجعه کنی کامل توضیح داده
            خودت هم میتونی مثل برنامه زیر برای PIC بنویسی (این برای AVRه شما فقط الگو بگیر)و بسته به سرعت میکرو تعداد دلخواه سروو رو راه بندازی
            البته میکرو باید حداقل دو عدد تایمر داشته باشه

            کد:
            $regfile = "m16def.dat"
            $crystal = 8000000
            
            Config Portb = Output                    'motor1
            Config Timer0 = Timer , Prescale = 1024           '8000000/(1024*156)=50Hz
            Config Timer1 = Timer , Prescale = 8
            
            Dim Motor_time(4) As Word
            
            Motor_time(1) = 1000
            Motor_time(2) = 1200
            Motor_time(3) = 1500
            Motor_time(4) = 2000
            
            Motor1 Alias Portb.0 : Motor2 Alias Portb.1 : Motor3 Alias Portb.2 : Motor4 Alias Portb.3
            Stop Timer1
            
            Enable Ovf0
            Enable Interrupts
            
            Enable Timer0
            On Ovf0 Make_pwm
            
            Timer0 = 178
            
            Do
            Loop
            
            End
            
            Make_pwm:
            
            Timer0 = 178
            Timer1 = 0
            Start Timer1
            
            set motor1
            Do
            Loop Until Timer1 >= Motor_time(1)
            Reset Motor1
            Timer1 = 0
            
            Set Motor2
            Do
            Loop Until Timer1 >= Motor_time(2)
            Reset Motor2
            Timer1 = 0
            
            Set Motor3
            Do
            Loop Until Timer1 >= Motor_time(3)
            Reset Motor3
            Timer1 = 0
            
            Set Motor4
            Do
            Loop Until Timer1 >= Motor_time(4)
            Reset Motor4
            
            Return
            از آخر هم بگم که کار درست رو شما دارید انجام میدید و این که با PIC هم دارید برنامه نویسی رو یاد میگیرید قابل تحسینه
            میکرو های PIC در بسیاری از موارد نسبت به AVR برترند و دانش برنامه نویسی با اونها بسیار ارزشمند

            پروردگارا: به من زیستنی عطا کن که در لحظه مرگ بر بی ثمری لحظه ای که برای زیستن گذشته است حسرت نخورم، و مردنی عطا کن که بر بیهودگیش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست میداری

            دیدگاه


              #21
              پاسخ : کمک در مورد سروو موتور

              به معنای واقعی کلمه منت بر سر بنده گذاشتید جناب کاخکی که اینقده زود و کامل جواب بنده رو دادید :smile:
              باز هم ممنون از لطف شما :bye

              اضافه شده در تاریخ :
              با سلام خدمت شما جناب Intersil
              برنامه ای که عرض کرده بودم خدمتتون
              کد:
              adcon1 = 7
              b0 var byte
              b1 var byte
              b2 var byte
              b3 var byte 
              b4 var byte
              b6 var byte 
              b7 var word
              trisb = %00000111
              trisa = %00111111
              trisc = %00001111
              b0 = 150
              b1 = 150
              b2 = 150
              b3 = 150
              b4 = 150
              start:
              portb = 0
              pulsout portb.7, b0
              pulsout portb.6, b1
              pulsout portb.5, b2
              pulsout portb.4, b3
              pulsout portb.3, b4
              b7 = b0 + b1 +b2 + b3 + b4
              b6 = b7/100
              b7 = 15 - b6
              pause b7
              if portc.3 = 0 then left1
              if portc.2 = 0 then right1
              if portc.1 = 0 then left2
              if portc.0 = 0 then right2
              if porta.5 = 0 then left3
              if porta.4 = 0 then right3
              if porta.3 = 0 then left4
              if porta.2 = 0 then right4
              if porta.1 = 0 then left5
              if porta.0 = 0 then right5
              goto start
              left1:
              b0 = b0 + 1
              if b0 > 215 then max0
              goto start
              right1:
              b0 = b0 - 1
              if b0 < 80 then min0
              goto start
              max0:
              b0 = 215
              goto start
              min0:
              b0 = 80
              goto start
              left2:
              b1 = b1 + 1
              if b1 > 215 then max1
              goto start
              right2:
              b1 = b1 - 1
              if b1 < 80 then min1
              goto start
              max1:
              b1 = 215
              goto start
              min1:
              b1 = 80
              goto start
              left3:
              b2 = b2 + 1
              if b2 > 215 then max2
              goto start
              right3:
              b2 = b2 - 1
              if b2 < 80 then min2
              goto start
              max2:
              b2 = 215
              goto start
              min2:
              b2 = 80
              goto start
              left4:
              b3 = b3 + 1
              if b3 > 215 then max3
              goto start
              right4:
              b3 = b3 - 1
              if b3 < 80 then min3
              goto start
              max3:
              b3 = 215
              goto start
              min3:
              b3 = 80
              goto start
              left5:
              b4 = b4 + 1
              if b4 > 215 then max4
              goto start
              right5:
              b4 = b4 - 1
              if b4 < 80 then min4
              goto start
              max4:
              b4 = 215
              goto start
              min4:
              b4 = 80
              goto start
              end
              که البته دستورات tris رو طبق فرمایش شما خودم اضافه کردم ولی نمیدونم درسته یا نه؟! و همچنین پینهای c.3 تا c.0 و a.5 تا a.0 پینهایی هستند که 5 تا کلیدها بهش وصل شدن.
              در ضمن حین کامپایل کردن رو left1 مدام error میده و پیغام زیر رو میده که نتونستم برطرفش کنم (با pickit2 کار میکنم)
              ERROR Line 49: Demo command limit of 31 exceeded. Time to purchase? (5 mot.pbp)
              و همونطور که قبلا هم پرسیده بودم سوال من اینه که آیا میشه این برنامه رو اساس قرار داد واسه کنترل چند تا سروو به ترتیبی که به جای هر کدوم از کلیدها شرطهای مربوط به چرخیدن هر کدوم از سرووها رو قرار بدم؟

              اضافه شده در تاریخ :
              با سلام دوباره خدمت همه دوستان
              مثل اینکه جناب Intersil مدتیه که در دسترس نیستند ولی بنده ممنونم از لطف ایشون تو پاسخگوئیها من از ایشون و سایر دوستان و اساتید محترم خواهشمندم اگه امکان داره لطفا راهنمائیم کنن.
              برنامه ای که گذاشتم به لطف یکی از دوستامون شکر خدا مشکلش حل شد،و بنده فهمیدم که بله میشه از این برنامه برای کنترل چند تا سروو استفاده کنم به شرطی که حرکت هر کدوم از سرووهام مستقل از دیگری باشه، در حال حاضر مشکلی که دارم اینه که شرط حرکت 2 یا 3 تا از 7 تا سرووم منوط به ایستادن یه سرووی دیگه است، منظورم اینه که مثلا به سرووی 2 باید دستور بدم که بعد از اینکه سرووی 1 ایستاد برو به زاویه فلان، ولی سایر سرووهام حرکتهای مستقل از هم دارن، مع الوصف آیا باز هم میتونم از همین برنامه استفاده کنم به ترتیبی که به جای هر کلید شرط حرکت هر سروو رو بنویسم یا اینکه نه، چرخیدن یه سروو به ازای ایستادن یکی دیگه به قول دوستمون حرکت تناوبی و پشت سر هم واسه سروو میشه و ایجاد مشکل میکنه گه اینطوره ممنون میشم از دوستانی که اطلاعاتی دارن کمکم کنن و بفرمان که باید چه کارکنم؟
              در ضمن من هنوز مشکل error رو تو کامپایل کردن دارم :angry:
              زندگی برگ بودن در مسیر باد نیست
              امتحان ریشه هاست
              ریشه هم هرگز اسیر باد نیست
              زندگی چون پیچک است
              انتهایش میرسد پیش خدا!

              دیدگاه


                #22
                پاسخ : کمک در مورد سروو موتور

                سلام.
                با نکاتی که آقای کاخکی در مورد کنترل چند سروو در بسکام فرمودند به این نتیجه میرسیم که هرچند از طریق ماژول سخت افزاری PWM نمی توان چند سروو را کنترل کرد ولی با استفاده از تایمر ها و مدهای دیگر آنها میتوان تا حدودی این کار را انجام داد. بر نامه زیر که به زبان C و تحت کامپایلر MikroC نوشته شده هفت عدد سروو را به ترتیب در موقعیت 90- الی 90+ قرار میدهد. متاسفانه بنده با زبان بیسیک آشنایی ندارم وگرنه این برنامه را برای شما به زبان بیسیک هم مینوشتم. به هرحال با توجه به وضوح برنامه خودتان میتوانید این کار را انجام دهید.

                البته در این میان یک نکته در مورد تعداد سرووهای قابل کنترل با این روش که آقای کاخکی فرمودند تا 14 عدد را میتوان کنترل نمود وجود دارد:
                با توجه به اینکه برای فرکانس 50Hz پریود برابر 20 میلی ثانیه است و همچنین با توجه به اینکه Duty Cycle پالس اعمالی به هر سروو از 1 الی 2 میلی ثانیه متغیر است بنابر این چنانچه بخواهیم از کل این بازه زمانی (یعنی از زاویه 90- الی 90+) برای کنترل سروو استفاده کنیم به صورت تئوری فقط 10 تا سروو را میتوان به نحو مطلوب کنترل کرد. کنترل تعداد 10 سروو زمانی مقدور است در تابع اصلی برنامه و در حلقه لوپ اصلی هیچ برنامه دیگری وجود نداشته باشد و در واقع میکرو فقط در حالت انتظار به سر ببرد. علت این امر این است که وقتی از 10 سروو استفاده کنیم مدت زمانی که در روتین وقفه مربوط به تایمر تولید کننده سیکل" 20 میلی ثانیه"، تلف میشود برابر 10 ضربدر 2 میلی ثانیه یعنی همان 20 میلی ثانیه است. در نتیجه زمانی که از این روتین وقفه خارج میشویم بلافاصله پریود پالس قبلی تمام شده و وقفه دیگری رخ میدهد. بنابر این اگر برنامه ای در تابع اصلی موجود باشد میکرو زمان کافی برای اجرای آن ندارد و احساس میشود که برنامه بسیار کند انجام میشود. ولی اگر بخواهیم تعداد کمتری سروو را کنترل کنیم این وضعیت بهبود پیدا میکند. در عمل حد اکثر تعداد مطلوب همان 7 یا 8 عدد سروو است.
                البته اگر نخواهیم از کل بازه کنترلی سروو استفاده کنیم این شرایط کمی فرق میکند و ممکن است بتوان تعداد 10 یا بیشتری سروو را کنترل کرد ، که تعداد آن به مجموع زمان تلف شده در داخل روتین وقفه بستگی دارد.

                فایل مربوط به کنترل 7 سروو را از لینک زیر میتوانید دانلود کنید.
                http://www.microcontrollers.ir/pic16f877_servo2.rar

                نکته: در این برنامه برای کنترل زاویه هر سروو یک متغیر بایتی در نظر گرفته شده . البته مقادیری که شما میتوانید بدهید از 0 الی 252 است. که عدد 0 معادل زاویه 90- و عدد 252 و بیشتر از آن(تا255) معادل زاویه 90+ است. برای تنظیم زاویه دلخواه باید تناسب ساده ببندید و مقدار مورد نظر را در رجیستر مربوط به هر سروو قرار دهید.



                اضافه شده در تاریخ :
                نوشته اصلی توسط pama
                ....در ضمن حین کامپایل کردن رو left1 مدام error میده و پیغام زیر رو میده که نتونستم برطرفش کنم (با pickit2 کار میکنم)
                ERROR Line 49: Demo command limit of 31 exceeded. Time to purchase? (5 mot.pbp)
                .
                .
                .
                در این مورد هم به نظر میرسه مشکل از کامپایلر شماست که ظاهراً درست کرک نشده و یا اینکه اصلاً Full Version نیست. بهتره کرک مناسبی برای او پیدا کنید یا نسخه کامل اون رو نصب کنید.

                دیدگاه


                  #23
                  پاسخ : کمک در مورد سروو موتور

                  از بنده هم عرض سلام و تشکر زیاد
                  خیلی به من لطف کردید جناب perfectکه مثل دفعات گذشته جواب بنده رو دادید فایلی که گذاشته بودید رو دانلود کردم و چشم حتما به بیسیک برش میگردونم، توضیحاتتون راجع به سرووها خیلی کارامد بود،منتها آقای کاخکی میکروشون AVR هست و مال بنده pic ،منظورم هم رو برنامه ای بود که خودم گذاشتم و اینکه آیا با این برنامه واسه حرکت پشت سر هم و منوط به هم بعضی از سرووها به مشکلی نمیخوریم؟
                  راجع به کامپایلر هم ممنون از راهنمائیتون، منتها باید بگم که واسه بقیه برنامه هایی که مینویسم همچین error ای رو نمیده فقط واسه همین برنامه کنترل 5 سروو با 5 کلیدی که تو پستهای قبلی گذاشتم این error رو میده،آیا باز هم مربوط به کرکش هست یا اینکه مشکل چیز دیگه ایه؟
                  زندگی برگ بودن در مسیر باد نیست
                  امتحان ریشه هاست
                  ریشه هم هرگز اسیر باد نیست
                  زندگی چون پیچک است
                  انتهایش میرسد پیش خدا!

                  دیدگاه


                    #24
                    پاسخ : کمک در مورد سروو موتور

                    نوشته اصلی توسط pama
                    از بنده هم عرض سلام و تشکر زیاد
                    خیلی به من لطف کردید جناب perfectکه مثل دفعات گذشته جواب بنده رو دادید فایلی که گذاشته بودید رو دانلود کردم و چشم حتما به بیسیک برش میگردونم، توضیحاتتون راجع به سرووها خیلی کارامد بود،منتها آقای کاخکی میکروشون AVR هست و مال بنده pic ،منظورم هم رو برنامه ای بود که خودم گذاشتم و اینکه آیا با این برنامه واسه حرکت پشت سر هم و منوط به هم بعضی از سرووها به مشکلی نمیخوریم؟
                    راجع به کامپایلر هم ممنون از راهنمائیتون، منتها باید بگم که واسه بقیه برنامه هایی که مینویسم همچین error ای رو نمیده فقط واسه همین برنامه کنترل 5 سروو با 5 کلیدی که تو پستهای قبلی گذاشتم این error رو میده،آیا باز هم مربوط به کرکش هست یا اینکه مشکل چیز دیگه ایه؟
                    این قضیه که عرض کردم فرقی نمیکنه چه میکرویی باشه. ماهیت کار یکسان است. به هر حال در AVR هم به همین منوال باید هر 20 میلی ثانیه توسط یکی از تایمر ها یک وقفه تولید شود تا داخل روتین وقفه آن پالس هایی برای هر سروو ایجاد شود .
                    از برنامه ای که نوشتید به علت نا آشنا بودن با بیسیک زیاد سر در نمیارم. ولی فکر میکنم اگر بخواهید بدون استفاده از وقفه و به صورت نوبتی به سروو ها پالس اعمال کنید در هر نوبت فقط یک سروو در موقعیت درست و دلخواه قرار بگیره و بقیه سرووها در موقعیت نامشخصی قرار بگیرند. یعنی گمان بنده این است که در هر لحظه فقط سروویی که برای آن مشغول ساختن پالس هستیم در مکان درست قرار بگیرد.
                    در مورد کامپایلر هم پیغامی که میدهد اشاره به دمو بودن آن دارد.

                    دیدگاه


                      #25
                      پاسخ : کمک در مورد سروو موتور

                      بسیار ممنونم جناب perfect از توضیحاتتون
                      بله با دقت که فرمایش شما رو خوندم متوجه روتین وقفه که فرموده بودید شدم، واسه کامپایلر هم حتما یه نسخه Full version رو میگیرم، و باز هم از لطفتون ممنونم مهندس.
                      از سایر دوستانی که به pic basic pro واردن خواهش میکنم در صورتی که واسشون مقدوره یه نگاهی به برنامه بنده بکنن و لطفا توضیح بدن که اصلا با یک میکروی pic16f877a و این برنامه (البته به همون منوالی که قبلا هم عرض کردم که به جای هر کلید دستور مربوط به چرخش هر سروو رو بذارم و اینکه ترتیب حرکت سرووهام به این صورت هستش که چرخش 2 یا 3 تا از 7 تا سروو منوط به ایستادن یه سرووی دیگه است منظورم اینه که مثلا به سرووی 2 باید دستور بدم که بعد از اینکه سرووی 1 ایستاد برو به زاویه فلان، ولی سایر سرووهام حرکتهای مستقل از هم دارن) میتونم 7 تا سرووم رو بچرخونم یا نه؟یکی از دوستان پیشنهاد میدادن که از سنسور میکرو سوئیچ استفاده کنم به این ترتیب که وقتی موتور اول به انتها میرسه به اون برخورد کنه و سنسور به پایه میکرو متصل است که در این حالت میکرو به موتور بعدی میگه حرکت کنه، خواهش میکنم از دوستان و اساتیدی که در این زمینه کار کردن لطفا بنده رو راهنمائی کنن.

                      اضافه شده در تاریخ :
                      با سلام دوباره خدمت همه دوستان واساتید محترم
                      دوستان ممنون میشم به بنده ی اطلاعات لازم یه کمکی برسونید من خیلی گیرم :job:
                      زندگی برگ بودن در مسیر باد نیست
                      امتحان ریشه هاست
                      ریشه هم هرگز اسیر باد نیست
                      زندگی چون پیچک است
                      انتهایش میرسد پیش خدا!

                      دیدگاه


                        #26
                        پاسخ : کمک در مورد سروو موتور

                        نوشته اصلی توسط pama
                        با سلام دوباره خدمت همه دوستان واساتید محترم
                        دوستان ممنون میشم به بنده ی اطلاعات لازم یه کمکی برسونید من خیلی گیرم :job:
                        دوست عزیز به نظر من سروو رو باز کن توش یک پتانسیومتر هست که میکرو داخل سروو موقیتش رو از روی همون میفهمه .شما هم یک سیم از سر وسط پتانسیومتر بگیر و به ADC میکرو بزن تا بتونی موقیت موتور رو بخونی و با توجه به موقیت موتور هر کار خواستی انجام بدی
                        پروردگارا: به من زیستنی عطا کن که در لحظه مرگ بر بی ثمری لحظه ای که برای زیستن گذشته است حسرت نخورم، و مردنی عطا کن که بر بیهودگیش سوگوار نباشم. بگذار تا آن را خود انتخاب کنم، اما آنچنان که تو دوست میداری

                        دیدگاه


                          #27
                          پاسخ : کمک در مورد سروو موتور

                          برنامه ای که برای کنترل 7 عدد سروو به زبان c و تحت MikroC نوشته بودم را به زبان PICBasic نوشتم. امید وارم برای شما مفید باشد. برنامه به صورت زیر است:
                          کد:
                          '****************************************************************
                          '* Name  : SERVO.BAS                     *
                          '* Author : [Perfect]                     *
                          '* Notice : Copyright (c) 2011 [ www.microcontrollers.ir ]  *
                          '*     : All Rights Reserved                *
                          '* Date  : 7/29/2011                     *
                          '* Version : 1.0                        *
                          '* Notes  :                          *
                          '*     :                          *
                          '****************************************************************
                          
                           DEFINE OSC 8
                           
                          servo1 var byte 
                          servo2 var byte 
                          servo3 var byte 
                          servo4 var byte 
                          servo5 var byte 
                          servo6 var byte 
                          servo7 var byte
                          
                          
                          ON INTERRUPT GOTO _interrupt
                          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                          
                          
                           TRISD=$00
                           PORTD=$00
                           
                           servo1=0
                            servo2=25
                            servo3=50
                             servo4=125
                             servo5=175
                              servo6=200
                              servo7=251
                                  
                             TMR1L=0
                             TMR1H=0
                          
                             CCP1CON=$0A
                             
                             CCPR1H=$9c  ;high byte of (40000)
                             CCPR1L=$40  ;low byte of (40000)
                             
                             PIR1.2=0
                             PIE1.2=1
                          
                             T1CON=$01 ;turn on timer1
                          
                            INTCON.6=1  ;PEIE=1
                            INTCON.7=1  ;GIE=1 , enable global interrupt
                               
                          again:
                          
                           pause 10       ; main loop
                           
                          goto again
                          
                          
                          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                          _interrupt:            ; interrupt service
                          
                               DISABLE INTERRUPT    ;disable interrapts
                              if PIR1.2=1 then     ; if CCP1IF then
                             
                             OPTION_REG = OPTION_REG & $c0 
                             OPTION_REG = OPTION_REG | $02 
                             
                               PORTD = $01
                               PAUSEUS 990  
                               TMR0 = 255-servo1
                               INTCON.2=0
                               while INTCON.2=0
                               wend   
                               PORTD=$00
                               ;;;;;;;;;;;;;;;;;;;;;;;;;;
                                PORTD=$02;
                                PAUSEUS 990  
                                TMR0=255-servo2
                                INTCON.2=0
                                while INTCON.2=0
                                 wend
                                 PORTD=$00    
                               ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                                PORTD=$04;
                                PAUSEUS 990  
                                TMR0=255-servo3
                                INTCON.2=0
                                while INTCON.2=0
                                 wend
                                 PORTD=$00
                               ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                                PORTD=$08;
                                PAUSEUS 990  
                                TMR0=255-servo4
                                INTCON.2=0
                                while INTCON.2=0
                                 wend
                                 PORTD=$00
                               ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                                PORTD=$10
                                PAUSEUS 990  
                                TMR0=255-servo5
                                INTCON.2=0
                                while INTCON.2=0
                                 wend
                                 PORTD=$00
                               ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                                PORTD=$20
                                PAUSEUS 990  
                                TMR0=255-servo6
                                INTCON.2=0
                                while INTCON.2=0
                                wend
                                 PORTD=$00
                               ;;;;;;;;;;;;;;;;;;;;;;;;;;  
                                PORTD=$40
                                PAUSEUS 990  
                                TMR0=255-servo7
                                INTCON.2=0
                                while INTCON.2=0
                                 wend
                                 PORTD=$00
                               ;;;;;;;;;;;;;;;;;;;;;;;;;; 
                                 PIR1.2=0  ; clear CCP1IF
                                 endif 
                                
                                RESUME     ;return from interrapt 
                                ENABLE INTERRUPT 
                          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                          
                          end

                          ضمناً فایل مربوط به این پروژه در PBP و همچنین فایل Proteus آن را میتوانید از لینک زیر دانلود کنید:
                          http://www.microcontrollers.ir/servo.rar

                          دیدگاه


                            #28
                            پاسخ : کمک در مورد سروو موتور

                            از بنده هم سلام و معذرت میخوام از تاخیر پاسخم :redface:
                            یه هفته ای میشه با اینترنت دچار مشکل شده بودم که شکر خدا حل شد
                            و بعد از اون یک دنیا ممنون و سپاسگذارم ار لطف و زحمت واقعا زیاد تون جناب perfect ، خیلی به بنده ی کم سواد لطف کردید :applause: :wow:
                            یقینا برنامه و فایلی که گذاشتید راه گشای کار بنده است

                            اضافه شده در تاریخ :
                            جناب کاخکی سلام بنده رو پذیرا باشید و از شما هم به دلیل تاخیر پاسخ معذرت میخوام :redface:
                            و بسیار ممنونم از نظر لطف و راهنمائیتون، حتما برای موقعیت سنجیه دقیق شافت خروجی طبق فرمایش شما عمل میکنم باز هم ممنون :applause:

                            اضافه شده در تاریخ :
                            با سلام خدمت همه اساتید و دوستان گرامی
                            باز هم سوال :redface:
                            دوستان میخواستم بپرسم اگه من بخوام تو یه برنامه(مربوط به سروو) چند تا if داشته باشم و دستورات مربوط به تحقق هر کدوم از این if ها برای بینهایت بار یعنی تا زمانی که مدار سالمه و کار میکنه،این دستورات هم اجرا بشن و اینطور نباشه که با هر بار تغذیه دادن به مدار و اجرای برنامه با تحقق شرط هر if فقط یک بار دستور مربوط به اون که تو سابروتین مخصوص به خودش قرار داره،اجرا بشن، باید چه کار کنم؟ آیا باید if ها رو تو loop اصلیه برنامه قرار بدم یا نه کار دیگه ای باید بکنم؟ آخه با بردن شرطها تو حلقه اصلی من به جواب مورد نظرم نرسیدم.
                            برای روشنتر شدن منظورم این مثال رو خدمتتون عرض میکنم، من برنامه زیر رو که حرکت دو تا سروو با یک کلید تک پل دو طرفه است نوشتم، که تو اون با بالا بودن کلید یعنی تحقق شرط if اول موتور اول به منتها الیه چپ و با پائین بودن کلید یعنی تحقق شرط if دوم موتور دوم به منتها الیه راست حرکت میکنه اما این اتفاق مدام با بالا و پائین کردن کلید نمیفته بلکه با هر بار روشن و خاموش کردن تغذیه و بعد دوباره بالا و پائین کردن کلید میشه حرکت دوباره ی سرووها رو دید، در صورتی که من میخوام تا وقتی تغذیه روشنه با هر بار بالا و پائین کردن کلید موتورها حرکت کنن، به نظر دوستان باید چه کار کنم؟
                            اینم برنامه:
                            کد:
                            portb = %00000000
                            trisb = %11001111
                            b1 var byte
                            b2 var byte
                            b1 = 150
                            b2 = 150
                            start:
                            pulsout portb.4, b1
                            pulsout portb.5, b2
                            if porta.2 = 0 then left1
                            if porta.3 = 0 then right1
                             pause 20
                            goto start
                            left1:
                            b1 = b1 + 1
                            if b1 > 200 then max1
                            goto start
                            right1:
                            b2 = b2 - 1
                            if b2 < 100 then min1
                            goto start
                            max1:
                            b1 = 200
                            goto start
                            min1:
                            b2 = 100
                            goto start
                            end
                            همونطور هم که مشخصه بنده با pic basic pro کار میکنم.
                            زندگی برگ بودن در مسیر باد نیست
                            امتحان ریشه هاست
                            ریشه هم هرگز اسیر باد نیست
                            زندگی چون پیچک است
                            انتهایش میرسد پیش خدا!

                            دیدگاه


                              #29
                              پاسخ : کمک در مورد سروو موتور

                              با عرض سلام به دوست گرامی
                              من تازه تایپیک شما را دیدم و برام سوال پیش اومده که چرا شما این همه وقت سر این کار گذاشتید در حالی که می تونید این پروژه را به شرکت هایی که توی این کار اوستان بدید واقعا منطقی دو ماه کار سر یه پروژه :eek: :eek:
                              والا ضرر این کار بیش از سوده اون هست.

                              در کل عرض جسارت نداشتم فقط نظرم را گفتم :redface:
                              قندیل، تندیس قطره هایی است که تسلیم جاذبه زمین نشدند. "چگوآرا"

                              دیدگاه


                                #30
                                پاسخ : کمک در مورد سروو موتور

                                از بنده هم سلام دوست عزیز
                                ممنونم از حسن نیتتون :agree:
                                ولی باید عرض کنم که بنده خیلی مشتاقم که خودم کارو انجام بدم البته درسته که تا اینجای داستان رو به یاریه دوستان انجمن اومدم جلو، و از این بابت هم از تک تکشون بسیار ممنونم، با این اوصاف باز هم دوست دارم گره های کار رو خودم دنبالش باشم تا اینکه بدم بیرون و به قول فرمایش شما خیلی زودتر ماجرا حل بشه.
                                این نهایت نظر لطف شما رو میرسونه و خوشحالم بابت اینکه به این تایپیک توجه داشتید.


                                اضافه شده در تاریخ :
                                با سلام دوباره خدمت همه ی دوستان و اساتید محترم.
                                دوستان، تا به اینجای تایپیک سوالاتی که وجود داشت به لطف خدا و کمک دوستان مخصوصا مهندس perfect حل شد.
                                جناب مهندس perfect لطف کردن و برنامه ی حرکت 7 سروو رو با basic نوشتن، و باز هم بنده بسیار ممنونم از لطفشون.
                                بنده میخوام این 7 سروو با شرط بچرخن، اونم به این صورت که سنسوری دارم که خروجیش از جنس فرکانس هست و این خروجی اعمال میشه به مدار سروو و میکروی ما.
                                و هدف این هست که با هر فرکانس خاصی یه سری از سرووها در زاویه ی خاصی قرار بگیرن، فرکانس ورودی به مدار با دستور count portc.0, 800, f خونده میشه.

                                ولی مشکل اساسی در اینجاست که وقتی این شرط به این برنامه اضافه میشه سرووها شروع به حرکت الکی میکنن و ناجور گیج میزنن، برنامه چرخش سرووها با اضافه کردن دستور شمردن فرکانس و شرط قرار گرفتن فرکانس به صورت زیر هست، من فکر میکنم مهمترین قسمت ماجرا فقط همون قسمتی از برنامه است که بنده با رنگ دیگه نشونش دادم و موضوع قاطی کردن سرووها به همین یه تیکه بر میگرده.

                                دوستان من اصلا زمان ندارم و سخت محتاج کمکها و لطف همیشگی شمام، مطمئنم که هر کدوم از شما مشغله های مخصوص خودتون رو دارید با این حال بسیار ممنون میشم بنده رو از گیج زدن نجات بدید.

                                اینم برنامه:


                                [code=vb]
                                DEFINE OSC 8
                                @ DEVICE pic16f877a,WDT_OFF ,PWRT_ON ,PROTECT_OFF ,LVP_ON ,HS_OSC ,BOD_OFF
                                servo1 var byte
                                servo2 var byte
                                servo3 var byte
                                servo4 var byte
                                servo5 var byte
                                servo6 var byte
                                servo7 var byte

                                f var word


                                ON INTERRUPT GOTO _interrupt
                                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;



                                TRISD=$00
                                PORTD=$00


                                TMR1L=0
                                TMR1H=0

                                CCP1CON=$0b

                                CCPR1H=$9c ;high byte of (40000)
                                CCPR1L=$40 ;low byte of (40000)

                                PIR1.2=0
                                PIE1.2=1

                                T1CON=$01 ;turn on timer1

                                INTCON.6=1 ;PEIE=1
                                INTCON.7=1 ;GIE=1 , enable global interrupt


                                trisC = %00000001

                                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
                                again:
                                ; main loop

                                f = 0
                                count portc.0, 800, f

                                ;;;;;;;;;;;;;
                                if (f >= 22) and (f <= 23) then
                                servo1 = 0
                                end if
                                ;;;;;;;;;;;;;
                                if (f >= 43) and (f <= 45 ) then
                                servo2 = 25
                                end if
                                ;;;;;;;;;;;;;
                                if (f >= 65) and (f <= 67) then
                                servo3 = 75
                                end if
                                ;;;;;;;;;;;;;
                                if (f >= 87) and (f <= 90) then
                                servo4 = 125
                                end if
                                ;;;;;;;;;;;;;
                                if (f >= 98) and (f <= 100) then
                                servo5 = 175
                                end if
                                ;;;;;;;;;;;;;
                                if (f >= 120) and (f <= 122) then
                                servo6 = 200
                                end if
                                ;;;;;;;;;;;;;
                                if (f >= 131) and (f <= 133) then
                                servo7 = 251
                                endif
                                ;;;;;;;;;;;;;

                                goto again


                                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


                                _interrupt: ; interrupt service

                                DISABLE INTERRUPT ;disable interrapts
                                if PIR1.2=1 then ; if CCP1IF then

                                PORTD = $01
                                PAUSEUS 990
                                INTCON.2=0
                                TMR0 = 255-servo1
                                OPTION_REG = OPTION_REG & $c0
                                OPTION_REG = OPTION_REG | $02
                                while INTCON.2=0
                                wend
                                PORTD=$00
                                ;;;;;;;;;;;;;;;;;;;;;;;;;;
                                PORTD=$02;
                                PAUSEUS 990
                                INTCON.2=0
                                TMR0 = 255-servo2
                                OPTION_REG = OPTION_REG & $c0
                                OPTION_REG = OPTION_REG | $02
                                while INTCON.2=0
                                wend
                                PORTD=$00
                                ;;;;;;;;;;;;;;;;;;;;;;;;;;
                                PORTD=$04;
                                PAUSEUS 990
                                INTCON.2=0
                                TMR0 = 255-servo3
                                OPTION_REG = OPTION_REG & $c0
                                OPTION_REG = OPTION_REG | $02
                                while INTCON.2=0
                                wend
                                PORTD=$00
                                ;;;;;;;;;;;;;;;;;;;;;;;;;;
                                PORTD=$08;
                                PAUSEUS 990
                                INTCON.2=0
                                TMR0 = 255-servo4
                                OPTION_REG = OPTION_REG & $c0
                                OPTION_REG = OPTION_REG | $02
                                while INTCON.2=0
                                wend
                                PORTD=$00
                                ;;;;;;;;;;;;;;;;;;;;;;;;;;
                                PORTD=$10
                                PAUSEUS 990
                                INTCON.2=0
                                TMR0 = 255-servo5
                                OPTION_REG = OPTION_REG & $c0
                                OPTION_REG = OPTION_REG | $02
                                while INTCON.2=0
                                wend
                                PORTD=$00
                                ;;;;;;;;;;;;;;;;;;;;;;;;;;
                                PORTD=$20
                                PAUSEUS 990
                                INTCON.2=0
                                TMR0 = 255-servo6
                                OPTION_REG = OPTION_REG & $c0
                                OPTION_REG = OPTION_REG | $02
                                while INTCON.2=0
                                wend
                                PORTD=$00
                                ;;;;;;;;;;;;;;;;;;;;;;;;;;
                                PORTD=$40
                                PAUSEUS 990
                                INTCON.2=0
                                TMR0 = 255-servo7
                                OPTION_REG = OPTION_REG & $c0
                                OPTION_REG = OPTION_REG | $02
                                while INTCON.2=0
                                wend
                                PORTD=$00
                                ;;;;;;;;;;;;;;;;;;;;;;;;;;
                                PIR1.2=0 ; clear CCP1IF
                                endif

                                RESUME ;return from interrapt
                                ENABLE INTERRUPT
                                ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

                                end

                                [/code]
                                بسیار سپاسگذار هستم از دوستانی که لطف کنن و برنامه رو چک بکنن، به نظر شما آیا بنده درست میگم یا اینکه نه ایراد کار از جای دیگه هم ممکنه باشه؟


                                اضافه شده در تاریخ :
                                سلام.
                                از دوستان مهندسم خواهشمندم لطف کنن و یه نگاهی به برنامم بندازن، خیلی گیرم، نمیدونم باید چه کارش کنم؟
                                زندگی برگ بودن در مسیر باد نیست
                                امتحان ریشه هاست
                                ریشه هم هرگز اسیر باد نیست
                                زندگی چون پیچک است
                                انتهایش میرسد پیش خدا!

                                دیدگاه

                                لطفا صبر کنید...
                                X