Micropython Kütüphanesi "pyp" Modülü ve Temel Fonksiyonlar

neo_33

Üye
Katılım
11 May 2010
Mesajlar
2
Puanları
1
Yaş
35
Micropython Türkçe anlatımlarımız hızla devam ediyor. En son ki çalışmamızda Micropython bord incelemesini yapmıştık ve genel olarak modüllerinden bahsetmiş ve kısa örnekler yapmıştık. Şimdi bu modüller içerisinde yer alan sınıfları (class ve ya obje) ve fonksiyonları inceleyeceğiz ve detaylı bilgi vermeye çalışacağız.


Bir önceki paylaşımda Micropython Bordun pc ile bağlantısı için gerekli aşamaları vermiştik. Bu çalışmada tekrar bahsetmeyeceğiz. PC ile board arasındaki bağlantının kurulmuş ve 15000 baud da portun herhangi bir seri haberleşme programı ile açılmış olması gereklidir. TeraTerm, Hercules gibi bir seri port yazılımı kullanabilirsiniz.

Hercules programını indirmek için Linki kullanabilirsiniz.


Micropython programla dilinde bordumuz ile ilgili tüm kütüphaneler “pyp” modülünden çağrılmaktadır. Bizde başta bu modülün kendi fonksiyonları olmak üzere içerisinde yer alan tüm clasları detaylı şekilde inceleyeceğiz.

Öncelikle “pyp” modülü içerisinde yer alan fonksiyonları tanıyalım;

Micropython programlama dilinde fonksiyonları “pyp” fonksiyonları kullanabilmek için öncelikle ilk olarak borda “import pyp” komutunu göndermemiz gereklidir. Ardından kütüphane yüklendiği için fonksiyonları çağırmaya başlayabiliriz.

import pyp
Zaman işlem fonksiyonları:

Programlamada belki de en fazla kullanılan komutlar bekleme komutlarıdır. Bizde örneklerimize buradan başlayalım.

pyp.delay(ms): Verilen değer kadar bekleme yapmak için kullanılır. ms değeri yerine 1000 değerini yazarsanız 1000 milisaniye yani 1 saniye bekleme yapmış olursunuz.



pyb.udelay(us): Verilen süre kadar mikrosaniye bekleme yapmak için kullanılır. us yerine yazılan değer kadar bekleme yapar.

pyb.millis(): Bord resetlendikten sonra geçen süreyi milisaniye cinsinden geri döner. Alabileceği maksimum değer 2^30 yani 31 bittir. Buda yaklaşık 12.4 gün yapmaktadır. Tipi signed integer olduğu için bu değerden sonra negatif olacaktır.



pyb.micros(): Milisaniye benzeri bu komut bord resetlendikten sonra geçen süreyi mikrosaniye cinsinde vermektedir. Bu değerde 31 bit signed integer’dır ve 17.8 dakika sonra negatif gelmektedir.

pyb.elapsed_millis(start): Start değeri ile verilen milisaniye süreden sonra geçen değeri vermektedir. Bir nevi iki değeri birbirinden çıkarıp sonucu milisaniye cinsinde döner. Kullanım şekli aşağıdaki örnekteki gibidir.



start = pyb.millis()
while pyb.elapsed_millis(start) < 1000:
# İşlem yapınız
pyb.elapsed_micros(start): Start değeri ile verilen mikrosaniye değerinden sonra geçe süreyi verir. Bir üsteki komutun mikrosaniye cinsinde hassaslaştırılmış şekli diyebiliriz. Hızlıca kontrol etmeniz gereken işlemler için kullanabilirsiniz. Kullanım şekli aşağıdaki örnekteki gibidir:

start = pyb.micros()
while pyb.elapsed_micros(start) < 1000:
# İşlem yapınız
pass
Resetleme fonksiyonları:

pyb.hard_reset(): Adındanda anlaşılacağı gibi modüle harici bir reset pini (butonu) tetiklemiş gibi reset atma işlemini gerçekleştir Bu şekilde bord yeniden başlamış olur.

pyb.bootloader(): Boot pinini kullanmadan bootloader’ı aktif eder. İlerde bootlader işlemlerinden daha detaylı bahsedeceğiz.

Interrupt Fonksiyonları:

pyb.disable_irq(): Tüm interruptları kapatır geriye ise bir önceki durumu döner True/False şeklinde döner.

pyb.enable_irq(state=True): Bu fonksiyon interuptları açmak için kullanılır. Eğer state True değerini alırsa interuptlar açılır. Aksi halde yani False değerini alırsa interuptlar kapatılır. Sabit durumda eğer fonsiyona değer vermeden çağırırsanız state değeri otomatik olarak true olacak ve interuptlar açılacaktır.

Güç ve Clock Fonksiyonları:

pyb.freq([sysclk[, hclk[, pclk1[, pclk2]]]]): Bu fonksiyon içerisindeki değerleri isterseniz atarsınız. Eğer fonksiyonu değer vermeden çağırısanız geriye (sysclk, hclk, pclk1, pclk2) değerlerini dizi olarak dönecektir. Bilindiği üzere ARM işlemciler üzerinde farklı bölümleri çalıştırmak için birbirinden farklı clock kaynakları vardır. Yeri geldikçe bu kaynaklardan bahsedeceğiz. Şimdi temel olarak bilgi vermek gerekirse;

  • sysclk: CPU frekansıdır. Sıklıkla kullanacağız

  • hclk: AHB bus, Core memory ve DMA gibi modüllerin frekansıdır.

  • pclk1:APB1 bus frekansı

  • pclk2: APB2 bus frekansı
Frekans değerleri Hz cinsinden girilmelidir. Yani sysclk değerine 120000000 değerini girdiğinizde frekansı 120MHz ayarlamış olursunuz. Ayrıca frekans değerlerini istediğiniz her değere ayarlayamazsınız. Şuan için ayarlayabileceğiniz değerler Mhz cinsinden: 8, 16, 24, 30, 32, 36, 40, 42, 48, 54, 56, 60, 64, 72, 84, 96, 108, 120, 144, 168. dir.

Evet bordumuzun maksimum frekans değeri 168MHz’ dir. Bu bord üzerinde kullanılan STM32F4 serisi mikrodenetleyicin desteklediği maksimum frekans değeri budur.

Bordunuz bilgisayara bağlı iken frekansı değiştirseniz USB bağlantınızı kaybedebilirsiniz. Bu nedenle bu işlemi boot.py kullanarak yapacağız. İlerde script çalıştırma işlemleri sırasında bu komuya değineceğiz. Frekansı kendiniz değiştirmek isterseniz 36Mhz altında frekanslarda usb bağlantısının çok kararlı çalışmadığını belirtmek isteriz.


pyb.wfi(): Bu fonksiyon çağrıldığında dahili ve ya harici bir kesme (internal ve ya external) oluşana kadar bekler. Kesme oluştuktan sonra program kaldığı yerden devam eder. Bu fonksiyon çağrıldığında MCU düşük güç moduna geçeceği için daha ez enerji tüketimi olacaktır.

Not: Her 1 saniyede 1 (1000Hz periyot ile) system Tick interrupt oluştuğu için bu fonksiyon yalnız 1 milisaniyeli durma işlemi yapar ardından beklemeden çıkacaktır. Yani uzun bir işlem yapacaksanız işlemin sonucu kontrol etmek gerekiyorsa tekrar uykuya gitmelisiniz.

pyb.stop(): Bu komut bordumuzu uyku moduna alacaktır. Uyku modunda akım tüketimi 500uA kadar düşmektedir. Uyku modundan çıkmak için harici interrupt oluşması ve RTC event gerçekleşmelidir. RTC bölümünde bu komuta değineceğiz.

pyb.standby(): Micropython ARM işlemcilerin özelliklerini tam olarak kullanmış diyebiliriz. Bu fonksiyon ile birlikte board “deep sleep” yani birçok sistem fonksiyonuna kapatarak derin uykuya geçecektir. Daha önce ARM üzerine gömülü yazılım geliştiren arkadaşlar bu terime yabancı değillerdir.

Uyku durumuna geçen işlemcide akım tüketimi 50uA kadar düşmektedir. Tabi bu board üzerine herhangi bir ilave yapmadığınız zaman geçerlidir. Bordu uyku durumundan çıkartmak için RTC clock event veya X1 ve X18 pinlerinden kesme oluşturulması gerekmektedir. Yada hard reset atarak uyandırabilirsiniz. RTC ile uyandırmayı ilerleyen bölümlerde açıklayacağız.

Diğer sistemsel fonksiyonlar:

pyb.have_cdc(): Bu fonksiyon çağrılarak USB bağlantısının seri veya farklı bir durumda olduğu öğrenilir. True değeri dönerse seri port olarak kullanılmaktadır.

pyb.rng(): Donanımsal olarak 30 bitlik rastgele (random) üretilen sayı değerini döner.

pyb.unique_id(): MCU’nun 12 bayt (96 bit) uique ID değerini döner. Benzersiz bir değere ihtiyaç olduğu zaman kullanabilirsiniz.

Kaynak zobakit
 

Forum istatistikleri

Konular
128,162
Mesajlar
915,577
Kullanıcılar
449,921
Son üye
TursuBidonu

Yeni konular

Geri
Üst