Sıfırdan STM32F0 Dersleri – SPI (OLED Display)

stm32f0discoveryBu yazıda SPI kullanımı öğrenerek bir OLED Display süreceğiz.Başlamadan önce ben 128×64 OLED Display kullanacağımı belirteyim.Bu SSD1306 ile sürülen bir Display.Sürücü dosyası mevcut gerekli kodları paylaşacağım.Bu örnek de SPI ile süreceğimiz OLED resmi aşağıda mevcut.Serial Peripheral Interface Bus ya da SPI veri yolu full duplex modda çalışan senkron bir seri veri bağlantısı standardıdır.Master-Slave şeklinde çalışır.Yani bir Master ile bir çok Slave ile haberleşebilirsiniz.

 

mhz-pziwk8m5dhbs3hrslhq

Birden çok Slave için CS pini kullanılır. Temelde 4 pin ile kullanılır.Bu pinler MOSI, MISO, SCLK, CS dir.

  • MOSI = Master Out Slave In(Master data gönderir Slave alır gibi düşünülebilir)
  • MISO = Master In Slave Out (Master data alır, Slave gönderir gibi düşünülebilir)
  • SCLK = Serial Clock (Seri Clock pinidir)
  • CS/SS = Chip Select/Slave Select

Bazı işlemciler de MOSI = SDO (Serial Data Out) ve MISO = SDI (Serial Data In) olarak görebilirsiniz.
Bağlantı şekli şöyledir.

381px-spi_single_slave-svg

Burada CS/SS pini donanımsal olarak 1 adet mevcuttur.Fakat biz GPIO(Out) olarak tanımladığımız pinleri CS/SS olarak kullanabiliriz.Birden çok Slave kullanımı için bağlantı şekli aşağıdadır.363px-spi_three_slaves-svg

Hangi CS/SS pinini LOW’a çekersek, o Slave ile haberleşiriz.Diğerleri HIGH konumunda olmalı.Devrenizde bir tane Slave var ise Slave’in CS/SS pinini direk LOW’a bağlayabilirsiniz.
SPI da daha göndermeyi şu şekilde yorumlayabiliriz.Elimizde bir hex sayı olsun bu sayıyı göndermek için yapılan işlemler şu şekildedir. Önce Hex sayının bitlerini sırayla tek tek al.
Baktığımız bit 1 ise MOSI’yi HIGH, 0 ise LOW yap ve SCLK ile bir Clock Pals ver.Bu şekilde 1 bit gönderildi. Bunu uygulamak için 74HC595’i inceleyebilirsiniz. Diğer bit için aynı işlemi yap. Bu fonksiyonu şu şekilde oluşturabiliriz.

Tabi bu yazılımsal SPI.Biz donanımsal olarak bunu SPI_SendData8 fonksiyonu ile yapacağız.Kodlara geçmeden önce bir iki noktadan daha bahsetmek istiyorum ki bu çok önemli.
SPI Modları denen bir durum var.Genelde şu şekilde kullanılıyor.”MODE 0,0, MODE 0,1″ gibi
Bu mod kavramını belirleye 2 unsur bulunmakta.Bunlar CPOL ve CPHA

  • CPOL = Clock Polarity
  • CPHA = Clock Phase

Bu parametreler 1,0 değerlerini alıyor.Kullanacağınız cihaz hangi modda çalışıyor ise ona göre ayarlamalısınız. Bu kavramlar SCLK pininin karakteristliği ile alakalı bir durum. Bunu en iyi şu şekilde gösterebiliriz.

spi_edges

Detaylar için :
http://dlnware.com/theory/SPI-Transfer-Modes
http://www.rosseeld.be/DRO/PIC/SPI_Timing.htm

Linklerini inceleyebilirsiniz.Kaynak olarak kullandım.
Bu arada bu uygulamada MISO kullanmayacağız sadece OLED ekrana yazı basacağımız için ekrana data gönderme yani MOSI kullanacağız.Maalesef elimde SPI dan Data alabileceğim donanım bulunmuyor. Ama siz mevcut ise 2 kiti veya başka bir donanım ile bu işi yapabilirsiniz.SPI da Receive kesmesi mevcut.
Kod kısmında yapmamız gereken ilk adım Clockları vermek.

Şimdi GPIO hazırlama işlemini gerçekleştirelim.SPI1 kullanacağız.SPI1 in pinleri A portunun 4,5,6,7 .pinlerine denk geliyor.Başka pinler içinde kullanılabilir.Bunu Datasheetden öğrenebilirsiniz.Bu pinler için AF0 kullanıldığını da belirtelim.
Bu uygulamada CS pinin yazılımsal olarak kullanacağımdan dolayı C.1 ‘i CS olarak kullanacağım.Aslında tek Slave olduğu için GND ye çekebiliriz fakat kütüphane bu tanımlamayı kullanıyor.Bir diğer pin ise C.0.Bu Displaye özel bir pin.D/C ye bağlanacak.Bu pin 0 da iken komut(command) 1 de iken veri(data) alacak.Son olarak AF ile SPI pinsource larını belirtiyoruz.

A4 = CS/SS/NSS
A5 = SCLK
A6 = MISO
A7 = MOSI

SPI ayarların da öncelikle Structure tanımlıyoruz.

SPI ayarlarında sadece gönderme yapacağımız için Tx modu seçiyorum.Master moda ayarlayıp.CPOL ve CPHA ayarlarını yapıp CS pinini yazılımsal olarak ayarlıyoruz.Gönderme MSB ile başlayacak ve bölücü ayarı 2(maksimum) yani çalışma frekansı / 2 den SPI 24 MHz de çalışacak.Son olarak Rx kesmesini kapatıp ayarları yüklüyoruz ve SPI1’i çalıştırıyoruz.

SPI hazırlama bittikten sonra Oled kütüphanesinin fonksiyonları ile ekrana yazı basabiliriz.

SSD1306.c

 

SSD1306.h

 

Font.h

SPI hakkında anlatabileceklerim bunlardan ibaret.Açıklamalarım da herhangi bir hata görürseniz yorum veya mail yolu ile bildirebilirsiniz.
Ve son olarak uygulamadan bir kare.2015-07-01-12-54-12

 

You may also like...

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir