Thông báo

Collapse
No announcement yet.

Ai giúp dùm code :Tạo project để đo cường độ tín hiệu.

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • Ai giúp dùm code :Tạo project để đo cường độ tín hiệu.

    Mình mới tập viết C trên AVR Atmega32,xin mọi người giúp đỡ code này dùm,cảm ơn nhiều:

    + Dùng ADC trong atmega32 để tìm Vmax của tín hiệu đầu vào.
    + Tần số của tín hiệu dao động từ 1 -> 10KHz, tín hiệu tối đa đầu vào nhỏ hơn 5V.
    + Sử dụng LCD để hiển thị kết quả Vmax.

  • #2
    Mình có đoạn code hiển thị giá trị đầu vào của tín hiệu,nhưng chưa tìm được GIÁ TRỊ LỚN NHẤT,bạn nào sửa dùm mình với,thx nhiều:

    #include <mega32.h>

    // Standard Input/Output functions
    #include <stdio.h>
    #include <delay.h>
    #include <stdlib.h>

    #define ADC_VREF_TYPE 0x00

    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=adc_input|ADC_VREF_TYPE;
    // Start the AD conversion
    ADCSRA|=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA & 0x10)==0);
    ADCSRA|=0x10;
    return ADCW;
    }

    // Declare your global variables here
    unsigned int adc_value;
    float input_voltage;

    void main(void)
    {
    // Declare your local variables here
    char buff[10];

    // Input/Output Ports initialization
    // Port A 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
    PORTA=0x00;
    DDRA=0x00;

    // 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
    // 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
    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
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    // Timer 1 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: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;

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

    // USART initialization
    // Communication Parameters: 8 Data, 1 Stop, No Parity
    // USART Receiver: On
    // USART Transmitter: On
    // USART Mode: Asynchronous
    // USART Baud rate: 9600
    UCSRA=0x00;
    UCSRB=0x18;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x2F;

    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;

    // ADC initialization
    // ADC Clock frequency: 115.200 kHz
    // ADC Voltage Reference: AREF pin
    ADMUX=ADC_VREF_TYPE;
    ADCSRA=0x86;

    while (1)
    {
    adc_value = read_adc(0);
    printf("ADC value = %d\n\r",adc_value);
    input_voltage = ((float)adc_value*5)/1023;
    ftoa(input_voltage, 3, buff);
    printf("Input voltage = %sV\n\r", buff);
    delay_ms(1000;
    };
    }

    Comment


    • #3
      Nên làm thêm một mạch tách sóng đỉnh (chỉnh lưu lấy đỉnh) trước khi cho vào ADC thì sẽ dễ hơn.
      p/s:Tín hiệu bạn định đo là tín hiệu gì, một chiều hay xoay chiều???
      Last edited by Acxen_lupine; 04-12-2013, 10:46.
      Hôm nay trời nắng chang chang.
      Mèo con đi học chẳng mang thứ gì.
      Chỉ mang một cái bút chì.
      Và mang một mẩu bánh mì con con.

      Comment


      • #4
        Tín hiệu của mình lấy từ các dạng sóng sin,vuông,tam giác từ Function Generator trong phòng Lab

        Comment

        Về tác giả

        Collapse

        quangdo0783 Tìm hiểu thêm về quangdo0783

        Bài viết mới nhất

        Collapse

        Đang tải...
        X