PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC > Những câu hỏi thường gặp

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Tìm Kiếm Bài Trong Ngày Ðánh Dấu Ðã Ðọc Vi điều khiển

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

Ðề tài đã khoá
 
Ðiều Chỉnh Xếp Bài
Old 04-11-2008, 06:48 PM   #1
vmt.dttt
Đệ 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!
vmt.dttt vẫn chưa có mặt trong diễn đàn  
Old 04-11-2008, 07:18 PM   #2
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
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
do_sth1, do_sth2, do_sth3, và do_sth4 là các công việc tương ứng ở mỗi trường hợp.

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
namqn vẫn chưa có mặt trong diễn đàn  
Old 05-11-2008, 02:48 PM   #3
vmt.dttt
Đệ tử 1 túi
 
Tham gia ngày: Nov 2007
Bài gửi: 11
:
Trích:
Nguyên văn bởi namqn View Post
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
do_sth1, do_sth2, do_sth3, và do_sth4 là các công việc tương ứng ở mỗi trường hợp.

Thân,
Ah`, trước hết xin cảm ơn bạn namqn...
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!
vmt.dttt vẫn chưa có mặt trong diễn đàn  
Old 05-11-2008, 04:35 PM   #4
love_ac
Đệ 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 !!
love_ac vẫn chưa có mặt trong diễn đàn  
Old 05-11-2008, 05:58 PM   #5
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
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
namqn vẫn chưa có mặt trong diễn đàn  
Ðề tài đã khoá

Ðiều Chỉnh
Xếp Bài

Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 05:39 PM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam