ADC 10 bit 18F4550
Các bác cho em hỏi một chút về ADC 10 bit của 18F4550. Đối với ADC 8 bit thì không vấn đề j nhưng với ADC 10bit thì khi cho hiển thị lên LCD nó chạy linh tinh cả và chữ số hàng nghìn bị lỗi. Em post cả code lên. Bác nào biết chỉ dùm em cái. Thanks.
Code:
#include <18f4550.h> |
Code của bạn có vài vấn đề:
- hàm lcd_putc() của CCS C chỉ nhận đối số là một ký tự, do đó các lệnh gọi hàm của bạn với đối số chuỗi sẽ cho kết quả không dự đoán được - hàm Display() của bạn không cần viết phức tạp như vậy, chỉ cần dùng hàm itoa() của CCS C để chuyển số nguyên data thành chuỗi ký tự, và lần lượt hiển thị các ký tự đó bằng hàm lcd_putc(). Theo tôi, giữa các lần gọi hàm lcd_putc() nên có thời gian trễ vài chục đến 100 us, vì LCD không xử lý nhanh như vi điều khiển. Thân, |
Cách đơn giản nhất ko cần phải viết nhiều code là dùng hàm printf
printf(lcd_putc, "Bien tro: %.4lu", x); printf là một hàm định dạng chuỗi mạnh của C. CCS dịch hàm printf rất hiệu quả. |
Trích:
Thân, |
Trích:
|
Cho mình hỏi các giá trị nghìn, trăm, chục và đơn vị của bạn tại sao lại phải +48.
|
Trích:
|
Nhân tiện có người hỏi về ADC, các bác cho em hỏi giùm 1 chút.
16F887 có 1 ADC 10bit với 14 kênh AN0 => AN13. Với lệnh Read_ADC mỗi lần chỉ đọc được 1 giá trị từ chân đã set trong lệnh Set_ADC_channel ( channel ) trước đó.Với channel channel có 0 -7 : 0-chân A0(AN0)=> 7-chân E2(AN7) (theo tài liệu của bác Trần Xuân Trường BK HCM trên forum) như vậy là thiếu có đúng không ? Đáng nhẽ phải channel phải từ 0=>13 tương ứng với 13 kênh chứ Hàm delay để trả về kết quả đúng là 10 micro giây hay 10 mili giây thế các bác ??? |
Adc
Trích:
Còn hàm delay thì tùy bạn dùng delay_ms hay là delay_us thì nó trả về micro giây hay mili giây. Sẵn tiện cảm ơn tungnh đã giải đáp thắc mắc của mình. |
[QUOTE=yukinohana;38859]Về cái ADC nếu muốn xem pic có bao nhiêu chân adc thì chỉ cần đọc datasheet của con pic đó là được rồi. Con 16f877a thì chỉ có 8 kênh adc từ an0 đến an7 thôi bạn àh.
Còn hàm delay thì tùy bạn dùng delay_ms hay là delay_us thì nó trả về micro giây hay mili giây. Ko, em nhìn rõ ràng bác Trường viết là 16F887 nên mới thắc mắc mà, cũng có thể là sơ suất gõ thiếu chữ A. Còn cái trễ em hỏi là sau khi thực hiện Set_ADC_channel ( channel ) đợi trễ một thời gian rồi mói thực hiện hàm read_ADC ( ) để đảm bảo kết quả đúng. Trong tài liệu bác trường nói là 10 micro giây nhưng trong 1 số bài hướng dẫn khác lại không phải là con số này nên em thắc mắc là bao nhiêu thì chính xác ? |
Múi giờ GMT. Hiện tại là 01:05 AM. |
Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam