اطلاعیه

Collapse
No announcement yet.

ایجاد PWM روی پورت

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

    ایجاد PWM روی پورت

    سلام دوستان
    یه سوال داشتم خدمت اساتید
    چطوری میتونم یه حالتی از پی دبلیو ام رو روی یه پورت مثلا داشته باشم؟و اون رو در خلال برنامه ازش استفاده کنم؟
    کار تابلو ال ای دی ثابته.میخوام یه سری افکت که انجام شد بعد بیاد یه کم کم و زیاد کنه نور رو بعد ادامه افکت
    من روی یه پین رو دارم
    به زبان بسکام لطفا .ممنون از همه دوستان که راهنمایی میکنن

    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Timer1 = Pwm , Prescale = 8. , Pwm = 8 , Compare A Pwm = Clear Up , _
    Compare B Pwm = Clear Down

    Dim A As Byte , B As Byte

    Do
    For A = 1 To 250
    Pwm1a = A
    Waitms 10
    Next A
    For B = 250 To 1 Step -1
    Pwm1a = B
    Waitms 20
    Next B
    Loop
    End
    **** k i n j ****

    #2
    پاسخ : ایجاد PWM روی پورت

    بهترین روش اینه که شما با وقفه تایمر pwm رو افزایش بدی

    اینطوری

    کد:
    [left]
    
    گیریم پورت a خزوجی باشه
    config timer0=timer,prescale=1
    enable ovf0
    on ovf0 pwmcounter
    
    dim pro1 as byte
    dim pro2 as byte
    dim bufferpwm as byte
    
    pro1=100
    pro2=80
    do
    
    loop
    
    end
    
    pwmcounter:
    incr bufferpwm
    if bufferpwm=0 then
    porta.0=1
    porta.1=1
    end if
    if bufferpwm=pro1 then porta.0=0
    if bufferpwm=pro2 then porta.1=0
    return
    [/left]
    تو این برنامه پین 0 و 1 پورت a برات pwm می سازه و هر چه مقدار pro1 بیشتر باشه pwm روی پین 0 بیشتر می شه و همچنین برای pro2

    تو این مدل برنامه فرکانس pwm یکم پایینه ولی برای led خوب جواب می ده و حسنش اینه که با delay نساختیش برای همین شما تو لوپ اصلی برنامه می تونی همزمان دستورهای دیگه رو هم انجام بدی

    یک چیز دیگه اگر خواستی فرکانس pwm بیشتر بشه می تونی مقدار اولیه به تایمرت بدی و تو هر زیر برنامه وقفش هم اون مقدار اولیه رو تمدید کنی
    همانطور که مایل نیستم بنده کسی باشم، حاضر نیستم آقای کسی باشم. کسانی که مخالف آزادی دیگرانند، خود لیاقت آزادی را ندارند.((آبراهام لینکن))

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

    [img width=343 height=100]http://www.elecdesigner.com/uploads/PRO-DESIGNER-GROUP.jpg[/img]

    دیدگاه


      #3
      پاسخ : ایجاد PWM روی پورت

      به نظر من pwm را به صورت سخت افزاری با امکانات میکرو بساز و بعد اون پایه را بده به پایه انتخاب یا فعال سازی led ها
      در زیر این نقاب چیزی بیشتر از گوشت هست. در زیر این نقاب یک ایده هست و ایده ها ضدگلوله هستند.

      1-به اندازه ی باورهای هر کسی ؛ با او حرف بزن …. بیشتر که بگویی ، تو را احمق فرض خواهد کرد …!!!
      2-تنها دو گروه نمى توانند افکار خود را عوض کنند: دیوانگان تیمارستان و مردگان گورستان.
      3-آدم ها مثل عکس ها هستند: زیاد بزرگشون کنی ، کیفیتشون میاد پایین!

      دیدگاه


        #4
        پاسخ : ایجاد PWM روی پورت

        در صورتی که پایه های pwm کم نباشن درسته ولی وقتی پایه pwm کم بیاد به غیر از روش تلفیق نرم افزاری سخت افزاری من روش ساده و ارزون دیگه ای نیست
        همانطور که مایل نیستم بنده کسی باشم، حاضر نیستم آقای کسی باشم. کسانی که مخالف آزادی دیگرانند، خود لیاقت آزادی را ندارند.((آبراهام لینکن))

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

        [img width=343 height=100]http://www.elecdesigner.com/uploads/PRO-DESIGNER-GROUP.jpg[/img]

        دیدگاه


          #5
          پاسخ : ایجاد PWM روی پورت

          نوشته اصلی توسط PRO-DESIGNER
          بهترین روش اینه که شما با وقفه تایمر pwm رو افزایش بدی

          اینطوری

          کد:
          [left]
          
          گیریم پورت a خزوجی باشه
          config timer0=timer,prescale=1
          enable ovf0
          on ovf0 pwmcounter
          
          dim pro1 as byte
          dim pro2 as byte
          dim bufferpwm as byte
          
          pro1=100
          pro2=80
          do
          
          loop
          
          end
          
          pwmcounter:
          incr bufferpwm
          if bufferpwm=0 then
          porta.0=1
          porta.1=1
          end if
          if bufferpwm=pro1 then porta.0=0
          if bufferpwm=pro2 then porta.1=0
          return
          [/left]
          تو این خط ارور میگیره
          if bufferpwm=pro1 then porta.0=0
          if bufferpwm=pro2 then porta.1=0

          ممنون که کمک میکنید
          **** k i n j ****

          دیدگاه


            #6
            پاسخ : ایجاد PWM روی پورت

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

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

            [img width=343 height=100]http://www.elecdesigner.com/uploads/PRO-DESIGNER-GROUP.jpg[/img]

            دیدگاه


              #7
              پاسخ : ایجاد PWM روی پورت

              سلام

              برای ایجاد PWM لازم نیست حتمن از پایه های OC استفاده کنی
              کافیه یه وقفه با زمان خیلی کم درست کنی که تو روتینش یه کانتر رو زیاد می کنه
              بعد زمانی که برای on و off بودن موج لازم داری رو محاسبه کن و هر وقت به اون عدد خاص رسید پایه مورد نظرت رو تغییر حالت بده
              آخر کار هم کانتر رو ریست کن

              دیدگاه


                #8
                پاسخ : ایجاد PWM روی پورت

                نوشته اصلی توسط PRO-DESIGNER
                می شه بگی با چه میکرویی کار می کنی و بعدش اینکه کل برنامه که تو بسکام نوشتی رو اینجا قرار بده
                حل شد ارور نمیده
                به نظرتون این برنامه جواب میده؟
                اونجا که تایمر فعال میشه میره تو زیر برنامه اونجا رو یه کم توضیح میدید؟من با پرتوس تو اسکوپ نگاه میکنم فقط یه کی در میون روشن میشه و برنتمه منو اجرا نمیکنه.چرا؟
                $regfile "m8def.dat"
                $crystal = 1000000

                Config Timer0 = Timer , Prescale = 1
                Enable Ovf0
                On Ovf0 Pwmcounter

                Dim Pro1 As Byte
                Dim Pro2 As Byte
                Dim Bufferpwm As Byte

                Pro1 = 0
                Pro2 = 150
                Config Portd = Output
                Do
                Portd = &B00000011
                Waitms 500
                Portd = &B00000000
                Waitms 500
                Portd = &B00000010
                Waitms 500
                Start Timer0

                loop

                end

                Pwmcounter:
                Incr Bufferpwm
                If Bufferpwm = 0 Then
                Portd.0 = 1
                Portd.1 = 1
                End If
                If Bufferpwm = Pro1 Then Portd.0 = 0
                If Bufferpwm = Pro2 Then Portd.1 = 0
                Return
                **** k i n j ****

                دیدگاه


                  #9
                  پاسخ : ایجاد PWM روی پورت

                  نوشته اصلی توسط Majid AD
                  سلام

                  برای ایجاد PWM لازم نیست حتمن از پایه های OC استفاده کنی
                  کافیه یه وقفه با زمان خیلی کم درست کنی که تو روتینش یه کانتر رو زیاد می کنه
                  بعد زمانی که برای on و off بودن موج لازم داری رو محاسبه کن و هر وقت به اون عدد خاص رسید پایه مورد نظرت رو تغییر حالت بده
                  آخر کار هم کانتر رو ریست کن
                  میشه در یک مثال مارو متوجه کنی؟
                  ممنون میشم
                  **** k i n j ****

                  دیدگاه


                    #10
                    پاسخ : ایجاد PWM روی پورت

                    [quote author=kinj link=topic=71509.msg424562#msg424562 date=1357488259]
                    حل شد ارور نمیده
                    به نظرتون این برنامه جواب میده؟
                    اونجا که تایمر فعال میشه میره تو زیر برنامه اونجا رو یه کم توضیح میدید؟من با پرتوس تو اسکوپ نگاه میکنم فقط یه کی در میون روشن میشه و برنتمه منو اجرا نمیکنه.چرا؟
                    $regfile "m8def.dat"
                    $crystal = 1000000

                    Config Timer0 = Timer , Prescale = 1
                    Enable Ovf0
                    On Ovf0 Pwmcounter

                    Dim Pro1 As Byte
                    Dim Pro2 As Byte
                    Dim Bufferpwm As Byte

                    Pro1 = 0
                    Pro2 = 150
                    Config Portd = Output
                    Do
                    Portd = &B00000011
                    Waitms 500
                    Portd = &B00000000
                    Waitms 500
                    Portd = &B00000010
                    Waitms 500
                    Start Timer0

                    loop

                    end

                    Pwmcounter:
                    Incr Bufferpwm
                    If Bufferpwm = 0 Then
                    Portd.0 = 1
                    Portd.1 = 1
                    End If
                    If Bufferpwm = Pro1 Then Portd.0 = 0
                    If Bufferpwm = Pro2 Then Portd.1 = 0
                    Return
                    [/quote


                    دوست عزیز شما که برداشتی برنامه مارو خراب کردی ببین اگر با pwm کار کرده باشی فقط کاری که می کنی یک عدد از 0 تا 255 بهش می دی و دیگر هیچ اون دو تا مقداری که دادی به pro1 و pro2 در حقیقت همون رجیستر pwm هست خوب تا اینجاش درست ولی اون صفر و یک کردن دیگه ماله چیه من برنامه کاملو دادم یعنی هرجا خواستی باید از همون دو تا متغیر استفاده کنی و هیچ دستی به پورت ها نزنی برای اینکه کار بکنه اصلا لازم نیست تو لوپ اصلی چیزی بنویسی

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

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

                    [img width=343 height=100]http://www.elecdesigner.com/uploads/PRO-DESIGNER-GROUP.jpg[/img]

                    دیدگاه


                      #11
                      پاسخ : ایجاد PWM روی پورت

                      دوست عزیز من یه برنامه با pwm دارم تو اسکوپ پروتوس ببینی حس مکیکنی داره کم و زیا د میشه
                      من با برنامه شما نتونستم
                      اینو ببینید
                      http://s2.picofile.com/file/7610859565/pwm.zip.html
                      پ خ رو ببینید
                      **** k i n j ****

                      دیدگاه


                        #12
                        پاسخ : ایجاد PWM روی پورت

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

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

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

                        [img width=343 height=100]http://www.elecdesigner.com/uploads/PRO-DESIGNER-GROUP.jpg[/img]

                        دیدگاه


                          #13
                          پاسخ : ایجاد PWM روی پورت

                          سلام
                          من این برنامه رو تو پرتوس اجرا میکنم هیچ اتفاقی نمیوفته
                          همون برنامه شما
                          $regfile "m8def.dat"
                          $crystal = 1000000

                          Config Timer0 = Timer , Prescale = 1
                          Enable Ovf0
                          On Ovf0 Pwmcounter

                          Dim Pro1 As Byte
                          Dim Pro2 As Byte
                          Dim Bufferpwm As Byte

                          Pro1 = 100
                          Pro2 = 80

                          Start Timer0
                          Do


                          Loop

                          End

                          Pwmcounter:
                          Incr Bufferpwm
                          If Bufferpwm = 0 Then
                          Portd.0 = 1
                          Portd.1 = 1
                          End If
                          If Bufferpwm = Pro1 Then Portd.0 = 0
                          If Bufferpwm = Pro2 Then Portd.1 = 0
                          Return
                          **** k i n j ****

                          دیدگاه


                            #14
                            پاسخ : ایجاد PWM روی پورت

                            پورت d0 و d1 رو خروجی کنی حتما اتفاقی می افته
                            همانطور که مایل نیستم بنده کسی باشم، حاضر نیستم آقای کسی باشم. کسانی که مخالف آزادی دیگرانند، خود لیاقت آزادی را ندارند.((آبراهام لینکن))

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

                            [img width=343 height=100]http://www.elecdesigner.com/uploads/PRO-DESIGNER-GROUP.jpg[/img]

                            دیدگاه


                              #15
                              پاسخ : ایجاد PWM روی پورت

                              نشد :angry:
                              شما یه لطفی کنید تست کنید
                              ممنون میشم از تون
                              **** k i n j ****

                              دیدگاه

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