Ana içeriğe atla

STM32 Kullanarak I2C İle Oled Kullanımı


I2C NEDİR ?
I²C (Inter-Integrated CircuitPhilips tarafından geliştirilmiş, düşük hızlı çevre birimlerini anakartgömülü sistem ya da cep telefonu'na bağlamak için kullanılan toprağa referanslıçok denetleyicili bir seri veriyoludur. 1990'ların ortasından beri Siemens (sonrasında Infineon Technologies), NEC, STMicroelectronics (öncesinde SGS-Thomson), Motorola(sonrasında Freescale Semiconductor), Intersil gibi pek çok firma NXP (öncesinde Philips Semiconductor Division) I²C-sistem standartıyla tam uyumlu ürünler piyasaya sürmüşlerdir.
1 Ekim 2006 itibarıyla ürünlerinde I²C protokolünü kullanmak isteyen firmalar için lisans ücreti ödeme zorunluluğu ortadan kalkmıştır, ancak NXP tarafından tahsis edilen I²C bağımlı birim adresine sahip olabilmek halen ücrete tabidir.
I²C pull-up dirençleriyle pozitif beslemeye bağlanmış iki adet çift yönlü open-drain sinyal hattı kullanır (Serial Data Line(SDA) ve Serial Clock (SCL)). Daha düşük ya da yüksek besleme gerilimlerine de izin verilmekle birlikte tipik olarak kullanılan besleme değerleri +5 V ya da +3.3 V'tur.
I²C referans tasarımında 16 adet özel amaçlı adres içeren 7-bit adres bölgesi mevcuttur, dolayısıyla aynı veriyolu üzerinden en fazla 112 adet birim birbiriyle haberleşebilir. Sık kullanılan I²C veriyolu hızları 100 kbit/s standart mod ve 10 kbit/s low-speed modu dur, ancak isteğe bağlı olarak daha düşük saat frekanslarına da izin verilmektedir.
Son I²C sürümleri daha fazla birime daha hızlı olarak hizmet verebilmektedir (400 kbit/s Fast mode, 1 Mbit/s Fast mode plus ya da Fm+, ve 3.4 Mbit/s Yüksek Hızlı Mod). Bu hızlar PC'lerden ziyade gömülü sistemlerde kullanılmaktadır. Ayrıca 10-bit adresleme modu gibi diğer özellikler de mevcuttur.
















İLETİŞİM AKIŞI :
I2C master modunda bir veri aktarımı başlatır ve bir clock sinyali üretir.Veri aktarımı her zaman bir START koşulu ile başlar ve bir STOP koşuluyla son bulur.
Bu koşullar master modda yazılım tarafından üretilir.
Slave modda ise arayüz kendi adreslerini(7 veya 10-bit) ve genel çağrı adresini (General Call Adress) tanıyabilir. Genel çağrı adresi tespiti yazılım tarafından aktif veya pasif hale getirilebilir.


Transferi başlatmak için önce bir start biti gönderilir,daha sonra 7-bit slave adres gönderilir. 8. bit ise read veya write komutunun hangisi olduğunu belirtir. 9. bit kontrol bitidir(acknowledge) komutun alınıp alınmadığını kontrol eder eğer komut doğru iletildiyse veri gönderilecek,doğru değil ise iletim durdurulacak.Data gönderildikten sonra kontrol biti tekrar verinin gidip gitmediğine bakacak eğer veri gönderilmiş ise STOP biti iletimi durduracak ve iletim tamamlanmış olacak.

STM32 I2C ÖZELLİKLERİ:
·        
      Slave ve master modları için seçenek.
·        Çoklu master yeteneği (Birden fazla master device kullanılabilir.)
·        100kHz-400kHz-1MHz hız seçenekleri.
·        7-bit ve 10-bit adres seçeneği.
·        Çoklu 7-bit slave adres seçeneği.
·        Bütün 7-bit adreslerde kontrol edebilme yeteneği.
·        Programlanabilir kurulum ve bekleme zamanı.
·        Kolay yönetilebilir etkinlikler.
·        İsteğe bağlı esnek clock seçeneği.
·        Yazılımsal reset.
·        DMA özellikli 1-byte tampon bellek.
·        Programlanabilir analog ve dijital gürültü filtreleri.
     
     KEIL HAL LIBRARY I2C FONSİYONLARI :


I2C_HandleTypeDef  (&hi2c) = I2C tip tanımlaması yani hangi I2C yi kullanacağınızı belirtmek için kullanılır.

HAL_I2C_Init()= I2C yi başlatmak için gerekli olan fonksiyondur.

HAL_I2C_Master_Receive(I2C_HandleTypeDef *hi2c, uint16_t DevAddress, uint8_t *pData, uint16_t Size, uint32_t Timeout) = Master device ın veri almasını başlatmak için kullandığımız fonksiyondur.
DevAddress: Master device ın I2C için kullandığı adres.
*pData : Gönderdiğin data için kullandığın pointer.
Size : Datanın boyutu.

HAL_I2C_Master_Receive_DMA()= Veriyi cihaza DMA kullanarak taşı komutudur.

HAL_I2C_Master_Receive_IT()= Veriyi cihata kesme kullanarak taşı komutudur.

HAL_I2C_Master_Transmit()=Master device ın veri göndermesini başlatmak içinkullanılan fonksiyondur.

I2C İLE OLED KULLANIMI

Kullandığım oled Display Module firmasının DM-OLED13-625 1.3 inch 128x64 piksel.Bu oled SPI ve I2C protokolleriyle kullanılabiliyor ama burda anlatacağım konu I2C ile nasıl kullanıldığı.
OLED için kod yazılırken iki tane harici kütüphane eklemeliyiz bunlar SSD1306 ve FONT kütüphanesidir. SSD1306 kullanmamızın sebebi oled için gerekli olan fonksiyonların bize kolay bir şekilde sunulmuş olmasıdır.
FONT kütüphanesini kullanmamızın sebebi ise eğer biz bu kütüphaneyi kullanmamış olsaydık bir şey yazmak istediğimizde  128x64=8192 tane karede nereye yazacağımızı registerlarıyla birlikte kodlamamız gerekirdi ama kütüphanenin yazarları bizim için kodlamış biz ise bu kütüphane sayesinde  bir fonksiyonla kolayca istediğimizi yazdırabilmekteyiz.

SSD1306 FONKSİYONLARI:

ssd1306_Init()= Kütüphanenin aktif edilmesi için gerekli olan fonksiyondur.

ssd1306_Fill()=Yazdıracağınız yazının rengini belirlemek için bufonksiyonu kullanmalısınız.Siyah ve beyaz renkler mevcut.

ssd1306_UpdateScreen()=Ekrana bir şey yazdırma istediğinizde yazdırma komutunu verdikten sonra yazının ekranda çıkması için bu fonksiyonu kullanarak ekranı güncellemelisiniz.

ssd1306_WriteChar()= Char tipinde bir veri yazdırmak istediğinizde bu fonksiyou kullanbilirsiniz.

ssd1306_SetCursor()= Yazdırmak istediğiniz verinin yazılmaya hangi koordinatlardan başlaması gerektiğini bu fonksiyonla belirtmelisiniz.
Eğer ekrana çember,kare,çizgi,üçge,dikdörtgen gibi şekiller çizmek isterseniz bunlarla ilgili fonksiyonlara kütüphanenizin C dosyasından ulaşabilirsiniz.

SSD1306 kütüphanesi bir çok farklı kişi tarafından yazılmıştır bazılarında sayıları(integer,float..) yazdırmak için fonksiyonlar tanımlanmıştır. Benim kullandığım ktüphanede ise böyle bir fonksiyon içermediği için standart input/output (stdio.h) kütüphanesini aktif ederek orada bulunan sprintf() foksiyonu ile yazdırdım.Bir özel fonksiyonla yazdırmaktansa bu yolla yazdırmak daha kolay.


OLED DEVRESİNİN KURULUMU:

Yaptığım devrenin anlatımı olarak LM35 sıcaklık sensöründen ADC ile aldığım veriyi I2C ile OLED ekranına yazdırmak.




Burada LM35 in data bacağıyla kapasitenin + ucu ,GND si ile kapasitenin – ucu bağlanmıştır.Bunun sebebi LM35 in gürültülerden kurtulup daha sağlıklı bir ölçüm yapabilmesi içindir.

Anlatmak istediklerim bu kadar soru ve önerileriniz için ulaşabilirsiniz. Gerekli linklere bağlantılardan ulaşabilirsiniz.






Yorumlar

Bu blogdaki popüler yayınlar

Decoupling Capacitor(Dekuplaj Kapasitörleri)

DECOUPLING CAPACITOR( DEKUPLAJ KAPASİTÖR ) Devrede gürültü istenilmeyen bir durumdur. Gürültüyü engellemenin en kolay yollarından biri ise dekuplaj kondansatörü kullanmaktır. Gürültüyü engellemek yani düzgün voltaj sağlanması ve düzgün frekans kontrolü yapılabilmesi için kullanılmaktadır.  Bu bağlantı şekli elektronik devrelerin çalışması için son derece önemlidir. Hatta çalışmayan pek çok elektronik devre, gürültüye maruz kalan bir eleman yüzünden çalışmamaktadır. Eğer bir elektronik devre tasarlıyor iseniz gürültülere dikkat ederek doğru şekilde gürültüleri toprağa göndermelisiniz. Özellikle gürültüden çabuk etkilenen ve frekansların sizin için önemli olduğu devrelerde kullanmanız gerekir. Eğer bu kapasitörleri seri bağlarsanız DC yalıtmış olursunuz,paralel bağlar iseniz AC yalıtmış olursunuz. Hidroist ekibinin en çok kullandığı yer ise ST mikroişlemcilerinin devreleridir. Bunun sebebi ise mikroişlemcilerin veya harici kristallerin gürültüden etkilenmemesi ve az da olsa voltaj

Nextion HMI Ekran Kullanımı

NEXTION EDITOR NEDİR NASIL KULLANILIR ? İnsan ve makina arasındaki iletişim geçmişte çoğunlukla göstergeler, düğmeler, vanalar ve kollarla sağlanırken, artık günümüzde renkli ekranlar ve bu ekranların üzerinde bulunan dokunmatik paneller vasıtasıyla sağlanıyor. Bu durumda biz elektronikçilere anlaşılır ve estetik görsellerle süslenen ve karmaşıklığa sebep olmayacak şekilde makinalara komuta edilebilecek ara yüzler tasarlamak düşüyor. Bu ara yüzleri hazırlamak her zaman kolay olmayabiliyor. Var olan ara yüz tasarlama güçlüğünü en aza indirmek için, Itead firması Nextion ismini verdiği HMI (Human Machine Interface – İnsan makina arayüzü) ürünlerini piyasaya çıkartmıştır. Bu ürünler sayesinde karmaşık TFT ekran kullanma algoritmalarını hiç kullanmak istemeyen veya kısa zamanda proje üretmek isteyen kişiler hedeflerine kolayca ulaşabilmekteler. Nextion HMI aslında bir TFT ekran ve üzerindeki dokunmatik panelden, dahili işlemcisi ve dokunmatik kontrolcüsü bulunan bir sistem olarak ta