اطلاعیه

Collapse
No announcement yet.

اندازه گیری شیب با avr

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

    اندازه گیری شیب با avr

    سلام دوستان.من تازه کار با میکرو رو شروع کردم.یه برنامه نوشتم که ولتاژ مثلثی ورودی رو بخونه و شیب رو پیدا کنه و به صورت باینری شیب رو در 10 میلی ثانیه بده.تقریبا درس کار میکنه ولی من میخوام حداکثر شیب رو نشون بده و با عوض شدن نمودار و کاهش شیب عدد عوض نشه ولی با کاهش شیب عدد کاهش پیدا میکنه.عیبشو نمیتونم پیدا کنم.اگه کمکم کنین ممنون میشم. :question:
    /************************************************** ***
    کد:
    This program was produced by the
    CodeWizardAVR V2.05.3 Standard
    Automatic Program Generator
    © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date  : 9/2/2014
    Author : WWW.PARANDCO.COM
    Company : PARAND
    Comments: 
    
    
    Chip type        : ATmega8
    Program type      : Application
    AVR Core Clock frequency: 8.000000 MHz
    Memory model      : Small
    External RAM size    : 0
    Data Stack size     : 256
    *****************************************************/
    
    #include <mega8.h>
    
    #include <delay.h>
    #include <math.h>
    #define ADC_VREF_TYPE 0x60
    
    // Read the 8 most significant bits
    // of the AD conversion result
    unsigned char read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input | (ADC_VREF_TYPE & 0xff);
    // Delay needed for the stabilization of the ADC input voltage
    delay_us(10);
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCH;
    }
    
    // Declare your global variables here
    
    void main(void)
    {float adc_1;
    float adc_2,s0,s1,s3;
    int v1,v2,s=0,s2,s4;
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port B initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
    PORTB=0x00;
    DDRB=0xFF;
    
    // 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: 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 Clock frequency: 125.000 kHz
    // ADC Voltage Reference: AVCC pin
    // Only the 8 most significant bits of
    // the AD conversion result are used
    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x86;
    
    // SPI initialization
    // SPI disabled
    SPCR=0x00;
    
    // TWI initialization
    // TWI disabled
    TWCR=0x00;
    
    while (1)
       { 
        adc_1=read_adc(0);
        v1=adc_1*0.01953;
        delay_us(1250);
        adc_2=read_adc(0);
        v2=adc_2*0.01953;
        s0=(v2-v1);
        
        s3 = Math.Round(s0, 2, MidpointRounding.ToEven);
        s4=s3/0.01;
        if(s4>s)
        {
         s=s4;
        }
        PORTB=s;
        
        
    
       }
    }

    #2
    پاسخ : اندازه گیری شیب با avr

    ببخشید. مطمئنید این کدویژنه!!!!!

    Math.Round!!!!!!!

    این جور تابع مال زبان های شیئ گرا مثل C++ و C# هست.

    اصلا این توی کامپایلر من ترجمه نمیشه.

    اول تکلیف این را مشخص کنید.

    دیدگاه

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