100ns çözünürlük için zamanlama, 10MHz'de çalışan bir zamanlayıcı gerektirir. Birçok mikrodenetleyici bu kadar hızlı bir zamanlayıcı çalıştırabilmelidir.
Sorun, 6 sinyalin gelişini zamanlamaya çalıştığınızda ortaya çıkar. Bu sinyallerin hepsi aynı kabloda mı yoksa her biri farklı bir kabloda mı?
Hepsi aynı kablodaysa, bunu tek bir 10MHz zamanlayıcı ile herhangi bir MCU'da doğru bir şekilde yapmak mümkün olabilir. Safça, bunu yapmak için kod şöyle görünecektir:
wait for trigger signal
reset timer
wait for first signal
save timer value
reset timer
....
wait for sixth signal
save timer value
reset timer
Sorun, zamanlayıcıyı sıfırlamanın sınırlı bir süre almasıdır. Bu iki soruna neden olur:
Ölçülen süreler, uygulamanıza bağlı olarak birkaç 100ns yanlış olur. Bununla birlikte, sürekli olarak yanlış olmalıdırlar. IE her seferinde tam olarak aynı miktarda yanlış. Bu, her bir ölçüm için küçük bir miktar ekleyerek kolayca telafi edebileceğiniz anlamına gelir.
Ölçebileceğin minimum bir zaman olurdu. Herhangi bir nabız bir öncekinden 100ns sonra gelirse, muhtemelen onu özleyeceksiniz. Yazılımda bu konuda yapabileceğiniz bir şey olup olmadığını bilmiyorum. Donanımda birden çok darbeyi işleyebilecek bir mikro denetleyici bulmanız gerekecek.
Hangi mikrodenetleyici donanımda birden fazla darbeyi işleyebilir? Cypress PSoC ! Bu, yapılandırılabilir dijital bloklar da içeren bir mikrodenetleyicidir, yani her biri 60MHz'de çalışan 6 ayrı zamanlayıcıya kolayca sahip olabilirsiniz, bu da size 20ns'den daha iyi bir çözünürlük sağlar.
İşte size bununla yapabileceğiniz şeyleri göstermek için hızlı bir şekilde çaldığım bir örnek. 6 ayrı zamanlayıcım var, hepsi otobüs saatinden geçiyor ve 67MHz'e kadar çıkabiliyor. Çalışan tüm zamanlayıcıları başlatan bir tetikleme pimi ve her biri zamanlayıcıda bir yakalama olayına neden olan 6 pim daha vardır. Durum kaydı, kodunuzun hangi zamanlayıcıların nabız yakaladığını izlemesini sağlar. Kod, zamanlayıcıların dışındaki değerleri okuyabilir.