Pengaturan waktu hingga resolusi 100ns memerlukan timer yang beroperasi pada 10MHz. Banyak mikrokontroler harus mampu menjalankan timer yang cepat.
Masalahnya muncul ketika Anda mencoba menghitung waktu kedatangan 6 sinyal. Apakah semua sinyal ini berada pada kabel yang sama, atau masing-masing pada kabel yang berbeda?
Jika mereka semua berada di kabel yang sama, maka dimungkinkan untuk melakukan ini secara akurat pada MCU dengan timer 10MHz tunggal. Secara naif, kode untuk melakukan ini akan terlihat seperti ini:
wait for trigger signal
reset timer
wait for first signal
save timer value
reset timer
....
wait for sixth signal
save timer value
reset timer
Masalahnya adalah bahwa dibutuhkan waktu terbatas untuk mengatur ulang timer. Ini menyebabkan dua masalah:
Waktu yang diukur akan menjadi salah oleh beberapa 100ns, tergantung pada implementasi Anda. Namun, mereka harus konsisten salah. IE salah dengan jumlah yang persis sama setiap kali. Ini berarti Anda dapat dengan mudah menggantinya dengan menambahkan sejumlah kecil ke setiap pengukuran.
Akan ada waktu minimum yang bisa Anda ukur. Jika pulsa apa pun tiba 100ns setelah yang sebelumnya, maka Anda mungkin akan melewatkannya. Saya tidak tahu apakah ada yang dapat Anda lakukan tentang hal itu di dalam perangkat lunak. Anda harus menemukan mikrokontroler yang dapat menangani beberapa pulsa dalam perangkat keras.
Mikrokontroler mana yang dapat menangani beberapa pulsa dalam perangkat keras? The Cypress PSoC ! Ini adalah mikrokontroler yang juga berisi blok digital yang dapat dikonfigurasi, artinya Anda dapat dengan mudah menjalankan 6 timer terpisah, masing-masing pada 60MHz, memberikan Anda resolusi yang lebih baik dari 20ns.
Berikut ini contoh yang saya pecahkan dengan cepat untuk menunjukkan kepada Anda hal-hal yang dapat Anda lakukan dengannya. Saya punya 6 timer terpisah, semuanya berjalan dari jam bus, yang bisa mencapai 67MHz. Ada pin pemicu yang memulai semua penghitung waktu berjalan, dan 6 pin lainnya, yang masing-masing menyebabkan acara penangkapan di penghitung waktu. Register status memungkinkan kode Anda untuk memantau timer mana yang menangkap pulsa. Kode dapat membaca nilai dari penghitung waktu.