Thông báo

Collapse
No announcement yet.

ADC trên AVR (10 bit) làm sao truyền ra TxD (UART)

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

  • #16
    Các bạn ơi!!! anh QueDuong ơi!!! ai biết chỉnh sửa lại giúp mình với. Mình mô phỏng rồi và chương trình bên dưới. Viết trên WinAVR. Ai biết test lại giúp mình. Mình biết ơn các bạn nhiều lắm
    Nguyên văn bởi engineering Xem bài viết
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    #include <stdio.h>

    #define AREF_MODE 0 //dien ap tham chieu ngoai, dien ap tren chan Vref
    #define AVCC_MODE (1<<REFS0) //dung dien ap chan AVcc lam dien ap tham chieu, chan Vref gan voi 1 tu dien
    #define INT_MODE (1<<REFS1)|(1<<REFS0) //dung dien ap tham chieu noi 2.56V, chan Vref gan voi 1 tu dien
    #define ADC_VREF_TYPE AREF_MODE //dinh nghia dien ap tham chieu

    uint16_t ADC_val;
    uint8_t ADC_val1, ADC_val2;

    //*********** chuong trinh con doc ADC theo tung kenh ********************
    uint16_t read_adc(unsigned char adc_channel){
    ADMUX=adc_channel|ADC_VREF_TYPE;
    ADCSRA|=(1<<ADSC); //bat dau chuyen doi
    loop_until_bit_is_set(ADCSRA,ADIF); //cho den khi nao bit ADIF==1
    return ADCW;
    }
    //***** chuong trinh con xu ly du lieu sau khi chuyen doi ADC (10 bit) ******
    void PORT_out(uint16_t val){
    uint16_t dvi, chuc, tram, nghin,temp_val;
    temp_val=val;

    nghin=temp_val/1000;
    temp_val-=(1000*nghin);
    tram=temp_val/100;
    temp_val-=(100*tram);
    chuc=temp_val/10;
    dvi=temp_val-(10*chuc);

    PORTB=(chuc<<4)+dvi; //xuat du lieu sau khi chuyen doi ADC ra LED de kiem tra
    PORTC=(nghin<<4)+tram;

    ADC_val1=ADC_val&0xFF; //lay byte thap,
    ADC_val2=ADC_val>>8; //byte cao cua du lieu ADC trong ADC_val de truyen UART

    }
    // chuong trinh con truyen du lieu bang UART ra chan TxD ket noi cong COM May tinh
    void uart_char_tx(unsigned char chr){
    while (bit_is_clear(UCSRA,UDRE)) {}; //khi bit UDRE=1 moi thoat khoi while, de kiem tra UDR empty?
    UDR=chr; //neu UDR empty, se ghi du lieu ra
    }
    volatile unsigned char u_Data;

    int main(void){

    //******** UART: set baud,57.6k ung voi f=8Mhz ***********
    UBRRH=0;
    UBRRL=8;

    //set khung truyen va kich hoat bo nhan du lieu
    UCSRA=0x00;
    UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //cho phep nhan, truyen, va ngat khi nhan du lieu xong
    sei(); //cho phep ngat toan cuc

    // ******************* setup ADC ***********************

    ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS0); //enable ADC, khong dung interrupt
    ADMUX=ADC_VREF_TYPE; //chon kieu dien ap tham chieu

    DDRB=0xFF; //PORTB la output PORT, for LED
    DDRC=0xFF; //PORTC la output PORT, for LED


    while (1){
    ADC_val=read_adc(0);
    PORT_out(ADC_val); //xuat du lieu ADC ra PORT (noi voi LED) de kiem tra ADC dung khong?
    _delay_ms(100);
    uart_char_tx(ADC_val1); //truyen byte thap du lieu cua ADC_val
    uart_char_tx(ADC_val2); //truyen byte cao du lieu cua ADC_val
    _delay_ms(100);
    }
    }
    ISR(SIG_UART_RECV){ //trinh phuc vu ngat USART hoan tat nhan
    u_Data=UDR;
    uart_char_tx(u_Data);
    }
    // ************************ The End ***************************
    Mình có gửi kèm toàn bộ file mô phỏng ở Link dưới này. Các bạn vui lòng kiểm tra giúp mình nha!!!

    Link download: http://www.2shared.com/file/8q9LNKIj/ADC_UART.html
    Last edited by engineering; 20-11-2011, 12:27.

    Comment


    • #17
      Nguyên văn bởi engineering Xem bài viết
      Các bạn ơi!!! anh QueDuong ơi!!! ai biết chỉnh sửa lại giúp mình với. Mình mô phỏng rồi và chương trình bên dưới. Viết trên WinAVR. Ai biết test lại giúp mình. Mình biết ơn các bạn nhiều lắm


      Mình có gửi kèm toàn bộ file mô phỏng ở Link dưới này. Các bạn vui lòng kiểm tra giúp mình nha!!!

      Link download: 2shared - download ADC_UART.rar
      chương trình ADC mô phỏng và xuất ra UART hoàn toàn chính xác chạy chuẩn rồi còn mong muốn gì hơn nữa ???
      Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

      Comment

      Về tác giả

      Collapse

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

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

      Collapse

      Đang tải...
      X