10 Temmuz 2018 Salı

Gömülü Sistem Geliştirmeye Giriş

Bu yazımda amatör olarak mikrodenetleyici programlamaya giriş için gereken araç/gereç ve yazılımlardan bahsetmeye çalışacağım. Konuyla sadece hobi olarak ilgilendiğimden çok profesyonel araçlara ve yazılımlara genel olarak ihtiyaç duymadım. Bu işle uğraşırken her ne amaç için olursa olsun ihtiyaç duyacağınız temel araçlar genelde aynıdır. Bunları genel olarak listeleyelim:

  1. TrueRMS özellikli bir multimetre
  2. Sıcaklık ayarlı bir havya ve lehim malzemeleri.
  3. En az iki adet USB-Seri dönüştürücü.
  4. Ayarlı Laboratuvar tipi güç kaynağı
  5. Yeterli sayıda breadboard ve iletken
  6. Arduino Uno ve Arduino Leonardo
Burada değineceğim konular şahsi görüş ve tavsiyelerimden ibarettir. Elektronik ve yazılımla uğraşmak sabır ister. Unutmayın: yapacağınız çalışmalar için gerekli güvenlik önlemleri almak her teknolojik işin başlangıç noktasıdır. Eğer AC güç uygulamaları ile çalışacaksanız mutlaka uzman bir kişiden destek almalısınız. 

1. TrueRMS Özellikli Ölçü Aleti: Bir pilden tutun da bir güç kaynağı çıkışındaki gerilime kadar, bir cihazın çektiği akım, direnç, kapasite, frekans vb. büyüklükleri ölçmek için mutlaka ihtiyaç duyacağınız bir alet. Özellikle çalışmayan bir cihazda hata tespiti için kullanacağımız bir ekipmandır. Olabildiğince farklı büyüklüğü geniş aralıkları ölçebilen bir tip epeyce işinizi görür. Benim kullandığım UNI-T 61E endükans (bobin değeri) hariç birçok büyüklüğü ölçebiliyor. Bu arada pil, batarya ya da akü ölçerken muhakkak bu ekipmanlara yük bağlayın. Aksi halde yanlış ölçümler yapma ihtimali söz konusu.


UT 61E True RMS Dijital Multimetre

2. Sıcaklık ayarlı bir havya ve lehim malzemeleri: Bu konuda kişisel tercihim Hakko FX951. Ortalama bir kalite ve makul fiyatlı bir ürün. Lehimleme işlemi sırasında en önemli konu erimiş haldeki lehimin havya ucunda kalmaması ve lehim yapılacak noktaya iyi dağılması. Bu noktada havyanın ve havya ucunun kalitesi ön plana çıkıyor. Weller marka havyaları da tercih edebilirsiniz. Bu konuda en iyi ürünler JBC tarafından üretiliyor diyebiliriz. Tabi fiyatların nasıl yükseldiğini tahmin edebilirsiniz. Dinlenme modu ve kalemi sadece lehim yapılacağı zaman bir anda ısıtması güzel özellikler. Kart tamiratı yapanlar için çok farklı ürünler mevcut. Örneğin yüzey montaj elemanlar (SMD - Surface Mounted) ile çalışacaksanız mutlaka havalı havya ucu olan bir ürün almalısınız. Bu arada yapacağınız lehimleme işlemine göre uç seçmelisiniz. Örneğin bir baskı devreye yüksek güç elemanları monte ederken ince uçlu havya kullanımı zaman kaybetmenize neden olacaktır.

Hakko Soldering Station, FX-951-66
3. USB-Seri Dönüştürücü: Tasarımını yaptığınız cihaz bağımsız çalışacak olsa bile geliştirme sürecinde hata ayıklama gibi amaçlarla muhakkak ihtiyaç duyacağız modüllerdir. USB seri dönüştürüler RS232 ve 3.3V ya da 5V lojik seviyelerle çalışan modelleri mevcuttur.Eğer RS232 standardına da ihtiyaç duyuyorsanız ona göre bir dönüştürücü seçebilirsiniz. Eğer 5V ile çalışan bir mikrodenetleyicili tasarım yapıyorsanız kullandığınız dönüştürücü RX ve TX (veri alma ve gönderme uçları) uçları 5V toleranslı olmalıdır. USB standardında güç 5V iletişim ise 3.3V gerilim seviyesi ile yapılmaktadır. Benim tavsiyem FTDI serisinden bir USB-Seri dönüştürücü ile çalışmanız. FT232RL, FT232HL, FT2232D, FT234 vb. 
SparkFun USB to Serial Breakout - FT232RLcp2102 ile ilgili görsel sonucu
Piyasada çok farklı marka ve özellikle USB-Seri dönüştürücü tipleri mevcut. Başka bir ürün SiLabs tarafından üretilen CP2102 tümdevresine sahip dönüştürüleri de tercih edebilirsiniz. Hem FTDI hem de SiLabs, dönüştürücüleri ile haberleşmek için kullanıcılarına API (Application Programming Interface) sağlıyor. Böylelikle veri transfer işleminde işletim sistemi standart arabirimlerinde ulaştığınız hızların üstüne çıkma fırsatına sahip oluyorsunuz. Örneğin FT2232D tümdevresinde seri iletişim kanallarından birini JTAG moduna ayarlayıp mikrodenetleyici üzerinde hata ayıklama işlemi bir yapabiliyorsunuz. CH340 ve PL2303 gibi tümdevleri içereden dönüştürücü modülleri de var ancak siz ilk iki seçeneğe yönelin. Bu konuda fiyat farkını göz önünde bulundurmayın derim.

USB-Seri dönüştürücü alırken dikkat edilmesi gereken diğer bir konu ise dönüştürücü üzerinde tümdevrenin RTS ve CTS gibi uçlarınına erişim imkanı olmasıdır. Bu uçlar kontrol uçları olup el sıkışmalı seri iletişim (handshaked communication) ayrıca mikrodenetleyicilere program aktarırken lazım olabilmektedir.

4. Ayarlı Laboratuvar tipi güç kaynağı: Yapacağınız çalışmaya göre yeterli gücü sağlayan en az bir ayarlı güç kaynağı edinmeniz şart. Laboratuvar tipi güç kaynakları birçok çalışma için işinizi görecektir. Aşağıda verilen fotoğraftaki gibi bir ürün tercih edebilirsiniz. 


0-30 Volt 2 Amper Ayarlı Güç Kaynağı (RXN-302D)

Yüksek frekanslı ya da ani güç değişimlerinin çok olduğu uygulamalar için daha profesyonel ürünlere yönelmeniz gerektiğini de hatırlatalım. Şu fotoğraftaki ürünler de bu konularda ne kadar farklı özellik ve kalitede güç kaynağı opsiyonu olduğunu göstermektedir:


keysight power supply ile ilgili görsel sonucu



Burada önemli yapacağınız uygulamaya göre güç kaynağınızın tipi ve güç kaynağınızdaki kondansatörün bile uygulama performansına etki edebileceğini göz önünde bulundurmaktadır. Eğer bir devrede kararlılık sorunları yaşıyorsanız mutlaka güç kaynağınızı da değiştirip test edin derim. Piyasada genellikle anahtarlamalı tip AC/DC adaptörler ya da güç kaynakları bulunmaktadır. Örneğin GM862 GSM ünitesine güç kaynağı seçerken yapmış olduğum bir hata beni epey uğraştırmıştı. Kaliteli olduğunu düşündüğüm 5V 2A'lik bir güç kaynağı, modül GSM ağına kendini kaydederken reset durumuna geçmesine neden oluyordu. Bunun sebebi ise adaptörün, GSM modemin ani güç değişim talebine tepki verememesi idi.

Eğer çok pahalı güç kaynakları da almak istemiyorsanız bir ATX güç kaynağını (bilgisayar güç kaynağı) da işleriniz için kullanabilirsiniz. Şu fotoğraftaki gibi bir ürün epeyce işinizi görecektir (ATX Breakout):


