diff options
Diffstat (limited to 'ldmicro/manual-tr.txt')
-rw-r--r-- | ldmicro/manual-tr.txt | 790 |
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> |