ana sayfa > Gömülü Sistemler, PSoC > PSoC Programlamaya Giriş

PSoC Programlamaya Giriş

Salı, 13 Ara 2016 yorum ekle yorumlara git
PSoC Programlamaya Giriş

Merhaba Arkadaşlar

Uzun zaman oldu yeni yazı yazmayalı. Bu yazımda PSoC programlama serisine giriş yapacağım. Basit bir dil ile vakit buldukça yeni yazılar ve uygulamalar yapmaya çalışacağım.

Aslında bende PSoC lar ile 1 haftadır uğraşıyorum. Bu yazıları yazmamdaki amaç hem kendi öğrendiklerimi pekiştirmek hemde internetteki Türkçe Bilgi eksikliğini bir nebze olsada gidermektir. Bu yüzden Yazı performansı açısından pek yeterli olmasada giriş niteliğinde yeterli olacağımı düşünüyorum.

Öncelikle PSoC nedir Ona bakalım. Wiki den alıntı yapacağım.

“Programmable System on Chip” yani PSoC’lar Cypress firması tarafından üretilmektedir. Geleneksel Mikrodenetleyici mimarisinden oldukça farklı bir yapıya sahiptir. PSoC Aygıtı, ayarlanabilir bloklar halinde programlanabilir bağlantılara sahip olan analog devre ve digital mantık yapılarından oluşmaktadır. Bu yapı kullanıcıya, isteğe göre uyarlanabilir (customized) çevrebirim (peripherals) konfigürasyonuna imkan tanır. Bu sayede birbirinden farklı olan uygulama ihtiyaçlarına yanıt verilebilir.

Genel olarak PSOC ların iç yapısı aşağıdaki gibidir diyebiliriz.

Yapı olarak bakarsak eğer Temelde bir MikroController bulunmakta. Çevresinde ise ihtiyaca göre şekillendirebildiğiniz birçok Analog ve dijital donanım bulunmaktadır.

Temelde bir mikroişlemci bulunduğunu söylemiştik. PSoC ilk çıktığında PSoC1 şeklinde piyasaya sürüldü. PSoC1 8Bit 24Mhz MC8 çekirdeği barındırmaktadır. Daha Sonrasında PSoC3, PSoC4 ve şuanda kullandığımız PSoC5LP serisi piyasaya sürülmüştür. İşlemci performansı açısından aşağıdaki tablo faydalı olur sanırım.

  • PSoC1 (8 bit M8C core 24Mhz – 4MIPS)
  • PSoC3 (Single-Cycle 8051 core up to 67 MHz – 33MIPS)
  • PSoC4 (32-Bit ARM® Cortex™-M0 CPU up to 48MHz)
  • PSoC5LP (32-bit ARM® Cortex™-M3 CPU up to 80 MHz – 100 DMIPS)

Şuan kullandığım CY8CKIT-50 kartında PSoC5LP ailesinden CY8C5868AXI-LP035 kodlu çip bulunmakta. Kullandığım kartın resmi aşağıdaki gibidir.

Şuanda bütün çalışmalarımı bu kart üzerinde yapmaktayım. Kartın üzerinde başlangıç için birçok donanım bulunmakta.

Kartın üzerinde kısaca aşağıdaki donanımlar var.

  • CY8C5868AXI-LP035 32Bit Cortex M3 PSoC
  • Dahili Programlayıcı veya Debugger
  • 24Mhz ve 32768Hz Kristal osilatör.
  • 12V dc ve 9V pil girişi.
  • CapSense Modülü
  • USB ve RS232 Portu
  • Düşük besleme gerilimleri için dahili Boost Konverter.
  • Çeşitli LED ler butonlar ve GPIO lar için header konnektörler.
  • Ve son olarak küçükçe bir BreadBoard

Kart üzerinde gömülü olarak PSoC Programmer geliyor. Yani siz PSoC creatörü yükleyince dğrudan kartı bilgisayara bağlayıp programlamaya başlayabiliyorsunuz.

Şimdi Programlama aşamasına geçelim.

