12 Aralık 2020 Cumartesi

Inbox Zero

"Inbox Zero" kavramı Marlin Mann tarafından ortaya atılmış, e-mail yönetimi ile ilgili bir yaklaşımdır. Amacı e-mail yönetimini doğru yönlendirerek kişilerin çalışma verimini arttırmaktır.


Mann'a göre gelen kutusunda bekleyen posta sayısı sadece posta sayısını değil, bunun yanında kişinin aklında, arka planda süreçli onu yoran bir iştir. Bu yüzden gelen kutusunda bekleyen posta sayısı ne kadar yüksekse, kişinin ilgisi o kadar düşük olur/olabilir. Bunun temelinde algı olarak mail kutusunun bir todo list gibi görülmesidir.


Mann bu problemin çözümü olarak bir öneri sunar. Bu öneride gelen mailler 5 aksiyonla değerlendirilir.
  1. Sil
  2. Yetkilendir/Delege et
  3. Yanıtlama (<=2 dakika)
  4. Erteleme (>2 dakika)
  5. Yapma (<=2 dakika)
Mann'ın e-mail yönetimini verimli bir şekilde işletme konusunda verdiği diğer ip uçları aşağıdaki gibidir.
  • E-mail programınızı açık tutmayın.
  • E-mail yoğunluğunuza göre gelen kutunuzu sadece belirli saatlerde kontrol edin. Yoğun mail kullanımı olan kişilerde saat başları seçilebilir. Daha az e-mail trafiği olan kişilerde ise günde iki defa yeterli olabilir.
  • İlk olarak silebileceğiniz mailleri silin veya arşivleyin
  • Sonrasında başkası tarafından yanıtlanabilecek olan e-mailleri ilgili kişilere iletin.
  • İki dakika veya daha kısa sürede cevaplanabilecek e-maillere hemen cevap verin.
  • Cevabı iki dakikadan uzun ama daha sonra cevaplanabilecek e-mailleri başka bir "yanıtlanacaklar" klasörüne taşıyın.
  • "Yanıtlanacaklar" klasöründeki e-maillere geri dönüş yapmak için gün içerisinde bir saat belirleyin ve o aralıkta tüm yanıt bekleyen maillerinize dönüş yapın.

Bu konu hakkında Mann'ın 2007 yılına ait yaklaşık bir saatlik konuşmasını da aşağıdaki videodan izleyebilirsiniz.


Referanslar:
[1] https://whatis.techtarget.com/definition/inbox-zero
[2] https://flow-e.com/inbox-zero/


7 Aralık 2020 Pazartesi

Cooperative Multitasking

 Bu yazıda cooperative multitasking (CM olarak anılacak) kavramı üzerine bildiklerimi ve gömülü sistemler üzerinde bu yapıya benzer bir çalışma metodolojisi ile nasıl geliştirme yaptığımdan bahsedeceğim.

CM kavramı non-preemptive multitasking olarakta bilinir. Temel olarak görevi taskları sıralı bir şekilde işletmektir. Bilinen modern multitasking yapılarından farkı ise önceliğe göre aktif bir task switching yapmamasıdır. CM yapısında, işlemci aynı anda bir task ile ilgilenir ve o task tamamlanana kadar diğer taskların çalışmasına izin vermez. Bu yapı Windows 3.1x'te kullanılmıştır.[1]

CM yapısı ile çalışacak bir sistemde taskların zamanları önemlidir. Bu yüzden yazılacak taskların süreleri ve gereksinim durumu iyi analiz edilmelidir. Vakit alan bir task önemli bir taskı engellerse bu sistemi verimsiz/anlamsız/zararlı hale getirebilir.

CM kavramını görselleştirmek için aşağıdaki görseli kullanalım. Burada örnek olarak Task A 20ms de bir çalışır ve task aktif olduktan sonra 3 ms boyunca iş yapar. Diğer tasklarda da benzer şekilde çalışma periyotları ve çalışma süreleri tanımlanmıştır.

İlk ve en basit kural çalışma süresi, çalışma periyodundan büyük olmalıdır. Bu ikisi arasındaki fark ne kadar yüksek olursa ilgili taskın işlemciye yükü o kadar düşük olur.



Görselde CM metodu içe çalışan bir yapı verilmiş ve Task A, B, C tanımlanmıştır. Her bir taskın çalışma sürelerine göre işlemler grafikteki gibi verilir. Burada zamanları tek tek inceleyeceğiz.
  • @10. ms Task C çalışır ve 11. ms'de biter.
  • @15. ms Task B çalışır ve 17. ms'de biter.
  • @20. ms Task A çalışır ve 23. ms'de biter. Bu esnada Task A'nın da çalışma periyodu gelir ancak Task A bitmediği için sırasını bekler. Task A biter bitmez 23. ms'de Task C başlar. 24. ms'de biter. Bu kaymadan dolayı Task C'nin bir sonraki başlama zamanı kayar ve Task C 33. ms'de çalışır.
  • @30. ms Task B çalışır ve 32. ms'de biter.
  • @33. ms Task C çalışır ve 34. ms'de biter.
  • @40. ms Task A çalışır ve 43. ms'de biter.
  • @43. ms Task C çalışır ve 44. ms'de biter.
  • @45. ms Task B çalışır ve 47. ms'de biter.
