Tôi đang phát triển một bộ phân tích logic nhỏ với 7 đầu vào. Thiết bị mục tiêu của tôi là một ATmega168
tốc độ xung nhịp 20 MHz. Để phát hiện các thay đổi logic, tôi sử dụng các ngắt thay đổi pin. Bây giờ tôi đang cố gắng tìm ra tỷ lệ mẫu thấp nhất tôi có thể phát hiện ra những thay đổi pin này. Tôi đã xác định giá trị tối thiểu 5,6 cụm (178,5 kHz). Mỗi tín hiệu dưới mức này tôi không thể nắm bắt chính xác.
Mã của tôi được viết bằng C (avr-gcc). Thói quen của tôi trông như:
ISR()
{
pinc = PINC; // char
timestamp_ll = TCNT1L; // char
timestamp_lh = TCNT1H; // char
timestamp_h = timerh; // 2 byte integer
stack_counter++;
}
Thay đổi tín hiệu bắt được của tôi nằm ở pinc
. Để bản địa hóa nó tôi có một giá trị dấu thời gian dài 4 byte.
Trong biểu dữ liệu tôi đọc thói quen dịch vụ ngắt có 5 đồng hồ để nhảy vào và 5 đồng hồ để trở về quy trình chính. Tôi giả sử mỗi lệnh trong tôi ISR()
đang thực hiện 1 đồng hồ; Vì vậy, trong tổng số nên có một chi phí chung của 5 + 5 + 5 = 15
đồng hồ. Thời lượng của một đồng hồ phải theo tốc độ xung nhịp là 20 MHz 1/20000000 = 0.00000005 = 50 ns
. Tổng chi phí tính bằng giây sẽ là : 15 * 50 ns = 750 ns = 0.75 µs
. Bây giờ tôi không hiểu tại sao tôi không thể chụp bất cứ thứ gì dưới 5,6. Bất cứ ai có thể giải thích những gì đang xảy ra?