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

      • bqviet
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi bqviet
        Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
        06-12-2025, 17:17
      • nguyendinhvan
        Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
        bởi nguyendinhvan
        Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
        05-12-2025, 19:59
      • afrendly
        Trả lời cho Đấu tắt điện cho máy tính bảng
        bởi afrendly
        Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
        04-12-2025, 01:27
      • nick22
        Trả lời cho Máy điện châm ?
        bởi nick22
        Đúng như bạn nói, máy điện châm hiện nay trên thị trường đã khá đa dạng về mẫu mã, chức năng và giá thành.
        01-12-2025, 13:23
      Đang tải...
      X