Bu yapıda en önemli konu 20. ms'de yaşanan kaymaların olabileceğidir. Bu yüzden doğru bir düzen içerisinde tasarlanmalıdır. Çok daha uzun sürecek tasklar da olabilir. Bu durumda diğer taskların kritik görevlerinin olmaması önemlidir.

Bu yapıyı kurarken genelde tüm tasklar tek bir zaman sayacı üzerine kurulur ve ilgili zaman sayacını referans alark her bir task çalışma başlangıcını belirler.

Gömülü sistemlerde çalışırken, RTOS kullanmadan geliştirilecek uygulamlarda oldukça faydalı bir yöntemdir. RTOS'lara göre eksik kaldığı bir nokta normalde delay koyarak geliştirilebilecek basit akış diyagramlarını oluşturmak için switch case yapılarının gerekmesi olabilir ancak alışkanlık sağladığınızda fazlasıyla kolaylık sağlayacaktır.

Bu yazı kapsamında interruptsız bir program üzerine konuyu anlattım. Ek ve özet bilgi olarak bu yapılar çalışırken çalıştıracağınız interruptlar ile de tam gerçek zamanlı tasklar çalıştırabilirsiniz. Kurgulanacak bu yapıda yukarıda verilen tasklar interruptlar tarafından bölünür ve sizin hem interrupt yapınız hem de ana döngü yapınız sağlıklı bir şekilde çalışabilir.

Ana döngü içerisinde yavaş toplanacak veriler, haberleşme değerlendirme algoritmaları, dosya okuma/yazma yapıları vs. geliştirilebilir. Interruptlar içerisinde ise hızlı tepki verilmesi gereken giriş/çıkış yapıları, kontrol algoritmaları, periyoda bağımlı algoritmalar vs. çalıştırılabilir.

Umarım faydalı olur.

Referanslar

[1]. https://en.wikipedia.org/wiki/Cooperative_multitasking

31 Ağustos 2020 Pazartesi

FIT (Failure in Time) ve MTBF (Mean Time Between Failure) Kavramları

FIT ve MTBF, emniyetli elektronik sistemler üzerine çalışırken bilinmesi gereken en temel kavramlardandır.

FIT (Failure in Time) bir sistemin veya komponentin, belli bir süre içerisinde hata yapma olasılığını, hatanın frekansını ifade eder. Bu kavram ilgili cihazın güvenilirliği etkiler. Bununla birlikte emniyetli sistemler genelde bir çok cihazın birleşiminden oluştuğu için her bir sistem veya komponentin FIT değeri geniş çerçevede sistemi etkiler. Bu yüzden genellikle FIT değeri düşük sistemler emniyetli sistemlerde tercih sebebi olur.




MTBF (Mean Time Between Failure) bir sistemin veya komponentin iki hatası arasında geçen süreyi ifade eder.


FIT ile MTBF arasındaki ilişki FIT = 1 / MTBF şeklindedir. Kullanıldığı yere göre farklılık gösterir ancak temelde aynı bilgiyi ifade eder.

Bir Sistemin FIT Değerinin Bulunması

Bir sistemin FIT değerini hesaplamak için çeşitli yöntemler vardır. Bu yöntemler ilgili komponentin yapısına göre değişir.
Direnç, kondansatör gibi chip seviyesidneki elemanlarda FIT genellikle fabrika içi yapılan testlerle hesaplanır. Bu hesaba ilgili üreticinin geçmiş üretim/hata raporları da etkili olur.
Büyük sistemlerde ise FIT değeri öncelikle kullanılan alt sistemlerin hata oranlarına göre hesaplanır. Uzun vadede ilgili ürünün saha dönüş raporlarına göre FIT değeri güncellenir. Bu aşamaların tamamnıda belli bir tahmin faktörü vardır.

Örnek olarak, 10 adet komponent hata yapana kadar veya 1000 saati doldurana kadar test edilmiştir. Bu testte 6 adet ürün hata yapmıştır. Bu şartlar altında ilgili ürünün FIT hesabı aşağıdaki gibidir. İlgili ürünün her bir milyon saatteki hata oranı, FIT değeri 799'dur.


FIT değeri elbette test ortamı ile de ilgilidir. Bu noktada sıcaklık önemli ve etken faktörlerdendir. FIT değerinin sıcaklığa göre değişimini hesaplamak için belirli formüller vardır ve bunlar kullanılabilir. Burada dikkat edilecek husus hedef ürünün çalışma sıcaklığına göre FIT değeri hesaplamaktır. Örnek olarak 60°C'de çalışacak bir ürün için 30°C için verilmiş FIT değerini kullanmak hata olacaktır.

Bu yazıda FIT ve MTBF kavramları hakkında genel fikir oluşturacak kadar bilgi vermeye çalıştım. Daha kapsamlı bilgi için ve uygulamaları hakkında fikir edinmek için IEC 61508 ve benzeri emniyet standardlarını inceleyebilirsiniz.

Görsel Kayakları:

5 Ağustos 2020 Çarşamba