atx breakout board ile ilgili görsel sonucu 

Bu kartın üzerinde sıfırlana sigorta (resettable polyfuse) yardımıyla koruma elemanları da yer almaktadır. DİKKAT: Anahtarlamalı güç kaynağı çalışma şekli itibariyle tehlike arz eder. Çalışma esnasında dışına dokunmayın ve kendinizden de uzak tutmaya özen gösterin. Kendi adaptörünüzü de tasarlamak için gerekenleri başka bir yazımızda ele alacağız. O yazımızda regülatör tümdevresi ve kondansatör seçimi gibi konulara da değineceğiz.

4. Yeterli sayıda breadboard ve iletken: Eğer mikrodenetleyicili devreler ile çalışma yapacak yapacaksanız kaliteli bir breadboard a ihtiyacınız var. Board üzerinde kurduğumuz devrenin de iletkenlerinin münkün olduğunca kısa olması gerekiyor. Örneğin mikrodenetleyiye saat frekansı sağlayan bir kristalin denetleyici uçlarına mümkün olduğunca yakın tutulması gerekir. Eğer kullandığımız elemanlar arasında yüksek hızda veri akışı var ise iletken kalitesi bile ön plana çıkıyor. 
Jumper Wires Premium 6" F/F Pack of 10

Örneğin sparkfun geçiş iletkenini (jumper wire) yüksek frekanslı çalışmalarda sorun çıkarmayan bir ürün olarak tavsiye edebilirim. Breadboard üzerinde çalışırken de CAT5 veya CAT6 ağ kablolarından kesebileceğiniz bakır kablolar işinizi görecektir.


5. Arduino Uno ve Arduino Leonardo: Geldik yapacağımız çalışmanın beyin bölümüne. Yapacağımız çalışmanın akışını kontrol eden denetleyici eleman ve aslında bir mikrobilgisayar olan mikrodenetleyicili kart: Arduino Nano. Arduino Nano, Arduino geliştirme standardı ile uyumlu ilk kart. İtalyanların kanka tabiri aslında. Mikrodenetleyici ile geliştirme işini çok kolay hale getiren işlevleri ve çalışma biçimi ile PIC16 serisi sevmeyenlerin can dostu ve en büyük yardımcısıdır. Bugün sağladığı API ve birçok mikrodeneyleyici ile uyumlu olması sayesinde kendini kabul ettirmiştir. Üzerinde barındırdığı önyükleyici (bootlader) sayesinde mikrodenetleyicinin UART portu aracılığı ile yaptığınız programı direkt olarak karta aktarabiliyorsunuz. Özet olarak ek bir programlama aracına ihtiyacınız yok! Geliştirme ortamı ise ücretsiz ve Windows, Linux, Android ve MacOS'ta çalışabiliyor. Aşağıdaki fotoğraftaki şu an güncel olan Arduino UNO modelini görüyorsunuz. Bu kartın avantajı DIP paketli AVR işlemci içermesi. Geliştirme süreci sonrasında bu denetleyiciyi çıkarıp projenizde kullanabilirsiniz. Bu kartın SMD paketli modelleri daha ise daha ucuz. Piyasada ekonomik fiyatlı kolanları da mevcut. Ama kalite farkı da göz önünde bulundurulmalı.

arduino uno ile ilgili görsel sonucu


Bir adet Arduino UNO bir adet de Arduino Leonardo (veya Arduino Pro Micro) edinmek en mantıklısı aslında. Arduino UNO işin standardı. Arduino UNO da bir adet donanımsal seri port modülü var (Bkz. Atmega328 datasheet). Arduino Leonardo da ise bir adet USB üzerinden çalışan bir adet de ekstra (Uart1) modülü mevcut. Projelerinizde muhakkak ikinci bir seri porta ihtiyaç duyuyorsuz. Örneğin ESP8266 WiFi modül ya da bir GPS modül kullanıyorsanız bu kaçınılmaz. SoftwareSerial adlı kütüphane ile yazılımsal seri port kullanmanız da mümkün ancak yüksek hızlara sorun yaşamanız kaçınılmaz. Bir işin donanımı varsa onu kullanmak en mantıklısı.


