اطلاعیه

Collapse
No announcement yet.

ایجاد تاخیر متغیر بدون استفاده از تایمر

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

    ایجاد تاخیر متغیر بدون استفاده از تایمر

    سلام دوستان و اساتید...

    من میخوام برنامه ای بسازم که بدون استفاده از تایمر تاخیر متعیر داشته باشه..مثلا PORTB.0=1 اگه شد بعد از 10 میلی ثانیه PORTB.0=0 بشه بعد دوباره بعد از 11 میلی ثانیه PORTB.0=1 بشه بعد از 12 میلی ثانیه PORTB.0=0 بشه و به همین ترتیب تا 1000 میلی ثانیه بره..
    درواقع موج PWM رو روی پورت دیگه میخوام شبیه سازی کنم...

    چه شکلی با چه دستوری میتونم این کار رو انجام بدم؟
    لطفا بابرنامه نویسی C باشه... اگه کسی کل برنامه رو میدونه خواهشا بزاره...

    ممنون

    #2
    پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

    این کجاش مثل pwm می مونه که شما می خواهید درستش کنید .

    دیدگاه


      #3
      پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

      لطفا اگه کسی بلده راهنمایی کنه

      دیدگاه


        #4
        پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

        من می خوام به شما کمک کنم ولی این که شما می گید که pwm نیست . اگر می شه کامل تر توضیح بدید .

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

        دیدگاه


          #5
          پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

          فکر کنم با حلقه مثلا هر بار PORTB.0=0 یک شد شما به متغیر فرضی X یک واحد اضافه کنید بعد در دستور WAITMS 10+1 رو قرار بدین البته شباهتی که به pwm نداره هیچ شباهتی به هیچ اصولی نداره :cry2:
          بعدا یه جمله قشنگ مینویسم

          دیدگاه


            #6
            پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

            مهم نیست pwm نباشه...

            من فقط تاخیر متغیر میخوام..
            مثلا پس از هر بار صفر و یک شدن یک پورت ، delay خودش یک واحد اضافه شود..

            با چه دستوری میشه؟
            راهنمایی کنید لطفا..
            مثلا :
            PORTC.1=0;
            delay_us(900);
            PORTC.1=1;
            delay_us(100);
            PORTC.1=0;
            delay_us(890);
            PORTC.1=1;
            delay_us(110);
            PORTC.1=0;
            delay_us(880);
            PORTC.1=1;
            delay_us(120);
            PORTC.1=0;

            و به همین ترتیب ادامه بده تا اینکه delay_us(1) بشه...

            لطفا راهنمایی کنید..

            دیدگاه


              #7
              پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

              این شد یه چیزی . خیلی راحت دو تا متغییر به نام delay_clr_port , delay_set_port که از نوع int هست رو تعریف کن . بعد در برنامه اول یه مقدار اولیه بده و بعد هم بنداز توی یه حلقه و شرط حلقه رو برابر با یک شدن یکی یا ترکیبی از دو تا متغییر بزار و در خود حلقه هم اول مثلا پورت رو set کن بعد تاخیر با استفاده از متغییر مربوطه بعد یکی از این متغییر کم کن . بعد این هم clr و تاخیر به میزان متغییر مربوطه و در اخر هم کاهش از متغییر مربوطه به clr شدن . همین شد برنامه شما اگر لازمه کدش هم بنویسم .

              دیدگاه


                #8
                پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

                ممنون از شما...

                متوجه شدم چه شکلی ولی میترسم باز گیج بشم..خواهشا برنامشو بنویسیدبه زبان C...

                باتشکر.

                دیدگاه


                  #9
                  پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

                  نمی دونم منظورتون رو درست فهمیدم یا نه این جوری هم میشه
                  a=100;
                  delay_ms(a);
                  PORTB=1;
                  a++;
                  ;1=PORTB
                  تو اين جهان 7 ميلياردي من معني ندارد و اگه تو اين دنيا فقط 1 نفر وجود داشت باز هم من معني نداشت

                  دیدگاه


                    #10
                    پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

                    ممنون که جواب دادید...

                    ولی شما توی برنامه بالا دوبار پشت سر هم پورت را 1 کردید..

                    درسته نوشتید؟

                    دیدگاه


                      #11
                      پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

                      نوشته اصلی توسط mehran640
                      ممنون که جواب دادید...

                      ولی شما توی برنامه بالا دوبار پشت سر هم پورت را 1 کردید..

                      درسته نوشتید؟
                      اره اونو همین حوری نوشتم :mrgreen: منظورم این بود بعد از دیلی به یه کارت برسی مثلا PORTB=1 با PORTB=0
                      تو اين جهان 7 ميلياردي من معني ندارد و اگه تو اين دنيا فقط 1 نفر وجود داشت باز هم من معني نداشت

                      دیدگاه


                        #12
                        پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

                        دوست من اینم برنامه :

                        [

                        دیدگاه


                          #13
                          پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

                          دوست عزیز ممنون از برنامت..ولی چرا کار نمیکنه؟

                          روی خروجی هیچی نیست..

                          دیدگاه


                            #14
                            پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

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

                            دیدگاه


                              #15
                              پاسخ : ایجاد تاخیر متغیر بدون استفاده از تایمر

                              من پورتو در حالت خروجی قرار دادم ولی باز جواب نگرفتم..

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

                              #include <mega8.h>
                              #include <delay.h>
                              int delay_clr_port , delay_set_port;
                              void main (void)
                              {

                              DDRC=0XFF;

                              delay_clr_port=900;
                              delay_set_port=100;
                              while(delay_clr_port>1)
                              {

                              PORTC.1=0;
                              delay_ms(delay_clr_port);
                              delay_clr_port--;
                              PORTC.1=1;
                              delay_ms(delay_set_port);
                              delay_set_port ++;
                              while (1);
                              }
                              }

                              دیدگاه

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