TFT ekranların SPI girişli ve 8/16 bit paralel girişli tipleri var. Bunlar data girişleri, ayrıca veri akışını kontrol eden kontrol pinleri de var.
Bu yayının konusu olan SPI girişli TFT lere ilk el attığımda, TFT ye gönderdiğim her byte öncesinde ve sonrasında TFT_RS ve TFT_CS kontrol pinleri ile senkronizasyon sağlıyordum. Tabi ki bu çok yavaş ve CPU yu meşgul eden bir yöntem idi. Çok kısa bir süre içinde bu yöntemi terkederek, çoklu veri paketleri gönderdiğim, kesmeleri kullandığım yöntemlere geçtim. TFT de görüntüleme hızları konusunda katettiğim yolu anlattığım yayına ulaşmak için burayı tıklayınız.
TFT’yi daha da hızlandırıp CPU üzerindeki yükü olabildiğince hafifletmek için DMA -Direct Memory Access- yöntemini kullanmaya başladım. Bunun nasıl yapıldığını anlatacağım.
Onarım işleri ikide birde karşıma çıkıyor ama, galiba yazmaya değmez diye burada yayınlamıyorum. Onu yayınlama, bunu yayınlama, sonunda blog sitesi dinamizmini kaybediyor. Bununla başlayalım, bakalım arkasını getirebilecek miyim.
Geçenlerde oğlumun eski Samsung televizyonu bozulmuş. İçinden patlama sesleri gelip susmuş ve bir daha da açılmamış. LE32A550P1 RXXH kodlu, 7-8 yıllık bir LED tv.
Böyle arızaları severim, cihazın tamamiyle ölü olduğu durumları yani. Zira mefta gayet kararlı bir konumdadır. Gelir gider, bazan görünür, bazan kaybolur arızaların teşhisi zor olur.
Hele cihaz tamamiyle ölü durumda ise bakacağınız yer besleme devreleridir, nereden başlayacağınızı bilirsiniz.
Neyse TV nin arka kapağını açınca karşımıza aşağıdaki manzara çıkıyor:
Bu epey eski bir televizyon. Smart TV tipinde değil, aptal bir set.
Ama Samsung’un geleneksel TV tasarımına uygun düşüyor. Yeni modellerde ekran sürücü ayrı bir grafik modül üzerinde yer alıyor.
Neyse, arkası açık iken besleme verip duruma bir bakınca hiç hayat olmadığı tekrardan doğrulandı. Kontrol edince zaten sigortanın da atmış olduğunu gördüm.
Yüksek gerilimler nedeniyle dikkatli olmak gerekiyor, hele son aylarda tek göze kalmış olmamam nedeniyle benim süper dikkatli olmam lazım. Zira 3 boyutlu göremiyorum.
Besleme modülünü çıkartıp masamızın üzerine aldık. Sigortasının atmış olması arızanın mutlaka burada olduğu anlamına gelmiyor ama gene de %90 ın üzerinde bir ihtimalle suçluyu burada bulacağız.
Bir alkol banyosu ile temizliğin ardından sıkı bir göz muayenesi ile, giriş katı ile inverter bölgesi arasındaki yüksek gerilim disk kondansatörünün bir bacağının eriyerek kopmuş olduğunu, bunun hemen yanından geçen bir köprüleme telinin de sigorta gibi eriyerek açılmış olduğunu gördüm. Bunu görmek öyle kolay oldu sanmayın, pek çok devre elemanında yaptıkları gibi bu bölgeye de silikon dökerek üzerini örtmüşlerdi.
Silikonla yapılan bu tür sabitleme yöntemlerini hiç sevmiyorum. Arızaları gizlediği gibi, tozu kiri toplayıp, nemin de etkisiyle arızalara yol açıyor. Burada silikonu bir yüksek gerilim dekuplaj kondansatörünün üzerine dökmüşlerdi. Bunun çatlak ve kıvrımları arasında biriken nemli toz da kısa devreye yol açmış.
Bu silikonla tesbit işini MOSFET lere de uyguluyorlar, son derece hassas olan gate ayakları da silikonla kaplanıyor. Neden böyle yaptıklarını anlayamıyorum. O tranzistorlar zaten soğutuculara vidalanıp bağlanmış durumda, daha da sabitlenmelerinde ihtiyaç yok ki.
Sonuçta, elimdeki hurda güç kaynaklarından söktüğüm bir 2200pF 2kV lık bir seramik disk kondansatörü kullanarak arızayı gidermiş oldum. Eriyip kopan teli de değiştirince TV miz çalıştı, bir on yıl daha hizmet eder artık.
Türlü çeşitli TFT grafik ekranları uzun zamandır STM32F103 mikrokontroller ile kullanıp duruyordum. Bunlardan bir bölümü SPI arayüzlü, kimisi de 8 bit paralel girişli ekranlar.
Kendi tasarladığım STM32 geliştirme kitlerinde ekran konnektörlerinde data pinlerini aynı porttan sıralı olarak, B8 B9 … B15 olarak verip basit bir algoritma ile sürüyorum. Ama, elimdeki hazır geliştirme kitlerinde ekrana giden bağlantılar böyle aynı porttan ve sıralı olmuyorlar.
Malzeme kutularımda yıllardır durmakta olan Nucleo kitine TFT takıp kullanmaya kalkışınca, ekran sürücü kodlarımı revize temek zorunda kaldım. Bu yayının konusu bu.
STM32 Çalışmalarımda 4-5 aydan bu yana register seviyesinde programlamayı bırakıp HAL kütüphanelerini kullanmaya başladım. STM32 CubeIDE platformunu kullanıyorum.
Bu yeni ortama adapte olmak öyle bir kaç günde olmuyor. El attığım her yeni çevre birimi ve metod ile birlikte mutlaka birkaç sorunla karşılaşıyorum, bazılarının çözümü de epey vakit alıyor.
Burada ele aldığım konu aslında temel programlama tekniklerine dikkat edildiğinde kolaylıkla savuşturulabilecek bir sorun, ama insanın bazan basireti bağlanabiliyor böyle.
STM32 ile BLDC servo motor kontrolu çalışmalarımın bu aşamasında sıra, rotor konumunun hall effect sensörlerle algılanmasına geldi.
Bu aşamaya kadar motorumu sensörsüz modda 6 adım yöntemi ile çalıştırmıştım. Bu işlemleri anlattığım iki yayın için bu linkleri tıklayabilirsiniz : Bölüm 1 , Bölüm 2
Bu bölümde; motorumuz ilk aşamadaki sürücü ve yöntem ile çalışır durumdayken, bir ikinci mikro denetleyici kullanılarak motorun hall effect sensörlerinden gelen sinyallerin algılanması, hız ve devir sayısı ölçümlerinin yapılışını göreceğiz.
Yeni bir projeye başladığımızda, daha önceki projelerimizden yararlanmak isteriz. Bu da mevcut projelerden yenisine bazı kaynak kodların aktarılmasını gerektirir.
STM32 CubeIDE platformu yeni projenin ilk adımlarında bize bir proje şablonu oluşturuyor. Bunun ardından bu şablona başka projelerimizden burada da kullanmak istediğimiz kodları aktarmakla işe başlıyoruz.
Bu yayında bu aktarma işleminin kopyala yapıştır yöntemi ile nasıl yapılacağını anlatacağım. Bir başka yöntem de Import fonksiyonunun kullanılması. Onu anlattığım daha kapsamlı yayın için burayı tıklayabilirsiniz.
Bu yayının ilk bölümünde genel bir giriş yaparak BLDC Servomotor sürüm sinyalleri hakkında bilgi vermiştim. İlk bölüme gitmek için burayıtıklayabilirsiniz.
Şimdi Nucleo STM32F302R8 Motor Kontrol kitimize STSPN7 yazılımını yükleyerek motorumuzu çalıştıracağız.
STM32 CubeIDE platformu, varsayılan ayarlar ile çalışıldığında, derleme sonrasında sadece bir .elf dosyası oluşturuyor.
Bu dosya, CubeIDE den işlemciye ST Link V2 adaptörü ile yükleme yapmak için yeterli.
Ancak bazan CubeIDE platformundan değil de doğrudan, sadece ST Link V2 ve STLink Application aracını kullanarak kod yüklememiz de gerekiyor, o zaman bir Intel .hex dosyasına ihtiyaç oluyor.
Bu yayında .hex çıktısını da CubeIDE den alabilmek için yapılacak ayarı gösteriyorum.
ST firması ürettiği mikroişlemciler ile kullanılmak üzere neredeyse sayısız örnek uygulama hazırlayıp yayınlıyor. Bunlar belirttikleri lisans kurallarına uyulması şartı ile ücretsiz, firmanın WEB sitelerinden kolaylıkla indirilebiliyor. st.com sitesinden bunlara erişilebiliyor.
Akla gelebilecek her konuda uygulama örnekleri var. Ancak bu örneklerin çoğunluğu STM32 CubeIDE değil, başka platformlar için hazırlanmış durumda.
Bunlardan AC6 System Workbench For STM32, kısaltılmış haliyle SW4STM32 platformundan STM32 CubeIDE ye aktarılmasını adım adım anlatmaya karar verdim.
DEFINES / UNDEFINES WITHIN STM32 Cube IDE CONFIGURATION SETTINGS
Kod geliştirirken aynı kodun farklı seçeneklere göre derlenmesini isteyebiliyoruz. Örneğin bu kodun SPI arayüzlü bir ekranla ya da Paralel girişli bir ekranla çalışan tipleri olsun isteyebiliriz. Ya da geliştirme süresince ekranda bir sürü debug mesajı versin ama kullanıma sürüleceği zaman bunları kapatsın (örneğin Debug ve Release tipleri) isteyebiliyoruz.
Bu durumda belirli bir sürümde istenen komut bloklarını etkinleştirirken, bu sürümde gereksiz ve istenmeyen başka blokları kapatabilmek için #define derleyici tanımlarını kullanıyoruz.