Aşağıda anlatılan kurulumlar, Linux tabanlı işletim sistemleri için geçerlidir. Ancak Windows üzerinde de aynı uygulamaları çalıştırabilir ve analizörü kullanabilirsiniz.

Dijital elektronik sinyallerinin, dijital protokollerin (SPI, I2C, Serial vb.) iletişimini görüntülemek, ölçmek, analiz etmek için mantık analizörü olarak adlandırılan donanımlar kullanılır. Aynı anda birden fazla kanaldan sinyal yakalayabildikleri için, çoklu bağlantı kullanan protokoller bu donanımla eşzamanlı bir şekilde ölçülebilir.  Farklı sinyaller arasındaki zamanlama ilişkileri incelenebilir, bunlar kayıt altına alınarak üzerinde inceleme yapılabilir. Hata ayıklamada kullanılabileceği gibi, tersine mühendislik işlemlerinde de sıkça kullanılır.

Örneğin aşağıda, gerçek zaman saati entegresi olan DS1307 dökümanında yer alan, entegrenin mikrodenetleyici ile arasında gerçekleşmesi gereken I2C protokol iletişimi teorik olarak gösterilmiş.

Aşağıda ise aynı entegrenin bir mikrodenetleyici ile iletişim halindeyken, mantık analizörü ile yakalanmış sinyallerini görebilirsiniz.

Kendi ekran ve arayüzüne sahip mantık analizör cihazları olduğu gibi, yakaladığı sinyalleri bilgisayara aktaran ve yazılım yardımıyla bu sinyalleri işleyen kartlar da bulunmaktadır. İşte Arduino ile oluşturacağımız mantık analizörü de, yakaladığı sinyalleri bilgisayara aktararak işleyen analizör kartları şeklinde çalışır. Küçük bir araştırma ile satın alabileceğiniz uygun fiyatlı bir çok mantık analizör kartı bulabilirsiniz. Bazı markaların klon ürünlerini de uygun fiyata bulmak mümkün. Ancak daha basit bir cihaz işinizi görecekse, Arduino geliştirme kartınızı da basit bir mantık analizörü olarak kullanabilirsiniz.

Arduino ile yapılan mantık analizörünün özellikleri, kart üzerinde bulunan mikrodenetleyiciye göre değişiklik gösteriyor.

  • ATmega168 ve ATmega328 mikrodenetleyicisine sahip (Arduino Uno, Nano, Mini) kartlar 6 kanalı  destekliyor (Arduino Uno için pin 8 - 13) ve 4 MHz.'e kadar örnekleme hızına ulaşılabiliyor. ATmega168 entegreler 532k örnekleme kaydı yapabilirken, ATmega328 ise 1024k boyutuna kadar çıkabiliyor.

  • ATmega1280 ve ATmega2560 mikrodenetleyicisine sahip Arduino Mega kartı ise 8 kanallı bir mantık analizörüne dönüştürebiliyorsunuz (pin 22 - 29). Yine 4 MHz.'e kadar örnekleme hızına ulaşılabiliyor. Bu denetleyiciler ile 7168k örnekleme kaydı yapılabiliyor.

Donanım tarafında yapılması gereken sadece Arduino'yu bilgisayara bağlamaktan ibaret (farklı voltaj seviyelerinde seviye dönüştürücü kullanmak gerekebilir). Geriye kalan işlemler kütüphane ve yazılımların kurulumlarıyla hallediliyor. Bilgisayara bir analizör istemci uygulaması kuruluyor. Bu uygulama Arduino ile SUMP protokolü üzerinden haberleşiyor. Bu protokolün Arduino tarafındaki desteği ise logic_analyzer yazılımı ile sağlanıyor.

Bilgisayarınızda analizör istemcisi olarak Arduino ile kullanabileceğiniz iki yazılım var. Bunlardan biri PulseView yazılımı. PulseView, mantık analizörleri için geliştirilen Sigrok projesinin bir parçası. Birçok kartı destekliyor ve daha canlı bir proje. SPI, I2C gibi birçok protokolü analiz edebiliyor ve bazı entegrelerin bu protokollerdeki iletişim şablonlarını içinde barındırıyor. Bu sayede aktarılan veriyi doğrudan görebiliyorsunuz.

Diğer bir analizör istemcisi olan OLS LogicSniffer ise, SUMP protokolü üzerinden iletişim kuran mantık analizörleri için tasarlanmış. Açık kaynaklı mantık analizörü projesi olan OLS (Openbench Logic Sniffer) ve SUMP Logic Analyzer projelerini destekliyor. Aynı zamanda Arduino desteği de dahil edilmiş. Aynı PulseView gibi protokol desteği de var. Ancak uygulamanın kullanımı sırasında bazı sorunlar yaşadım. Geliştiricisi Java 9 desteği olduğunu söylemiş. Ancak Java 8 ve 9 üzerinde uygulamayı çalıştırabildiğim halde Arduino bağlantısını kuramadım. Sadece Java 7 üzerinde hiç bir sorun çıkmadan bağlantı kurabildim. Java 7 kurulumunu ise bir çok güncel Linux sisteminde yapmak epey zor oldu. Araştırmalarım sonucunda bunun basit bir yolunu buldum ve aşağıda anlattım, oradan takip edebilirsiniz. OLS LogicSniffer yerine PulseView uygulaması kullanacaksanız, Java kurulumuna ihtiyacınız olmayacak.

Gereklilikler

Kullanmak istediğiniz uygulamaya göre gereklilikler değişiklik gösteriyor.

  • Desteklenen bir Arduino geliştirme kartı (ATmega168, ATmega328P, ATmega1280, ATmega2560 veya ATmega32U4 mikrodenetleyici bulunanlar).
  • Java JRE (PulseView için gerekli değil fakat OLS LogicSniffer yazılımını kullanacaksanız Java 7 JRE sürümü gerekli, Arduino IDE ise Java 6 ve üzerinde çalışabiliyor).
  • Arduino IDE (analizör kullanımı sırasında gerekli değil,  sadece Arduino'ya logic_analyzer kodunu yüklemek için gerekli).
  • logic_analyzer (Arduino için SUMP protokolü yazılımı).
  • PulseView veya OLS LogicSniffer yazılımlarından biri (sinyalleri gözlemleyeceğimiz istemci yazılımları).

Java 7 Kurulumu

Hatırlatma: Java kurulumu sadece Arduino IDE ve OLS LogicSniffer yazılımları için gerekli. PulseView için gerekli değil. Eğer sisteminizde zaten Arduino IDE kurulu ise ve istemci olarak PulseView kullanacaksanız, bu ve sonraki bölümü atlayarak doğrudan logic_analyzer kurulumuna geçebilirsiniz.

Arduino IDE için Java 6 veya üzeri kurulum işinizi görüyor. Ancak OLS LogicSniffer yazılımı için Java 7 gerekiyor (diğer Java sürümlerinde bağlantı sorunları yaşadım, sizde de aynı sorunlar yaşanırsa Java 7 kurun). Yani Java 7 JRE sürümünü kurduğunuzda, Arduino IDE ve OLS LogicSniffer'ı çalıştırabilirsiniz. 

SDKMAN!

Java 7 kurulumu Linux üzerinde biraz uğraştırıcı. Bazı lisans ve destek sorunlarından ötürü kurulum paketleri bulunmuyor. Güncel Linux sürümlerinde Java 7 JRE kurmanın en pratik yolunun, sdk yönetim aracı SDKMAN! kurmak olduğunu gördüm. Bu araç sayesinde fazla zahmete girmeden, bilgisayarınıza Java 7 desteği kazandırabiliyorsunuz. Bu araç aslında bir sdk ve JDK yöneticisi. Yani aslında Java 7 JRE değil, JDK yüklemiş oluyoruz. JRE de zaten JDK ile beraber geldiğinden yüklenmiş oluyor.

SDKMAN! aracının kurulumu, bir kabuk betiği çalıştırılarak yapılabiliyor. Bu kabuk betiğini bilgisayarınıza dosya olarak indirmeden, doğrudan kabuk üzerinde çalıştırabilirsiniz. Bu işlem için Curl aracını kullanalım. Sisteminizde kurulu değilse önce Curl aracını kurun.

$ sudo apt install curl

Şimdi aşağıdaki komutu girin ve SDKMAN! aracının kurulmasını bekleyin.

$ curl -s "https://get.sdkman.io" | bash

Herhangi bir problem oluştuğunda, ekranda çözüm öneren talimatlar belirecektir. Sorunsuz bir kurulumun sonunda terminalde aşağıdaki çıktıyı alırsınız.

$ curl -s "https://get.sdkman.io" | bash
  All done!
  
  Please open a new terminal, or run the following in the existing one:
  
              source "/home/firat/.sdkman/bin/sdkman-init.sh"
  
  Then issue the following command:
  
               sdk help
  
  Enjoy!!!
  

Talimatta da gösterildiği gibi, aşağıdaki komutu girelim ve SDKMAN!'in kullanıcı dizinimizde oluşturduğu kabuk betiği dosyasını yorumlayalım (Ya da bu komut yerine terminal penceresini kapatın ve yeni bir terminal penceresi açın, terminal açılırken alttaki kabuk betiği dosyası otomatik yorumlanacaktır).

$ source "/home/$USER/.sdkman/bin/sdkman-init.sh"

Kurulumun tamamlandığını onaylamak için, SDKMAN! versiyon bilgisini isteyelim. Eğer versiyon bilgisi dönerse işlem başarılı olmuş demektir.

$ sdk version
$ sdk version
  
  SDKMAN 5.7.4+362

Artık Java'nın belirli bir sürümünü, tanıtıcı ismini girerek yükleyebiliriz. SDKMAN! kapsamında yükleyebileceğiniz Java sürümlerini görebilmek için alttaki komutu çalıştırabilirsiniz.

$ sdk list java
$ sdk list java
  ================================================================================
  Available Java Versions
  ================================================================================
   Vendor        | Use | Version      | Dist    | Status     | Identifier
  --------------------------------------------------------------------------------
   AdoptOpenJDK  |     | 13.0.2.j9    | adpt    |            | 13.0.2.j9-adpt      
                 |     | 13.0.2.hs    | adpt    |            | 13.0.2.hs-adpt      
                 |     | 12.0.2.j9    | adpt    |            | 12.0.2.j9-adpt      
                 |     | 12.0.2.hs    | adpt    |            | 12.0.2.hs-adpt      
                 |     | 11.0.6.j9    | adpt    |            | 11.0.6.j9-adpt      
                 |     | 11.0.6.hs    | adpt    |            | 11.0.6.hs-adpt      
                 |     | 8.0.242.j9   | adpt    |            | 8.0.242.j9-adpt     
                 |     | 8.0.242.hs   | adpt    |            | 8.0.242.hs-adpt     
   Amazon        |     | 11.0.6       | amzn    |            | 11.0.6-amzn         
                 |     | 8.0.242      | amzn    |            | 8.0.242-amzn        
   Azul Zulu     |     | 13.0.2       | zulu    |            | 13.0.2-zulu         
                 |     | 12.0.2       | zulu    |            | 12.0.2-zulu         
                 |     | 11.0.6       | zulu    |            | 11.0.6-zulu         
                 |     | 11.0.5.fx    | zulu    |            | 11.0.5.fx-zulu      
                 |     | 10.0.2       | zulu    |            | 10.0.2-zulu         
                 |     | 9.0.7        | zulu    |            | 9.0.7-zulu          
                 |     | 8.0.242      | zulu    |            | 8.0.242-zulu        
                 |     | 8.0.232.fx   | zulu    |            | 8.0.232.fx-zulu     
                 |     | 7.0.242      | zulu    |            | 7.0.242-zulu        
                 |     | 6.0.119      | zulu    |            | 6.0.119-zulu        
  ...
        
   SAP           |     | 13.0.2       | sapmchn |            | 13.0.2-sapmchn      
                 |     | 12.0.2       | sapmchn |            | 12.0.2-sapmchn      
                 |     | 11.0.6       | sapmchn |            | 11.0.6-sapmchn      
  ================================================================================
  Use the Identifier for installation:
  
      $ sdk install java 11.0.3.hs-adpt
  ================================================================================
  
Listelenen Java 7 sürümünün, Identifier sütunu altında yazılı adını kullanarak kuralım.
$ sdk install java 7.0.242-zulu
$ sdk install java 7.0.242-zulu
  Installing: java 7.0.242-zulu
  Done installing!
  
  
  Setting java 7.0.242-zulu as default.
  
Böylece Java 7 sistemimize kuruldu ve sistemin varsayılan Java sürümü haline getirildi.
Not: Eğer yerel sisteminizde zaten kurulu farklı JDK sürümleri varsa ve update-alternatives komutu ile sürümler arasında geçiş yapıyorsanız, SDKMAN! ile kurulum yaptığınızda bu komut işlevsiz kalacaktır. Bu durumu aşmak için yereldeki JDK sürümlerini de SDKMAN!'e tanıtabilirsiniz. Bunun için ilk olarak yereldeki JDK dosyalarının bulunduğu dizini bilmelisiniz. Normal şartlarda /usr/lib/jvm/ dizini altında her sürüm kendi dizin yapısında tutulur. whereis java komutunu kullanarak kurulu Java kütüphane dosyalarının dizinini öğrenebilirsiniz. Örnek olarak yerelde JDK 8 kurulu olduğunu düşünelim. Kütüphane dosyaları da /usr/lib/jvm/java-8-oracle/ dizini altında. Şimdi alttaki komut ile yerel Java'yı tanıtalım.
$ sdk install java 8-oracle-local /usr/lib/jvm/java-8-oracle/
$ sdk install java 8-oracle-local /usr/lib/jvm/java-8-oracle/
  
  Linking java 8-oracle-local to /usr/lib/jvm/java-8-oracle/
  Done installing!
  
Yerelde kurulu JDK 8'i, 8-oracle-local ismini vererek tanıtmış oldum. Artık istediğim zaman Java 7'den yereldeki Java 8' e şu komutla geçiş yapabilirim.
$ sdk default java 8-oracle-local
$ sdk default java 8-oracle-local
  
  Default java version set to 8-oracle-local
Aynı komutu sürüm adı belirterek tekrar eski sürüme geçmek için de kullanabilirsiniz. Kurulu Java sürümlerini görmek için alttaki komutu kullanın.
$ sdk list java
Status sütunu altında, SDKMAN! ile kurduğunuz JDK sürümleri installed olarak görünür. Yerelde bulunan tanıtılmış sürümler ise local only olarak gösterilir.

Arduino IDE Kurulumu

Hatırlatma: Arduino IDE kurulumu yalnızca SUMP protokolü desteği için logic_analyzer kodunu bir seferlik Arduino'ya kurmak için gerekli. Bu kod bloğunu başka yöntemlerle de Arduino'ya yükleyebiliyorsanız IDE kurulumunu yapmanıza gerek yok.
Bu işlemin zaten yeterince ayrıntılı dökümanları internette bulunuyor. O yüzden bir kaç tane yazıya bağlantı vererek bir sonraki adıma atlıyorum.

Arduino'ya logic_analyzer Kodunu Yükleme

Analizör istemci yazılımları ile Arduino arasında bağlantı kurulabilmesi için gerekli olan kodları, aşağıdaki adımları takip ederek yükleyebilirsiniz.

  • Arduino için hazırlanan taslak kodlarını GitHub sayfasından indirin.
  • İndirilen .zip dosyasınından çıkarttığınız, içinde 3 .ino dosyası bulunan logic_analyzer-master klasörünün adını, logic_analyzer olarak değiştirin ve Arduino IDE yazılımının ana klasöründe bulunan examples klasörüne taşıyın.
  • Arduino IDE yazılımını açın ve menüden, Dosya > Örnekler > logic_analyzer seçin.


  • Üç .ino dosyası 3 farklı sekme ile Arduino IDE üzerinde açılmış olmalıdır. Kontrol Et butonu ile dosyaları denetleyin, herhangi bir sorun çıkmazsa Yükle butonu ile Arduino'ya yükleyin.

Yükleme işlemi hatasız bir şekilde gerçekleştiyse, Arduino IDE yazılımını kapatabilirsiniz. Sonraki adımlarda ihtiyacınız olmayacak (Arduino Mega'da derleme işlemi biraz uzun sürüyor).
Uyarı: Usb üzerinden bağlı Arduino'da pek sorun olmamasına rağmen, seri arayüzlerden yapılan bağlantılarda istemci yazılımları veya Arduino IDE yazılımının Arduino ile iletişim kurabilmesi için, bağlantı noktasına okuma ve yazma izni vermelisiniz. Bunun için menüden Dosya > Araçlar > Port seçeneğinden Arduino'nun bağlı olduğu girişi öğrenin ve alttaki komuta girerek uygulayın.
$ sudo chmod a+rw /dev/ttyS0
Yukarıdaki örnekte, /dev/ttyS0 girişine okuma ve yazma izni vermiş olduk.

OLS LogicSniffer İstemci Uygulamasını Yükleme

  • OLS LogicSniffer yazılımının son sürümünü bu bağlantıdan bilgisayarınıza indirin.
  • İndirilen sıkıştırılmış dosyayı diskinize çıkarttıktan sonra ols-0.9.7.2 klasörü içindeki run.sh dosyasını yürütülebilir yapmalısınız. Bunu, dosyaya sağ tıklayarak Özellikler > İzinler Sekmesi altındaki Program seçeneğini işaretleyerek yapabilirsiniz. Veya komut satırından ols-0.9.7.2 klasörüne girin ve aşağıdaki komutu kullanın.
    $  chmod +x run.sh
  • Uygulamayı çalıştırmak için, aynı klasör içindeyken alttaki komutu girin.
    $ sudo ./run.sh
  • Uygulama açıldığında ana menüden, Capture > Device > OpenBench LogicSniffer seçili olduğundan emin olun. 


  • Start Capture butonuna tıklayın ve açılan OLS Capture settings penceresinde Connection sekmesi altındaki değerleri aşağıdaki gibi düzenleyin.

    Connection type: Serial port,
    Analyzer port: Arduino'nun bağlı olduğu port,
    Port Speed: 115200bps,
    Device type: Arduino Generic Logic Analyzer.


  • Yukarıdaki değerleri girdikten sonra Show device metadata butonuna tıkladığınızda, uygulama Arduino ile kısa bir bağlantı kuruyor. Eğer herhangi bir sorun yoksa butonun hemen altında yüklü firmware ve protokol ile ilgili bazı bilgiler görünmeli.


  • Arduino'nuzun pinlerine gerekli girişleri yaptıysanız, Capture butonuna tıkladığınızda, uygulama kısa bir beklemeden sonra ana ekrana dönerek yakalanan sinyali göstermeli. Bu esnada veri aktarımı yoksa, düz çizgiler görürsünüz. Veriyi yakalayana kadar Repeat Capture butonuna tıklayın. Aşağıda, Arduino Mega'nın 22 - 25 pinlerine bağlı bir lcd ekranın seri iletişimini görebilirsiniz. 


Uzun süre denemenize rağmen sonuç alamazsanız, örnekleme oranını düşürmeyi deneyebilirsiniz. Böylece bir seferde daha fazla veri yakalayabilirsiniz. Bunun için Start Capturing butonuna tıklayın, açılan pencereden Acquisition sekmesine geçin. Sample rate alanındaki değeri düşürün. Örneğin yukarıdaki lcd seri iletişimini, 200 kHz oranla elde ettim. Ancak örnekleme hızının seçimiyle ilgili bilmeniz gereken bir kural var, bundan öneriler kısmında bahsettim.

PulseView Uygulamasını Yükleme

Bu yazılımı, kullandığınız dağıtımın paket yöneticisi ile kurabilirsiniz. Ancak paket depolarında en güncel sürüm olmayabiliyor. Uygulamanın hem en güncel halini barındıran hem de kurulum ve ek bağımlılıklarla uğraştırmayan AppImage yapısını çalıştırmanızı tavsiye ederim.
Uyarı: AppImage dosyalarını kök olarak çalıştırmadığınız sürece uygulama seri bağlantı noktalarına erişemiyor. Linux'ta uygulamalar mümkün olduğunca kök olarak çalıştırılmaması gerektiği için, bunun yerine Arduino'nun bağlı olduğu seri bağlantı noktasına yazma okuma izni verebilirsiniz. Seri bağlantı noktasının /dev/ttyS0 olduğunu düşünelim.
$ sudo chmod a+rw /dev/ttyS0
Komutun sonundaki bağlantı noktasını kendi bağlantı noktanızla değiştirerek uygulayabilirsiniz. Farklı yöntemlerle bu durumu aşmak isterseniz, uygulamanın kurulum dökümanlarında Linux başlığı altını okuyun.
  • PulseView indirme sayfasından, sisteminize uygun AppImage dosyasını indirin.
  • İndirdiğiniz PulseView-0.4.1-x86_64.AppImage dosyasını çalıştırılabilir yapmalısınız. Bunu dosyaya sağ tıklayarak Seçenekler > İzinler Sekmesi > Bu dosyanın bir program olarak çalışmasına izin ver seçeneğini işaretleyerek yapabilirsiniz. Veya komut satırından dosyanın bulunduğu dizine girin ve alttaki komutu yürütün.
    $ chmod u+x PulseView-0.4.1-x86_64.AppImage
  • AppImage dosyasını, doğrudan çift tıklama ile veya komut satırından çalıştırabilirsiniz.
    $ ./PulseView-0.4.1-x86_64.AppImage
  • Uygulama açıldığında ana ekranda <No Device> alanından, Connect to Device seçin. Açılan penceredeki alanlara aşağıdaki adımları uygulayın.

    Step 1 Chose the driver: Openbench Logic Sniffer (ols) seçin.
    Step 2 Choose the interface: Serial Port'u işaretleyin ve Arduino'nun bağlı olduğu portu seçin.
    Not: Eğer PulseView'in gecelik (nightly) sürümünü indirdiyseniz, Step 2 altında port hızını da girmenizi isteyecektir. Bu durumda baud alanına 115200 değerini girin.
    Step 3 Scan for devices: Scan butonuna tıklayın. Bir iki saniye içinde alt kutuda, bağlı donanımın ismi görünmelidir. Donanım görünmezse tekrar tıklayın.
    Step 4 Select the device: AGLAMv0 with 8 channels seçin ve OK butonu ile kaydedin.


  • Arduino'nuzun pinlerine gerekli girişi yaptıysanız, ana ekranda Run butonuna tıkladığınızda, uygulama kısa bir beklemeden sonra yakalanan sinyali göstermeli. Bu esnada veri aktarımı yoksa, düz çizgiler görürsünüz. Veriyi yakalayana kadar tekrar Run butonuna tıklayın. Aşağıda Arduino Mega'nın 22 - 24 pinlerine bağlı bir lcd ekranın, seri iletişimini görebilirsiniz.

Uyarı: PulseView'da yakalanan sinyal ekrana ters olarak yansıtılıyor. Yani zaman skalası soldan sağa gösteriliyor ancak sinyal ekrana yerleştirilirken sağdan sola doğru yerleştiriliyor. Bu problemin PulseView tarafında bir çözümünü bulamadım. Ancak Arduino logic_analyzer kodunun GitHub sorunlar kısmında bunun hakkında konuşulmuş ve geçici bir de çözüm sunulmuş. Bu çözüme göre logic_analyzer kodunun değiştirilmiş bir sürümünü Arduino'ya yüklemeniz durumunda, Arduino'dan istemciye gönderilen sinyaller Arduino tarafında ters çevriliyor. Ancak bu kodu yüklediğinizde de, bu defa yukarıda kurulumunu anlattığım OLS LogicSniffer uygulamasının sinyalleri ters göstereceğini unutmayın.

Öneriler

Mantık analizör kartlarının girişlerinde kendi koruma devreleri bulunur. Ancak Arduino kartlarında böyle bir devre olmadığı için, biz bu durumda ATmega mikrodenetleyicilerinin dahili korumalarını kullanmış oluyoruz. Bu nedenle bilmemiz gereken bazı voltaj değerleri var. Arduino kartlarıyla yapılan mantık analizörlerinin voltaj eşik değerleri aşağıdaki gibidir.

  • 5v. Arduino'lar için düşük aralık 0v. ~ 1.5v., yüksek aralık 3.0v. ~ 5v.
  • 3.3v. Arduino'lar için düşük aralık 0v. ~ 1.0v., yüksek aralık 2.0v. ~ 3.3v.
Dikkat! Kullandığınız Arduino kartının yüksek voltaj aralığını aşmayın, kartınıza zarar verirsiniz.

Düşük voltaj aralığı içinde kalan voltajlarda çıktı düşük seviyede görünecektir. Yani 0v. ~ 1.5v. arasında değişim gösteren sinyalleri, seviye dönüştürücü olmadan Arduino ile sadece düşük seviye olarak yakalayabilirsiniz, aradaki değişimleri gözlemleyemezsiniz. Düşük ve yüksek voltaj aralıklarının ortasında kalan bölgedeki (örn. 5v. Arduino'lar için 1.5v. ~ 3v. arası) okumalar da gecikmeli ve kararsız olacaktır. Dolayısıyla 5v. Arduino için 0V. ~ 2.3v. arasında değişim gösteren bir sinyali de seviye dönüştürücü ile okumak gerekir. Uygulama esnasında sürekli düşükte görünen sinyal, bu durumun bir sonucu olabilir.

Arduino hafızasını daha verimli kullanarak, tek seferde daha fazla veri yakalamak isterseniz, örnekleme hızını düşürmeyi deneyebilirsiniz. Böylece bir seferde hafızaya daha fazla zaman aralığını sığdırmış olursunuz. Ancak örnekleme hızı ile ilgili bilinmesi gereken bazı noktalar var. Nyquist–Shannon örnekleme teoremine göre, dijital bir sinyali yeniden oluşturabilmek için bu sinyalin frekansının iki katından fazlasını örneklemeniz gerekir. En ideal yöntem ise dijital sinyali 4 kat daha hızlı örneklemektir. Örnek olarak 1 MHz hızında bir sinyal okumayı planlıyorsanız, örnekleme hızının 4 MHz olması daha iyi sonucu verecektir.

Mantık analizörlerinde, sinyal alındığı anda yakalama işleminin otomatik başlamasını sağlamak için tetikleyici (trigger) özelliği kullanılır. Bu sayede, yüksek seviye bir sinyal alınana kadar geçen süredeki düşük seviye sinyaller, hafızada yer kaplamamış olur. Arduino'ya yüklediğimiz logic_analyzer kodunun dökümanlarında, 1 MHz örnekleme hızının altında tetikleyicinin kararlı çalıştığı belirtilmiş. Tetikleyici kullanımıyla, küçük örnekleme hafızalarına sahip Arduino gibi analizörlerde, sinyali tam olarak yakalamak çok daha kolaylaşıyor.

Kaynaklar