PSoC 5 serisi için Psoc Creator yazılımı kullanılıyor. Daha doğrusu Psoc 3 ve üstü için Psoc creator kullanılıyor. İlk çıkan Psoc 1 serisinde ise Psoc Designer kullanılmak zorunda. PSoc Creator açıkçası bütün işimizi görüyor ve oldukça basit bir kullanıma sahip. Daha önce hiç Psoc kullanmama rağmen biraz kurcalayarak basitçe led yak söndür gibi uygulamaları çok kısa sürede öğrendim. Bilmiyorum belkide programlama ile çok sık uğraştığımdandır. :)

Programın ara yüzü aşağıdaki gibi :)

Biraz Programı tanıtıp ardından basitçe proje oluşturmayı anlatacağım.

Yukarıda verdiğim resimde kullanıcı arayüzü gösterdim. Aslında Kod kısmında Standar C ile bire bir aynı olduğunu söyleyebilirim. Standart C kuralları aynı şekilde burada da geçerli. Sol tarafta Workspace Explorer yani Proje ağacı var. Proje ağacına ekstra klasör ekleyip kendi kütüphanelerinizi projeye dahil edebiliyorsunuz. Sağ tarafta Code Explorer ve Resource Meter bulunmakta. Bunları biraz kurcalayarak öğrenebilirsiniz. Genel olarak söyleyebilirimki bir programcı için gerekli birçok özellik program ile birlikte gelmekte. Bu açıdan oldukça iyi.

Şimdi Şu blok progamlama işine bakalım. Asıl önemli kısım burası.

Proje Ağacında en üst kısımda bulunan .cysch uzantılı dosyaya çift tıklayınca Proje şemanız açılır. Bu sayfada bloklarla programlama yapılıyor.

Aşağıdaki resimde örnek bir tasarım görülmekte.

Blok programlama yapısı resimdeki gibi. Bloklarla birçok işlem hiç kod yazılmadan yapılabiliyor. Örneğin PSoC üzerindeki bir girişi mantıksal olarak doğrudan bir çıkışa bağlayabiliyorsunuz. Giriş çıkış işlemleri son derece basit.

Bloklar kullanarak Timer, PWM, ADC, SPI, I2C, UART gibi birçok donanım doğrudan kullanılabiliyor ve ayarları blok programlama esnasında yapılıyor. Yani Register seviyesine inip kod ile programlama yapmaya pek gerek kalmıyor. Bu açıdan oldukça iyi olduğunu söyleyebilirim.

Blok Programlamanın yapıldığı Proje şeması açılınca Sağ tarafta otomatikmen Component Catalog çıkıyor. Bu bizim kısaca eleman kütüphanemiz. Giriş çıkış işlemleri, Lojik işlemler, Timer Modülleri PWM modüller ve haberleşme modülleri Component katalog üzerinden alınıp sürükle bırak şeklinde çalışma alanına alınıyor. Daha sonra bu modüllerin ayarları ve yapılacaksa birbiri arasındaki bağlantılar yapılması gerekiyor.

Aklıma gelmişken! İllaki bu işe nereden başlayacağım diye düşünenler olur. Onları yönlendirmek adına bu kısmada hafifden değinip en azından bir proje oluşturmaya kadar anlatmayı düşünüyorum. Daha önce söylemiştim. Benim elimde CY8KIT-50 Geliştirme kartı var. Bu kartı referans alarak anlatımlarımı devam edeceğim.

İşl Başta PSoC creator yazılımını bilgisayarınıza kurmanız gerekiyor. Aşağıdaki linkten PSoC Cretor yazılımını indirelim. Bunu yapmadan önce Siteye kaydolmanız gerekiyor.
http://www.cypress.com/products/psoc-creator-integrated-design-environment-ide

Programı indirip kurduğunuzu varsayarsak bundan sonra yeni bir proje oluşturmanız gerekiyor. File>>New>>Project menüsünü açın. Aşağıdaki gibi bir sayfa karşınıza gelecektir.

Evet bu sayfada kullanılan PSoC seçilmesi gerekiyor. Bizim kullandığımız geliştirme kartında PSoC 5LP serisinde CY8C5868AXI-LP35 kodlu PSoC bulunmakta. Listeden kendi kullandığımız çipi seçip Next diyoruz. Sonraki açılan sayfada Örnek programmı açayım yoksa Boş Şema mı açayım diye soracaktır. “Empty Schematic” seçeneğini seçip Next butonu ile ilerliyoruz. Sonraki sayfada proje klasörünü nereye kaydedeyim diye soracak. Buradada uygun bir yere projemizi kaydedip Finish Butonu ile projemizi oluşturmuş oluyoruz.

Bundan sonra bir uygulama yapıp, uygulama üzerinde giriş çıkış işlemleri ve pin yönlendirmelerinin nasıl yapıldığını anlatmaya çalışacağım.

Uygulama 1: Yeni Proje oluşturma Giriş Çıkış işlemleri

Bu bizim ilk uygulamamız olsun. PSoC programlamaya ilişkin diğer püf noktaları ve bilmeniz gerekenleri bu şekilde uygulamalar üzerinde anlatmaya çalışacağım. Bu uygulamada ise Giriş çıkış yönlendirmelerinin nasıl yapıldığını anlatıp basitçe bir uygulama yapacağız.

Boş projemizi oluşturmuştuk zaten. Şimdi giriş çıkışları yönlendirmemiz gerekiyor. Bunun için Component Catalog kısmının arama bölümüne kısaca “Pin” yazabilirsiniz :) Aşağıdaki gibi seçenekler çıkacaktır

Aslında Component Catalog’un Arama kısmı oldukça efektif çalışıyor. Arama     kısmından aradığım bütün elemanları bulabiliyorum. Bu yüzden fazla vakit harcamamak adına arama bölümünü kullanmak lazım.

Her neyse

4 Adet pin çeşidimiz var. Bunlar Sırasıyla Analog Girişler, Dijital Girişler, Dijital Çıkışlar ve son olarak Djital giriş ve çıkışlardan oluşuyor. Bu elemanları sürükle bırak tekniği ile şemamıza sürüklüyoruz .

 

Gerekli kadar giriş çıkış ekledikten sonra ayarlarını yapmamız gerekiyor. Bu işlemde oldukça basit. O aşamaya geçmeden önce yaptığımız tasarıma bir göz atalım.

Benim kullandığım deney kartında 4 Adet LED bulunmakla birlikte iki adette kullanıcıya tahsis edilmiş buton bulunmakta. Buton Port6’nın 1. bitine bağlı durumda

LED lerden ilk ikisi yine Port6 ‘nın 2. ve 3. pinlerine bağlı. Bu bilgileri kartın şemasını inceleyerek elde etmek gerekiyor.

Şimdi Dijital input, Dijital Output gibi elemanların özelliklerine bakalım.

Şemaya eklediğiniz Giriş çıkış pinlerinin üzerine çift tıklayınca ayarlarını yapacağınız bir pencere açılacaktır.

Burada Kırmızı kutucuklar içerisine aldığım bazı önemli ayarlar var.

Type : İlk başta pinin Türünü seçiyoruz. Type isimli Grup içerisinden Analog, İnput, Output gibi ayarlar var. Dijital çıkış için anlayacağınız üzere  Digital Output seçeneğini seçmek gerekiyor. Digital Output altında HW Connection ve Output Enable gibi iki adet seçenek daha var.

Eğerki şemada Dijital pine donanımsal olarak bir bağlantı yapacaksanız HW Connection seçeneğini aktif yapmanız gerekiyor. Yok ben sadece yazılımla işimi hallederim diyorsanız bu seçeneği kaldırmanız gerekiyor. Yoksa PSoC yaptığınız projeyi derlerken “bağlantı yapmayı unuttun” şeklinde hata veriyor. Yaptığımız devre şemasında bunu görebilirsiniz. LED2 ‘de HW Connection seçeneğini kaldırdım.

Birde Output Enable var. Eğer çıkışı başka bir donanımla kontrol etmek istiyorsanız bu seçeneği kullanabilirsiniz.

Drive Mode : Bu seçenek ile çıkış türünü seçiyorsunuz. Birçok seçenek var Pull-Up, Pull-Down, Open-Drain gibi birçok seçenek var. Strong Drive Şuan kullandığımız yani Push-Pull olan.

Initial Drive State : Low veya Hıgh olmak üzere iki seçenek var. Bu işlev dijital pinin ilk kez init edildiği durumda çıkışın konumunun lojik 1’mi yoksa Lojik o’mı olacağını belirliyor.

Bunun yanı Sıra Output tab’ına tıkladığınızda çıkış akımı, Slew Rate, Drive Level gibi parametreleride ayarlayabiliyorsunuz. Pin Ayarları genel olarak bu şekilde.

Şimdi kodlama aşamasına geçmeden önce son olarak pin atamasına bakacağız.

PSoC şemasına bir giriş veya çıkış pini eklediğimiz zaman pin ataması yapmamız gerekiyor. Yukarıda LED’lerin Port6’nın 2. ve 3. bitlerine Butonun ise Port6’nın 1. bitine bağlı olduğunu söylemiştim. İşte bunların atamasını yapmamız gerekiyor.

Bunun için WorkSpace Explorer kısmında Pins Yazan yere çift tıklıyoruz. Aşağıdaki gibi bir sayfa açılacaktır.

Burada devre şemasına eklediğiniz bütün pinler sağ tarafta listelenecektir. Pin atamasını sağ taraftan yapıyoruz. Tam olarak aşağıdaki gibi.

Listeden kullandığınız çipe ait pinleri görebilirsiniz. Son olarak bu ayarı da yaptıysanız artık yazılım aşamasına geçebiliriz.

Bu işlemden sonra yazılıma geçmeden önce kodumuz bir kere derlememiz gerekiyor. Çünkü PSoC yazılımı eklediğimiz pinlere ait bazı Source ve Header Dosyaları oluşturulacaktır. Tam olarak aşağıdaki gibi.

Gördüğünüz gibi Derleme işlemi sonunda BUTTON.c, LED1.c, LED1.h gibi dosyalar projeye otomatikmen eklendi. Örneğin LED1.c içerisine LED1_Write, LED1_Read, LED1_SetDriveMode gibi fonksiyonlar otomatikmen ekleniyor. Aynı şekilde buton içinde fonksiyonlar ekleniyor. Header Dosyalarında fonksiyon başlıkları ve bazı tanımlamalar bulunmakta.

LED1_Write adındanda anlaşılacağı üzere ilgili pinin konumunu değiştirmek için kullanılıyor. LED1_Write(1) şeklinde bir kod yazarsanız ilgili pin Lojik 1 olacaktır.

Yapacağımız uygulamada iki adet led birde buton vardı. Buton ile LED1’i devre şemasında doğrudan bağlamıştık birbirine. Bu yüzden onun için kod yazmamıza gerek yok. Ama LED 2 için kodumuzu kendimiz yazacağız. Hatırlarsanız HW Connection seçeneğini kaldırmıştık.

Ben For döngüsü içerisine Basitçe blink uygulaması yaptım. LED1  Butonun konumuna göre yanıp sönerken LED2 sürekli blink yapacak. Gecikme Yapmak için PSoC’a özgü Delay fonksiyonlarını kullandım.

Kodumuz aşağıdaki gibi.

for(;;)
{
LED2_Write(1);
CyDelay(200);
LED2_Write(0);
CyDelay(200);
}

Evet ilk PSoC hakkındaki ilk yazım bu kadar arkadaşlar. Aşağıdaki video’da Uygulama videosunu görebilirsiniz.

Bir sonraki Yazımda PSoC derslerine devam edeceğim. Clock Konfigürasyon ve diğer donanım ayarları gibi işlemlerini anlatmayı düşünüyorum.

 

  1. şimdilik yorum yok.
  1. şimdilik geri bağlantı yok