USB – TTL dönüştürücü ile SoftSPI

Selamlar.

Heyecanlı bir konu için yine birlikteyiz. Bir kaç gün önce forumları karıştırırken eski bir soruya rastladım. “Seri port üzerinden, mcu kullanmadan led yakabilir miyiz?”

Seri port pinlerinin iki tanesi karşı cihaza haber vermek için kullanılmakta. Yani çıkış yapılabiliyor. Bunlar DTR ve RTS pinleri. İki led kontrol edilebilir. Ya daha fazlasını istiyorsam?

Üstteki resimde görüldüğü üzere sadece üç adet çıkış bulunmakta: Tx, DTR ve RTS.

Bu yöntemi düşününce, ilk aklıma gelen 74HC595 oldu. Donanımsal SPI modülü olmayan mcularda bile çok iyi performansla çalıştığını biliyoruz.

Tabii ki CH347(SPI modülü ile) veya benzeri çipler ile SPI yapmak mümkün. “Ancak herhangi bir USB – TTL dönüştürücü ile bu olacak mı?” deneyeceğiz.

Emin olmak için Python ile basit bir kod yazıp denedim. DRT ve RTS pinleri ile kare dalga üretebiliyoruz. Sinyal çıktıları altta. Biri osiloskop, biri de lojik analizör çıktısı. Yaklaşık 2-4KHz arası değişiyor. Bu hayal kırıklığı oldu. Bu frekansın en az iki katı gerekli normalde.


Bu arada; HC595 için bir pine daha ihtiyac var. Tx pini diyeceksiniz. Stop biti bu işe tarar mı acaba? Alttaki resimde stop biti görülmekte, 230400baud. Ancak HC595 için yükselen kenar gerekli. Uygulamada bir transistör ile basitçe bu sinyali tersledim.

Daha önceki projemde kullandığım iki adet HC595 çıkışına matris bağlı sekiz hane 7 segment ekran kartı ile çalışmaya başladım. Şemadaki mcuyu kullanmıyorum. Bu daha önce yaptığım bir çalışmaydı. [Display Uygulaması]

Bir kaç başarısız deneme ardından bir şeyler çıkmaya başladı. Ancak bundan sonrası daha da hayal kırıklığı oldu. Yukarıda bahsettiğim gibi hız yetersiz kalıyordu. Seri port hızını 300-230400 baud denedim, sonuç değişmedi. Sorun, DTR ve RTS pinlerinin yeterince hızlı olmamasından kaynaklanıyor. Muhtemelen bilgisayarın iç çevrimi ile alakalı. Belki bu değiştirilebilir.

Bu hız yaklaşık 4KHz. İki adet HC595 kullanacağız ve çıkışında sekiz display var.
1.000.000 / 4.000 = 250uS
2 x 8 x 8 = 128
128 x 250 = 32.000
1.000.000 / 32000 = 31.25Hz/hane

Bu hızı bir de kod içindeki hesaplamalar yavaşlatıyor. Yaklaşık 20Hz civarına kadar düşüyor.
Bu sadece basit bir test uygulaması, belki en fazla başka bir uygulamanın debug ekranı olabilir. Fazlasının olabileceğini düşünmüyorum.

CH347’nin UART1 kanalını kullandım. PL2303HX ile de denedim, yine çevrim hızı 4KHz. Belki de benim PC yavaş kalıyor. Şimdilik bu sorunlarla uğraşmıyorum.

Testleri Python ile yazdım. Ancak hız problemi nedeniyle benzer kodu C ile de test ettim, değişen bir şey olmadı. Ancak, kolay test edilmesi nedeniyle Python ile devam edeceğim.

Kodların biraz düzenlenmesi gerekli, bu sonraki iş.

Alttaki resimde ekranda “11117777” rakamı görülmekte iken alınan lojik analizör sinyal çıktısı görülmekte.

Bu düşük çevrim hızı nedeniyle; sekiz hane yazarken çok fazla titreme oluyor. Ancak dört hane ile kabul edilebilir bir şekilde çalışıyor.

Burada asıl en büyük sorun PC fiziksel seri portu. Bu çalışma sadece USB – TTL dönüştürücü ile yapılmaktadır. PC’nin fiziksel seri portunun gerilimlerinde epey farklılıklar bulunmaktadır.
High(1) sinyali +12V veya biraz yüksek bile olabilir. Ancak LOW(0) sinyali -12V. Bu nedenle «özellikle acemi arkadaşlarımızın» fiziksel portu kullanılmamasıdır.

Bir çok USB – TTL dönüştürücülerde genelde RX ve TX pinleri kullanıcıya verilmektedir, diğer pinler dışarıya çıkarılmamıştır.. Ama entegre pinlerinden uygun olanları bulup dışarıya almanız mümkün.

“Zaten mcu ile veya başka entegreler ile bu işlemi yapmıyor muyuz, neden bu yöntemi seçiyorsun?” diyebilirsiniz. Sadece yapılabiliyor mu diye kontrol ettim.

Belki led/display sürmede başarısız oldum. Ancak başka display entegrelerini ve karakter LCD, hatta basit grafik LCD sürmek mümkün görünüyor. (MAX7219/21, TM1637/38, 74HC595, 74HC164, CD4094/74HC4094, ve daha fazlası)
Bir HC595’in pinleri karakter display pinlerine bağlanabilir. Ya da iki tanesi grafik displaya bağlanır, ama biraz hız düşük kalabilir. Diğerleri için bence sorun olmayacaktır.

Altta eklediğim videoda bazı hanelerin yanmadığı gibi bir görüntü oluşmakta. Bu tarama hızının çok düşük olmasından kaynaklanmaktadır. Ama gözle bakında tüm hanelerde sayılar görülmekte. Fakat bir titreme oluşmakta.

Şimdilik bu kadar, umarım işinize yarayan bir uygulama olmuştur.
İyi eğlenceler…

7 segment 7segment 12F675 12F683 16F877A ADC Arduino AVR blue pill BUTON button Code Composer Studio Direnç esp esp8266 G2552 led Linux LIS3DSH LIS302DL micropython MSP430 ortanca filtre PIC port PWM PySimpleGUI Python pyttsx3 seri port seven segment SPI STM32 STM32F-Discovery STM32F4-DISCO STM32F4-Discovery STM32F407 Thonny Timer0 UART usb USB-TTL dönüştürücü Voltmetre Zener test cihazı İvme Sensörü