![]() |
|
Tài trợ cho PIC Vietnam |
dsPIC - Bộ điều khiển tín hiệu số 16-bit Theo dự kiến của Microchip, vào khoảng năm 2011 dsPIC sẽ có doanh số lớn hơn PIC |
![]() |
|
Ðiều Chỉnh | Xếp Bài |
|
![]() |
#1 | |
Trưởng lão PIC bang
|
Trích:
Tôi sẽ gợi ý cách làm cho bạn, còn bạn sẽ viết thử code. Nếu code chạy không đúng yêu cầu, bạn có thể post lên diễn đàn để nhờ hướng dẫn. Xin lỗi là tôi không giải bài tập giúp bạn. Bạn có thể giải quyết vấn đề bằng nhiều cách, tôi chỉ gợi ý 2 cách: Cách 1 - Dùng ADC như bình thường để lấy mẫu 2 kênh analog ở tốc độ của tín hiệu cần lấy mẫu nhanh hơn. Cứ 10 mẫu tốc độ thì bạn tính trung bình 10 mẫu dòng điện, và coi đó là 1 mẫu dòng điện cần lấy. Cách 2 - Dùng một timer để định thời gian lấy mẫu, cũng cho tín hiệu có tốc độ lấy mẫu cao hơn. Dùng thêm một biến đếm, chỉ lấy mẫu riêng tín hiệu tốc độ ở 9 lần đầu, lần thứ 10 thì lấy mẫu cả tốc độ lẫn dòng điện. Nếu bạn chưa theo link trong chữ ký của tôi thì bạn có thể xem qua để có thể đặt các câu hỏi một cách hiệu quả hơn. 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 |
|
![]() |
![]() |
![]() |
#2 |
Nhập môn đệ tử
Tham gia ngày: Mar 2008
Bài gửi: 4
: |
Đây là đoạn chương trình lấy mẫu mình thực hiện theo cách 2 của bạn :
Code:
/* Chuong trinh con khai bao ADC */ void Init_ADC(void) { ADPCFG = 0xFFFC ; // CHAN RB0;RB1; LA CHAN VAO ANALOG ADCON1 = 0x004C ; // TIMER 3 CHAM DUT VIEC LAY MAU VA KICH HOAT CHUYEN DOI ADCON2 = 0x0500; ADCHS = 0; // KENH 0 DOC TIN HIEU GIUA AN0 VA AVSS ADCSSL = 3; ADCON3 = 0x0002; // TAD = 2*TCY // chu ky lay mau cua dong dien TMR3 = 0; PR3 = 0x007D; // 1ms LAY MAU T3CON = 0x8010; // Cho phep bat dau dem ,pres cale 1:64 _ADIF = 0; // XOA CO NGAT _ADIE = 1; // BAT CO CHO PHEP NGAT _ADON = 1; // BAT MODULE ADC _ASAM = 1; // CHE DO LAY MAU TU DONG /* Thoi gian lay mau dong do T3 quy dinh; } /* Chuong trinh con phuc vu ngat ADC */ void _ISR _ADCInterrupt(void) { dong_dien_thuc = ADCBUF0 ; // gia tri dong dien do duoc n++ ; while (n >= 10) { n = 0; toc_do_thuc = ADCBUF1 ; // gia tri toc do do duoc } _ADIF = 0 ; } thay đổi nội dung bởi: bktb, 10-03-2008 lúc 04:08 PM. |
![]() |
![]() |
![]() |
Ðiều Chỉnh | |
Xếp Bài | |
|
|