summaryrefslogtreecommitdiff
path: root/ldmicro/manual-tr.txt
diff options
context:
space:
mode:
Diffstat (limited to 'ldmicro/manual-tr.txt')
-rw-r--r--ldmicro/manual-tr.txt790
1 files changed, 790 insertions, 0 deletions
diff --git a/ldmicro/manual-tr.txt b/ldmicro/manual-tr.txt
new file mode 100644
index 0000000..2d4797e
--- /dev/null
+++ b/ldmicro/manual-tr.txt
@@ -0,0 +1,790 @@
+
+KULLANIM KİTAPÇIĞI
+==================
+LDMicro desteklenen MicroChip PIC16 ve Atmel AVR mikrokontrolcüler için
+gerekli kodu üretir. Bu iş için kullanılabilecek değişik programlar vardır.
+Örneğin BASIC, C, assembler gibi. Bu programlar kendi dillerinde yazılmış
+programları işlemcilerde çalışabilecek dosyalar haline getirirler.
+
+PLC'de kullanılan dillerden biri ladder diyagramıdır. Aşağıda LDMicro ile
+yazılmış basit bir program görülmektedir.
+
+ || ||
+ || Xbutton1 Tdon Rchatter Yred ||
+ 1 ||-------]/[---------[TON 1.000 s]-+-------]/[--------------( )-------||
+ || | ||
+ || Xbutton2 Tdof | ||
+ ||-------]/[---------[TOF 2.000 s]-+ ||
+ || ||
+ || ||
+ || ||
+ || Rchatter Ton Tnew Rchatter ||
+ 2 ||-------]/[---------[TON 1.000 s]----[TOF 1.000 s]---------( )-------||
+ || ||
+ || ||
+ || ||
+ ||------[END]---------------------------------------------------------||
+ || ||
+ || ||
+
+(TON=turn-on gecikme; TOF-turn-off gecikme. --] [-- girişler, diğer bir
+deyişle kontaklardır. --( )-- ise çıkışlardır. Bunlar bir rölenin bobini
+gibi davranırlar. Ladder diyagramı ile ilgili bol miktarda kaynak internet
+üzerinde bulunmaktadır. Burada LDMicro'ya has özelliklerden bahsedeceğiz.
+
+LDmicro ladder diyagramını PIC16 veya AVR koduna çevirir. Aşağıda desteklenen
+işlemcilerin listesi bulunmaktadır:
+ * PIC16F877
+ * PIC16F628
+ * PIC16F876 (denenmedi)
+ * PIC16F88 (denenmedi)
+ * PIC16F819 (denenmedi)
+ * PIC16F887 (denenmedi)
+ * PIC16F886 (denenmedi)
+ * ATmega128
+ * ATmega64
+ * ATmega162 (denenmedi)
+ * ATmega32 (denenmedi)
+ * ATmega16 (denenmedi)
+ * ATmega8 (denenmedi)
+
+Aslında daha fazla PIC16 ve AVR işlemci desteklenebilir. Ancak test ettiklerim
+ve desteklediğini düşündüklerimi yazdım. Örneğin PIC16F648 ile PIC16F628
+arasında fazla bir fark bulunmamaktadır. Eğer bir işlemcinin desteklenmesini
+istiyorsanız ve bana bildirirseniz ilgilenirim.
+
+LDMicro ile ladder diyagramını çizebilir, devrenizi denemek için gerçek zamanlı
+simülasyon yapabilirsiniz. Programınızın çalıştığından eminseniz programdaki
+giriş ve çıkışlara mikrokontrolörün bacaklarını atarsınız. İşlemci bacakları
+belli olduktan sonra programınızı derleyebilirsiniz. Derleme sonucunda oluşan
+dosya .hex dosyasıdır. Bu dosyayı PIC/AVR programlayıcı ile işlemcinize kaydedersiniz.
+PIC/AVR ile uğraşanlar konuya yabancı değildir.
+
+
+LDMicro ticari PLC programları gibi tasarlanmıştır. Bazı eksiklikler vardır.
+Kitapçığı dikkatlice okumanızı tavsiye ederim. Kullanım esnasında PLC ve
+PIC/AVR hakkında temel bilgilere sahip olduğunuz düşünülmüştür.
+
+DİĞER AMAÇLAR
+==================
+
+ANSI C kodunu oluşturmak mümkündür. C derleyicisi olan herhangi bir
+işlemci için bu özellikten faydalanabilirsiniz. Ancak çalıştırmak için
+gerekli dosyaları siz sağlamalısınız. Yani, LDMicro sadece PlcCycle()
+isimli fonksiyonu üretir. Her döngüde PlcCycle fonksiyonunu çağırmak, ve
+PlcCycle() fonksiyonunun çağırdığı dijital girişi yazma/okuma vs gibi
+G/Ç fonksiyonları sizin yapmanız gereken işlemlerdir.
+Oluşturulan kodu incelerseniz faydalı olur.
+
+KOMUT SATIRI SEÇENEKLERİ
+========================
+
+Normal şartlarda ldmicro.exe komut satırından seçenek almadan çalışır.
+LDMicro'ya komut satırından dosya ismi verebilirsiniz. Örneğin;komut
+satırından 'ldmicro.exe asd.ld' yazarsanız bu dosya açılmaya çalışırlır.
+Dosya varsa açılır. Yoksa hata mesajı alırsınız. İsterseniz .ld uzantısını
+ldmicro.exe ile ilişkilendirirseniz .ld uzantılı bir dosyayı çift tıklattığınızda
+bu dosya otomatik olarak açılır. Bkz. Klasör Seçenekleri (Windows).
+
+`ldmicro.exe /c src.ld dest.hex', şeklinde kullanılırsa src.ld derlenir
+ve hazırlanan derleme dest.hex dosyasına kaydedilir. İşlem bitince LDMicro kapanır.
+Oluşabilecek tüm mesajlar konsoldan görünür.
+
+TEMEL BİLGİLER
+==============
+
+LDMicro açıldığında boş bir program ile başlar. Varolan bir dosya ile başlatırsanız
+bu program açılır. LDMicro kendi dosya biçimini kullandığından diğer dosya
+biçimlerinden dosyaları açamazsınız.
+
+Boş bir dosya ile başlarsanız ekranda bir tane boş satır görürsünüz. Bu satıra
+komutları ekleyebilir, satır sayısını artırabilirsiniz. Satırlara Rung denilir.
+Örneğin; Komutlar->Kontak Ekle diyerek bir kontak ekleyebilirsiniz. Bu kontağa
+'Xnew' ismi verilir. 'X' bu kontağın işlemcinin bacağına denk geldiğini gösterir.
+Bu kontağa derlemeden önce isim vermeli ve mikrokontrolörün bir bacağı ile
+eşleştirmelisiniz. Eşleştirme işlemi içinde önce işlemciyi seçmelisiniz.
+Elemanların ilk harfi o elemanın ne olduğu ile ilgilidir. Örnekler:
+
+ * Xname -- mikrokontrolördeki bir giriş bacağı
+ * Yname -- mikrokontrolördeki bir çıkış bacağı
+ * Rname -- `dahili röle': hafızada bir bit.
+ * Tname -- zamanlayıcı; turn-on, turn-off yada retentive
+ * Cname -- sayıcı, yukarı yada aşağı sayıcı
+ * Aname -- A/D çeviriciden okunan bir tamsayı değer
+ * name -- genel değişken (tamsayı)
+
+İstediğiniz ismi seçebilirsiniz. Seçilen bir isim nerede kullanılırsa
+kullanılsın aynı yere denk gelir. Örnekler; bir satırda Xasd kullandığınızda
+bir başka satırda Xasd kullanırsanız aynı değere sahiptirler.
+Bazen bu mecburi olarak kullanılmaktadır. Ancak bazı durumlarda hatalı olabilir.
+Mesela bir (TON) Turn-On Gecikmeye Tgec ismini verdikten sonra bir (TOF)
+Turn_Off gecikme devresine de Tgec ismini verirseniz hata yapmış olursunuz.
+Dikkat ederseniz yaptığınız bir mantık hatasıdır. Her gecikme devresi kendi
+hafızasına sahip olmalıdır. Ama Tgec (TON) turn-on gecikme devresini sıfırlamak
+için kullanılan RES komutunda Tgec ismini kullanmak gerekmektedir.
+
+Değişken isimleri harfleri, sayıları, alt çizgileri ihtiva edebilir.
+(_). Değişken isimleri sayı ile başlamamalıdır. Değişken isimleri büyük-küçük harf duyarlıdır.
+Örneğin; TGec ve Tgec aynı zamanlayıcılar değildir.
+
+
+Genel değişkenlerle ilgili komutlar (MOV, ADD, EQU vs) herhangi bir
+isimdeki değişkenlerle çalışır. Bunun anlamı bu komutlar zamanlayıcılar
+ve sayıcılarla çalışır. Zaman zaman bu faydalı olabilir. Örneğin; bir
+zamanlayıcının değeri ile ilgili bir karşılaştırma yapabilirsiniz.
+
+Değişkenler hr zaman için 16 bit tamsayıdır. -32768 ile 32767 arasında
+bir değere sahip olabilirler. Her zaman için işaretlidir. (+ ve - değere
+sahip olabilirler) Onluk sayı sisteminde sayı kullanabilirsiniz. Tırnak
+arasına koyarak ('A', 'z' gibi) ASCII karakterler kullanabilirsiniz.
+
+Ekranın alt tarafındaki kısımda kullanılan tüm elemanların bir listesi görünür.
+Bu liste program tarafından otomatik olarak oluşturulur ve kendiliğinden
+güncelleştirilir. Sadece 'Xname', 'Yname', 'Aname' elemanları için
+mikrokontrolörün bacak numaraları belirtilmelidir. Önce Ayarlar->İşlemci Seçimi
+menüsünden işlemciyi seçiniz. Daha sonra G/Ç uçlarını çift tıklatarak açılan
+pencereden seçiminizi yapınız.
+
+Komut ekleyerek veya çıkararak programınızı değiştirebilirsiniz. Programdaki
+kursör eleman eklenecek yeri veya hakkında işlem yapılacak elemanı göstermek
+amacıyla yanıp söner. Elemanlar arasında <Tab> tuşu ile gezinebilirsiniz. Yada
+elemanı fare ile tıklatarak işlem yapılacak elemanı seçebilirsiniz. Kursör elemanın
+solunda, sağında, altında ve üstünde olabilir. Solunda ve sağında olduğunda
+ekleme yaptığınızda eklenen eleman o tarafa eklenir. Üstünde ve altında iken
+eleman eklerseniz eklenen eleman seçili elemana paralel olarak eklenir.
+Bazı işlemleri yapamazsınız. Örneğin bir bobinin sağına eleman ekleyemezsiniz.
+LDMicro buna izin vermeyecektir.
+
+Program boş bir satırla başlar. Kendiniz alta ve üste satır ekleyerek dilediğiniz
+gibi diyagramınızı oluşturabilirsiniz. Yukarıda bahsedildiği gibi alt devreler
+oluşturabilirsiniz.
+
+Programınız yazdığınızda simülasyon yapabilir, .hex dosyasını oluşturabilirsiniz.
+
+SİMÜLASYON
+==========
+
+Simülasyon moduna geçmek için Simülasyon->Simülasyon modu menüsünü tıklatabilir,
+yada <Ctrl+M> tuş kombinasyonuna basabilirsiniz. Simülasyon modunda program
+farklı bir görüntü alır. Kursör görünmez olur. Enerji alan yerler ve elemanlar
+parlak kırmızı, enerji almayan yerler ve elemanlar gri görünür. Boşluk tuşuna
+basarak bir çevrim ilerleyebilir yada menüden Simülasyon->Gerçek Zamanlı Simülasyonu Başlat
+diyerek (veya <Ctrl+R>) devamlı bir çevrim başlatabilirsiniz. Ladder diyagramının
+çalışmasına göre gerçek zamanlı olarak elemanlar ve yollar program tarafından değiştirilir.
+
+Giriş elemanlarının durumunu çift tıklatarak değiştirebilirsiniz. Mesela, 'Xname'
+kontağını çift tıklatıranız açıktan kapalıya veya kapalıdan açığa geçiş yapar.
+
+DERLEME
+=======
+
+Ladder diyagramının yapılmasındaki amaç işlemciye yüklenecek .hex dosyasının
+oluşturulmasıdır. Buna 'derleme' denir. Derlemeden önce şu aşamalar tamamlanmalıdır:
+ 1- İşlemci seçilmelidir. Ayarlar->İşlemci Seçimi menüsünden yapılır.
+ 2- G/Ç uçlarının mikrokontrolördeki hangi bacaklara bağlanacağı seçilmelidir.
+ Elemanın üzerine çift tıklanır ve çıkan listeden seçim yapılır.
+ 3- Çevrim süresi tanımlanmalıdır. Ayarlar->İşlemci Ayarları menüsünden yapılır.
+ Bu süre işlemcinin çalıştığı frekansa bağlıdır. Çoğu uygulamalar için 10ms
+ uygun bir seçimdir. Aynı yerden kristal frekansını ayarlamayı unutmayınız.
+
+Artık kodu üretebilirsiniz. Derle->Derle yada Derle->Farklı Derle seçeneklerinden
+birini kullanacaksınız. Aradaki fark Kaydet ve Farklı Kaydet ile aynıdır. Sonuçta
+Intel IHEX dosyanız programınızda hata yoksa üretilecektir. Programınızda hata varsa
+uyarı alırsınız.
+
+Progamlayıcınız ile bu dosyayı işlemcinize yüklemelisiniz. Buradaki en önemli nokta
+işlemcinin konfigürasyon bitlerinin ayarlanmasıdır. PIC16 işlemciler için gerekli
+ayar bilgileri hex dosyasına kaydedildiğinden programlayıcınız bu ayarları algılayacaktır.
+Ancak AVR işlemciler için gerekli ayarları siz yapmalısınız.
+
+KOMUTLAR ve ELEMANLAR
+=====================
+
+> KONTAK, NORMALDE AÇIK Xname Rname Yname
+ ----] [---- ----] [---- ----] [----
+
+ Normalde açık bir anahtar gibi davranır. Komutu kontrol eden sinyal 0 ise
+ çıkışındaki sinyalde 0 olur. Eğer kontrol eden sinyal 1 olursa çıkışı da 1
+ olur ve çıkışa bağlı bobin aktif olur. Bu kontak işlemci bacağından alınan
+ bir giriş, çıkış bacağı yada dahili bir röle olabilir.
+
+
+> KONTAK, NORMALDE KAPALI Xname Rname Yname
+ ----]/[---- ----]/[---- ----]/[----
+
+ Normalde kapalı bir anahtar gibi davranır. Komutun kontrol eden sinyal 0 ise
+ çıkışı 1 olur. Eğer kontrol eden sinyal 1 olursa çıkışı 0 olur ve çıkışa
+ bağlı elemanlar pasif olur. Normalde çıkışa gerilim verilir, ancak bu kontağı
+ kontrol eden sinyal 1 olursa kontağın çıkışında gerilim olmaz. Bu kontak
+ işlemci bacağından alınan bir giriş, çıkış bacağı yada dahili bir röle olabilir
+
+
+> BOBİN, NORMAL Rname Yname
+ ----( )---- ----( )----
+
+ Elemana giren sinyal 0 ise dahili röle yada çıkış bacağı 0 yapılır.
+ Elemana giren sinyal 1 ise dahili röle yada çıkış bacağı 1 yapılır.
+ Bobine giriş değişkeni atamak mantıksızdır. Bu eleman bir satırda
+ sağdaki en son eleman olmalıdır.
+
+
+> BOBİN, TERSLENMİŞ Rname Yname
+ ----(/)---- ----(/)----
+
+ Elemana giren sinyal 0 ise dahili röle yada çıkış bacağı 1 yapılır.
+ Elemana giren sinyal 1 ise dahili röle yada çıkış bacağı 0 yapılır.
+ Bobine giriş değişkeni atamak mantıksızdır. Bu eleman bir satırda
+ sağdaki en son eleman olmalıdır. Normal bobinin tersi çalışır.
+
+
+> BOBİN, SET Rname Yname
+ ----(S)---- ----(S)----
+
+ Elemana giren sinyal 1 ise dahili röle yada çıkış bacağı 1 yapılır.
+ Diğer durumlarda bu bobinin durumunda bir değişiklik olmaz. Bu komut
+ bobinin durumunu sadece 0'dan 1'e çevirir. Bu nedenle çoğunlukla
+ BOBİN-RESET ile beraber çalışır. Bu eleman bir satırda sağdaki en
+ son eleman olmalıdır.
+
+
+> BOBİN, RESET Rname Yname
+ ----(R)---- ----(R)----
+
+ Elemana giren sinyal 1 ise dahili röle yada çıkış bacağı 0 yapılır.
+ Diğer durumlarda bu bobinin durumunda bir değişiklik olmaz. Bu komut
+ bobinin durumunu sadece 1'dEn 0'a çevirir. Bu nedenle çoğunlukla
+ BOBİN-SET ile beraber çalışır. Bu eleman bir satırda sağdaki en
+ son eleman olmalıdır.
+
+
+> TURN-ON GECİKME Tdon
+ -[TON 1.000 s]-
+
+ Bir zamanlayıcıdır. Girişindeki sinyal 0'dan 1'e geçerse ayarlanan
+ süre kadar sürede çıkış 0 olarak kalır, süre bitince çıkışı 1 olur.
+ Girişindeki sinyal 1'den 0'a geçerse çıkış hemen 0 olur.
+ Girişi 0 olduğu zaman zamanlayıcı sıfırlanır. Ayrıca; ayarlanan süre
+ boyunca giriş 1 olarak kalmalıdır.
+
+ Zamanlayıcı 0'dan başlayarak her çevrim süresinde 1 artarak sayar.
+ Sayı ayarlanan süreye eşit yada büyükse çıkış 1 olur. Zamanlayıcı
+ değişkeni üzerinde işlem yapmak mümkündür. (Örneğin MOV komutu ile)
+
+
+> TURN-OFF GECİKME Tdoff
+ -[TOF 1.000 s]-
+
+ Bir zamanlayıcıdır. Girişindeki sinyal 1'den 0'a geçerse ayarlanan
+ süre kadar sürede çıkış 1 olarak kalır, süre bitince çıkışı 0 olur.
+ Girişindeki sinyal 0'dan 1'e geçerse çıkış hemen 1 olur.
+ Girişi 0'dan 1'e geçtiğinde zamanlayıcı sıfırlanır. Ayrıca; ayarlanan
+ süre boyunca giriş 0 olarak kalmalıdır.
+
+ Zamanlayıcı 0'dan başlayarak her çevrim süresinde 1 artarak sayar.
+ Sayı ayarlanan süreye eşit yada büyükse çıkış 1 olur. Zamanlayıcı
+ değişkeni üzerinde işlem yapmak mümkündür. (Örneğin MOV komutu ile)
+
+
+> SÜRE SAYAN TURN-ON GECİKME Trto
+ -[RTO 1.000 s]-
+
+ Bu zamanlayıcı girişindeki sinyalin ne kadar süre ile 1 olduğunu
+ ölçer. Ayaralanan süre boyunca giriş 1 ise çıkışı 1 olur. Aksi halde
+ çıkışı 0 olur. Ayarlanan süre devamlı olması gerekmez. Örneğin; süre
+ 1 saniyeye ayarlanmışsa ve giriş önce 0.6 sn 1 olmuşsa, sonra 2.0 sn
+ boyunca 0 olmuşsa daha sonra 0.4 sn boyunca giriş tekrar 1 olursa
+ 0.6 + 0.4 = 1sn olduğundan çıkış 1 olur. Çıkış 1 olduktan sonra
+ giriş 0 olsa dahi çıkış 0'a dönmez. Bu nedenle zamanlayıcı RES reset
+ komutu ile resetlenmelidir.
+
+ Zamanlayıcı 0'dan başlayarak her çevrim süresinde 1 artarak sayar.
+ Sayı ayarlanan süreye eşit yada büyükse çıkış 1 olur. Zamanlayıcı
+ değişkeni üzerinde işlem yapmak mümkündür. (Örneğin MOV komutu ile)
+
+
+> RESET (SAYICI SIFIRLAMASI) Trto Citems
+ ----{RES}---- ----{RES}----
+
+ Bu komut bir zamanlayıcı veya sayıcıyı sıfırlar. TON ve TOF zamanlayıcı
+ komutları kendiliğinden sıfırlandığından bu komuta ihtiyaç duymazlar.
+ RTO zamanlayıcısı ve CTU/CTD sayıcıları kendiliğinden sıfırlanmadığından
+ sıfırlanmaları için kullanıcı tarafından bu komutile sıfırlanması
+ gerekir. Bu komutun girişi 1 olduğunda sayıcı/zamanlayıcı sıfırlanır.
+ Bu komut bir satırın sağındaki son komut olmalıdır.
+
+
+> YÜKSELEN KENAR _
+ --[OSR_/ ]--
+
+ Bu komutun çıkışı normalde 0'dır. Bu komutun çıkışının 1 olabilmesi
+ için bir önceki çevrimde girişinin 0 şimdiki çevrimde girişinin 1
+ olması gerekir. Komutun çıkışı bir çevrimlik bir pals üretir.
+ Bu komut bir sinyalin yükselen kenarında bir tetikleme gereken
+ uygulamalarda faydalıdır.
+
+
+> DÜŞEN KENAR _
+ --[OSF \_]--
+
+ Bu komutun çıkışı normalde 0'dır. Bu komutun çıkışının 1 olabilmesi
+ için bir önceki çevrimde girişinin 1 şimdiki çevrimde girişinin 0
+ olması gerekir. Komutun çıkışı bir çevrimlik bir pals üretir.
+ Bu komut bir sinyalin düşen kenarında bir tetikleme gereken
+ uygulamalarda faydalıdır.
+
+
+> KISA DEVRE, AÇIK DEVRE
+ ----+----+---- ----+ +----
+
+ Kısa devrenin çıkışı her zaman girişinin aynısıdır.
+ Açık devrenin çıkışı her zaman 0'dır. Bildiğimiz açık/kısa devrenin
+ aynısıdır. Genellikle hata aramada kullanılırlar.
+
+> ANA KONTROL RÖLESİ
+ -{MASTER RLY}-
+
+ Normalde her satırın ilk girişi 1'dir. Birden fazla satırın tek bir şart ile
+ kontrol edilmesi gerektiğinde paralel bağlantı yapmak gerekir. Bu ise zordur.
+ Bu işlemi kolayca yapabilmek için ana kontrol rölesini kullanabiliriz.
+ Ana kontrol rölesi eklendiğinde kendisinden sonraki satırlar bu röleye bağlı
+ hale gelir. Böylece; birden fazla satır tek bir şart ile kontrolü sağlanır.
+ Bir ana kontrol rölesi kendisinden sonra gelen ikinci bir ana kontrol
+ rölesine kadar devam eder. Diğer bir deyişle birinci ana kontrol rölesi
+ başlangıcı ikincisi ise bitişi temsil eder. Ana kontrol rölesi kullandıktan
+ sonra işlevini bitirmek için ikinci bir ana kontrol rölesi eklemelisiniz.
+
+> MOVE {destvar := } {Tret := }
+ -{ 123 MOV}- -{ srcvar MOV}-
+
+ Girişi 1 olduğunda verilen sabit sayıyı (123 gibi) yada verilen değişkenin
+ içeriğini (srcvar) belirtilen değişkene (destvar) atar. Giriş 0 ise herhangi
+ bir işlem olmaz. Bu komut ile zamanlayıcı ve sayıcılar da dahil olmak üzere
+ tüm değişkenlere değer atayabilirsiniz. Örneğin Tsay zamanlayıcısına MOVE ile
+ 0 atamak ile RES ile sıfırlamak aynı sonucu doğurur. Bu komut bir satırın
+ sağındaki en son komut olmalıdır.
+
+> MATEMATİK İŞLEMLER {ADD kay :=} {SUB Ccnt :=}
+ -{ 'a' + 10 }- -{ Ccnt - 10 }-
+
+> {MUL dest :=} {DIV dv := }
+ -{ var * -990 }- -{ dv / -10000}-
+
+ Bu komutun girişi doğru ise belirtilen hedef değişkenine verilen matematik
+ işlemin sonucunu kaydeder. İşlenen bilgi zamanlayıcı ve sayıcılar dahil
+ olmak üzere değişkenler yada sabit sayılar olabilir. İşlenen bilgi 16 bit
+ işaretli sayıdır. Her çevrimde işlemin yeniden yapıldığı unutulmamalıdır.
+ Örneğin artırma yada eksiltme yapıyorsanız yükselen yada düşen kenar
+ kullanmanız gerekebilir. Bölme (DIV) virgülden sonrasını keser. Örneğin;
+ 8 / 3 = 2 olur. Bu komut bir satırın sağındaki en son komut olmalıdır.
+
+
+> KARŞILAŞTIRMA [var ==] [var >] [1 >=]
+ -[ var2 ]- -[ 1 ]- -[ Ton]-
+
+> [var /=] [-4 < ] [1 <=]
+ -[ var2 ]- -[ vartwo]- -[ Cup]-
+
+ Değişik karşılaştırma komutları vardır. Bu komutların girişi doğru (1)
+ ve verilen şart da doğru ise çıkışları 1 olur.
+
+
+> SAYICI Cname Cname
+ --[CTU >=5]-- --[CTD >=5]--
+
+ Sayıcılar girişlerinin 0'dan 1'e her geçişinde yani yükselen kenarında
+ değerlerini 1 artırır (CTU) yada eksiltirler (CTD). Verilen şart doğru ise
+ çıkışları aktif (1) olur. CTU ve CTD sayıcılarına aynı ismi erebilirsiniz.
+ Böylece aynı sayıcıyı artırmış yada eksiltmiş olursunuz. RES komutu sayıcıları
+ sıfırlar. Sayıcılar ile genel değişkenlerle kullandığınız komutları kullanabilirsiniz.
+
+
+> DAİRESEL SAYICI Cname
+ --{CTC 0:7}--
+
+ Normal yukarı sayıcıdan farkı belirtilen limite ulaşınca sayıcı tekrar 0'dan başlar
+ Örneğin sayıcı 0, 1, 2, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 2,.... şeklinde
+ sayabilir. Yani bir dizi sayıcı olarak düşünülebilir. CTC sayıcılar girişlerinin
+ yükselen kenarında değer değiştirirler. Bu komut bir satırın sağındaki
+ en son komut olmalıdır.
+
+
+> SHIFT REGISTER {SHIFT REG }
+ -{ reg0..3 }-
+
+ Bir dizi değişken ile beraber çalışır. İsim olarak reg verdiğinizi ve aşama
+ sayısını 3 olarak tanımladıysanız reg0, reg1, reg2 değikenleri ile çalışırsınız.
+ Kaydedicinin girişi reg0 olur. Girişin her yükselen kenarında değerler kaydedicide
+ bir sağa kayar. Mesela; `reg2 := reg1'. and `reg1 := reg0'. `reg0' değişmez.
+ Geniş bir kaydedici hafızada çok yer kaplar.
+ Bu komut bir satırın sağındaki en son komut olmalıdır.
+
+
+> DEĞER TABLOSU {dest := }
+ -{ LUT[i] }-
+
+ Değer tablosu sıralanmış n adet değer içeren bir tablodur. Girişi doğru olduğunda
+ `dest' tamsayı değişkeni `i' tamsayı değişkenine karşılık gelen değeri alır. Sıra
+ 0'dan başlar. bu nedenle `i' 0 ile (n-1) arasında olabilir. `i' bu değerler
+ arasında değilse komutun ne yapacağı tanımlı değildir.
+ Bu komut bir satırın sağındaki en son komut olmalıdır.
+
+
+> PIECEWISE LINEAR TABLE {yvar := }
+ -{ PWL[xvar] }-
+
+ Bir matris tablo olarak düşünülebilir. Bir değere bağlı olarak değerin önceden
+ belirlenen bir başka değer ile değiştirilmesi içi oluşturulan bir tablodur.
+ Bu bir eğri oluşturmak, sensörden alınan değere göre çıkışta başka bir eğri
+ oluşturmak gibi amaçlar için kullanılabilir.
+
+ Farzedelimki x tamsayı giriş değerini y tamsayı çıkış değerine yaklaştırmak
+ istiyoruz. Değerlerin belirli noktalarda olduğunu biliyoruz. Örneğin;
+
+ f(0) = 2
+ f(5) = 10
+ f(10) = 50
+ f(100) = 100
+
+ Bu şu noktaların eğride olduğunu gösterir:
+
+ (x0, y0) = ( 0, 2)
+ (x1, y1) = ( 5, 10)
+ (x2, y2) = ( 10, 50)
+ (x3, y3) = (100, 100)
+
+ Dört değeri parçalı lineer tabloya gireriz. Komut, xvar'ın değerine bakarak
+ yvar'a değer verir. Örneğin, yukarıdaki örneğe bakarak, xvar = 10 ise
+ yvar = 50 olur.
+
+ Tabloya kayıtlı iki değerin arasında bir değer verirseniz verilen değer de
+ alınması gereken iki değerin arasında uygun gelen yerde bir değer olur.
+ Mesela; xvar=55 yazarsanız yvar=75 olur. (Tablodaki değerler (10,50) ve
+ (100,100) olduğuna göre). 55, 10 ve 100 değerlerinin ortasındadır. Bu
+ nedenle 55 ve 75 değerlerinin ortası olan 75 değeri alınır.
+
+ Değerler x koordinatında artan değerler olarak yazılmalıdır. 16 bit tamsayı
+ kullanan bazı değerler için arama tablosu üzerinde matematik işlemler
+ gerçekleşmeyebilir. Bu durumda LDMicro sizi uyaracaktır. Örneğin aşağıdaki
+ tablo bir hata oluşturacaktır:
+
+ (x0, y0) = ( 0, 0)
+ (x1, y1) = (300, 300)
+
+ Bu tip hataları noktalar arsında ara değerler oluşturarak giderebilirsiniz.
+ Örneğin aşağıdaki tablo yukarıdakinin aynısı olmasına rağmen hata
+ oluşturmayacaktır.
+
+ (x0, y0) = ( 0, 0)
+ (x1, y1) = (150, 150)
+ (x2, y2) = (300, 300)
+
+ Genelde 5 yada 6 noktadan daha fazla değer kullanmak gerekmeyecektir.
+ Daha fazla nokta demek daha fazla kod ve daha yavaş çalışma demektir.
+ En fazla 10 nokta oluşturabilirsiniz. xvar değişkenine x koordinatında
+ tablonun en yüksek değerinden daha büyük bir değer girmenin ve en düşük
+ değerinden daha küçük bir değer girmenin sonucu tanımlı değildir.
+ Bu komut bir satırın sağındaki en son komut olmalıdır.
+
+> A/D ÇEVİRİCİDEN OKUMA Aname
+ --{READ ADC}--
+
+ LDmicro A/D çeviriciden değer okumak için gerekli kodları desteklediği
+ işlemciler için oluşturabilir. Komutun girişi 1 olduğunda A/D çeviriciden
+ değer okunur ve okunan değer `Aname' değişkenine aktarılır. Bu değişken
+ üzerinde genel değişkenlerle kullanılabilen işlemler kullanılabilir.
+ (büyük, küçük, büyük yada eşit gibi). Bu değişkene işlemcinin bacaklarından
+ uygun biri tanımlanmalıdır. Komutun girişi 0 ise `Aname'değişkeninde bir
+ değişiklik olmaz.
+
+ Şu an desteklenen işlemciler için; 0 Volt için ADC'den okunan değer 0,
+ Vdd (besleme gerilimi) değerine eşit gerilim değeri için ADC'den okunan değer
+ 1023 olmaktadır. AVR kullanıyorsanız AREF ucunu Vdd besleme gerilimine
+ bağlayınız.
+
+ Aritmetik işlemler ADC değişkeni için kullanılabilir. Ayrıca bacak tanımlarken
+ ADC olmayan bacakların tanımlanmasını LDMicro engelleyecektir.
+ Bu komut bir satırın sağındaki en son komut olmalıdır.
+
+ > PWM PALS GENİŞLİĞİ AYARI duty_cycle
+ -{PWM 32.8 kHz}-
+
+ LDmicro desteklediği mikrokontrolörler için gerekli PWM kodlarını üretebilir.
+ Bu komutun girişi doğru (1) olduğunda PWM sinyalinin pals genişliği duty_cycle
+ değişkeninin değerine ayarlanır. Bu değer 0 ile 100 arasında değişir. Pals
+ genişliği yüzde olarak ayarlanır. Bir periyot 100 birim kabul edilirse bu
+ genişliğin yüzde kaçının palsi oluşturacağı ayarlanır. 0 periyodun tümü sıfır
+ 100 ise periyodun tamamı 1 olsun anlamına gelir. 10 değeri palsin %10'u 1 geri
+ kalan %90'ı sıfır olsun anlamına gelir.
+
+ PWM frekansını ayarlayabilirsiniz. Verilen değer Hz olarak verilir.
+ Verdiğiniz frekans kesinlikle ayarlanabilir olmalıdır. LDMicro verdiğiniz değeri
+ olabilecek en yakın değerle değiştirir. Yüksek hızlarda doğruluk azalır.
+
+ Bu komut bir satırın sağındaki en son komut olmalıdır.
+ Periyodun süresinin ölçülebilmesi için işlemcinin zamanlayıcılarının bir tanesi
+ kullanılır. Bu nedenle PWM en az iki tane zamanlayıcısı olan işlemcilerde kullanılır.
+ PWM PIC16 işlemcilerde CCP2'yi, AVR'lerde ise OC2'yi kullanır.
+
+
+> EEPROMDA SAKLA saved_var
+ --{PERSIST}--
+
+ Bu komut ile belirtilen değişkenin EEPROM'da saklanması gereken bir değişken olduğunu
+ belirmiş olursunuz. Komutun girişi doğru ise belirtilen değişkenin içeriği EEPROM'a
+ kaydedilir. Enerji kesildiğinde kaybolmaması istenen değerler için bu komut kullanılır.
+ Değişkenin içeriği gerilim geldiğinde tekrar EEPROM'dan yüklenir. Ayrıca;
+ değişkenin içeriği her değiştiğinde yeni değer tekrar EEPROM'a kaydedilir.
+ Ayrıca bir işlem yapılması gerekmez.
+ Bu komut bir satırın sağındaki en son komut olmalıdır.
+
+************************
+> UART (SERİ BİLGİ) AL var
+ --{UART RECV}--
+
+ LDmicro belirli işlemciler için gerekli UART kodlarını üretebilir. AVR işlemcilerde
+ sadece UART1 (UART0) değil) desteklenmektedir. İletişim hızı (baudrate) ayarlarını
+ Ayarlar->İşlemci Ayarları menüsünden yapmalısınız. Hız kristal frekansına bağlı olup,
+ bazı hızlar desteklenmeyebilir. Bu durumda LDMicro sizi uyaracaktır.
+
+ Bu komutun girişi yanlışsa herhangi bir işlem yapılmaz. Doğru ise UART'dan 1 karakter
+ alınmaya çalışılır. Okuma yapılamaz ise komutun çıkışı yanlış (0) olur. Karakter
+ okunursa okunan karakter `var' değişkeninde saklanır ve komutun çıkışı doğru (1) olur.
+ Çıkışın doğru olması sadece bir PLC çevrimi sürer.
+
+
+> UART (SERİ BİLGİ) GÖNDER var
+ --{UART SEND}--
+
+ LDmicro belirli işlemciler için gerekli UART kodlarını üretebilir. AVR işlemcilerde
+ sadece UART1 (UART0) değil) desteklenmektedir. İletişim hızı (baudrate) ayarlarını
+ Ayarlar->İşlemci Ayarları menüsünden yapmalısınız. Hız kristal frekansına bağlı olup,
+ bazı hızlar desteklenmeyebilir. Bu durumda LDMicro sizi uyaracaktır.
+
+ Bu komutun girişi yanlışsa herhangi bir işlem yapılmaz. Doğru ise UART'dan 1 karakter
+ gönderilir. Gönderilecek karakter gönderme işleminden önce `var' değişkeninde saklı
+ olmalıdır. Komutun çıkışı UART meşgulse (bir karakterin gönderildiği sürece)
+ doğru (1) olur. Aksi halde yanlış olur.
+ Çıkışın doğru olması sadece bir PLC çevrimi sürer.
+
+ Karakterin gönderilmesi belirli bir zaman alır. Bu nedenle başka bir karakter
+ göndermeden önce önceki karakterin gönderildiğini kontrol ediniz veya gönderme
+ işlemlerinin arasına geikme ekleyiniz. Komutun girişini sadece çıkış yanlış
+ (UART meşgul değilse)ise doğru yapınız.
+
+ Bu komut yerine biçimlendirilmiş kelime komutunu (bir sonraki komut) inceleyiniz.
+ Biçimlendirilmiş kelime komutunun kullanımı daha kolaydır. İstediğiniz işlemleri
+ daha rahat gerçekleştirebilirsiniz.
+
+
+> UART ÜZERİNDEN BİÇİMLENDİRİLMİŞ KELİME var
+ -{"Pressure: \3\r\n"}-
+
+ LDmicro belirli işlemciler için gerekli UART kodlarını üretebilir. AVR işlemcilerde
+ sadece UART1 (UART0) değil) desteklenmektedir. İletişim hızı (baudrate) ayarlarını
+ Ayarlar->İşlemci Ayarları menüsünden yapmalısınız. Hız kristal frekansına bağlı olup,
+ bazı hızlar desteklenmeyebilir. Bu durumda LDMicro sizi uyaracaktır.
+
+ Bu komutun girişi yanlıştan doğruya geçerse (yükselen kenar) ise seri port üzerinden
+ tüm kelimeyi gönderir. Eğer kelime `\3' özel kodunu içeriyorsa dizi içeriği
+ `var' değişkenin içeriği otomatik olarak kelimeye (string) çevrilerek`var'
+ değişkeninin içeriği ile değiştirilir. Değişkenin uzunluğu 3 karakter olacak şekilde
+ değiştirilir. Mesela; `var' değişkeninin içeriği 35 ise kelime 35 rakamının başına bir
+ adet boşul eklenerek `Pressure: 35\r\n' haline getirilir. Veya `var'değişkeninin
+ içeriği 1453 ise yapılacak işlem belli olmaz. Bu durumda `\4' kullanmak gerekebilir.
+
+ Değişken negatif bir sayı olabilecekse `\-3d' (veya `\-4d') gibi uygun bir değer
+ kullanmalısınız. Bu durumda LDMicro negatif sayıların önüne eksi işareti, pozitif sayıların
+ önüne ise bir boşluk karakteri yerleştirecektir.
+
+ Aynı anda birkaç işlem tanımlanırsa, yada UART ile ilgili işlemler birbirine
+ karışık hale getirilirse programın davranışı belirli olmayacaktır. Bu nedenle
+ dikkatli olmalısınız.
+
+ Kullanılabilecek özel karakterler (escape kodları) şunlardır:
+ * \r -- satır başına geç
+ * \n -- yeni satır
+ * \f -- kağıdı ilerlet (formfeed)
+ * \b -- bir karakter geri gel (backspace)
+ * \xAB -- ASCII karakter kodu 0xAB (hex)
+
+ Bu komutun çıkışı bilgi gönderiyorken doğru diğer durumlarda yanlış olur.
+ Bu komut program hafızasında çok yer kaplar.
+
+
+MATEMATİKSEL İŞLEMLER İLE İLGİLİ BİLGİ
+======================================
+
+Unutmayın ki, LDMicro 16-bit tamsayı matematik komutlarına sahiptir.
+Bu işlemlerde kullanılan değerler ve hesaplamanın sonucu -32768 ile
+32767 arasında bir tamsayı olabilir.
+
+Mesela y = (1/x)*1200 formülünü hesaplamaya çalışalım. x 1 ile 20
+arasında bir sayıdır. Bu durumda y 1200 ile 60 arasında olur. Bu sayı
+16-bit bir tamsayı sınırları içindedir. Ladder diyagramımızı yazalım.
+Önce bölelim, sonra çarpma işlemini yapalım:
+
+ || {DIV temp :=} ||
+ ||---------{ 1 / x }----------||
+ || ||
+ || {MUL y := } ||
+ ||----------{ temp * 1200}----------||
+ || ||
+
+Yada bölmeyi doğrudan yapalım:
+
+ || {DIV y :=} ||
+ ||-----------{ 1200 / x }-----------||
+
+Matematiksel olarak iki işlem aynıd sonucu vermelidir. Ama birinci işlem
+yanlış sonuç verecektir. (y=0 olur). Bu hata `temp' değişkeninin 1'den
+küçük sonuç vermesindendir.Mesela x = 3 iken (1 / x) = 0.333 olur. Ama
+0.333 bir tamsayı değildir. Bu nedenle sonuç 0 olur. İkinci adımda ise
+y = temp * 1200 = 0 olur. İkinci şekilde ise bölen bir tamsayı olduğundan
+sonuç doğru çıkacaktır.
+
+İşlemlerinizde bir sorun varsa dikkatle kontrol ediniz. Ayrıca sonucun
+başa dönmemesine de dikkat ediniz. Mesela 32767 + 1 = -32768 olur.
+32767 sınırı aşılmış olacaktır.
+
+Hesaplamalarınızda mantıksal değişimler yaparak doğru sonuçlar elde edebilirsiniz.
+Örneğin; y = 1.8*x ise formülünüzü y = (9/5)*x şeklinde yazınız.(1.8 = 9/5)
+y = (9*x)/5 şeklindeki bir kod sonucu daha tutarlı hale getirecektir.
+performing the multiplication first:
+
+ || {MUL temp :=} ||
+ ||---------{ x * 9 }----------||
+ || ||
+ || {DIV y :=} ||
+ ||-----------{ temp / 5 }-----------||
+
+
+KODALAMA ŞEKLİ
+==============
+
+Programın sağladığı kolaylıklardan faydalanın. Mesela:
+
+ || Xa Ya ||
+ 1 ||-------] [--------------( )-------||
+ || ||
+ || Xb Yb ||
+ ||-------] [------+-------( )-------||
+ || | ||
+ || | Yc ||
+ || +-------( )-------||
+ || ||
+
+yazmak aşağıdakinden daha kolay olacaktır.
+
+ || Xa Ya ||
+ 1 ||-------] [--------------( )-------||
+ || ||
+ || ||
+ || ||
+ || ||
+ || Xb Yb ||
+ 2 ||-------] [--------------( )-------||
+ || ||
+ || ||
+ || ||
+ || ||
+ || Xb Yc ||
+ 3 ||-------] [--------------( )-------||
+ || ||
+
+ * * *
+
+Yazdığınız kodların sonuçlarına dikkat ediniz. Aşağıdaki satırlarda
+mantıksız bir programlama yapılmıştır. Çünkü hem Xa hemde Xb aynı
+anda doğru olabilir.
+
+ || Xa {v := } ||
+ 1 ||-------] [--------{ 12 MOV}--||
+ || ||
+ || Xb {v := } ||
+ ||-------] [--------{ 23 MOV}--||
+ || ||
+ || ||
+ || ||
+ || ||
+ || [v >] Yc ||
+ 2 ||------[ 15]-------------( )-------||
+ || ||
+
+Aşağıdaki satırlar yukarda bahsi geçen tarzdadır. Ancak yapılan
+işlem 4-bit binary sayı tamsayıya çevrilmektedir.
+
+ || {v := } ||
+ 3 ||-----------------------------------{ 0 MOV}--||
+ || ||
+ || Xb0 {ADD v :=} ||
+ ||-------] [------------------{ v + 1 }-----------||
+ || ||
+ || Xb1 {ADD v :=} ||
+ ||-------] [------------------{ v + 2 }-----------||
+ || ||
+ || Xb2 {ADD v :=} ||
+ ||-------] [------------------{ v + 4 }-----------||
+ || ||
+ || Xb3 {ADD v :=} ||
+ ||-------] [------------------{ v + 8 }-----------||
+ || ||
+
+
+HATALAR (BUG)
+=============
+
+LDmicro tarafından üretilen kodlar çok verimli kodlar değildir. Yavaş çalışan
+ve hafızada fazla yer kaplayan kodlar olabilirler. Buna rağmen orta büyüklükte
+bir PIC veya AVR küçük bir PLC'nin yaptığı işi yapar. Bu nedenle diğer sorunlar
+yer yer gözardı edlebilir.
+
+Değişken isimleri çok uzun olmamalıdır.
+
+Programınız yada kullandığınız hafıza seçtiğiniz işlemcinin sahip olduğundan
+büyükse LDMicro hata vermeyebilir. Dikkat etmezseniz programınız hatalı çalışacaktır.
+
+Bulduğunuz hataları yazara bildiriniz.
+
+Teşekkürler:
+ * Marcelo Solano, Windows 98'deki UI problemini bildirdiği için,
+ * Serge V. Polubarjev, PIC16F628 işlemcisi seçildiğinde RA3:0'ın çalışmadığı
+ ve nasıl düzelteceğimi bildirdiği için,
+ * Maxim Ibragimov, ATmega16 ve ATmega162 işlemcileri test ettikleri, problemleri
+ buldukları ve bildirdikleri için,
+ * Bill Kishonti, sıfıra bölüm hatası olduğunda simülasyonun çöktüğünü bildirdikleri
+ için,
+ * Mohamed Tayae, PIC16F628 işlemcisinde EEPROM'da saklanması gereken değişkenlerin
+ aslında saklanmadığını bildirdiği için,
+ * David Rothwell, kullanıcı arayüzündeki birkaç problemi ve "Metin Dosyası Olarak Kaydet"
+ fonksiyonundaki problemi bildirdiği için.
+
+
+KOPYALAMA VE KULLANIM ŞARTLARI
+==============================
+
+LDMICRO TARAFINDAN ÜRETİLEN KODU İNSAN HAYATI VE İNSAN HAYATINI ETKİLEYEBİLECEK
+PROJELERDE KULLANMAYINIZ. LDMICRO PROGRAMCISI LDMICRO'NUN KENDİNDEN VE LDMICRO
+İLE ÜRETİLEN KODDAN KAYNAKLANAN HİÇBİR PROBLEM İÇİN SORUMLULUK KABUL ETMEMEKTEDİR.
+
+Bu program ücretsiz bir program olup, dilediğiniz gibi dağıtabilirsiniz,
+kaynak kodda değişiklik yapabilirsiniz. Programın kullanımı Free Software Foundation
+tarafından yazılan GNU General Public License (version 3 ve sonrası)şartlarına bağlıdır.
+
+Program faydalı olması ümidiyle dağıtılmıştır. Ancak hiçbir garanti verilmemektedir.
+Detaylar için GNU General Public License içeriğine bakınız.
+
+Söz konusu sözleşmenin bir kopyası bu programla beraber gelmiş olması gerekmektedir.
+Gelmediyse <http://www.gnu.org/licenses/> adresinde bulabilirsiniz.
+
+
+Jonathan Westhues
+
+Rijswijk -- Dec 2004
+Waterloo ON -- Jun, Jul 2005
+Cambridge MA -- Sep, Dec 2005
+ Feb, Mar 2006
+ Feb 2007
+
+Email: user jwesthues, at host cq.cx
+
+Türkçe Versiyon : <http://tekelektirik.com/public/ldmicro.rar>