![]() |
|
Tài trợ cho PIC Vietnam |
Những câu hỏi thường gặp Những lỗi cơ bản thường gặp khi làm việc với PIC hoặc những vấn đề cơ bản nhất thường được hỏi trong những năm qua |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
![]() |
#1 |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 11
: |
Hỏi về Lập trình chuyển đổi tín hiệu ADC trong PIC 18F4431
Chào các sư huynh đệ, mình muốn hỏi chút về PIC 18F4431 thế này, mong mọi người giúp đỡ.
Mình muốn thu tín hiệu tương tự từ cảm biến bên ngoài vào VDK PIC, VD từ 0 - 5V, tín hiệu mình cần nhiều mức. VD là từ 0- 1.2V, 1.2V - 2.1V ; 2.1V - 3V; 3V- 3.6 V .... ...... 3.6 -5V ====> Mình phân nó ra làm 2 TH thé này: TH1: //******************************************* 0V.........................2.1V....3V.......3.6V.. .............5V |--------------------*------*-----*---------------| |<------Mức 1------>| |<--------Mức 2----------->| |<------------Mức 3------------->| |-------------------Mức 4------------------------>| //******************************************* TH2: //******************************************* 0V.........................2.1V.....3V....3.6V.... ..............5V |--------------------*------*-----*---------------| |<------Mức 1------>| -------------------->|Mức 2| --------------------------->|Mức 3| ----------------------------------->|----Mức 4----| //******************************************* Nếu ta thu được mức là 4 V chẳng hạn, thì lập trình thé nào đẻ nó nhận ra là nó đang nằm trong mức 4 (đối với TH2) - Mình làm trên CCS, giải thuật lập trình trong TH này sẽ như thế nào. Để nó nhận biết tất cả các mức điện áp thu đuọc ?? ............ Cảm ơn! |
![]() |
![]() |
#2 |
Trưởng lão PIC bang
|
Bạn dùng các cấu trúc so sánh lồng nhau. Ví dụ, có 3 ngưỡng cần phát hiện là T1 < T2 < T3, bạn có thể viết như sau:
Code:
if (tin_hieu < T1) do_sth1; //0 <= tin_hieu < T1 else-if (tin_hieu < T2) do_sth2; //T1 <= tin_hieu < T2 else-if (tin_hieu < T3) do_sth3; //T2 <= tin_hieu < T3 else do_sth4; //T3 <= tin_hieu Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
#3 | |
Đệ tử 1 túi
Tham gia ngày: Nov 2007
Bài gửi: 11
: |
Trích:
Cho hỏi thêm các biến T1, T2, T3 ở trên của bạn, khai báo ??? Dùng từ 0 - 255 hay thế nào??? Và trong TH này liệu có ok không???? Hình như bạn không hiểu ý mình lắm. Ý mình là: [Thu được tín hiệu tương tự ... đọc và xử lý tín hiệu... và xuất ra là tín hiệu số (Cuối cùng).] - Trong TH này liệu có sử dụng ADC?? và phải sử dụng nó thé nào??? VD: Thu tín hiệu đầu vào là tín hiệu tương tự, và xuất tín hiệu ra vào port B ... .... #device 18f4431*=16 adc=8 #use delay (clock = 20000000) int8 adc; //====================== main() { setup_adc (adc_clock_internal); setup_adc_ports(an0); set_adc_chanel(0); delay_ms(10); while(1) { adc=read_adc(); output_d(adc); } } //============================================ - Vậy câu hỏi đặt ra là thằng ADC nó xuất tín hiệu đầu ra là thẳng PORT B là từ 0-255 trong TH sử dụng 8 bít này ?? - Tín hiệu thu vào và ADC xử lý là dải từ 0 - 255 ??? Cám ơn! |
|
![]() |
![]() |
#4 |
Đệ tử 4 túi
Tham gia ngày: Apr 2008
Nơi Cư Ngụ: Hanoi
Bài gửi: 78
: |
anh namqn lại mệt rồi
Cáo lỗi em spam !! |
![]() |
![]() |
#5 |
Trưởng lão PIC bang
|
Các ngưỡng T1, T2, T3 là các hằng số ứng với các điện áp 2.1 V, 3 V, ... mà bạn đã nêu ra ở câu hỏi. Tùy vào việc bạn dùng bao nhiêu bit trong kết quả chuyển đổi ADC mà các hằng số này có các giá trị cụ thể nào đó.
Với vi điều khiển (là các bộ xử lý dữ liệu số), mọi tín hiệu tương tự cần được xử lý sẽ được biểu diễn ở dạng dữ liệu số bên trong vi điều khiển. Tuy nhiên, nếu bài toán của bạn chỉ đơn giản như đã nêu ở post #1 thì không nhất thiết phải dùng ADC. Bạn đã đặt câu hỏi về cách phát hiện giá trị ngõ vào analog nằm trong các tầm giá trị khác nhau, và tôi đã trả lời cho câu hỏi đó của bạn. Với PIC18F4431, kết quả chuyển đổi ADC là 10-bit. Bạn có thể yêu cầu trình biên dịch C chỉ lấy 8-bit cao nhất, hoặc dùng cả 10-bit (code ví dụ của bạn dùng 8-bit). Nếu chỉ dùng 8-bit thì tất nhiên tầm giá trị là 0 .. 255. Thân,
__________________
Biển học mênh mông, sức người có hạn. Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau: http://www.picvietnam.com/forum/showthread.php?t=1263 |
![]() |
![]() |
|
|