đọc Nhiều Kênh ADC Pic16f887 - Dien Tu Viet Nam

  • Đăng ký hoặc đăng nhập
    • Logging in... Ghi Nhớ? Ðăng Nhập Forgot password or user name? hoặc Đăng ký
    • Log in with Facebook
  • Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
Thông báo Collapse No announcement yet. đọc nhiều kênh ADC pic16f887 Collapse X Collapse
  • Bài viết
  • Hoạt động gần đây
  • Tìm kiếm
  • Trang of 1
  • Lọc
  • Giờ All Time hôm nay Last Week Last Month
  • Show All Discussions only Photos only Videos only Links only Polls only Events only
Filtered by: Clear All new posts Trước template Next
  • kingsun1991 kingsun1991 Thành viên mới
    • Tham gia: Oct 2010
    • Bài viết: 15
    • Share
    • Tweet
    #1

    đọc nhiều kênh ADC pic16f887

    06-06-2012, 22:56 Chào các bạn! Mình viết code đọc 4 kênh ADC hiển thị lên LCD, Trong chương trình con adc_convert() tham số truyền vào là kênh ADC đươc lựa chọn, nhưng mình chỉ đọc được kênh 0 thôi, không đọc được các kênh khác. Các bạn xem giúp mình với #include <htc.h> __CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT & SWBOREN & IESODIS & FCMDIS & LVPDIS & DEBUGDIS); //1st config. Word #define rs 0 #define e 1 #define lcd_data PORTB #define rs_1 (PORTC|=(1<<rs)) #define rs_0 (PORTC&=(~(1<<rs)) #define pule_e (PORTC|=(1<<e); PORTC&=(~(1<<e)) //ham chuyen doi adc unsigned int adc_convert (unsigned char channel) { int adc=0; ADCON0|= (channel<<3); ADCON0|= (1<<1);// bat dau chuyen doi while (ADCON0&0x04);// cho chuyen doi xong adc=ADRESH; adc<<=8; adc|=ADRESL; return adc; } //ham xuat lenh ra lcd void lcd_command(unsigned char command) { lcd_data=command; rs_0; pule_e; _delay(10000); } //ham xuat ki tu ra lcd void lcd_char (unsigned char chr) { lcd_data=chr; rs_1; pule_e; _delay(10000); } //ham hien thi 1 chuoi tren lcd void lcd_display(char row, char col, char*s) { switch (row) { case 0: lcd_command(0x80+col); break; case 1: lcd_command(0xC0+col); break; } while (*s!=0) lcd_char(*s++); } //ham khoi tao lcd void init_lcd() { lcd_command(0x38); lcd_command(0x0C); lcd_command(0x38); lcd_command(0x01); _delay(10000); } void main(void) { int temp; ANSEL=0xFF; ANSELH=0x00; TRISB=0x00; TRISC=0x00; TRISA=0xFF; ADCON0=0x01; ADCON1=0xB1;// Vref+ = AN3 init_lcd(); while(1) { temp=adc_convert(0); lcd_display(0,0,"nhietdo:"); lcd_char((temp/100)+ 0x30); lcd_char(((temp%100)/10) + 0x30); lcd_char((temp%10) + 0x30); _delay(100000); }; } Tags: None
  • caovanhuong caovanhuong Thành viên tích cực
    • Tham gia: Oct 2008
    • Bài viết: 1800
    • Share
    • Tweet
    #2 06-06-2012, 23:07 Nguyên văn bởi kingsun1991 Xem bài viết Chào các bạn! Mình viết code đọc 4 kênh ADC hiển thị lên LCD, Trong chương trình con adc_convert() tham số truyền vào là kênh ADC đươc lựa chọn, nhưng mình chỉ đọc được kênh 0 thôi, không đọc được các kênh khác. Các bạn xem giúp mình với #include <htc.h> __CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT & SWBOREN & IESODIS & FCMDIS & LVPDIS & DEBUGDIS); //1st config. Word #define rs 0 #define e 1 #define lcd_data PORTB #define rs_1 (PORTC|=(1<<rs)) #define rs_0 (PORTC&=(~(1<<rs)) #define pule_e (PORTC|=(1<<e); PORTC&=(~(1<<e)) //ham chuyen doi adc unsigned int adc_convert (unsigned char channel) { int adc=0; ADCON0|= (channel<<3); ADCON0|= (1<<1);// bat dau chuyen doi while (ADCON0&0x04);// cho chuyen doi xong adc=ADRESH; adc<<=8; adc|=ADRESL; return adc; } //ham xuat lenh ra lcd void lcd_command(unsigned char command) { lcd_data=command; rs_0; pule_e; _delay(10000); } //ham xuat ki tu ra lcd void lcd_char (unsigned char chr) { lcd_data=chr; rs_1; pule_e; _delay(10000); } //ham hien thi 1 chuoi tren lcd void lcd_display(char row, char col, char*s) { switch (row) { case 0: lcd_command(0x80+col); break; case 1: lcd_command(0xC0+col); break; } while (*s!=0) lcd_char(*s++); } //ham khoi tao lcd void init_lcd() { lcd_command(0x38); lcd_command(0x0C); lcd_command(0x38); lcd_command(0x01); _delay(10000); } void main(void) { int temp; ANSEL=0xFF; ANSELH=0x00; TRISB=0x00; TRISC=0x00; TRISA=0xFF; ADCON0=0x01; ADCON1=0xB1;// Vref+ = AN3 init_lcd(); while(1) { temp=adc_convert(0); lcd_display(0,0,"nhietdo:"); lcd_char((temp/100)+ 0x30); lcd_char(((temp0)/10) + 0x30); lcd_char((temp) + 0x30); _delay(100000); }; } tôi không hiểu cách viết này. tuy nhiên bạn tham khảo cái này viết cho bằng CCS không biết có thể áp dụng cho bạn được không. Code: set_ADC_channel(0); // chọn đọc giá trị ADC kênh 0 delay_us(10); // trì hoãn 10us adc1=read_adc(); // gán giá trị ADC vào biến adc1 set_ADC_channel(1); delay_us(10); adc2=read_adc(); set_ADC_channel(2); delay_us(10); adc3=read_adc(); set_ADC_channel(3); delay_us(10); adc4=read_adc();

    Comment

    Gửi bài viết Huỷ bỏ
  • kingsun1991 kingsun1991 Thành viên mới
    • Tham gia: Oct 2010
    • Bài viết: 15
    • Share
    • Tweet
    #3 06-06-2012, 23:11 Nguyên văn bởi caovanhuong Xem bài viết tôi không hiểu cách viết này. tuy nhiên bạn tham khảo cái này viết cho bằng CCS không biết có thể áp dụng cho bạn được không. Code: set_ADC_channel(0); // chọn đọc giá trị ADC kênh 0 delay_us(10); // trì hoãn 10us adc1=read_adc(); // gán giá trị ADC vào biến adc1 set_ADC_channel(1); delay_us(10); adc2=read_adc(); set_ADC_channel(2); delay_us(10); adc3=read_adc(); set_ADC_channel(3); delay_us(10); adc4=read_adc(); Đây là môn học của mình, vài bữa nữa thi rồi, thi người ta không cho sữ dụng bất cứ hàm nào trừ hàm delay(). Vì thế nên dùng trình biên dịch nào cũng vậy hà bạn

    Comment

    Gửi bài viết Huỷ bỏ
  • caovanhuong caovanhuong Thành viên tích cực
    • Tham gia: Oct 2008
    • Bài viết: 1800
    • Share
    • Tweet
    #4 06-06-2012, 23:25 Nguyên văn bởi kingsun1991 Xem bài viết Đây là môn học của mình, vài bữa nữa thi rồi, thi người ta không cho sữ dụng bất cứ hàm nào trừ hàm delay(). Vì thế nên dùng trình biên dịch nào cũng vậy hà bạn - ý là tôi muốn nói đến cái thuật toán cho bạn. bạn chọn kệnh để đọc sau đó lưu vào 1 biến, sau đó chọn kênh 2 và lưu vào biến 2 và cuối cùng là chọn kênh thứ 4 và lưu vào biến 4. - cái của bạn viết hình như là mới đầu đọc kênh 0 sau đó hiển thị ra LCD, chờ 10s sau lại đọc kênh 1 rồi hiển thị ra LCD và lần lượt là 4 kênh phải không.

    Comment

    Gửi bài viết Huỷ bỏ
  • kingsun1991 kingsun1991 Thành viên mới
    • Tham gia: Oct 2010
    • Bài viết: 15
    • Share
    • Tweet
    #5 07-06-2012, 01:22 um đúng, đọc rồi hiển thị luôn, sau đó mới tiếp tục kênh khác

    Comment

    Gửi bài viết Huỷ bỏ
Trước template Next Về tác giả Collapse kingsun1991 Tìm hiểu thêm về kingsun1991 Bài viết mới nhất Collapse
  • torasung Tài liệu biến tần Delta VFD007M43B bởi torasung Chào anh em, Mình đang tìm hiểu và cấu hình một con biến tần Delta model VFD037E43A dùng cho động cơ công suất nhỏ, ứng dụng băng tải và quạt. Trước đây mình chủ yếu làm với vài dòng khác của Delta nhưng chưa dùng nhiều model này, nên muốn...
    • Channel: Điện tử công nghiệp
    Hôm qua, 09:13
  • nguyendinhvan Trả lời cho Vấn đề về tốc độ quay bởi nguyendinhvan Sử dụng động cơ servor, hoặc lắp thêm một cái encoder vào động cơ bước. Encoder sẽ kiểm soát động cơ có quay hoặc đứng im.
    • Channel: Điện tử truyền hình
    14-12-2025, 19:50
  • Andrea14 Vấn đề về tốc độ quay bởi Andrea14 Chào mọi người, Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
    • Channel: Điện tử truyền hình
    12-12-2025, 12:42
Xem toàn bộ Copyright © 2000-2025 Dientuvietnam.net. Founded by BinhAnh. Developed by R&P. All rights reserved. Forum software powered by vBulletin® Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Múi giờ GMT+7. Trang này được tạo vào lúc 10:20. Đang tải... Ðồng ý Không OK OK Huỷ bỏ X

Từ khóa » Bộ Adc Trong Pic18f4520 Có Bao Nhiêu Kênh