Proton PICBasic Komutları ve Kullanım Örnekleri
Proton PICBasic, PIC mikrodenetleyiciler için BASIC tabanlı program geliştirmeyi sağlayan bir programlama dilidir. Bu rehberde ABS, ACOS, ADIN, ASIN, ASM…ENDASM, ATAN, BOX, BRANCHL ve BRESTART komutlarının görevleri, kullanım biçimleri ve örnek kodları açıklanmaktadır.1. ABS – Mutlak Değer
Yazılım biçimi:Değişken = ABS Değişken
Görevi: Bir sayının mutlak değerini döndürür. Negatif sayılar pozitif değere çevrilir.
Örnek:
DEVICE = 16F877
DIM DWD1 AS DWORD
DIM DWD2 AS DWORD
DWD1 = -1234567
DWD2 = ABS DWD1
PRINT DEC DWD2
STOP
Bu örnekte DWD1 değişkeninin mutlak değeri hesaplanarak DWD2 değişkenine aktarılır. Sonuç 1234567 olur.
Ondalıklı sayı örneği:
DEVICE = 16F877
DIM FLP1 AS FLOAT
DIM FLP2 AS FLOAT
FLP1 = -1234567.123
FLP2 = ABS FLP1
PRINT DEC FLP2
STOP
Bu örnekte negatif kayan noktalı sayının mutlak değeri hesaplanır. Gösterilen basamak sayısı, kullanılan kayan noktalı sayı desteğine ve görüntüleme biçimine bağlıdır.
Ayrıca inceleyiniz: ASIN, COS, EXP, LOG, LOG10, SIN, SQR, TAN.
2. ACOS – Ters Kosinüs
Yazılım biçimi:Değişken = ACOS Değişken
Görevi: Bir sayının ters kosinüsünü, yani arkkosinüsünü hesaplar. Sonuç radyan cinsindedir.
Örnek:
INCLUDE "PROTON18_4.INC"
DEVICE = 18F452
DIM FLOATIN AS FLOAT
DIM FLOATOUT AS FLOAT
DELAYMS 500
CLS
FLOATIN = 0.8
FLOATOUT = ACOS FLOATIN
PRINT DEC FLOATOUT
STOP
Bu örnekte 0,8 değerinin arkkosinüsü hesaplanır.
Not: ACOS, 1 / COS(x) işlemi değildir. Kosinüs fonksiyonunun ters fonksiyonudur. Gerçek sayılarla hesaplama yapılırken giriş değeri -1 ile +1 arasında olmalıdır. Sonuç radyan cinsindedir.
Kaynak dokümana göre ACOS komutu 12 bit ve 14 bit çekirdekli işlemcilerde desteklenmez; daha fazla bellek ve işlem gücü gerektiren kayan noktalı matematik işlemleri için 16 bit çekirdekli işlemciler hedeflenmiştir. Kullanılan Proton sürümünün ve mikrodenetleyicinin desteği kontrol edilmelidir.
3. ADIN – Analog Dijital Dönüştürücüden Okuma
Yazılım biçimi:Değişken = ADIN KanalNumarası
Görevi: Mikrodenetleyicinin ADC biriminden analog giriş değerini okur ve sonucu değişkene aktarır.
Örnek:
DEVICE = 16F877
DECLARE ADIN_RES 10
DECLARE ADIN_TAD FRC
DECLARE ADIN_STIME 50
DIM VAR1 AS WORD
TRISA = %00000001
ADCON1 = %10000000
VAR1 = ADIN 0
Bu örnekte AN0 girişinden okunan analog değer VAR1 değişkenine aktarılır.
ADIN komutunun ayarları
ADIN_RES – Dönüşüm çözünürlüğüADC dönüşümünün çözünürlüğünü belirler.
DECLARE ADIN_RES 8
Kullanılabilen çözünürlük seçenekleri, hedef mikrodenetleyicinin ADC donanımına ve Proton sürümüne bağlıdır. Örneğin PIC16F87x ailesinde ADC çözünürlüğü 10 bittir.
ADIN_TAD – ADC saat kaynağı
ADC dönüşümünde kullanılacak saat kaynağını belirler.
DECLARE ADIN_TAD 2_FOSC
DECLARE ADIN_TAD 8_FOSC
DECLARE ADIN_TAD 32_FOSC
DECLARE ADIN_TAD FRC
2_FOSC, 8_FOSC ve 32_FOSC seçenekleri işlemci saatinden türetilen kaynakları; FRC ise ADC için kullanılan dahili RC saat kaynağını ifade eder. Geçerli seçenekler ve zamanlama gereksinimleri mikrodenetleyiciye göre değişebilir.
Yanlış saat veya çözünürlük ayarı, ölçüm hatalarına ya da ADC dönüşümünün düzgün çalışmamasına neden olabilir.
ADIN_STIME – Örnekleme süresi
ADC girişindeki örnekleme kondansatörünün yeterince şarj olması için beklenen süreyi belirler.
DECLARE ADIN_STIME 50
Değer mikrosaniye cinsindendir. Kaynak dokümanda 50 veya 100 µs tipik başlangıç değerleri olarak önerilmiştir. Uygun süre; kaynak empedansına, ADC özelliklerine ve istenen doğruluğa bağlıdır.
ADC kullanırken dikkat edilecekler
- İlgili pinin TRIS yazmacıyla giriş olarak ayarlanması gerekir.
- Analog giriş seçimi ve ADC yapılandırması hedef PIC'in veri sayfasına uygun yapılmalıdır.
- Ardışık ölçümlerde girişin yeniden örneklenmesi için gerekli süre bırakılmalıdır.
- ADC çözünürlüğüyle uyumlu bir değişken tipi kullanılmalıdır.
Again:
VAR1 = ADIN 3
DELAYUS 1
GOTO Again
Bu kod, ADC kanal 3'ten sürekli ölçüm alır. Kanalın ve ADC ayarlarının hedef mikrodenetleyicide geçerli olması gerekir.
4. ASIN – Ters Sinüs
Yazılım biçimi:Değişken = ASIN Değişken
Görevi: Bir sayının ters sinüsünü, yani arksinüsünü hesaplar. Sonuç radyan cinsindedir.
Örnek:
DEVICE = 18F452
DIM FLOATIN AS FLOAT
DIM FLOATOUT AS FLOAT
DELAYMS 500
CLS
FLOATIN = 0.8
FLOATOUT = ASIN FLOATIN
PRINT DEC FLOATOUT
STOP
Bu örnekte 0,8 değerinin arksinüsü hesaplanır.
Not: ASIN, 1 / SIN(x) işlemi değildir. Gerçek sayılarla hesaplama için giriş değeri -1 ile +1 arasında olmalıdır. Kayan noktalı trigonometrik işlemler daha fazla bellek ve işlem süresi gerektirebilir.
Kaynak dokümanda ASIN komutunun 12 bit ve 14 bit çekirdekli işlemcilerde desteklenmediği belirtilmektedir. Kullanılan derleyici sürümüyle uyumluluğu kontrol edilmelidir.
Ayrıca inceleyiniz: COS, EXP, LOG, LOG10, SIN, SQR, TAN.
5. ASM…ENDASM – Assembly Kodları
Yazılım biçimi:ASM
; Assembly komutları
ENDASM
Tek satırlık kullanım:
@ assembler_mnemonic
Görevi: BASIC programının gerekli bölümlerinde doğrudan Assembly komutları kullanılmasını sağlar. Bu yöntem, işlemciye özgü komutlardan yararlanmak ve belirli işlemleri daha düşük seviyede gerçekleştirmek için kullanılabilir.
Assembly komutlarının yazımı hedef PIC'in komut setine ve kullanılan Proton derleyicisinin kurallarına uygun olmalıdır.
6. ATAN – Ters Tanjant
Yazılım biçimi:Değişken = ATAN Değişken
Görevi: Bir sayının ters tanjantını, yani arktanjantını hesaplar. Sonuç radyan cinsindedir.
Örnek:
DEVICE = 18F452
DIM FLOATIN AS FLOAT
DIM FLOATOUT AS FLOAT
DELAYMS 500
CLS
FLOATIN = 0.8
FLOATOUT = ATAN FLOATIN
PRINT DEC FLOATOUT
STOP
Bu örnekte 0,8 değerinin arktanjantı hesaplanır.
Not: ATAN, 1 / TAN(x) işlemi değildir. Ters tanjant fonksiyonudur ve gerçek sayılardaki tüm giriş değerleri için tanımlıdır. Sonuç radyan cinsindedir.
Kayan noktalı trigonometrik işlemlerin bellek ve işlem süresi gereksinimi, hedef işlemciye göre değişebilir.
Ayrıca inceleyiniz: ASIN, COS, EXP, LOG, LOG10, SIN, SQR, TAN.
7. BOX – Grafik LCD'ye Kare Çizme
Yazılım biçimi:BOX Set_Clear, Xpos_Start, Ypos_Start, Size
Görevi: Desteklenen grafik LCD üzerinde kare çizmek için kullanılır.
Parametreler:
- Set_Clear: 1 değeri kareyi çizer. 0 değeri ise kaynak açıklamasına göre kareyi çizip iç alanını siler.
- Xpos_Start: Karenin yatay başlangıç konumu; kaynak örneğinde 0–127 aralığı belirtilmiştir.
- Ypos_Start: Karenin dikey başlangıç konumu; kaynak örneğinde 0–63 aralığı belirtilmiştir.
- Size: Karenin piksel cinsinden boyutudur.
INCLUDE "PROTON_G4.INT"
DIM XPOS AS BYTE
DIM YPOS AS BYTE
DIM SIZE AS BYTE
DIM SET_CLR AS BYTE
DELAYMS 200
CLS
XPOS = 63
YPOS = 32
SIZE = 20
SET_CLR = 1
BOX SET_CLR, XPOS, YPOS, SIZE
STOP
Bu örnekte grafik LCD üzerinde 63,32 başlangıç koordinatları ve 20 piksel boyutuyla kare çizilmesi amaçlanır.
Not: PROTON_G4.INT dosyasının, LCD sürücüsünün ve BOX komutunun kullanılan donanımla uyumlu olması gerekir. Başlangıçta LCD'nin hazır duruma gelmesi için kısa bir bekleme süresi kullanılmıştır.
Ayrıca inceleyiniz: CIRCLE, LINE, LINETO.
8. BRANCHL – Dallanma Komutu
Yazılım biçimi:BRANCHL Index, [Label1, Label2, Label3]
Görevi: İndeks değerine göre program akışını belirtilen etiketlerden birine yönlendirir.
Parametreler:
- Index: Dallanılacak etiketi seçen sabit veya değişken.
- Label1…Labeln: Dallanma yapılabilecek etiketler.
Örnek:
DEVICE 16F877
DIM INDEX AS BYTE
INDEX = 2
Start:
BRANCHL INDEX, [Lab_0, Lab_1, Lab_2]
Lab_0:
INDEX = 2
GOTO Start
Lab_1:
INDEX = 0
GOTO Start
Lab_2:
INDEX = 1
GOTO Start
Örnekte indeks değeri 2 olduğundan program Lab_2 etiketine dallanır. Burada indeks 1 yapılır ve program başa döndüğünde Lab_1 etiketine yönelir. Bu işlem döngü şeklinde devam eder.
Not: BRANCHL komutu, etiket sayısı ve bellek kullanımı bakımından hedef işlemcinin sınırları dikkate alınarak kullanılmalıdır.
Ayrıca inceleyiniz: BRANCH, ON GOTO, ON GOTOL, ON GOSUB.
9. BRESTART – I²C Haberleşmesinde Yeniden Başlatma
Yazılım biçimi:BRESTART
Görevi: I²C haberleşmesinde yeniden başlatma koşulunu (Repeated START) oluşturmak için kullanılan komuttur.
I²C haberleşmesinde START koşulu veri aktarımını başlatır; RESTART ise hat serbest bırakılmadan yeni bir başlangıç koşulu oluşturarak haberleşmenin sürdürülmesini sağlayabilir. Komutun tam kullanım şekli, ilgili Proton PICBasic sürümünün I²C komutlarıyla birlikte değerlendirilmelidir.
Önemli: Örnek kodlar açıklama amaçlıdır. Mikrodenetleyici modeli, Proton sürümü, LCD kütüphanesi ve çevre birimi ayarları doğrulanmadan kodların her PIC modelinde doğrudan çalışacağı varsayılmamalıdır.
Son düzenleme: