اطلاعیه

Collapse
No announcement yet.

فرکانس متر

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

    فرکانس متر

    با سلام و خسته نباشید خدمت دوستان گل
    من این برنمامه فرکانس متر را دانلود کردم
    کد:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.05.0 Advanced
    Automatic Program Generator
    © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date  : 10/20/2011
    Author : www.Eca.ir *** www.Webkade.ir
    Company : 
    Comments: 
    
    
    Chip type        : ATmega8
    Program type      : Application
    AVR Core Clock frequency: 1.000000 MHz
    Memory model      : Small
    External RAM size    : 0
    Data Stack size     : 256
    *****************************************************/
    
    #include <mega8.h>
    #include <delay.h>
    #include <stdio.h>
    
    // Alphanumeric LCD Module functions
    #include <alcd.h>
    
    long int timer0_ov;
    long int in_freq;
    char buff[16],buff2[16]; 
    int humidity;
    
    // Timer 0 overflow interrupt service routine
    interrupt [TIM0_OVF] void timer0_ovf_isr(void)
    {
    timer0_ov++;
    
    }
    
    // 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: T0 pin Falling Edge
    TCCR0=0x06;
    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: Off
    // INT1: Off
    MCUCR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x01;
    
    // 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;
    
    // Alphanumeric LCD initialization
    // Connections specified in the
    // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
    // RS - PORTB Bit 0
    // RD - PORTB Bit 1
    // EN - PORTB Bit 2
    // D4 - PORTB Bit 4
    // D5 - PORTB Bit 5
    // D6 - PORTB Bit 6
    // D7 - PORTB Bit 7
    // Characters/line: 16
    lcd_init(16);
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
       {
       
       TCCR0=0x06;
       #asm("sei")
       delay_ms(50);
       #asm("cli")
       in_freq=20*(timer0_ov*256+TCNT0);
       sprintf(buff,"Freq=%d",in_freq);
       //delay_ms(250);
       lcd_clear();
       lcd_puts(buff);
       TCCR0=0x00;
       timer0_ov=0;
       TCNT0=0;
    میخوام یکم در موردش بهم توضیح بدبد
    فرمول in_freq=20*(timer0_ov*256+TCNT0); از کجا او مده؟

    #2
    پاسخ : فرکانس متر

    خب هر بار که شمارنده سر ریز میشه مقدار timer0_ov یکی اضافه میشه
    شمارنده هم از 0 تا 255 میشماره
    پس با هر بار سر ریز شدنش 256 تا پالس دریافت کرده
    پس مقدار timer0_ov در 256 ضرب میشه و با مقدار خوده شمارنده تو اون لحظه جمعش میکنه
    تو زمان 50 میلی ثانیه ، یعنی یک بیستم ثانیه برای همین تو 20 هم ضربش کرده

    نــــ_ـــمـــ_ــــیــــ_ـــدونـــــ_ــم.....

    دیدگاه


      #3
      پاسخ : فرکانس متر

      ممنون از راهنماینون دوست عزیز مرسی.

      دیدگاه

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