![]() |
Thời gian ADC = ???
Em có một con pic6f877 dùng thạch anh ngoài 20MHz vậy thời lấy mẫu nhỏ nhất có thể được là bao nhiêu? (em muốn lấy mẫu và lưu vào một mảng)
Đọc trong datasheet thì thấy cái thời gian TACQ = Amplifier Settling Time + Hold Capacitor Charging Time + Temperature Coefficient = TAMP + TC + TCOFF mà không hiểu cho lắm, nó có liên quan gì đến thời gian lấy mẫu không, bác nào giải thích giúp, em xin cám ơn trước :D! |
tần số lấy mẩu lớn nhất là tần số thạch anh chia 2, nhỏ nhất là tần số thạch anh chia 64
ngoài ra p16f877a còn có thể sử dụng tần số lấy mẩu từ dao động R/C ( cái này không xài nên không biết rõ) |
Cám ơn bác đã trả lời.
Em muốn hỏi thêm là như bác nói thì với thạch anh 20M thì thời gian lấy mẫu nhỏ nhất là 0.4 us, vậy sao em lấy mẫu trong 20 us mà chỉ được có 3 mẫu, các bác xem code có gì sai không??? code: #include<16f877.h> #include <_df_.h> #use delay(clock = 20000000) #use rs232(baud = 9600,parity = n,xmit = pin_C6, rcv = pin_C7) int var_adc[]; int var_timer1_count = 0; int16 var_adc_count = 0; void init() { enable_interrupts(int_timer1); setup_timer_1(t1_internal | t1_div_by_2); set_timer1(65486); //T_timer = (65536-65486)*4*2/20M = 20us } #int_timer1 void interrupt_timer1(void) { var_timer1_count++; if(var_timer1_count != 2) printf("%lu\n\r",var_adc_count); set_timer1(65486); } void main(void) { enable_interrupts (GLOBAL); setup_adc(adc_clock_div_2); setup_adc_ports(AN0_AN1_VSS_VREF ); set_adc_channel(0); init(); while(true) { if(var_timer1_count == 2) { var_adc[var_adc_count++] = read_adc(); } } } |
Trích:
trích: { if(var_timer1_count == 2)//20us*2 { var_adc[var_adc_count++] = read_adc(); } |
không phải là 40 us vì mình chỉ lấy mẫu trong thời gian mà biến var_timer1_count = 2
có nghĩa là khoảng thời gian giữa lần ngắt thứ 2 và thứ 3 của timer1 => thời gian chỉ có 20 us. Hic, nhưng dù thế thì tại sao chỉ có được 3 mẫu thôi nhỉ??? |
Múi giờ GMT. Hiện tại là 09:10 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