STM32F103C8 ile Standart Peripheral Library Dersleri |
3. Bölüm
Geçtiğimiz derste GPIO birimini nasıl çıkış olarak kullanabileceğimizi öğrenmiştik. Bu yazımızda GPIO birimini nasıl giriş olarak kullanacığımızı, dış dünyadan nasıl dijital okuma yapabileceğimizi öğreneceğiz.
25.03.2020 tarihli yazı 6565 kez okunmuştur.
Giriş Modları
GPIO_Mode_IPD
Bu mod girişi pull down direnci ile çalıştırır. Pull down giriş için harici bir direnç eklemenize gerek yoktur. Burada mikrodenetleyicimiz dahili pull down direncini kullanır. Pull down direnci ile girişimiz normalde lojik 0 okuma yapar. Ama butona basarsak veya tetikleme sinyali gelirse lojik 1 okuma gerçekleştirir.
GPIO_Mode_IPU
Bu mod ise pull down modunun tam tersi şekilde çalışır. Dahili pull up direnci ile normalde lojik 1 okuma yaparken butona basılma ile lojik 0 okuma gerçekleştirir.
GPIO_Mode_IN_FLOATING
Mikrodenetleyicimize ait datasheet üzerinden bu modun bize harici sinyalin devamlı takip edildiğini , herhangi bir sinyal yoksa dahili Schmitt Trigger devresinin pin üzerinde ki gürültüyü dinleyip okuduğu gürültüye göre mantıksal seviye belirlediğini söylüyor. Türkçe çevirisi yüzer giriş olan bu mod da diğer modlardan ziyade sabit bir referans yoktur.
►İlginizi Çekebilir: STM32F103C8 ile Standart Peripheral Library Dersleri 1.Bölüm
Kavraması biraz zor olan bu modumuzu şöyle düşünebiliriz. Diğer iki modda eğer biz tetikleme sinyali vermezsek devamlı ya GND ya da VCC pinimize ulaşır. Ama bu modda pine ulaşan hiç bir şey yoktur. Yani pinin tamamen boşta durduğunu düşünelim. İşte bu durumda mikrodenetleyicimiz harici gürültülere göre bir sinyal seviyesi belirler ve bu seviyenin altını lojik 0 , üstünü iste lojik 1 olarak okur. Ayrıca bu modun daha fazla enerji tükettiğini unutmamalıyız.
STM32F103 ile Pini Giriş Tanımlama
Öncelikle; birinci dersimiz de anlattığımız ; proje oluştururken eklememiz gereken kütüphanelerin yanında GPIO kütüphanesini de eklemeliyiz ve projemizi oluşturmalıyız. Çıkış tanımlama dersimizde de yaptığımız gibi öncelikle pinimizi tanımlamalıyız.
GPIO_InitTypeDef buton;
Yine daha önce ki dersimizde olduğu gibi hangi kanalı kullandığımızı tanımlamamız gerekiyor. Bu işlemi gerek GPIO birimi olsun, gerek SPI olsun, gerek USART olsun mutlaka yapmamız gerekir. Yoksa o kanal aktif olmamakla beraber o birimi kullanamayız.
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
Hangi pinimizi ,hangi mod ile ve hangi hız ile kullanacağımızı tanımladıktan sonra artık o pinimizi giriş olarak kullanabiliriz.
buton.GPIO_Pin = GPIO_Pin_1;
buton.GPIO_Speed = GPIO_Speed_2MHz;
buton.GPIO_Mode = GPIO_Mode_IPD;
Son olarak GPIO_Init fonksiyonu ile pinimizi kullanmaya hazır hale getirebiliriz.
GPIO_Init(GPIOA,&buton);
Artık seçtiğimiz pin giriş olarak kullanılmak için hazır. Bundan sonra yapmamız gereken o pini nasıl kullanacağımıza karar vermektir. İstersek o pinden bir buton okuması yapabilir, istersek endüstriyel bir sensörün bize söylemek istediğini okuyabiliriz. Önemli olan bunu mikrodenetleyicimizin izin verdiği gibi yapmakta. Kullandığımız mikrodenetleyicinin bazı pinlerini maksimum 3.3V ile okuma yapabilirken bazı pinleri ise 5 V gerilim seviyesine toleranslıdır. Tabiki de hangi pin bizden ne istediğini datasheet ile öğreneceğiz.
Resim 1 : Pin Tablosu
Pin tablosunda Type kısmında pinimizin ne olarak kullanabileceğini görebiliriz. I/O ile belirtilen pinler hem giriş hem çıkış olarak kullanılabilir. I/O Level kısmında ise FT ifadesini gördüğümüz pinler 5 V toleransa sahiptir. Peki kullandığımız sensörün 5 V değil de 12 V veya 24 V kullandığını varsayarsak bunu nasıl okuyabiliriz? Tabi ki de ilk aklımıza gelen optokuplör ile bunu yapabiliriz.
Resim 2: Örnek Optokuplör Devresi
Giriş seviyemizi mikrodenetleyicimizin istediği seviyeye indirdiğimize göre artık pinimizi bir sorgu ifadesiyle okuyabiliriz. Burada “GPIO_ReadInputData” ve “GPIO_ReadInputDataBit” fonksiyonlarını if sorgusu içinde kullanarak girişimizi izleyebiliriz. Örnek projemiz de A1 pinini pull up modunda giriş olarak kullanımı gösterilmiştir.Örnek Proje
►st.com
►alldatasheet.com
Yazar: Yasin Tekin
YORUMLAR
Aktif etkinlik bulunmamaktadır.
- Dünyanın En Görkemli 10 Güneş Tarlası
- Dünyanın En Büyük 10 Makinesi
- 2020’nin En İyi 10 Kişisel Robotu
- Programlamaya Erken Yaşta Başlayan 7 Ünlü Bilgisayar Programcısı
- Üretimin Geleceğinde Etkili Olacak 10 Beceri
- Olağan Üstü Tasarıma Sahip 5 Köprü
- Dünyanın En İyi Bilim ve Teknoloji Müzeleri
- En İyi 5 Tıbbi Robot
- Dünyanın En Zengin 10 Mühendisi
- Üretim için 6 Fabrikasyon İşlemi
- DrivePro Yaşam Döngüsü Hizmetleri
- Batarya Testinin Temelleri
- Enerji Yönetiminde Ölçümün Rolü: Verimliliğe Giden Yol
- HVAC Sistemlerinde Kullanılan EC Fan, Sürücü ve EC+ Fan Teknolojisi
- Su İşleme, Dağıtım ve Atık Su Yönetim Tesislerinde Sürücü Kullanımı
- Röle ve Trafo Merkezi Testlerinin Temelleri | Webinar
- Chint Elektrik Temel DIN Ray Ürünleri Tanıtımı
- Sigma Termik Manyetik Şalterler ile Elektrik Devrelerinde Koruma
- Elektrik Panoları ve Üretim Teknikleri
- Teknik Servis | Megger Türkiye
ANKET