kullanmanız da mümkün ancak yüksek hızlara sorun yaşamanız kaçınılmaz. Bir iş için özelleşmiş bir donanım varsa onu kullanmak en mantıklısı.

4 Temmuz 2018 Çarşamba

STM32 ile UART üzerinden program yükleme

Eğer elinizde SWD destekli bir debugger yoksa bir mikrodenetleyiciye yazılım atmak çok zor bir hale gelebiliyor. Kişisel tavsiyem bir adet J-Link v9 ve sonrası bir debugger almak. Bu ürünün klonlarına da ulaşmak mümkün. Kullandığım bütün mikrodenetleyici geliştirme araçları (Embitz, Atollic, vb.) J-Link'e destek veriyor. Genelde OpenOCD kullanan debugger lar ile de çalışabilirsiniz ama performans olarak ULINK ya da J-Link'in native modundan geride kalıyorsunuz. Düşük fiyatı ile popüler olan pratik bir kart olan bluepill (geliştirici terimi artık standart haline gelmiş) ile SWD destekli debugger kullanmak gerekiyor. Sadece ST serisi işlemcilerle çalışacaksanız STLink debugger edinmek en mantıklısı. Bluepill kartı üzerinde STM32F103C8T6 işlemcisi var. Bu işlemci 64KB sabit belleğe (program belleği) ve 20KB SRAM (geçici bellek) sahip olan Cortex M3 tanımlarına göre üretilmiş bir işlemci. Ek olarak üzerindeki USB bağlantısı da birçok çalışma için esneklik sağlıyor. Bu işlemcinin çalışma hızı ise 72 MHz. bluepill kartı üzerinde SWD ile ST-Link v2 testini yapmıştım. Bu debugger Arduino STM32 ortamı ile çalıştığınızda da direkt program upload işlemi için kullanılabiliyor.

İlgili resim

Fakat elinizde bu debugger olmadan da bluepill e program atabilirsiniz. Ben bu işlem için mbed bulut derleyicide STM32F103 için hazırladığım programı USART modülü üzerinden işlemciye yüklüyorum. Bu konunun detayları için aşağıdaki bağlantıya başvurabilirsiniz:

https://os.mbed.com/users/hudakz/code/STM32F103C8T6_Hello/

Bu işlem için RTS ve DTR pinleri açıkta olan bir USB-Seri dönüştürücüye ihtiyaç var. Ben sparkfun üretimi USB-Seri dönüştürücü kullanıyorum. Bluepill ile dönüştürücünün bağlantıları şu şekilde:

RTS: R (Reset)
DTR: BOOT0 (Bootloader Setting)
RXD: PA_9
TXD: PA_10

Bu karta program atmak için ise komut satırından çalışan stm32flash aracını kullanacağız. Bu aracı https://sourceforge.net/projects/stm32flash/ bağlantısından indirebilirsiniz.

mbed bulut derleyiciden indirdiğiniz ikili program dosyasını aşağıdaki komut satırı ile karta yüklüyoruz.

stm32flash -i -R -i rts,-rts,-dtr,dtr:rts,-dtr,dtr -g 0x8000000 -b 921600 -w app.bin COM7 Bu işlem ile aslında işlemcinin BOOT0 ucunu lojik "1" seviyesine çekip RESET ucu ile yeniden başlatıyoruz. Bu şekilde işlemci UART Bootloader modunda başlıyor. Geriye kalan UART üzerinden programın ikili halini bayt bayt işlemciye aktarmak. Ben yükleme hızı olarak -b parameteresi ile 921600 BAUD kullandım. Eğer sorun yaşarsanız 115200 hızından başlayarak da farklı hızları deneyebilirsiniz. Programı belleğe yazma işini bootloader yazılımı yapıyor. Başarılı yükleme sonrasında yapılan ikinci reset işlemi program otomatik olarak çalışmaya başlıyor. İşte ekran çıktısı: