Thông báo

Collapse
No announcement yet.

Cần giúp đỡ về đọc adc của mega32

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

  • Cần giúp đỡ về đọc adc của mega32

    mình viết đoạn chương trình đọc dữ liệu qua ADC của mega32

    code dọc adc:
    unsigned int ADC_doc(unsigned char kenh)
    {

    ADMUX=0X40;// CHON NGUON SO SANH LA NGUỒN NGOÀI TẠI CHÂN 31
    ADMUX|=kenh;//CHON KENH
    delay_us(10);
    ADCSRA|=ADEN;
    ADCSRA|=ADSC; //ADSC = 1: start
    while ((ADCSRA & ADIF)==0);
    ADCSRA|=ADIF;
    delay_ms(100);
    return ADCW;
    }

    //================================================== ===============
    đoạn code gọi ADC và hiển thị lên lcd
    }
    lcd_clear();
    k=ADC_doc(R_CENTER);
    doi_5so(k);
    lcd_gotoxy(0,0);
    lcd_putsf("doc adc R_CENTER");
    for(i=0;i<5;i++)
    {
    lcd_gotoxy(i,1);
    data[i]=data[i]+'0';
    lcd_putchar(data[i]);
    }
    delay_ms(5000);
    ctrinh con doi_5so

    void doi_5so(unsigned int dlieu)
    {
    unsigned char i;
    for(i=0;i<5;i++)
    {
    data[i]=dlieu%10;
    dlieu=dlieu/10;
    }
    }

    Các bác xem còn thiếu hay sai gì nữa không mà em thây nó hiện lên lcd những con số không đúng.
    em có đo chân tại ngõ vào(R_CENTER) của avr thì thấy có điện áp thay đổi nhưng nó vẫn hiển thị một con số nhất định không thay đổi.
    Rồi tự nhiên bây giờ nó chỉ hiện toàn số 0 mặc dù điện áp ở chân vào của nó có thay đổi

    Các bác xem giúp em với. em cảm ơn nhiều!!!!

  • #2
    Chia sẻ cho bạn 1 cách đọc giá trị adc đưa ra hiển thị lcd cũng rất đơn giản nữa nè
    /************************************************** ***
    This program was produced by the
    CodeWizardAVR V2.03.4 Standard
    Automatic Program Generator
    © Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
    HP InfoTech, Development Tools for Microcontrollers, C Compilers, In-System Programmers

    Project :
    Version :
    Date : 14/01/2012
    Author :
    Company :
    Comments:


    Chip type : ATmega16
    Program type : Application
    Clock frequency : 8.000000 MHz
    Memory model : Small
    External RAM size : 0
    Data Stack size : 256
    ************************************************** ***/

    #include <mega16.h>
    unsigned char x,a,b,c;

    #asm
    .equ __lcd_port=0x18 ;PORTB
    #endasm
    #include <lcd.h>

    #include <delay.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 & 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 ADCW;
    }


    void main(void)
    {
    PORTA=0x00;
    DDRA=0x00;

    PORTB=0x00;
    DDRB=0x00;

    PORTC=0x00;
    DDRC=0x00;

    PORTD=0x00;
    DDRD=0x00;

    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;

    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;

    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;

    MCUCR=0x00;
    MCUCSR=0x00;

    TIMSK=0x00;

    ACSR=0x80;
    SFIOR=0x00;

    ADMUX=ADC_VREF_TYPE & 0xff;
    ADCSRA=0x83;

    lcd_init(16);

    while (1)
    {
    x=read_adc(0); // doc gia tri adc kenh 0
    a=x/100;
    b=(x/10)%10;
    c=x%10;
    lcd_gotoxy(0,0);
    lcd_putchar(a+48);
    lcd_putchar(b+48);
    lcd_putchar(c+48);
    };
    }
    Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
    Liên hệ sđt: 0902.808.371

    Comment


    • #3
      cám ơn bạn đã góp ý,cái mình đang cần quan tâm là làm sao để đọc được adc, cái ctrinh của mình cũng hiển thị được rồi, nhưng mà không biết adc đã đọc được chưa, như mình đã nói ở trên, nó chỉ hiển thị được một số nhất định trong khi điện áp vào có sự thay đổi, lúc trước thì nó hiển thị lên một số cụ thể(nhưng vẫn không đúng) còn bây jo tự nhiên chỉ hiện lên toàn số 0, trong khi không có thay đổi gì cả.

      Comment


      • #4
        Chú ý chân AVCC, AREF của VDK đã nối lên VCC chưa? Mà tốt nhất là lấy đầu ra của biến trở nối vào chân ADC rồi chỉnh thử xem.
        Nhận làm mạch, ĐAMH sử dụng vđk Pic & AVR tại tp.HCM
        Liên hệ sđt: 0902.808.371

        Comment


        • #5
          cám ơn các bác đã góp ý, em đọc được rồi, không biết nguyên nhân từ đâu, tự nhiên sáng nay mở lên thi thấy nó đọc đúng.

          đời còn nhiều cái hên xung quanh cái xui, chịu khó tìm tòi ắt sẽ ra cái gì đó.........

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...
          X