Emniyet Kritik Sistemler

Günlük yaşantımızda, arabalarda, fabrikalarda, büyük tesislerde, günlük hayatımızda gördüğümüz veya göremediğimiz -artık neredeyse- her yerde insanlar çeşitli sistemler ile(elektronik, mekanik, elektromekanik vb.) iç içe yaşamaktadır. Sistemlerin tamamı belli koşullar altında hata yapabilir veya hatalı kullanılabilir. Bu kapsamda hata durumunda cana, mala, tesislere veya çevreye zararı dokunabilecek sistemler emniyet kritik sistemler olarak değerlendirilir. Bu sistemlerin ürünleşmesi için geçen tüm yaşam döngüsü belli standardlar dahilinde yürütülür.

Bir sistemin emniyet kritik olup olmadığı anlamak için bir soru sormak yeterlidir. “Zarar verir mi?”. Örnek olarak bir kapı turikesinin geç açılması sadece insanı biraz sinirlendirir. Ancak bir uçağın iniş takımlarının geç açılması yüzlerce hayata, ciddi mal kaybına ve çevresel zarara sebep olur. Bu örnekte olduğu gibi “Zarar verir mi?” sorusunun cevabı “Geliştirilecek sistemin emniyetli olması gerekir mi?” sorusuna da cevap vermiş olur.


Emniyet kritik sistemler hakkında geliştirilen standardlar ilk zamanlarda birçok acı tecrübe sonucunda ortaya çıkmıştır. Bu sistemlerin ilk geliştiği sektörler havacılık, otomotiv, demiryolu gibi sivil hayatla ve insanla sürekli iç içe olan çalışma alanlarıdır. Günümüzde emniyet kritik sistem geliştirme süreçleri bu iki sektörün lokomotif etkisi ile oldukça olgunlaşmıştır. Bu sayede geliştirilen teknikler ile hataları yaşamadan evvel ilgili hataları önlemek için mühendisler çalışmalar yürütmektedir. Bahsi geçen sektörlerin kendi özelleşmiş standardları vardır. Emniyetle ilgili tüm standardların şemsiye standardı ise IEC 61508'dir.


Emniyet konusunda ISO 26262 standardı otomotiv sektörü özelinde emniyetli sistem geliştirme konusunda ürünün tüm yaşam döngüsü ile ilgili çok detaylı örnekler barındıran ve eğitim kitabı tadında içeriğe sahip bir standarddır.


Otomotiv sektöründe emniyetli sistem geliştirme süreçleri -diğer sektörlerde de olduğu gibi- V model tabanlı yürütülür. Bu kapsamda aşağıdaki model takip edilir. Donanım ve yazılım gibi çekirdek geliştirme süreçlerine girmeden önce -mümkün olan- her şey sistem seviyesinde planlanır ve tasarlanır. Örnek verecek olursak yazılım yazılmadan önce yazılım testlerinin nasıl yapılacağı planlanmış olmalıdır. Bununla birlikte sistemin emniyet seviyesine göre(Otomotivde ASIL1-ASIL4, Raylı Ulaşımda SIL1-SIL4 gibi) proje yönetim süreçleri bile değişiklik gösterebilir. Örnek olarak SIL1 seviyesindeki bir ürünün yazılımını tek bir geliştirici yapabilirken, SIL3 seviyesindeki bir ürünü iki farklı ekibin geliştirilmesi gerekebilir. Farklı seviyelerde FMEA, FTA, HARA analizleri yapılır. Riskler bu analizler sonucunda tespit edilir.


Emniyetli sistem geliştirme işi oldukça zahmetli ve maliyetli bir süreçtir. Bu yüzden ISO 26262–2:2011 Annex B Table B.1’de verildiği gibi firmaların projeden önce bu kültüre hazır olmaları veya bu kültürü geliştirmeye niyetli olmaları gerekir. Aksi taktirde proje süreçleri normal bir proje ile karşılaştırılamayacak kadar detaylı ve zahmetlidir. Emniyet kritik bir projeyi bu kural ve kıstaslara uymadan geliştirecek olursanız tüm süreç emniyet kritik ürün geliştirmeye göre 3 kat daha hızlı olabilir.

Görsel Kaynakları:
  1. https://www.instron.com.tr/tr-tr/testing-solutions/industry-solutions/automotive/safety-systems
  2. https://www.axivion.com/en/p/solutions/iso-26262-compliance-141.html



4 Ağustos 2020 Salı

IEC 61508'e göre Hata Analiz Yöntemleri

Hata analizi, genellikle düzeltici eylemleri veya yükümlülüğü belirlemek amacıyla bir hatanın nedenini belirlemek için veri toplama ve analiz etme işlemidir. Hata analizi, doğru bir şekilde yapılır ve üzerinde iyileştirmeler yapılırsa para, hayat ve kaynak tasarrufu sağlayabilir. Yeni ürünlerin geliştirilmesinde ve mevcut ürünlerin iyileştirilmesinde kullanılan, ciddi bir gereksinimdir. Hata analiz yöntemleri uygulanacağı sektöre ve uygulamaya göre çeşitlilik gösterir.

