اطلاعیه

Collapse
No announcement yet.

نوشتن برنامه برای ایجاد PWM

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

    نوشتن برنامه برای ایجاد PWM

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

    #2
    پاسخ : نوشتن برنامه برای ایجاد PWM

    نوشته اصلی توسط ariaboy18
    سلام به همگی اساتید گرامی
    قصد دارم برنامه ی تولید سیگنال pwm بنویسم و همینطور 5کلید به ورودی وصل کنم،طوری که با زدن هر کلید مقدار خاصی برای اندازه ی پهنای پالس pwm ایجاد بشه.اگه ممکنه یه راهنمایی کنید که چجوری برنامه اش رو بنویسم یا اگه نمونه کدی دارین لطف کنین قرار بدین.با سپاس
    با سلام به دوست عزیز یه سرچ تو نوار ابزار سمت راست بکنی کلی مطلب میتونی تو انجمن پیدا کنی
    دوربین مدار بسته و دزد گیر و رفع مشکلات
    بانک اطلاعاتی سنسورها
    ساخت رقص نور برای شیشه سکوریت مغازه ها
    تعمیر لوازم خانگی را اینجا مطرح کنید
    [move][b] موفقیت بر روی ستون های شکست شکل می گیرد.

    دیدگاه


      #3
      پاسخ : نوشتن برنامه برای ایجاد PWM

      نوشته اصلی توسط ariaboy18
      سلام به همگی اساتید گرامی
      قصد دارم برنامه ی تولید سیگنال pwm بنویسم و همینطور 5کلید به ورودی وصل کنم،طوری که با زدن هر کلید مقدار خاصی برای اندازه ی پهنای پالس pwm ایجاد بشه.اگه ممکنه یه راهنمایی کنید که چجوری برنامه اش رو بنویسم یا اگه نمونه کدی دارین لطف کنین قرار بدین.با سپاس
      سلام
      این برنامه رو من قبلنا نوشتم
      با دوتا کلید دیوتی سایکل رو تغییر میده رو یه ال سی دی هم نشون میده
      ببین به دردت میخوره :rolleyes:

      کد:
      #include<mega16.h>
      #include<delay.h>
      #include <stdlib.h>
      #include <stdio.h>
      #asm
        .equ __lcd_port=0x1B;
      #endasm
      #include <lcd.h>
      
      void main(){
        char duty,str[16];
        unsigned int temp;
        DDRB=0xff;
        PORTB=0;
        DDRD=0;
        PORTD=0xff;
        TCCR0=0x6c;
        TCNT0=0;
        OCR0=0x8a;
        TIMSK=0x03;
        lcd_init(16);
        while(1){ 
          if(PIND.0==0){
            delay_ms(20);
            ++duty;
            if(duty>=101) duty=100;
            }
          if(PIND.1==0){
            delay_ms(20);
            --duty;
            if(duty==0 || duty>100) duty=0;
            }
          temp=((duty*256)/100)/1;
          OCR0=temp;
          if(duty>=98) OCR0=temp-1;
          if(duty<=2) OCR0=temp+1;
          lcd_clear();
          lcd_putsf("Duty Cycle:");
          sprintf(str,"%d%%",duty);
          lcd_gotoxy(12,0);
          lcd_puts(str);
          }
        }
      هر جاش مشکل داشتی بگو تا برات توضیح بدم

      دیدگاه


        #4
        پاسخ : نوشتن برنامه برای ایجاد PWM

        نوشته اصلی توسط ameen.kh
        سلام
        این برنامه رو من قبلنا نوشتم
        با دوتا کلید دیوتی سایکل رو تغییر میده رو یه ال سی دی هم نشون میده
        ببین به دردت میخوره :rolleyes:

        کد:
        #include<mega16.h>
        #include<delay.h>
        #include <stdlib.h>
        #include <stdio.h>
        #asm
          .equ __lcd_port=0x1B;
        #endasm
        #include <lcd.h>
        
        void main(){
          char duty,str[16];
          unsigned int temp;
          DDRB=0xff;
          PORTB=0;
          DDRD=0;
          PORTD=0xff;
          TCCR0=0x6c;
          TCNT0=0;
          OCR0=0x8a;
          TIMSK=0x03;
          lcd_init(16);
          while(1){ 
            if(PIND.0==0){
              delay_ms(20);
              ++duty;
              if(duty>=101) duty=100;
              }
            if(PIND.1==0){
              delay_ms(20);
              --duty;
              if(duty==0 || duty>100) duty=0;
              }
            temp=((duty*256)/100)/1;
            OCR0=temp;
            if(duty>=98) OCR0=temp-1;
            if(duty<=2) OCR0=temp+1;
            lcd_clear();
            lcd_putsf("Duty Cycle:");
            sprintf(str,"%d%%",duty);
            lcd_gotoxy(12,0);
            lcd_puts(str);
            }
          }
        هر جاش مشکل داشتی بگو تا برات توضیح بدم

        ممنونم دوست عزیز
        فقط یه سوال،برنامه ای که نوشتین برای atmega هست،میشه واسه xmega هم استفاده کرد؟

        دیدگاه


          #5
          پاسخ : نوشتن برنامه برای ایجاد PWM

          نوشته اصلی توسط ariaboy18

          ممنونم دوست عزیز
          فقط یه سوال،برنامه ای که نوشتین برای atmega هست،میشه واسه xmega هم استفاده کرد؟
          خواهش میکنم
          من با Xmega کار نکردم هنوز اصن نمیدونم چه جوریه :biggrin:

          دیدگاه


            #6
            پاسخ : نوشتن برنامه برای ایجاد PWM

            برنامه زیر 32 کانال PWM روی تمام پایه های اتمگا 16 درست میکنه.

            کد:
                                    
            #include <mega32.h>
            
            #include <delay.h>
            unsigned char TC=0;
            unsigned char PC[30];
            // Timer 0 overflow interrupt service routine
            interrupt [TIM0_OVF] void timer0_ovf_isr(void)
            {
            // Place your code here
            TC++;
            if(TC>=PC[0])PORTA.7=0; else PORTA.7=1;
            if(TC>=PC[1])PORTA.6=0; else PORTA.6=1;
            if(TC>=PC[2])PORTA.5=0; else PORTA.5=1;
            if(TC>=PC[3])PORTA.4=0; else PORTA.4=1;
            if(TC>=PC[4])PORTA.3=0; else PORTA.3=1;
            if(TC>=PC[5])PORTA.1=0; else PORTA.1=1;
            if(TC>=PC[6])PORTB.0=0; else PORTB.0=1;
            if(TC>=PC[7])PORTB.1=0; else PORTB.1=1;
            if(TC>=PC[8])PORTB.2=0; else PORTB.2=1;
            if(TC>=PC[9])PORTB.3=0; else PORTB.3=1;
            if(TC>=PC[10])PORTB.4=0; else PORTB.4=1;
            if(TC>=PC[11])PORTB.5=0; else PORTB.5=1;
            if(TC>=PC[12])PORTB.6=0; else PORTB.6=1;
            if(TC>=PC[13])PORTB.7=0; else PORTB.7=1;
            if(TC>=PC[14])PORTD.0=0; else PORTD.0=1;
            if(TC>=PC[15])PORTD.1=0; else PORTD.1=1;
            if(TC>=PC[16])PORTD.2=0; else PORTD.2=1;
            if(TC>=PC[17])PORTD.3=0; else PORTD.3=1;
            if(TC>=PC[18])PORTD.4=0; else PORTD.4=1;
            if(TC>=PC[19])PORTD.5=0; else PORTD.5=1;
            if(TC>=PC[20])PORTD.6=0; else PORTD.6=1;
            if(TC>=PC[21])PORTD.7=0; else PORTD.7=1;
            if(TC>=PC[22])PORTC.0=0; else PORTC.0=1;
            if(TC>=PC[23])PORTC.1=0; else PORTC.1=1;
            if(TC>=PC[24])PORTC.2=0; else PORTC.2=1;
            if(TC>=PC[25])PORTC.3=0; else PORTC.3=1;
            if(TC>=PC[26])PORTC.4=0; else PORTC.4=1;
            if(TC>=PC[27])PORTC.5=0; else PORTC.5=1;
            if(TC>=PC[28])PORTC.6=0; else PORTC.6=1;
            if(TC>=PC[29])PORTC.7=0; else PORTC.7=1;
               
            
            TCNT0=100;
            }
            
            // Declare your global variables here
            
            void main(void)
            {
            int i,j;
            
            PORTA=0x00;
            DDRA=0xFF;
            
            
            PORTB=0x00;
            DDRB=0xFF;
            
            PORTC=0x00;
            DDRC=0xFF;
            
            PORTD=0x00;
            DDRD=0xFF;
            
            // Timer/Counter 0 initialization
            // Clock source: System Clock
            // Clock value: 1000.000 kHz
            // Mode: Normal top=FFh
            // OC0 output: Disconnected
            TCCR0=0x01;
            TCNT0=0x00;
            OCR0=0x00;
            
            TIMSK=0x01;
            
            
            ACSR=0x80;
            SFIOR=0x00;
            
            
            #asm("sei")
            
            
            
            while (1)
               {
            
                for(j=10;j<255;j++)
                {
                 for(i=0;i<30;i++)
                 {
                 PC[i]=j;
                 }
                 delay_us(5);
                }
            
            
                for(j=255;j>10;j--)
                {
                 for(i=0;i<30;i++)
                 {
                 PC[i]=j;
                 }
                 delay_us(5);
                }
                
                for(j=0;j<30;j++)
                {
                for(i=0;i<30;i++) PC[i]=0;
                
                for(i=0;i<30;i+=3) PC[i]=255;
                delay_ms(2);
                
                for(i=0;i<30;i++) PC[i]=0;
                
                for(i=1;i<30;i+=3) PC[i]=255;
                delay_ms(2);
                
                for(i=0;i<30;i++) PC[i]=0;
                
                for(i=2;i<30;i+=3) PC[i]=255;
                delay_ms(2);
                for(i=0;i<30;i++) PC[i]=0;
                
                
                }
                
                
            
               };
            }

            دیدگاه

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