اطلاعیه

Collapse
No announcement yet.

درخواست کمک در مورد کنترل نور led با pwm

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

    درخواست کمک در مورد کنترل نور led با pwm

    سلام به همه دوستان.
    من میخوام با pwm نور یک led را کم و زیاد کنم.
    خیلی سرچ کردم و به نتایج خوبی هم رسیدم. ولی یه مشکلی هست که نمیتونم حلش کنم.
    من از زیر استفاده میکنم...
    کد:
    #include <mega8.h>
    #include <delay.h>
    unsigned int x=38;
    
    void main(void) {
      //int x=150;
      DDRB=0XFF;
      TCCR1A=0xA3;
      TCCR1B=0x04;
      TCNT1=0x00;
      OCR1A=0x00;
      OCR1B=0x00;
      TIMSK=0x00;// Timer(s)/Counter(s) Interrupt(s) initialization
      TIFR=0x00;
      
     while(1)
     {
        for(x=0;x<=1023;x++)
        {
          OCR1A=x;
          OCR1B=x;
          //delay_ms(3);
        }
        
        for(x=1023;x>=0;x--)
        {
          OCR1A=x;
          OCR1B=x;
          //delay_ms(3);
        }  
        
     }
    }
    طبق این کد فقط زمان صفر و یک بودن led تغییر میکنه. نورش ثابته.
    خودم گفتم شاید فرکانسش پایینه.
    ولی نمیدونم دقیقا چطورری میشه فرکانس را تغییر داد.
    ممنون میشم راهنمایی کنید!

    #2
    پاسخ : درخواست کمک در مورد کنترل نور led با pwm

    نوشته اصلی توسط hosseinghaheri
    سلام به همه دوستان.
    من میخوام با pwm نور یک led را کم و زیاد کنم.
    خیلی سرچ کردم و به نتایج خوبی هم رسیدم. ولی یه مشکلی هست که نمیتونم حلش کنم.
    من از زیر استفاده میکنم...
    کد:
    #include <mega8.h>
    #include <delay.h>
    unsigned int x=38;
    
    void main(void) {
      //int x=150;
      DDRB=0XFF;
      TCCR1A=0xA3;
      TCCR1B=0x04;
      TCNT1=0x00;
      OCR1A=0x00;
      OCR1B=0x00;
      TIMSK=0x00;// Timer(s)/Counter(s) Interrupt(s) initialization
      TIFR=0x00;
      
     while(1)
     {
        for(x=0;x<=1023;x++)
        {
          OCR1A=x;
          OCR1B=x;
          //delay_ms(3);
        }
        
        for(x=1023;x>=0;x--)
        {
          OCR1A=x;
          OCR1B=x;
          //delay_ms(3);
        }  
        
     }
    }
    طبق این کد فقط زمان صفر و یک بودن led تغییر میکنه. نورش ثابته.
    خودم گفتم شاید فرکانسش پایینه.
    ولی نمیدونم دقیقا چطورری میشه فرکانس را تغییر داد.
    ممنون میشم راهنمایی کنید!
    سلام
    اگه از کدویژن استفاده می کنید،فکر کنم بشه با کدویزارد pwm رو تنظیم کرد.
    وب سایت تخصصی برق و الکترونیک روبوتیها
    انجام کلیه پروژه های الکترونیک با نازل ترین قیمت
    www.Robotiha.ir

    دیدگاه


      #3
      پاسخ : درخواست کمک در مورد کنترل نور led با pwm

      بله از کدویژن استفاده میکنم، ولی دقیقا نمیدونم مشکل از کجاست!

      دیدگاه


        #4
        پاسخ : درخواست کمک در مورد کنترل نور led با pwm

        نوشته اصلی توسط hosseinghaheri
        سلام به همه دوستان.
        من میخوام با pwm نور یک led را کم و زیاد کنم.
        خیلی سرچ کردم و به نتایج خوبی هم رسیدم. ولی یه مشکلی هست که نمیتونم حلش کنم.
        من از زیر استفاده میکنم...
        کد:
        #include <mega8.h>
        #include <delay.h>
        unsigned int x=38;
        
        void main(void) {
          //int x=150;
          DDRB=0XFF;
          TCCR1A=0xA3;
          TCCR1B=0x04;
          TCNT1=0x00;
          OCR1A=0x00;
          OCR1B=0x00;
          TIMSK=0x00;// Timer(s)/Counter(s) Interrupt(s) initialization
          TIFR=0x00;
          
         while(1)
         {
            for(x=0;x<=1023;x++)
            {
              OCR1A=x;
              OCR1B=x;
              //delay_ms(3);
            }
            
            for(x=1023;x>=0;x--)
            {
              OCR1A=x;
              OCR1B=x;
              //delay_ms(3);
            }  
            
         }
        }
        طبق این کد فقط زمان صفر و یک بودن led تغییر میکنه. نورش ثابته.
        خودم گفتم شاید فرکانسش پایینه.
        ولی نمیدونم دقیقا چطورری میشه فرکانس را تغییر داد.
        ممنون میشم راهنمایی کنید!
        سلام
        سوالتون رو متوجه نشدم،
        شما دقیقا با تغییر زمان 0 و 1 بودن پینتون نور رو مشخص میکنید دیگه(PWM) فرکانس تقریبا تاثیری تو نورتون نداره

        head<=
        ...تشکر خدا...
        [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

        دیدگاه


          #5
          پاسخ : درخواست کمک در مورد کنترل نور led با pwm

          نوشته اصلی توسط (مهدی رنجبر)m4hd1r
          سلام
          سوالتون رو متوجه نشدم،
          شما دقیقا با تغییر زمان 0 و 1 بودن پینتون نور رو مشخص میکنید دیگه(PWM) فرکانس تقریبا تاثیری تو نورتون نداره
          الان من وقتی تغذیه میکرو را بر قرار میکنم، خاموش و روشن شدن ال ای دی کاملا حس میشه یعنی اونقدر این کار کند انجام میشه که دیگه تاثیری توی نور نداره.
          فک کنم اگه سرعت خاموش و روشن شدن زیاد بشه یعنی تا حدی که اون را احساس نکنیم، مقدار نور led هم تغییر می کنه.
          البته من شاید دارم اشتباه میکنم اخه چیزه زیادی در این زمینه نمیدونم.

          دیدگاه


            #6
            پاسخ : درخواست کمک در مورد کنترل نور led با pwm

            سلام مجدد
            مقدار Top تایمرتون فکر میکنم رو 0xffff هست که فرکانس رو خیلی کم میکنه
            تو تنظیمات بزاریدش رو 0xff ببینید چی میشه ، البته با این که از 0 تا 255 فقط میتونید عدد بدید که البته کافیه و رزولوشن کافی ایه
            در ضمن برای این که کار خاصی لازم نباشه بکنید از تایمر 0 استفاده کنید

            head<=
            ...تشکر خدا...
            [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

            دیدگاه


              #7
              پاسخ : درخواست کمک در مورد کنترل نور led با pwm

              توی کدویزارد در قسمت تایمر clock value رو بیشترش کنید
              www.gam-co.blogsky.com

              دیدگاه


                #8
                پاسخ : درخواست کمک در مورد کنترل نور led با pwm

                برای شروع از تایمر ها ی 8 بیتی استفاده کنید.این کد با تایمر 2 میکرو
                کد:
                #include <mega8.h>
                
                // Declare your global variables here
                
                void main(void)
                {
                // Declare your local variables here
                
                // Input/Output Ports initialization
                // Port B initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=Out Func2=In Func1=Out Func0=In 
                // State7=T State6=T State5=T State4=T State3=0 State2=T State1=0 State0=T 
                PORTB=0x00;
                DDRB=0x0A;
                
                // Port C initialization
                // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                PORTC=0x00;
                DDRC=0x00;
                
                // Port D initialization
                // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                PORTD=0x00;
                DDRD=0x00;
                
                // Timer/Counter 0 initialization
                // Clock source: System Clock
                // Clock value: Timer 0 Stopped
                TCCR0=0x00;
                TCNT0=0x00;
                
                // Timer/Counter 1 initialization
                // Clock source: System Clock
                // Clock value: Timer1 Stopped
                // Mode: Normal top=0xFFFF
                // OC1A output: Discon.
                // OC1B output: Discon.
                // Noise Canceler: Off
                // Input Capture on Falling Edge
                // Timer1 Overflow Interrupt: Off
                // Input Capture Interrupt: Off
                // Compare A Match Interrupt: Off
                // Compare B Match Interrupt: Off
                TCCR1A=0x00;
                TCCR1B=0x00;
                TCNT1H=0x00;
                TCNT1L=0x00;
                ICR1H=0x00;
                ICR1L=0x00;
                OCR1AH=0x00;
                OCR1AL=0x00;
                OCR1BH=0x00;
                OCR1BL=0x00;
                
                // Timer/Counter 2 initialization
                // Clock source: System Clock
                // Clock value: 1000.000 kHz
                // Mode: Fast PWM top=0xFF
                // OC2 output: Non-Inverted PWM
                ASSR=0x00;
                TCCR2=0x6A;
                TCNT2=0x00;
                OCR2=0x00;
                
                // External Interrupt(s) initialization
                // INT0: Off
                // INT1: Off
                MCUCR=0x00;
                
                // Timer(s)/Counter(s) Interrupt(s) initialization
                TIMSK=0x00;
                
                // USART initialization
                // USART disabled
                UCSRB=0x00;
                
                // Analog Comparator initialization
                // Analog Comparator: Off
                // Analog Comparator Input Capture by Timer/Counter 1: Off
                ACSR=0x80;
                SFIOR=0x00;
                
                // ADC initialization
                // ADC disabled
                ADCSRA=0x00;
                
                // SPI initialization
                // SPI disabled
                SPCR=0x00;
                
                // TWI initialization
                // TWI disabled
                TWCR=0x00;
                
                while (1)
                   {
                   // Place your code here
                   OCR2++;
                   delay_ms(3);
                   }
                }
                آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

                دیدگاه


                  #9
                  پاسخ : درخواست کمک در مورد کنترل نور led با pwm

                  سلام دوباره.
                  کدی که اقای pooyan-shafiei دادند را تست کردم، سرعتش خیلی بیشتر شده بود ولی بازم حس میشد.
                  vahidabedi: کلاک ولیو را هم تغییر دادم ولی بی فایده بوذ.

                  الان یه سری چیزا واسه من مبهمه...
                  مثلا ایا هر کدوم از تایمتر ها اختصاص به پایه ی خاصی داره؟؟؟ مثلا میشه گفت timr0 به OCR1 اختصاص داره؟؟؟

                  m4hd1r: مقدار Top را تغییر دادم ولی الان نمیدوم باید روی OCR1A یا OCR1B یا OCR2 کار کنم :cry:
                  با OCR1A , OCR1B تست کردم ولی جواب نداد!
                  کد:
                     #include <delay.h>
                  unsigned int x=150;
                  #include <mega8.h>
                  
                  
                  void main(void)
                  {
                  
                  PORTB=0x00;
                  DDRB=0x00;
                   
                  PORTC=0x00;
                  DDRC=0x00;
                  
                  PORTD=0x00;
                  DDRD=0x00;
                  
                  TCCR0=0x00;
                  TCNT0=0x00;
                  TCCR1A=0x00;
                  TCCR1B=0x00;
                  TCNT1H=0x00;
                  TCNT1L=0x00;
                  ICR1H=0x00;
                  ICR1L=0x00;
                  OCR1AH=0x00;
                  OCR1AL=0x00;
                  OCR1BH=0x00;
                  OCR1BL=0x00;
                  ASSR=0x00;
                  TCCR2=0x4A;
                  TCNT2=0x00;
                  OCR2=0x00;
                  MCUCR=0x00;
                  TIMSK=0x00;
                  UCSRB=0x00;
                  ACSR=0x80;
                  SFIOR=0x00;
                  ADCSRA=0x00;
                  SPCR=0x00;
                  TWCR=0x00;
                  
                   while(1)
                   {
                      for(x=0;x<=1023;x++)
                      {
                        OCR1A=x;
                        OCR1B=x;
                        //delay_ms(3);
                      }
                      
                      for(x=1023;x>=0;x--)
                      {
                        OCR1A=x;
                        OCR1B=x;
                        //delay_ms(3);
                      }  
                      
                   }
                  }

                  دیدگاه


                    #10
                    پاسخ : درخواست کمک در مورد کنترل نور led با pwm

                    از همه ی دوستان بابت راهنمایی شون ممنونم!
                    این دفع دگ به کمک شما موفق شدم!
                    فقط یه مشکل خیلی کوچیک دارم!؟!
                    کد زیر را ببینید...
                    کد:
                    #include <delay.h>
                    unsigned int x=150;
                    #include <mega8.h>
                    
                    void main(void)
                    {
                    PORTB=0x00;
                    DDRB=0x0E;
                    
                    // Port C initialization
                    // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                    // State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                    PORTC=0x00;
                    DDRC=0x00;
                    
                    // Port D initialization
                    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
                    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
                    PORTD=0x00;
                    DDRD=0x00;
                    
                    // Timer/Counter 0 initialization
                    // Clock source: System Clock
                    // Clock value: 1500.000 kHz
                    TCCR0=0x02;
                    TCNT0=0x00;
                    
                    // Timer/Counter 1 initialization
                    // Clock source: System Clock
                    // Clock value: 1500.000 kHz
                    // Mode: Fast PWM top=0x00FF
                    // OC1A output: Non-Inv.
                    // OC1B output: Non-Inv.
                    // Noise Canceler: Off
                    // Input Capture on Falling Edge
                    // Timer1 Overflow Interrupt: Off
                    // Input Capture Interrupt: Off
                    // Compare A Match Interrupt: Off
                    // Compare B Match Interrupt: Off
                    TCCR1A=0xA1;
                    TCCR1B=0x0A;
                    TCNT1H=0x00;
                    TCNT1L=0x00;
                    ICR1H=0x00;
                    ICR1L=0x00;
                    OCR1AH=0x00;
                    OCR1AL=0x00;
                    OCR1BH=0x00;
                    OCR1BL=0x00;
                    
                    // Timer/Counter 2 initialization
                    // Clock source: System Clock
                    // Clock value: 1500.000 kHz
                    // Mode: Fast PWM top=0xFF
                    // OC2 output: Non-Inverted PWM
                    ASSR=0x00;
                    TCCR2=0x6A;
                    TCNT2=0x00;
                    OCR2=0x00;
                    
                    // External Interrupt(s) initialization
                    // INT0: Off
                    // INT1: Off
                    MCUCR=0x00;
                    
                    // Timer(s)/Counter(s) Interrupt(s) initialization
                    TIMSK=0x00;
                    
                    // USART initialization
                    // USART disabled
                    UCSRB=0x00;
                    
                    // Analog Comparator initialization
                    // Analog Comparator: Off
                    // Analog Comparator Input Capture by Timer/Counter 1: Off
                    ACSR=0x80;
                    SFIOR=0x00;
                    
                    // ADC initialization
                    // ADC disabled
                    ADCSRA=0x00;
                    
                    // SPI initialization
                    // SPI disabled
                    SPCR=0x00;
                    
                    // TWI initialization
                    // TWI disabled
                    TWCR=0x00;
                    x=0;
                     while(1)
                     {
                       for(x=0;x<=1023;x=x+5){
                          OCR2=x;
                          OCR1A=x;
                          OCR1B=x;
                          delay_ms(3);
                       } 
                    
                        
                        for(x=1023;x>=0;x=x-5){    
                          OCR2=x;
                          OCR1A=x;
                          OCR1B=x;
                          delay_ms(3);
                        }  
                        
                     }
                    }

                    اگه توجه کنید توی while دو تا حلقه for هست.
                    اولی مقدار را زیاد میکنه و دومی کم میکنه!
                    حالا حلقه فور دومی کار نمی کنه.
                    یعنی led ارام ارام روشن میشه بعد یهو خاموش میشه و دوباره ارام ارام روشن میشه!
                    ممنون میشم راهنمایی کنید!

                    دیدگاه


                      #11
                      پاسخ : درخواست کمک در مورد کنترل نور led با pwm

                      ببینید رجیستر OCR2 وقتی تا 255 بره و بیشتر توش بریزید سرریز میشه و از 0 شروع میشه شما تا 1023 توش نوشتید پس 4 بار سریز میشه تا تهه فور

                      head<=
                      ...تشکر خدا...
                      [img width=97 height=100]http://mahdi3d.persiangig.com/image/5280543_t.jpg[/img]

                      دیدگاه

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