اطلاعیه

Collapse
No announcement yet.

ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

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

    ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

    یه مثال ساده از ایجاد تایمر می خواستم

    هر چقدر بحث تایمر رو می خونم همونقدر oo: می زنم :angry:

    برای همین یه نمونه ساده از تایمر رو می خواستم
    زبان ++C
    محیط کدویژن

    کد:
    void timer1()
    {
     یه سری دستورات  
    }
    
    void timer2()
    {
     یه سری دستورات  
    }
    
    void main(void)
    {
    
    while (1)
       {
        یه سری دستورات
       }
    }
    می خوام هر یک ثانیه تابع Timer1 اجرا بشه هر یک دقیقه تابع Timer2 اجرا بشه . :cry:

    اگه نکته ای ترفندی برای استفاده از تایمر ها دوستان می دونن ممنون می شم بگن
    ندن ساقی صفا اهلی ، غم دنیادن آیریلماز ** گتیر دولدور گینه جامی ، بالیخ دریادن آیریلماز
    غنیمتدیر بو دم ساقی ، گتیر دولدور گنه جامی ** جهاندا رسمدور عاشق ، می و مینادن آیریلماز

    #2
    پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

    سلام
    خوبی؟ وسایل رو گرفتی ؟
    اگه می خواین یک ثانیه تون دقیق باشه باید از یک کریستال 32768 هرتز استفاده کنید . بین پایه های TOSC1 و TOSC2 . بعد روی تایمر 2 تنظیم کنید . با Prescale 128 . وقفه تایمر 2 رو هم فعال کنید . بعد برنامه ای رو که می خواید هر یک ثانیه اجرا بشه داخل حلقه وقفه تایمر 2 بذارید .
    تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
    دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
    مقالات و فایل های آموزشی نرم افزار Labview
    حل مشکل درایور و راه اندازی FT232 های غیراورجینال

    دیدگاه


      #3
      پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

      سلام داداش محمد خودمون

      آره وسایل رو گرفتم همه اون وسایلی که با هم انتخاب کردیم + یه سری چیزهای دیگه

      اگه می خواین یک ثانیه تون دقیق باشه باید از یک کریستال 32768 هرتز استفاده کنید . بین پایه های TOSC1 و TOSC2 . بعد روی تایمر 2 تنظیم کنید . با Prescale 128 . وقفه تایمر 2 رو هم فعال کنید . بعد برنامه ای رو که می خواید هر یک ثانیه اجرا بشه داخل حلقه وقفه تایمر 2 بذارید .
      درسته کار با تایمر ها ساده هستش ولی برای من که تازه شروع کردم کمی قضیه مبهم هستش

      دیدگاهی که من از تایمر در برنامه نویسی دارم اینجوریه :
      تایمر رو تنظیم می کنیم روی مثلا 60 ثانیه و یه سری دستورات رو توی تابع مربوط به تایمر می نویسیم و برنامه که روال عادی خودش رو طی می کنه هر زمان که یک دقیقه تایمر درست شد تابع مربوط به تایمر اجرا می شه

      حالا اگه براتون امکان داره کمی وقت بزارید و یه توضیح مختصر درباره کارهایی که باید انجام بدم تا اون دوتا تابع اجرا بشه رو بهم بگید ممنونتون می شم

      اول یه تایمر ساده ( دقیق هم نبود مشکلی نست ) بعد از این که این یکی رو فهمیدم بقیه رو هم یاد میگیرم
      ندن ساقی صفا اهلی ، غم دنیادن آیریلماز ** گتیر دولدور گینه جامی ، بالیخ دریادن آیریلماز
      غنیمتدیر بو دم ساقی ، گتیر دولدور گنه جامی ** جهاندا رسمدور عاشق ، می و مینادن آیریلماز

      دیدگاه


        #4
        پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

        نوشته اصلی توسط ele_sav
        دیدگاهی که من از تایمر در برنامه نویسی دارم اینجوریه :
        تایمر رو تنظیم می کنیم روی مثلا 60 ثانیه و یه سری دستورات رو توی تابع مربوط به تایمر می نویسیم و برنامه که روال عادی خودش رو طی می کنه هر زمان که یک دقیقه تایمر درست شد تابع مربوط به تایمر اجرا می شه
        نه ببین باید 60 ثانیه رو خودت بسازی . تابعی برای این کار وجود نداره . اون 60 ثانیه رو باید با توجه به فرکانس کاری و تعداد بیت های تایمرت بسازی.
        مثلا برای همین یک ثانیه همونطور که قبلا هم گفتم می تونی از یک کریستال 32768 استفاده کنی با تقسیم فرکانسی 128(داخل کدویزارد سربرگ تایمر 2 قسمت Prescale رو بذار روی 128) . اگه 32768 رو بر 128 تقسیم کنی میشه 256 . یعنی در 1 ثانیه 256 پالس به تایمر 2 می فرسته .تایمر 2 هم که هشت بیتی هست . پس 256 پالس که بگیره سر ریز میشه و از نو از صفر می شماره . پس 256/256=1 . پس هر یک ثانیه یک وقفه سرریز رو که داخل کدویزارد برای تایمر 2 فعال کردی فعال میشه . او وقفه خودش یک تابع هست . هر یک ثانیه اون تابع که خود کدویزارد هم می سازش فعال میشه . کافیه کارهایی رو که می خوای هر یک ثانیه انجام بشه رو داخل اون تابع وقفه بنویسی . برای بوجود آوردن یک دقیقه هم می تونی مثلا از یک حلقه for داخل وقفه استفاده کنی که یک متغییر رو هر دفعه وقفه اجرا میشه (هر یک ثانیه ) یکی بهش اضافه کنه تا برسه به 60 و بعد با یک if اون رو چک کن . اگه شد 60 یعنی یک دقیقه شده .
        تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
        دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
        مقالات و فایل های آموزشی نرم افزار Labview
        حل مشکل درایور و راه اندازی FT232 های غیراورجینال

        دیدگاه


          #5
          پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

          سلام
          توضیحاتی که محمد دادند رو میتونی استفاده کنی. برای 1 دقیقه هم می تونی توی همون وقفه 1 ثانیه یه متغیر بذاری که با هر بار اجرای وقفه 1 ثانیه 1 واحد اضافه بشه. بدش یه دستور شرطی بذار که هروقت مساوی با 60 شذ متغیره اون برنامه ای که مال وقفه 1دقیقه ای در نظر گرفتی اجرا بشه
          موفق باشی :smile:
          هر سری یه فکری داره! :read:
          ///////////////////////////////////////////////////////////

          دیدگاه


            #6
            پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

            ممنون می شم کاربردهای گزینه هایی رو که با اعداد مشخص کردم رو هر چند به صورت خلاصه هم که باشه توضیح بدید

            آی سی Mega8L
            تایمر 2

            عکس از تایمر در کدویژن


            ندن ساقی صفا اهلی ، غم دنیادن آیریلماز ** گتیر دولدور گینه جامی ، بالیخ دریادن آیریلماز
            غنیمتدیر بو دم ساقی ، گتیر دولدور گنه جامی ** جهاندا رسمدور عاشق ، می و مینادن آیریلماز

            دیدگاه


              #7
              پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

              یک نکته :
              هنگامی که در ATmega8 از تایمر 2 در حالت آسنکرون استفاده میکنید خازن های 22p رو برای کریستال 32768 فراموش نکنید والا کار نمیکنه
              دلا خو کن به تنهایی که از تنها بلا خیزد

              دیدگاه


                #8
                پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

                نوشته اصلی توسط ele_sav
                ممنون می شم کاربردهای گزینه هایی رو که با اعداد مشخص کردم رو هر چند به صورت خلاصه هم که باشه توضیح بدید

                آی سی Mega8L
                تایمر 2

                عکس از تایمر در کدویژن
                در سربرگ clock source منبع کلاک تایمر رو مشخص می کنید :
                1 - کلاک سیستم
                2 - دریافت کلاک از کریستال گذاشته شده بین دو پایه TOSC1 , TOSC2 .
                3 - میزان تقسم فرکانسی رو مشخص می کنه یا اینکه اصلا تایمر روشن باشه یا نه . البته اینجا خودش فرکانس کلاک سیستم رو تقسیم کرده و داخل منوی کشویی گذاشته . مثلا 125 کیلو هرتز یعنی 1/8 .

                4- مد شمارش رو مشخص میکنه که تا چند بشماره . مد نرمال تا 256 می شماره .بعد صفر میشه . وقتی خواست صفر بشه وقفه هم اتفاق می افته و دوباره ........
                5 - این مد تا 256 می شماره بعد وقتی به 256 رسید دوباره کاهشی می شماره و میاد پایین . مثل قبلی یکدفعه صفر نمیشه .
                6 - در این مد مقدار سقف شمارش توسط ریجستر OCR مشخص میشه و فقط تا همون مقدار می شماره .
                7 - این مد موج PWM با فرکانس بالا رو در پایه های OC1A و OC1B تولید می کنه. این امواج با توجه به مقدار هایی که به ریجستر OCR دادی و مقایسه اون با مقدار تایمر تغییر وضعیت می دن.
                8 - در صورت زدن تیک این گزینه در صورتی که سرریز اتفاق بیفته یک وقفه فعال میشه .
                9- در صورتی که تیک این گزینه زده بشه در صورتی که مقدار تایمر با مقدار OCR یکی بشه یک وقفه به همین نام روی می ده .
                10 - مقدار اولیه تایمر رو مشخص می کنه .
                11 -مقدار ریجستر OCR رو مشخص می کنه .

                توضیحات هر کدوم از این قسمت ها و مدها یکم زیاده . سعس کردم کلی بگم .
                تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
                دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
                مقالات و فایل های آموزشی نرم افزار Labview
                حل مشکل درایور و راه اندازی FT232 های غیراورجینال

                دیدگاه


                  #9
                  پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

                  خوب من تونستم یه تایمر پیدا کنم ( همونی که می خواستمه )

                  برای استفاده دوستان دیگه اینجا می زارمش

                  در این تایمر از حافظه Eprom استفاده کردم که زمان رو ذخیره کنه تا با هر بار ریسیت شدن میکرو زمان نپره

                  دوستان هر کجای کد رو اگه اشتباهی نوشتم کمک کنید تا درستش کنم مخصوصا مقدار دهی اولیه متغییر و ...
                  این هم سورس :
                  کد:
                  #include <stdio.h>
                  #include <mega8.h>
                  #include <alcd.h>
                  
                  eeprom char second , minute , hour;
                  unsigned char s[10];
                  
                  interrupt [TIM2_OVF] void timer2_ovf_isr(void)
                  {
                  if (second==59)
                  { 
                    second=0;
                    if (minute==59)
                      {
                      minute=0;
                      if (hour==23)hour=0;
                      else hour++; 
                      }
                    else 
                     minute++;
                  }
                  else
                   second++;
                  
                  sprintf(s,"Time = %d:%d:%d",hour,minute,second);
                  lcd_clear();
                  lcd_puts(s);
                  }
                  
                  void main(void)
                  {
                  
                  if(hour>60){
                  second=0;
                  minute=0;
                  hour=0;}
                  
                  lcd_init(16);
                  
                  ASSR=0X08;
                  TCCR2=0x05;
                  TCNT2=0x00;
                  OCR2=0x00;
                  TIMSK=0x40;
                  
                  #asm ("sei");
                  
                  while (1);
                  }

                  خوب اینجا از آقا محمد تشکر می کنم بابت اون توضیحاتی که درباره عکس داده :nice:

                  به خاطر این که توضیحاتشون خوب بود یه عکس از تایمر یک می ذارم کمی هم در این باره راهنمایی کنید ممنون می شم



                  ندن ساقی صفا اهلی ، غم دنیادن آیریلماز ** گتیر دولدور گینه جامی ، بالیخ دریادن آیریلماز
                  غنیمتدیر بو دم ساقی ، گتیر دولدور گنه جامی ** جهاندا رسمدور عاشق ، می و مینادن آیریلماز

                  دیدگاه


                    #10
                    پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

                    نوشته اصلی توسط ele_sav
                    خوب من تونستم یه تایمر پیدا کنم ( همونی که می خواستمه )

                    برای استفاده دوستان دیگه اینجا می زارمش

                    در این تایمر از حافظه Eprom استفاده کردم که زمان رو ذخیره کنه تا با هر بار ریسیت شدن میکرو زمان نپره

                    دوستان هر کجای کد رو اگه اشتباهی نوشتم کمک کنید تا درستش کنم مخصوصا مقدار دهی اولیه متغییر و ...
                    این هم سورس :
                    کد:
                    #include <stdio.h>
                    #include <mega8.h>
                    #include <alcd.h>
                    
                    eeprom char second , minute , hour;
                    unsigned char s[10];
                    
                    interrupt [TIM2_OVF] void timer2_ovf_isr(void)
                    {
                    if (second==59)
                    { 
                      second=0;
                      if (minute==59)
                        {
                        minute=0;
                        if (hour==23)hour=0;
                        else hour++; 
                        }
                      else 
                       minute++;
                    }
                    else
                     second++;
                    
                    sprintf(s,"Time = %d:%d:%d",hour,minute,second);
                    lcd_clear();
                    lcd_puts(s);
                    }
                    
                    void main(void)
                    {
                    
                    if(hour>60){
                    second=0;
                    minute=0;
                    hour=0;}
                    
                    lcd_init(16);
                    
                    ASSR=0X08;
                    TCCR2=0x05;
                    TCNT2=0x00;
                    OCR2=0x00;
                    TIMSK=0x40;
                    
                    #asm ("sei");
                    
                    while (1);
                    }

                    خوب اینجا از آقا محمد تشکر می کنم بابت اون توضیحاتی که درباره عکس داده :nice:

                    به خاطر این که توضیحاتشون خوب بود یه عکس از تایمر یک می ذارم کمی هم در این باره راهنمایی کنید ممنون می شم
                    خواهش می کنم .
                    ریجسترها رو بستگی داره با چه مدهایی مقدار دهی کرده باشی . کاملا دست خودته . فقط جای آکولاد های داخل وقفه رو چک کن ببین درست گذاشتی برای if ها . اینجا یکم کدها جابه جا افتاده آدم گیج میشه .
                    فقط یک چیزی اون if hour>60 چکار می کنه ؟

                    بگذریم . بریم سراغ عکسی که گذاشتی :
                    1 و 2 برای راه اندازی تایمر 1 در مد کانتر هست . یعنی مقدار ریجستر TCNT1 با توجه به مد انتخابی (لبه بالا رونده یا پایین رونده اعمالی به پایه T1 میکرو) یکی بهش اضافه میشه . یعنی می شماره .
                    3 دقیقا مث همون شکل قبلی هست و در اصل همون 3 مدی که اونجا بود هست فقط یا مقدار top متفاوت و همچنین با توجه به اینه تایمر 1 شانزده بیتی هست .
                    4 برای راه اندازی input capture هست . کارش اینه که با توجه به لبه ای که براش فعال می کنی به پالس اعمالی به پایه ICP1 میکرو واکنش نشون میده و مقدار TCNT1 رو داخل ICR1 میریزه . این کار برای اندازه گیری طول پالس به طور دقیق استفاده میشه . و اگه نویز کنسلر رو تیک بزنی یک فیلتر میذاره که اون پایه با یک نویز فعال نشه . (محافظت از نویز)
                    5 مثل شکل قبلی وقفه رو فعال می کنه .
                    6 و 8 و 9 رو هم توی همون شکل قبل گفتم .
                    7 مقدار اولیه برای input capture رو مشخص می کنه .
                    تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
                    دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
                    مقالات و فایل های آموزشی نرم افزار Labview
                    حل مشکل درایور و راه اندازی FT232 های غیراورجینال

                    دیدگاه


                      #11
                      پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

                      فقط یک چیزی اون if hour>60 چکار می کنه ؟
                      راستش وقتی متغییرها رو مقدار دهی اولیه نکرده بودم به صورت پیش فرض مقدار 255 بود و من اون شرط به نظرم رسید ( درست و اشتباهش رو شما بگید )

                      البته وقتی به صورت معمولی متغییر رو تعریف می کنی ( استفاده از Sram ) مقدار متغییر به صورت پیش فرض صفر گرفته می شه
                      ولی وقتی به صورت eeprom تعریف کردم مقدار اولیه 255 گرفته بود

                      الان دنبال این هستم که با زدن یه کلید یه تابع اجرا بشه ( استفاده از وقفه )
                      نمی خوام مرتب کلید رو چک کنم ببینم زده شده یا نه می خوام هر وقت کلید زده شد یه تابع اجرا بشه
                      دوستان برای این مورد ممنون می شم راهنمایی کنند
                      ندن ساقی صفا اهلی ، غم دنیادن آیریلماز ** گتیر دولدور گینه جامی ، بالیخ دریادن آیریلماز
                      غنیمتدیر بو دم ساقی ، گتیر دولدور گنه جامی ** جهاندا رسمدور عاشق ، می و مینادن آیریلماز

                      دیدگاه


                        #12
                        پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

                        نوشته اصلی توسط ele_sav
                        الان دنبال این هستم که با زدن یه کلید یه تابع اجرا بشه ( استفاده از وقفه )
                        نمی خوام مرتب کلید رو چک کنم ببینم زده شده یا نه می خوام هر وقت کلید زده شد یه تابع اجرا بشه
                        دوستان برای این مورد ممنون می شم راهنمایی کنند
                        داخل کدویزارد سربرگ وقفه هرکدوم از وقفه های خارجی رو خواستین فعال کنید . حساس به لبه بالا رونده یا پایین رونده . این کار یک تابع رو داخل برنامه بوجود میاره که در صورتی که وقفه روی بده دستورات داخل اون اجرا میشه . شما دستوراتتون رو داخل اون تابع قرار بدید .
                        تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
                        دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
                        مقالات و فایل های آموزشی نرم افزار Labview
                        حل مشکل درایور و راه اندازی FT232 های غیراورجینال

                        دیدگاه


                          #13
                          پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

                          توی مشخصات Mega8 نوشته قابلیت 1،000،000 نوشتن و پاک کردن حافظه EEPROM

                          آیا تغییر مقدار متغییر رو هم شامل می شه ؟

                          مثلا من در هر یک ثانیه یک بار مقدار متغییرها رو تغییر می دم اگه اینجوری باشه که
                          1،000،000/60/60/24=11

                          یعنی فقط می تونم یازده روز از آی سی استفاده کنم ؟
                          اگه اینجوری باشه باید هر یک دقیقه متغیرها رو ذخیره کنم که حداقل اینجوری 23 ماه آی سی کار خواهد کرد

                          برداشت من اشتباهه یا کلا اینجوریه ؟



                          حق با آقا محمد هست وقتی دیتاشیت رو نیگاه کردم دیدم زده :

                          Nonvolatile Program and Data Memories
                          – 8K Bytes of In-System Self-Programmable Flash
                          Endurance: 10,000 Write/Erase Cycles
                          – Optional Boot Code Section with Independent Lock Bits
                          In-System Programming by On-chip Boot Program
                          True Read-While-Write Operation
                          – 512 Bytes EEPROM
                          Endurance: 100,000 Write/Erase Cycles
                          – 1K Byte Internal SRAM
                          – Programming Lock for Software Security
                          ندن ساقی صفا اهلی ، غم دنیادن آیریلماز ** گتیر دولدور گینه جامی ، بالیخ دریادن آیریلماز
                          غنیمتدیر بو دم ساقی ، گتیر دولدور گنه جامی ** جهاندا رسمدور عاشق ، می و مینادن آیریلماز

                          دیدگاه


                            #14
                            پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

                            نوشته اصلی توسط ele_sav
                            توی مشخصات Mega8 نوشته قابلیت 1،000،000 نوشتن و پاک کردن حافظه EEPROM

                            آیا تغییر مقدار متغییر رو هم شامل می شه ؟

                            مثلا من در هر یک ثانیه یک بار مقدار متغییرها رو تغییر می دم اگه اینجوری باشه که
                            1،000،000/60/60/24=11

                            یعنی فقط می تونم یازده روز از آی سی استفاده کنم ؟
                            اگه اینجوری باشه باید هر یک دقیقه متغیرها رو ذخیره کنم که حداقل اینجوری 23 ماه آی سی کار خواهد کرد

                            برداشت من اشتباهه یا کلا اینجوریه ؟
                            نه منظور کارهایی مثل پروگرم کردن میکر هست که کامل EEPROM رو پاک میکنه و دوباره روش می نویسه .
                            در ضمن فکر کنم 100000 باشه . دوباره نگاه کن . اگه نگاه کنی نوشته سیکل خواندن یا و نوشتن .

                            اضافه شده در تاریخ :
                            نوشته اصلی توسط محمد م
                            نه منظور کارهایی مثل پروگرم کردن میکر هست که کامل EEPROM رو پاک میکنه و دوباره روش می نویسه .
                            در ضمن فکر کنم 100000 باشه . دوباره نگاه کن . اگه نگاه کنی نوشته سیکل خواندن یا و نوشتن .
                            دیروز داشتم درباره این موضوع فکر میکردم و یک سرچی هم کردم دیدم برداشتم اشتباه بوده . حرف شما درست بود . این لینک رو نگاه کن جواب سوالات رو در زمینه تعداد دفعات نوشتن در EEPROM رو می گیری .
                            http://www.eca.ir/forum2/index.php?topic=30992.15
                            تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
                            دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
                            مقالات و فایل های آموزشی نرم افزار Labview
                            حل مشکل درایور و راه اندازی FT232 های غیراورجینال

                            دیدگاه


                              #15
                              پاسخ : ایجاد یک تایمر ساده (ثانیه شمار) با میکرو Mega8

                              نوشته اصلی توسط محمد م
                              دیروز داشتم درباره این موضوع فکر میکردم و یک سرچی هم کردم دیدم برداشتم اشتباه بوده . حرف شما درست بود . این لینک رو نگاه کن جواب سوالات رو در زمینه تعداد دفعات نوشتن در EEPROM رو می گیری .
                              http://www.eca.ir/forum2/index.php?topic=30992.15
                              :angry:
                              خوبه حالا این مورد رو گفتی و از طرفی خیلی خوبه که من تا حالا نتونستم اون مدار رو ببندم و الا میکرو ناقص می شد. :cry2:

                              سورس برنامه رو تغییر دادم تا اگه احیانا تصادفی ( ما که شانس نداریم و تجربه هم که صفر ) مداری که می سازم کار کنه حداقل با مشکل حافظه روبرو نشم
                              ندن ساقی صفا اهلی ، غم دنیادن آیریلماز ** گتیر دولدور گینه جامی ، بالیخ دریادن آیریلماز
                              غنیمتدیر بو دم ساقی ، گتیر دولدور گنه جامی ** جهاندا رسمدور عاشق ، می و مینادن آیریلماز

                              دیدگاه

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