Elektronik sistemlerde emniyet ile ilgili kurallar genel olarak 61508 standardında yer alır. Emniyetli elektronik ekipmanların geliştirme sürecinde hata analiz işlemleri önemli bir yer tutmaktadır. Bu kapsamda 61508 aşağıda verilen hata analiz yöntemlerini önerir.


IEC 61508–7:2010 dokümanında B.6.6 başlığı altında kullanılabilecek hata analiz yöntemleri 10 alt başlık altında sıralanmıştır. Başlıklar altında analiz yöntemleri ile ilgili bir kaç kısa açıklama, sonrasında standardlara ve çeşitli kitaplara referanslar vardır. IEC 61508 bu konu ile ilgili sadece yönlendirme niteliğindedir. Bu 10 alt başlık;

  • B.6.6.1 Failure modes and effects analysis (FMEA)-Hata modu ve etkileri analizi
  • B.6.6.2 Cause consequence diagrams-Neden-Sonuç Diyagramları
  • B.6.6.3 Event tree analysis (ETA)-Olay ağacı analizi
  • B.6.6.4 Failure modes, effects and criticality analysis (FMECA)-Hata modu, etkileri ve kritiklik analizi
  • B.6.6.5 Fault tree analysis (FTA)-Hata ağacı analizi
  • B.6.6.6 Markov models
  • B.6.6.7 Reliability block diagrams (RBD)-Güvenilirlik blok diyagramı
  • B.6.6.8 Monte-Carlo simulation-Monte Carlo simülasyonu
  • B.6.6.9 Fault tree models-Hata ağacı modeli
  • B.6.6.10 Generalised Stochastic Petri net models (GSPN)-Genelleştirilmiş stokastik petri ağı modelleri

Gelecek yazılarda hata analiz yöntemlerinden bir kaçının detaylı açıklamasını yapacağım. Bunların başında FMEA ve FTA gelecektir.

Emniyetle kalın!


2 Ağustos 2020 Pazar

Elektronik Emniyet Sistemlerinde IEC 61508'e göre SIL Nedir?

SIL (Safety Integrity Level) sınıfı e/e/ep bir cihazın emniyet bütünlük seviyesini ifade eder. SIL ifadesi bir riskin ilk değerine görece ne kadar düşürüldüğünü ifade eder. SIL değeri arttıkça riskin gerçekleşme olasılığı düşer.


SIL seviyeleri 4 sınıfa ayrılır ve bu 4 sınıf kullanım sıklığına göre 2 ayrı değer tablosuna göre değerlendirilir. Kullanım sıklığı konusunda ise “düşük talep/rağbet”(low demand) ve “yüksek talep/rağbet(high demand) veya sürekli(continuous)” modları vardır.

Düşük talep modundaki bir emniyet fonksiyonu -uygulamanın yerine göre- çok nadir ortaya çıkacak bir olayı ifade eder. Yüksek talep veya sürekli talep ise yine -uygulamanın yerine göre- sık veya sürekli çalışacak bir emniyet fonksiyonunu ifade eder. Örnek olarak bir valfin açılıp kapanması emniyet kritik olaysa düşük talep olarak sınıflandırılabilir. Aynı hatta akan sıvı miktarının debi ölçümü emniyet kritik ise ilgili fonksiyon yüksek talep veya sürekli talep olarak sınıflandırılabilir. Bu tarz örneklerin uygulamanın yerine göre değişeceğinin tekrar altını çizmek gerekir. Başka bir uygulamada valfin açılıp kapanması yüksek talep modunda tanımlanabilir.

Düşük talep modunda sınıflandırılmış bir sistemin hata yapma oranları aşağıdaki tabloda verilmiştir. Tablodaki ortalama hata yapma olasılığı [h-1] cinsindedir. Örnek olarak SIL 1 seviyesinde bir sistemin hata yapma olasılığı 10 ile 100 saatte 1 aralığındadır. SIL 4 bir sistemin hata yapma olasılığı 10.000 ile 100.000 saatte 1 aralığındadır.


Yüksek talep veya sürekli talep modunda sınıflandırılmış bir sistemin hata yapma oranları aşağıdaki tabloda verilmiştir. Örnek olarak SIL 4 bir sistemin hata yapma olasılığı 100.000.000 ile 1.000.000.000 saatte 1 aralığındadır. Bu oran 11.415 ile 114155 yıl aralığında 1 hata olasılığına denk gelir.




1 Ağustos 2020 Cumartesi

IEC 61508 Fonksiyonel Emniyet Standardı, Bölümleri ve Kısa Açıklamaları

IEC 61508, emniyetli ilgili elektrik/elektronik/programlanabilir elektronik sistemlerde fonksiyonel emniyet uygulamalarının uluşlararası standardıdır. IEC 61508, emniyeli elektronik ekipmanların SIL sınıfını belirlemek için gereken tüm çalışma, süreçleri ve yöntemleri tanımlar. Bu standard otomotiv, raylı ulaşım, proses endüstrisi gibi bir çok alanda var olan standarda rehber niteliğinde, genel kapsamlı yapıdadır.


