PIC Vietnam

Go Back   PIC Vietnam > Microchip PIC > Cơ bản về vi điều khiển và PIC

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

Cơ bản về vi điều khiển và PIC Những bài hướng dẫn cơ bản nhất để làm quen với vi điều khiển PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 21-11-2011, 10:33 AM   #1
ht2_hv
Nhập môn đệ tử
 
Tham gia ngày: Jan 2011
Bài gửi: 4
:
Question 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 !
ht2_hv vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-11-2011, 11:30 AM   #2
ladykiller
Đệ tử 3 túi
 
Tham gia ngày: Nov 2011
Bài gửi: 58
:
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õ)
ladykiller vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-11-2011, 04:23 PM   #3
ht2_hv
Nhập môn đệ tử
 
Tham gia ngày: Jan 2011
Bài gửi: 4
:
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();
}
}
}
ht2_hv vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-11-2011, 09:53 PM   #4
tdm
Đệ tử 7 túi
 
Tham gia ngày: May 2005
Bài gửi: 258
:
Trích:
Nguyên văn bởi ht2_hv View Post
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();
}
}
}
theo như code bạn viết thì 40us mới lấy mẫu một lần
trích:
{
if(var_timer1_count == 2)//20us*2
{
var_adc[var_adc_count++] = read_adc();
}
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề.
tdm vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 21-11-2011, 10:24 PM   #5
ht2_hv
Nhập môn đệ tử
 
Tham gia ngày: Jan 2011
Bài gửi: 4
:
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ỉ???
ht2_hv vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời

Tags
ladykiller, tdm


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à 09:08 AM.


Đượ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