اطلاعیه

Collapse
No announcement yet.

شمارنده پالس

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

    #16
    پاسخ : شمارنده پالس

    نوشته اصلی توسط ICE-ELEC
    من اینو انجام دادم قبلا به مشکلاتش بر خوردم عجب و قریب البته
    این نبوده یه چیز دیگه ای بود
    بنیامین جان برنامه خودتون رو بگذارید تا ببینم ...
    ممنون
    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
    معرفی نرم افزار Codewizard PWM
    با من بیشتر آشنا شوید

    دیدگاه


      #17
      پاسخ : شمارنده پالس

      نوشته اصلی توسط سامان اسدی
      بنیامین جان برنامه خودتون رو بگذارید تا ببینم ...
      ممنون
      [code=c]


      #include <mega8.h>
      #include <delay.h>
      #include <ctype.h>
      #include <stdio.h>
      long int a;
      float b;
      int set;
      char str[];

      // External Interrupt 0 service routine
      interrupt [EXT_INT0] void ext_int0_isr(void)
      {
      // Place your code here
      a++;
      }

      // External Interrupt 1 service routine
      interrupt [EXT_INT1] void ext_int1_isr(void)
      {
      // Place your code here
      a--;
      if(a<=0){
      a=0;
      }
      }



      // 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=In Func2=In Func1=In Func0=In
      // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
      PORTB=0x00;
      DDRB=0x00;

      // 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: Timer2 Stopped
      // Mode: Normal top=0xFF
      // OC2 output: Disconnected
      ASSR=0x00;
      TCCR2=0x00;
      TCNT2=0x00;
      OCR2=0x00;

      // External Interrupt(s) initialization
      // INT0: On
      // INT0 Mode: Rising Edge
      // INT1: On
      // INT1 Mode: Rising Edge
      GICR|=0xC0;
      MCUCR=0x0F;
      GIFR=0xC0;

      // Timer(s)/Counter(s) Interrupt(s) initialization
      TIMSK=0x00;

      // USART initialization
      // Communication Parameters: 8 Data, 1 Stop, No Parity
      // USART Receiver: Off
      // USART Transmitter: On
      // USART Mode: Asynchronous
      // USART Baud Rate: 2400
      UCSRA=0x00;
      UCSRB=0x08;
      UCSRC=0x86;
      UBRRH=0x01;
      UBRRL=0xA0;

      // 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;

      // Watchdog Timer initialization
      // Watchdog Timer Prescaler: OSC/16k


      #pragma optsize-
      WDTCR=0x1E;
      WDTCR=0x0E;
      #ifdef _OPTIMIZE_SIZE_
      #pragma optsize+
      #endif
      // Global enable interrupts
      #asm("sei&quot




      while (1)
      {

      b=a/7.28;
      b=b/100;

      sprintf(str,"Depth:%8.2f M",b);
      puts(str);

      delay_ms(500);
      set=toascii(12);
      putchar(set);

      }
      }

      [/code]

      دیدگاه


        #18
        پاسخ : شمارنده پالس

        نوشته اصلی توسط ICE-ELEC
        [code=c]


        #include <mega8.h>
        #include <delay.h>
        #include <ctype.h>
        #include <stdio.h>
        long int a;
        float b;
        int set;
        char str[];

        // External Interrupt 0 service routine
        interrupt [EXT_INT0] void ext_int0_isr(void)
        {
        // Place your code here
        a++;
        }

        // External Interrupt 1 service routine
        interrupt [EXT_INT1] void ext_int1_isr(void)
        {
        // Place your code here
        a--;
        if(a<=0){
        a=0;
        }
        }



        // 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=In Func2=In Func1=In Func0=In
        // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
        PORTB=0x00;
        DDRB=0x00;

        // 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: Timer2 Stopped
        // Mode: Normal top=0xFF
        // OC2 output: Disconnected
        ASSR=0x00;
        TCCR2=0x00;
        TCNT2=0x00;
        OCR2=0x00;

        // External Interrupt(s) initialization
        // INT0: On
        // INT0 Mode: Rising Edge
        // INT1: On
        // INT1 Mode: Rising Edge
        GICR|=0xC0;
        MCUCR=0x0F;
        GIFR=0xC0;

        // Timer(s)/Counter(s) Interrupt(s) initialization
        TIMSK=0x00;

        // USART initialization
        // Communication Parameters: 8 Data, 1 Stop, No Parity
        // USART Receiver: Off
        // USART Transmitter: On
        // USART Mode: Asynchronous
        // USART Baud Rate: 2400
        UCSRA=0x00;
        UCSRB=0x08;
        UCSRC=0x86;
        UBRRH=0x01;
        UBRRL=0xA0;

        // 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;

        // Watchdog Timer initialization
        // Watchdog Timer Prescaler: OSC/16k


        #pragma optsize-
        WDTCR=0x1E;
        WDTCR=0x0E;
        #ifdef _OPTIMIZE_SIZE_
        #pragma optsize+
        #endif
        // Global enable interrupts
        #asm("sei&quot




        while (1)
        {

        b=a/7.28;
        b=b/100;

        sprintf(str,"Depth:%8.2f M",b);
        puts(str);

        delay_ms(500);
        set=toascii(12);
        putchar(set);

        }
        }

        [/code]
        ساختار برنامه شما درست نیست ... و مشخص است که برنامه خوب کار نمیکنه ...

        ببینید دوستان
        شکل خروجی انکدر اینجوریه ...


        حالا ما باید یه جوری این سیگنال ها رو شمارش کنیم ...
        اگر در شکل بالا تنها فاز A را به وقفه حساس به لبه متصل کنیم و فاز B را به پایه ورودی معمولی وصل کنیم ، 4حالت پدید می آید :

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


        زمانی که چپگرد باشد دو حالت پیش می آید :


        توی زیر برنامه وقفه دو تا شرط می گذاریم
        اگر ورودی ها مخالف بودند یکی کم کن
        در غیر این صورت یکی اضاف کن ...
        با دستور XOR میشه این کار رو کرد
        این کار رو شما بکنید همیشه میتوانید از موقعیت موتور با خبر باشید ...

        موفق باشید
        [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
        معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
        معرفی نرم افزار Codewizard PWM
        با من بیشتر آشنا شوید

        دیدگاه


          #19
          پاسخ : شمارنده پالس

          درست کار کرد مثل هلو

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

          دیدگاه


            #20
            پاسخ : شمارنده پالس

            نوشته اصلی توسط ICE-ELEC
            درست کار کرد مثل هلو

            گفتم من از DFFاستفاده کردم این هم همون برنامه هستش
            به هر صورت ... این رو گفتم که دوستان استفاده کنند ..

            راستی
            DFF چیه ؟؟
            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
            معرفی نرم افزار Codewizard PWM
            با من بیشتر آشنا شوید

            دیدگاه


              #21
              پاسخ : شمارنده پالس

              D flip Flop

              دیدگاه


                #22
                پاسخ : شمارنده پالس

                نوشته اصلی توسط ICE-ELEC
                D flip Flop
                آهان ...
                [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                معرفی نرم افزار Codewizard PWM
                با من بیشتر آشنا شوید

                دیدگاه

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