IEC 61508 standardı 7 bölümden oluşur. Tüm bölümler toplamda 628 sayfadır. Bu bölümler;
  1. Genel gereksinimler: Projenin yaşam döngüsünün nasıl yönetileceği ile ilgili kuralları barındırır. Proje yönetimi ve dokümantasyon konularına odaklıdır. Bu dokümanda, projeye konsept fazından başlayarak en son gerçekleştirilecek doğrulama fazına kadar tüm süreçler anlatılır. Dokümanın sonunda A ekinde örnek bir dokümantasyon yapısı verilir. 66 sayfadır.
  2. Elektrik/elektronik/programlanabilir elektronik emniyet ile ilgili sistemler için gereksinimler: Projenin emniyet ile ilgili kısmının yaşam döngüsünün nasıl yönetileceği ile ilgili kuralları barındırır. Bu dokümanın eklerinde ise emniyet koşulları ile ilgili çeşitli teknikler verilmiştir. 94 sayfadır.
  3. Yazılım gereksinimleri: Yazılım geliştirme süreçleri ile ilgili yaşam döngüsü boyunca uyulacak kuralları barındırır. Eklerde bu kuralları gerçekleştirmek için uyulacak rehberler, teknikler ve örnekler bulunur. 116 sayfadır.
  4. Tanımlamalar ve kısaltmalar: 61508 kapsamındaki tanımlamalar ve kısaltmalar listelenmiştir. 38 sayfadır.
  5. Güvenlik bütünlüğü seviyelerinin belirlenmesi için yöntem örnekleri: 50 sayfadır.
  6. IEC 61508–2 ve IEC 61508–3 uygulama yönergeleri: 116 sayfadır.
  7. Teknik ve ölçümlere genel bakış: 148 sayfadır.



IEC 61508 standartının riskler hakkındaki yaklaşımı;
  • Risk her zaman vardır. Risk hiç bir zaman sıfır olmaz. Bu standardın amacı riskin ihtimalini mümkün olan en aza indirmektir.
  • Tolere edilemez riskler azaltılmalıdır.
  • Tüm güvenlik yaşam döngüsünde ele alındığında optimum, uygun maliyetli güvenlikli sistem elde edilir.

Endüstriye Özel Standardlar

IEC 61508 genel bir standarttır ve uygulandığı endüstriye göre farklılıklar içerir. Bu farklılıklar ilgili endüstrilerin kendi standardları içerisinde verilmiştir. Bunlara örnek olarak aşağıdaki standardlar vardır.
  • Otomotivde ISO 26262
  • Raylı ulaşımda IEC 62279
  • Proseste IEC 61511
  • Nükleerde IEC 61513

Emniyetle kalın!

31 Temmuz 2020 Cuma

STM32 HAL Kütüphanesi ile DMA Üzerinden ADC Okuma Hatası ve Çözümü

STM32CubeIDE ile oluşturduğum bir projede DMA üzerinden 3 kanal ADC okuması yapacaktım. Bu kapsamda ADC ve DMA birimlerini aşağıdaki şekilde düzenledim.



Aslında her şey doğru görünüyor. Bu şekilde projeyi oluşturdum ve aşağıdaki fonksiyon ile ölçümü başlattım ancak ölçüm sonunda sadece son tanımlanan ADC kanalının değerini buffer arrayin ilk elemanında görüyordum.

HAL_ADC_Start_DMA ( &hadc1, ( uint32_t * ) aADCxConvertedData, ADC_CONVERTED_DATA_BUFFER_SIZE );
Bunun problemini araştırırken code generator tarafına olan bir hatadan dolayı problem çıktığını tespit ettim. Code generator kodu aşağıdaki sırada oluşturuyor. Bu şekilde DMA ayarlarından önce ADC ayarları yapıldığı için DMA konfigürasyonu hatalı oluyor. ADC, DMA yapısı istediğimiz gibi çalışmıyor.




ADC ile DMA Init fonksiyonlarını yer değiştirdiğimizde problem ortadan kalkıyor ve ADC start fonksiyonu çağrıldıktan sonra tanımlanan buffera ADC değerleri sırasıyla yazılıyor.



Bu kısmı düzelttikten sonra ADC ölçümünü tetikleyebilir ve ölçüm verilerini ister bir periyodik interrupt içerisinde ister aşağıda verdiğim ölçüm tamamlandı interruptı içerisinde değerlendirebilirsiniz.

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *AdcHandle)
İyi çalışmalar.



30 Temmuz 2020 Perşembe

RS-232, RS-485, RS-422 Nedir? Temel Kavramlar, Açıklamalar ve Karşılaştırmalar

Bir haberleşme yapısı farklı seviyede katmanlardan oluşur. Bu yazıda bahsedeceğim RS-232, RS-485 ve RS-422 katmanları fiziksel katman seviyesinde çalışırlar. Fiziksel katman haberleşme yapılarının en alt noktasıdır.

Aşağıdaki görsellerde haberleşme yapılarının yüksek seviyeden düşük seviyeye giden genel yapısı verilmiştir. İlk görsel genel bir gösterimdir. İkinci görselde ise RS-232 ve RS-485 özelinde fiziksel katmandan uygulama katmanına giden yapı gösterilmiştir. Transfer edilecek veriye her bir katmanda çeşitli eklemeler yapılır. Bunun yapılıp yapılmayacağı ve boyutu yapıya göre değişkenlik gösterir.




Giriş


İlgili standartlar mikrodenetleyici tarafındaki seri haberleşme (Genellikle UART olarka anılır.) yapısını dış dünyaya açabilmek için kullanılır. Pratikte verinin cihaz veya sistem dışına, daha uzun mesafelere gönderilmesi için kullanılır. Bununla birlikte UART birimi alıcı-verici çifti ile iki yapı arası haberleşmeye imkan sağlar. RS-485, RS-422 gibi yapılarda çoklu haberleşme topolojileri kurulabilir.

RS-232 genellikle iki cihaz arası kısa haberleşmelerde tercih edilir.

RS-485 ve RS-422 üzerine bir çok endüstriyel haberleşme standardı inşa edilmiştir. Özellikle RS-485 yüksek hız ve sadece 2 kablo gereksinimi dolayısı ile bir çok sektör ve alanda tercih edilir. MODBUS, Profibus, BACnet gibi otomasyon standardları fiziksel katmanda RS-485'i kullanır.

RS-232


  • Single-ended. Veri GND referansına göre gönderilir.
  • RX, TX ve GND bağlantıları ile haberleşir. Hat üzerinde 2 cihaz olabilir.
  • Azami uzunluk: 15 Metre 19.2 kbps
  • Azami hız: 1 MBPS 15 Metre

RS-485


  • Differential. Veri AB arasındaki voltaj farkına göre iletilir. GND gereksinimi duymaz.
  • AB hattı üzerinden 32 alıcı/verici cihazı destekler. Bu değer kullanılan transreceiver ve sonlandırma direncine göre farklılıklar gösterebilir.
  • Azami uzunluk:1.2 KM 100 kbps
  • Azami hız: 10 MBPS 15 Metre


RS-422


  • Differential. Veri AB arasındaki voltaj farkına göre iletilir. GND gereksinimi duymaz.
  • RX+,RX-,TX+,TX- hatları üzerinden 1 gönderici 10 adet alıcıya kadar destekler.
  • Azami uzunluk:1.2 KM 100 kbps
  • Azami hız: 10 MBPS 15 Metre


Teknik Karşılaştırma Tablosu






Görsel Kaynakları:
  • https://www.omega.com/en-us/resources/rs422-rs485-rs232
  • https://iebmedia.com/ethernet.php?id=4582&parentid=74&themeid=255&hft=23&showdetail=true&bb=1
  • https://hvac-talk.com/vbb/attachment.php?attachmentid=643921&d=1447971918
  • http://www.rs485.com/rs485spec.html
  • ti.com

I2C Nedir?

Giriş


Inter-Integrated Circuit (Entegre Devreler Arası Haberleşme) genel olarak devre üzeri haberleşme yapılarında kullanılır. Sensör, işlemciler arası haberleşme veya çeşitli haberleşme arayüz entegreleri ile I2C hattı üzerinden iletişim kurulabilir. Bir master birden fazla slavein bulunduğu hattı sürebilir. Böylece master tarafında 2 pin ile bir çok çevresel birim kontrol edilebilir. Bununla birlikte tasarlanacak topolojiye göre aynı hatta birden çok master da bulunabilir.

Kıyaslayacak olursak genelde alternatifi olarak görülen SPI’a göre yavaştır. Daha az pin kullandığı için avantajlıdır. Düşük hızlarda yönetilecek çevre birimleri için mikrodenetleyicinin pin kullanımını optimize etmek için idealdir.

Örnek bağlantı yapısı aşağıdaki gibidir.


Temeller


Temel yapı olarak birimler arasında I2C hattı SDA ve SCL pinlerinden oluşur. Her iki pin normalde HIGH konumundadır. SDA Data hattının LOW a düşmesi ile haberleşme hattı iletime başlar. Yapılar SCL clock sinyali ile senkron olarak çalışır.
  • SDA: Data. Verinin o anki yönüne göre Master’dan Slave’e veya tam tersi olabilir.
  • SCL: Clock. Her zaman Master’dan Slave’lere doğrudur.


I2C hattı ile birlikte hat üzerindeki çiplerin de -özel bir izolasyon vs. yoksa- ground hatları birleştirilmelidir.

SCL sinyaline göre öncelikle masterdan hatta konuşacağı enterenin adres bilgisi ve yazma/okuma modu hatta basılır. Sonrasında ilgili çiptemn gelecek acknowlage sinyaline göre haberleşme devam ettirilir.Konuşulacak entegrenin I2C protokol yapısına göre haberleşme half duplex olarak devam eder.



I2C hattında hız değerine göre genellikle 2.2KR-10KR aralığında pull-up direnç kullanılır. Bu değere, kullanılan işlemci ve entegrelerin datasheet dokümanlarında verilen bilgilere göre karar verilir.


Kavramlar


  • Master: I2C hattını süren ana yapıdır. Genellikle miroişlemci/mikrodenetleyicidir.
  • Slave: I2C hattında bulunan slave entegrelerdir. Bir çok alternatif IC vardır. EEPROM, DAC, ADC, sensör, ekran sürücü, motor sürücü gibi çevre birimleri, CAN, Ethernet, Wifi gibi haberleşme arayüzü sağlayan entegreler I2C hattı ile çalıştırılır.
  • Başlatma Koşulu: SCL hattı HIGH’dan LOW’a geçmeden önce SDA hattı HIGH’dan LOW’a geçer.
  • Durdurma Koşulu: SCL hattı LOW’dan HIGH’a değiştikten sonra SDA hattı LOW’dan HIGH’a geçer.
  • Adres Paketi: Her bir SLAVE’e özgü, MASTER ile konuşmak istediğinde SLAVE’i tanımlayan 7 veya 10 bitlik bir veri.
  • Okuma / Yazma Biti: MASTER’ın SLAVE’e (LOW) veri gönderip göndermediğini veya ondan veri istediğini (HIGH) belirten tek bir bit.
  • ACK / NACK Bit: Mesajdaki her byteı bir onaylama/onaylama biti izler. Bir adres paketi veya veri paketi başarıyla alındıysa, alıcı cihazdan gönderene bir ACK biti döndürülür.



Görsel Kaynakları:
  • https://en.wikipedia.org/wiki/I%C2%B2C
  • https://www.circuitbasics.com/basics-of-the-i2c-communication-protocol/

SPI Nedir?

Giriş


Serial Peripheral Interface (Seri Çevresel Arayüz) genel olarak devre üzeri haberleşme yapılarında kullanılır. Sensör, işlemciler arası haberleşme veya çeşitli haberleşme arayüz entegreleri ile SPI hattı üzerinden iletişim kurulabilir.

Temeller


Temel yapı olarak birimler arasında SPI hattı MOSI, MISO, SCK ve CS pininden oluşur. Full duplex olan bir haberleşmede pinler aşağıdaki gibi tanımlanır. SPI hattı bir master tarafından sürülür ve aynı hatta birden fazla slave olabilir. Her bir slave e özel CS pini bulunur. Bu koşulda master tarafında harcanan pin sayısı 3+(hattaki chip sayısı) kadardır. CS hattı genelde LOW aktiftir ancak bazı entegrelerde HIGH aktif CS olabilir.

  • MOSI: Master Out Serial Input. Veri akışı Master’dan Slave’e doğrudur.
  • MISO: Master Input Serial Output. Veri akışı Slave’den Master’a doğrudur.
  • CLK: Clock. Her zaman Master’dan Slave’lere doğrudur.
  • CS veya SS: Chip select. Her zaman Master’dan Slave’e doğrudur.



SPI hattı ile birlikte hat üzerindeki çiplerin de -özel bir izolasyon vs. yoksa- ground hatları birleştirilmelidir.

SPI’ın genel veri/frame yapısı aşağıdaki gibidir. Her bir clock darbesi ile bir bit veri transferi gerçekleşir. SPI yapısı senkron bir yapısı olduğu için megabit seviyesinde sorunsuz haberleşme imkanı sağlar. Bazı durumlarda, genellikle slave datasheetlerine göre pull-up direnç kullanmak gerekebilir. Pull-up dirençler sinyal zamanlamalarının doğru bir şekilde çalışmasını sağlar.



Kavramlar


  • Master: SPI hattını süren ana yapıdır. Genellikle miroişlemci/mikrodenetleyicidir.
  • Slave: SPI hattında bulunan slave entegrelerdir. Bir çok alternatif IC vardır. EEPROM, DAC, ADC, sensör, ekran sürücü, motor sürücü gibi çevre birimleri, CAN, Ethernet, Wifi gibi haberleşme arayüzü sağlayan entegreler SPI hattı ile çalıştırılır.


Görsel Kaynakları:
  • https://www.allaboutcircuits.com/technical-articles/spi-serial-peripheral-interface/
  • https://tr.wikipedia.org/wiki/Serial_Peripheral_Interface

UART Nedir?

Giriş


Universal Asynchronous Receiver Transmitter (Evrensel Asenkron Alıcı/Verici) kelimelerinin baş harflerinden oluşur. Adından anlaşılabileceği gibi iki ayrı birim arasında asenkron olarak gerçekleştirilen haberleşme protokolüdür. Temel prensip olarak iki tarafın haberleşme hızını bildikleri, başlangıcı, sonu belli haberleşme yapısıdır. Arada senkronlayıcı bir sinyal olmadığı için asenkron olarak isimlendirilir. Mikrodenetleyiciler veya mikroişlemciler üzerinde gerçekleştirilen uygulamalarda sıklıkla kullanılır. Arduino gibi low-level veya Raspberry Pi gibi high-level geliştirme kartlarında muhakkak karşınıza çıkar. Anlaması, uygulaması ve geliştirilmesi basit bir yapı olduğu için bir çok uygulamanın ve sistemin temelini oluşturur. Devre içi haberleşmede kullanıldığı gibi uzak mesafelere kablolu iletimde de temeli oluşturur. RS232, RS485, RS422 gibi fiziksel katmanlara da imkan verdiği için otomasyon, kontrol, ve robotik gibi bir çok alanda kullanımı vardır. Bu katmanlar ile veri kilometrelerce uzağa iletilebilir ve bir hat üzerine ikiden fazla cihaz bağlanabilir.


Temeller


Temel yapı olarak iki birim arasında Rx ve Tx çiftineden oluşur. Karşılıklı veri alış-verişi yapabilmek için RxTx çifti TxRx çifti ile eşleşerek çalışır. Full-duplex bir UART yapısında Rx, Tx bağımsız birer modül gibi çalışır.

Aşağıdaki gibi ara bir fiziksel bağlantı olmadan direkt UART haberleşmesi kullanılacaksa ground lar birleştirilmelidir. Veri Tx hattından Rx’e gider. Pinler fiziksel olarak Tx çıkış, Rx giriş modundadır.


UART’ın genel veri/frame yapısı aşağıdaki gibidir. Tx pini normal durumda HIGH konumunda bekler. LOW’a düştüğü anda frame transferi başlar. Bu noktadan sonra UART yapısı 8 biti kendi register ı üzerine kayıt eder. Eğer stop bitini de doğru şekilde alırsa bir byte alındığına dair bir flag set eder veya ilgili interrupta girer. Tx tarafında ise Tx modülü busy flag’i düşer veya ready flag’i kalkar veya complete interruptına girebilir.


Kavramlar

  • Data Frame: Aktarılan asıl veridir. 5–9 arası değişebilir/ayarlanabilir. Bazı işlemcilerde sabitte olabilir.
  • Baud rate/Bit rate: Bir bitin gönderilme frekansı. (1/baud rate) Bir bitin iletilme süresi. 1-bit start 1-bit stop bitten oluşan bir paketin gönderilme süresi (10/baud rate) kadar sürer.
  • Start Bit: Başlangıç bitidir. Standard bir yapıda (1/baud rate) kadar sürer ve LOW seviyedir.
  • Stop Bit: Sonlandırma bitidir. Standard bir yapıda (1/baud rate) kadar sürer ve HIGH seviyedir. Bir hatadan dolayı LOW olarak okunursa ilgili paket hatalı olarak sınıflandırılır.
  • Parity Bit: Doğrulama bitidir. Genelde opsiyonel olarak kullanılır. Bir paket içerisindeki bitlere göre hesaplanır. Even veya Odd seçilir. Bu koşula göre hesaplanan bit pakete uygunsa paket sağlamdır. Değilse paket içerisinde hatalı bir bit vardır.

Lojik Seviye


Bu kısımda yer alan bilgiler lojik tasarım ile ilgilenen kişilerin ilgisini çekebilir. FPGA, CPLD gibi yapılarda UART modülü aşağıdaki mantıklar çerçevesinde tasarlanır. Modüllerin giriş çıkışları kullanılacak yapılara göre farklı şekillerde genişletilebilir. Örnek olarak hiç bir veriyi kaçırmamak için UART RX modülünün arkasına bir FIFO yapısı bağlanır ve ana kontrol modülü verileri FIFO üzerinden çeker. Bu durumda RX modülü ile FIFO’nun senkron çalışması için -varsa- gereken kontrol pinleri eklenir.

Bu kısımda genellikle modüllerin RTL gösterimi yer alacaktır. RTL lojik tasarımlarda register-transfer level gösterimidir.

RX Bloğu


Alıcı yapı, belirlenen UART hızının birkaç katı hızla çalışır. Örnek olarak STM32 işlemcilerde 8 veya 16 örneklem alır. Bunun sebebi alınan frame i doğrulamaktır. Bir bit gelecek zamanda farklı değerler okunursa o frame hatalı kabul edilir.

rx hattından yeni bir veri gelip iletim tamamlandığında Data_ready çıkışı HIGH olur ve ana kontrol yapısı Data_output üzerinden register a yazılan veri okunur.

TX Bloğu


Gönderici yapı alıcı yapıya göre daha basittir. Kendi içerisindeki paralel veriyi txTrigger sinyali ile UART baud rate hızında seri hattan gönderir. Genellikle ek bir doğrulama veya kontrol gerekmez.

Data_input hattındaki veri start pininin tetiklemesiyle iletime başlar ve frame yapısına uygun olarak(start bit, stop bit, parity) veri tx pini üzerinden aktarılır. Parity hesabının nasıl yapıldığı aşağıdaki şekilde de gösterilmiştir.



Görsel Kaynakları:
  • https://www.slideshare.net/n380/uart-vhdl-rtl-design-tutorial
  • https://www.allaboutcircuits.com/technical-articles/back-to-basics-the-universal-asynchronous-receiver-transmitter-uart/


Github veya Bitbucket Üzerinden Commit Paketi İndirme


Github ve Bitbucket üzerindeki bir git repodaki commiti paket halinde bilgisayarınıza indirmek için aşağıdaki linkleri kullanabilirsiniz.

https://github.com/{username}/{reponame}/archive/{commitcode}.zip
https://bitbucket.org/{username}/{reponame}/get/{commitcode}.tar.gz

Unit Step Response Grafiği Hakkında (Birim Adım Cevabı)

Bir sistemin unit step cevabı, ilgili sistemin girişine unit step fonksiyonu uygulandığında, sistem çıkışının davranışını ifade eder. Unit s...