
KULLANIM KTAPII
==================
LDMicro desteklenen MicroChip PIC16 ve Atmel AVR mikrokontrolcler iin
gerekli kodu retir. Bu i iin kullanlabilecek deiik programlar vardr.
rnein BASIC, C, assembler gibi. Bu programlar kendi dillerinde yazlm
programlar ilemcilerde alabilecek dosyalar haline getirirler.

PLC'de kullanlan dillerden biri  ladder diyagramdr. Aada LDMicro ile
yazlm basit bir program grlmektedir.

   ||                                                                    ||
   ||    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. --] [-- giriler, dier bir
deyile kontaklardr. --( )-- ise klardr. Bunlar bir rlenin bobini
gibi davranrlar. Ladder diyagram ile ilgili bol miktarda kaynak internet
zerinde bulunmaktadr. Burada LDMicro'ya has zelliklerden bahsedeceiz.

LDmicro ladder diyagramn PIC16 veya AVR koduna evirir. Aada desteklenen
ilemcilerin listesi bulunmaktadr:
    * PIC16F877
    * PIC16F628
    * PIC16F876 (denenmedi)
    * PIC16F88 (denenmedi)
    * PIC16F819 (denenmedi)
    * PIC16F887 (denenmedi)
    * PIC16F886 (denenmedi)
    * ATmega128
    * ATmega64
    * ATmega162 (denenmedi)
    * ATmega32 (denenmedi)
    * ATmega16 (denenmedi)
    * ATmega8 (denenmedi)

Aslnda daha fazla PIC16 ve AVR ilemci desteklenebilir. Ancak test ettiklerim
ve desteklediini dndklerimi yazdm. rnein PIC16F648 ile PIC16F628
arasnda fazla bir fark bulunmamaktadr. Eer bir ilemcinin desteklenmesini
istiyorsanz ve bana bildirirseniz ilgilenirim.

LDMicro ile ladder diyagramn izebilir, devrenizi denemek iin gerek zamanl
simlasyon yapabilirsiniz. Programnzn altndan eminseniz programdaki
giri ve klara mikrokontrolrn bacaklarn atarsnz. lemci bacaklar
belli olduktan sonra programnz derleyebilirsiniz. Derleme sonucunda oluan
dosya .hex dosyasdr. Bu dosyay PIC/AVR programlayc ile ilemcinize kaydedersiniz.
PIC/AVR ile uraanlar konuya yabanc deildir.


LDMicro ticari PLC programlar gibi tasarlanmtr. Baz eksiklikler vardr.
Kitap dikkatlice okumanz tavsiye ederim. Kullanm esnasnda PLC ve
PIC/AVR hakknda temel bilgilere sahip olduunuz dnlmtr.

DER AMALAR
==================

ANSI C kodunu oluturmak mmkndr. C derleyicisi olan herhangi bir
ilemci iin bu zellikten faydalanabilirsiniz. Ancak altrmak iin
gerekli dosyalar siz salamalsnz. Yani, LDMicro sadece PlcCycle()
isimli fonksiyonu retir. Her dngde PlcCycle fonksiyonunu armak, ve
PlcCycle() fonksiyonunun ard dijital girii yazma/okuma vs gibi
G/ fonksiyonlar sizin yapmanz gereken ilemlerdir.
Oluturulan kodu incelerseniz faydal olur.

KOMUT SATIRI SEENEKLER
========================

Normal artlarda ldmicro.exe komut satrndan seenek almadan alr.
LDMicro'ya komut satrndan dosya ismi verebilirsiniz. rnein;komut
satrndan 'ldmicro.exe asd.ld' yazarsanz bu dosya almaya alrlr.
Dosya varsa alr. Yoksa hata mesaj alrsnz. sterseniz .ld uzantsn
ldmicro.exe ile ilikilendirirseniz .ld uzantl bir dosyay ift tklattnzda
bu dosya otomatik olarak alr. Bkz. Klasr Seenekleri (Windows).

`ldmicro.exe /c src.ld dest.hex', eklinde kullanlrsa  src.ld derlenir
ve hazrlanan derleme dest.hex dosyasna kaydedilir. lem bitince LDMicro kapanr.
Oluabilecek tm mesajlar konsoldan grnr.

TEMEL BLGLER
==============

LDMicro aldnda bo bir program ile balar. Varolan bir dosya ile balatrsanz
bu program alr. LDMicro kendi dosya biimini kullandndan dier dosya
biimlerinden dosyalar aamazsnz.

Bo bir dosya ile balarsanz ekranda bir tane bo satr grrsnz. Bu satra
komutlar ekleyebilir, satr saysn artrabilirsiniz. Satrlara Rung denilir.
rnein; Komutlar->Kontak Ekle diyerek bir kontak ekleyebilirsiniz. Bu kontaa
'Xnew' ismi verilir. 'X' bu kontan ilemcinin bacana denk geldiini gsterir.
Bu kontaa derlemeden nce isim vermeli ve mikrokontrolrn bir baca ile
eletirmelisiniz. Eletirme ilemi iinde nce ilemciyi semelisiniz.
Elemanlarn ilk harfi o elemann ne olduu ile ilgilidir. rnekler:

    * Xname -- mikrokontrolrdeki bir giri baca
    * Yname -- mikrokontrolrdeki bir k baca
    * Rname -- `dahili rle': hafzada bir bit.
    * Tname -- zamanlayc; turn-on, turn-off yada retentive
    * Cname -- sayc, yukar yada aa sayc
    * Aname -- A/D eviriciden okunan bir tamsay deer
    * name  -- genel deiken (tamsay)

stediiniz ismi seebilirsiniz. Seilen bir isim nerede kullanlrsa
kullanlsn ayn yere denk gelir. rnekler; bir satrda Xasd kullandnzda
bir baka satrda Xasd kullanrsanz ayn deere sahiptirler.
Bazen bu mecburi olarak kullanlmaktadr. 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 yaptnz bir mantk hatasdr. Her gecikme devresi kendi
hafzasna sahip olmaldr. Ama Tgec (TON) turn-on gecikme  devresini sfrlamak
iin kullanlan RES komutunda Tgec ismini kullanmak gerekmektedir.

Deiken isimleri harfleri, saylar, alt izgileri ihtiva edebilir.
(_). Deiken isimleri say ile balamamaldr. Deiken isimleri byk-kk harf duyarldr.
rnein; TGec ve Tgec ayn zamanlayclar deildir.


Genel deikenlerle ilgili komutlar (MOV, ADD, EQU vs) herhangi bir
isimdeki deikenlerle alr. Bunun anlam bu komutlar zamanlayclar
ve sayclarla alr. Zaman zaman bu faydal olabilir. rnein; bir
zamanlaycnn deeri ile ilgili bir karlatrma yapabilirsiniz.

Deikenler hr zaman iin 16 bit tamsaydr. -32768 ile 32767 arasnda
bir deere sahip olabilirler. Her zaman iin iaretlidir. (+ ve - deere
sahip olabilirler) Onluk say sisteminde say kullanabilirsiniz. Trnak
arasna koyarak ('A', 'z' gibi) ASCII karakterler kullanabilirsiniz.

Ekrann alt tarafndaki ksmda kullanlan tm elemanlarn bir listesi grnr.
Bu liste program  tarafndan otomatik olarak oluturulur ve kendiliinden
gncelletirilir. Sadece 'Xname', 'Yname', 'Aname' elemanlar iin
mikrokontrolrn bacak numaralar belirtilmelidir. nce Ayarlar->lemci Seimi
mensnden ilemciyi seiniz. Daha sonra G/ ularn ift tklatarak alan
pencereden seiminizi yapnz.

Komut ekleyerek veya kararak programnz deitirebilirsiniz. Programdaki
kursr eleman eklenecek yeri veya hakknda ilem yaplacak eleman gstermek
amacyla yanp sner. Elemanlar arasnda <Tab> tuu ile gezinebilirsiniz. Yada
eleman fare ile tklatarak ilem yaplacak eleman seebilirsiniz. Kursr elemann
solunda, sanda, altnda ve stnde olabilir. Solunda ve sanda olduunda
ekleme yaptnzda eklenen eleman o tarafa eklenir. stnde ve altnda iken
eleman eklerseniz eklenen eleman seili elemana paralel olarak eklenir.
Baz ilemleri yapamazsnz. rnein bir bobinin sana eleman ekleyemezsiniz.
LDMicro buna izin vermeyecektir.

Program bo bir satrla balar. Kendiniz alta ve ste satr ekleyerek dilediiniz
gibi diyagramnz oluturabilirsiniz. Yukarda bahsedildii gibi alt devreler
oluturabilirsiniz.

Programnz yazdnzda simlasyon yapabilir, .hex dosyasn oluturabilirsiniz.

SMLASYON
==========

Simlasyon moduna gemek iin Simlasyon->Simlasyon modu mensn tklatabilir,
yada <Ctrl+M> tu kombinasyonuna basabilirsiniz. Simlasyon modunda program
farkl bir grnt alr. Kursr grnmez olur. Enerji alan yerler ve elemanlar
parlak krmz, enerji almayan yerler ve elemanlar gri grnr. Boluk tuuna
basarak bir evrim ilerleyebilir yada menden Simlasyon->Gerek Zamanl Simlasyonu Balat
diyerek (veya <Ctrl+R>) devaml bir evrim balatabilirsiniz. Ladder diyagramnn
almasna gre gerek zamanl olarak elemanlar ve yollar program tarafndan deitirilir.

Giri elemanlarnn durumunu ift tklatarak deitirebilirsiniz. Mesela, 'Xname'
kontan ift tklatranz aktan kapalya veya kapaldan aa gei yapar.

DERLEME
=======

Ladder diyagramnn yaplmasndaki ama ilemciye yklenecek .hex dosyasnn
oluturulmasdr. Buna 'derleme' denir. Derlemeden nce u aamalar tamamlanmaldr:
 1- lemci seilmelidir. Ayarlar->lemci Seimi mensnden yaplr.
 2- G/ ularnn mikrokontrolrdeki hangi bacaklara balanaca seilmelidir.
    Elemann zerine ift tklanr ve kan listeden seim yaplr.
 3- evrim sresi tanmlanmaldr. Ayarlar->lemci Ayarlar mensnden yaplr.
    Bu sre ilemcinin alt frekansa baldr. ou uygulamalar iin 10ms
    uygun bir seimdir. Ayn yerden kristal frekansn ayarlamay unutmaynz.

Artk kodu retebilirsiniz. Derle->Derle yada Derle->Farkl Derle seeneklerinden
birini kullanacaksnz. Aradaki fark Kaydet ve Farkl Kaydet ile ayndr. Sonuta
Intel IHEX dosyanz programnzda hata yoksa retilecektir. Programnzda hata varsa
uyar alrsnz.

Progamlaycnz ile bu dosyay ilemcinize yklemelisiniz. Buradaki en nemli nokta
ilemcinin konfigrasyon bitlerinin ayarlanmasdr. PIC16 ilemciler iin gerekli
ayar bilgileri hex dosyasna kaydedildiinden programlaycnz bu ayarlar alglayacaktr.
Ancak AVR ilemciler iin gerekli ayarlar siz yapmalsnz.

KOMUTLAR ve ELEMANLAR
=====================

> KONTAK, NORMALDE AIK         Xname           Rname          Yname
                             ----] [----     ----] [----    ----] [----

    Normalde ak bir anahtar gibi davranr. Komutu kontrol eden sinyal 0 ise
    kndaki sinyalde 0 olur. Eer kontrol eden sinyal 1 olursa k da 1
    olur ve ka bal bobin aktif olur. Bu kontak ilemci bacandan alnan
    bir giri, k baca yada dahili bir rle olabilir.


> KONTAK, NORMALDE KAPALI       Xname           Rname          Yname
                             ----]/[----     ----]/[----    ----]/[----

    Normalde kapal bir anahtar gibi davranr. Komutun kontrol eden sinyal 0 ise
    k 1 olur. Eer kontrol eden sinyal 1 olursa k 0 olur ve ka
    bal elemanlar pasif olur. Normalde ka gerilim verilir, ancak bu konta
    kontrol eden sinyal 1 olursa kontan knda gerilim olmaz. Bu kontak
    ilemci bacandan alnan bir giri, k baca yada dahili bir rle olabilir


> BOBN, NORMAL                 Rname           Yname
                             ----( )----     ----( )----

    Elemana giren sinyal 0 ise dahili rle yada k baca 0 yaplr.
    Elemana giren sinyal 1 ise dahili rle yada k baca 1 yaplr.
    Bobine  giri deikeni atamak mantkszdr. Bu eleman bir satrda
    sadaki en son eleman olmaldr.


> BOBN, TERSLENM             Rname           Yname
                             ----(/)----     ----(/)----

    Elemana giren sinyal 0 ise dahili rle yada k baca 1 yaplr.
    Elemana giren sinyal 1 ise dahili rle yada k baca 0 yaplr.
    Bobine  giri deikeni atamak mantkszdr. Bu eleman bir satrda
    sadaki en son eleman olmaldr. Normal bobinin tersi alr.


> BOBN, SET                   Rname           Yname
                             ----(S)----     ----(S)----

    Elemana giren sinyal 1 ise dahili rle yada k baca 1 yaplr.
    Dier durumlarda bu bobinin durumunda bir deiiklik olmaz. Bu komut
    bobinin durumunu sadece 0'dan 1'e evirir. Bu nedenle ounlukla
    BOBN-RESET ile beraber alr. Bu eleman bir satrda sadaki en
    son eleman olmaldr.


> BOBN, RESET                 Rname           Yname
                             ----(R)----     ----(R)----

    Elemana giren sinyal 1 ise dahili rle yada k baca 0 yaplr.
    Dier durumlarda bu bobinin durumunda bir deiiklik olmaz. Bu komut
    bobinin durumunu sadece 1'dEn 0'a evirir. Bu nedenle ounlukla
    BOBN-SET ile beraber alr. Bu eleman bir satrda sadaki en
    son eleman olmaldr.


> TURN-ON GECKME               Tdon
                           -[TON 1.000 s]-

    Bir zamanlaycdr. Giriindeki sinyal 0'dan 1'e geerse ayarlanan
    sre kadar srede k 0 olarak kalr, sre bitince k 1 olur.
    Giriindeki sinyal 1'den 0'a geerse k hemen 0 olur.
    Girii 0 olduu zaman zamanlayc sfrlanr. Ayrca; ayarlanan sre
    boyunca giri 1 olarak kalmaldr.

    Zamanlayc 0'dan balayarak her evrim sresinde 1 artarak sayar.
    Say ayarlanan sreye eit yada bykse k 1 olur. Zamanlayc
    deikeni zerinde ilem yapmak mmkndr. (rnein MOV komutu ile)


> TURN-OFF GECKME               Tdoff
                           -[TOF 1.000 s]-

    Bir zamanlaycdr. Giriindeki sinyal 1'den 0'a geerse ayarlanan
    sre kadar srede k 1 olarak kalr, sre bitince k 0 olur.
    Giriindeki sinyal 0'dan 1'e geerse k hemen 1 olur.
    Girii 0'dan 1'e getiinde zamanlayc sfrlanr. Ayrca; ayarlanan
    sre boyunca giri 0 olarak kalmaldr.

    Zamanlayc 0'dan balayarak her evrim sresinde 1 artarak sayar.
    Say ayarlanan sreye eit yada bykse k 1 olur. Zamanlayc
    deikeni zerinde ilem yapmak mmkndr. (rnein MOV komutu ile)


> SRE SAYAN TURN-ON GECKME        Trto
                               -[RTO 1.000 s]-

    Bu zamanlayc giriindeki sinyalin ne kadar sre ile 1 olduunu
    ler. Ayaralanan sre boyunca giri 1 ise k 1 olur. Aksi halde
    k 0 olur. Ayarlanan sre devaml olmas gerekmez. rnein; sre
    1 saniyeye ayarlanmsa ve giri nce 0.6 sn 1 olmusa, sonra 2.0 sn
    boyunca 0 olmusa daha sonra 0.4 sn boyunca giri tekrar 1 olursa
    0.6 + 0.4 = 1sn olduundan k 1 olur. k 1 olduktan sonra
    giri 0 olsa dahi k 0'a dnmez. Bu nedenle zamanlayc RES reset
    komutu ile resetlenmelidir.

    Zamanlayc 0'dan balayarak her evrim sresinde 1 artarak sayar.
    Say ayarlanan sreye eit yada bykse k 1 olur. Zamanlayc
    deikeni zerinde ilem yapmak mmkndr. (rnein MOV komutu ile)


> RESET (SAYICI SIFIRLAMASI)     Trto             Citems
                             ----{RES}----     ----{RES}----

    Bu komut bir zamanlayc veya saycy sfrlar. TON ve TOF zamanlayc
    komutlar kendiliinden sfrlandndan bu komuta ihtiya duymazlar.
    RTO zamanlaycs ve CTU/CTD sayclar kendiliinden sfrlanmadndan
    sfrlanmalar iin kullanc tarafndan bu komutile sfrlanmas
    gerekir. Bu komutun girii 1 olduunda sayc/zamanlayc sfrlanr.
    Bu komut bir satrn sandaki son komut olmaldr.


> YKSELEN KENAR                _    _
                           --[_/ OSR/ \_]--

    Bu komutun k normalde 0'dr. Bu komutun knn 1 olabilmesi
    iin bir nceki evrimde giriinin 0 imdiki evrimde giriinin 1
    olmas gerekir. Komutun k bir evrimlik bir pals retir.
    Bu komut bir sinyalin ykselen kenarnda bir tetikleme gereken
    uygulamalarda faydaldr.


> DEN KENAR                 _      _
                           --[ \_OSF/ \_]--

    Bu komutun k normalde 0'dr. Bu komutun knn 1 olabilmesi
    iin bir nceki evrimde giriinin 1 imdiki evrimde giriinin 0
    olmas gerekir. Komutun k bir evrimlik bir pals retir.
    Bu komut bir sinyalin den kenarnda bir tetikleme gereken
    uygulamalarda faydaldr.


> KISA DEVRE, AIK DEVRE
                           ----+----+----      ----+     +----

    Ksa devrenin k her zaman giriinin aynsdr.
    Ak devrenin k her zaman 0'dr. Bildiimiz ak/ksa devrenin
    aynsdr. Genellikle hata aramada kullanlrlar.

> ANA KONTROL RLES
                           -{MASTER RLY}-

    Normalde her satrn ilk girii 1'dir. Birden fazla satrn tek bir art ile
    kontrol edilmesi gerektiinde paralel balant yapmak gerekir. Bu ise zordur.
    Bu ilemi kolayca yapabilmek iin ana kontrol rlesini kullanabiliriz.
    Ana kontrol rlesi eklendiinde kendisinden sonraki satrlar bu rleye bal
    hale gelir. Bylece; birden fazla satr tek bir art ile kontrol salanr.
    Bir ana kontrol rlesi kendisinden sonra gelen ikinci bir ana kontrol
    rlesine kadar devam eder. Dier bir deyile birinci ana kontrol rlesi
    balangc ikincisi ise bitii temsil eder. Ana kontrol rlesi kullandktan
    sonra ilevini bitirmek iin ikinci bir ana kontrol rlesi eklemelisiniz.

> MOVE                      {destvar :=  }      {Tret :=     }
                           -{ 123     MOV}-    -{ srcvar  MOV}-

    Girii 1 olduunda verilen sabit sayy (123 gibi) yada verilen deikenin
    ieriini (srcvar) belirtilen deikene (destvar) atar. Giri 0 ise herhangi
    bir ilem olmaz. Bu komut ile zamanlayc ve sayclar da dahil olmak zere
    tm deikenlere deer atayabilirsiniz. rnein Tsay zamanlaycsna MOVE ile
    0 atamak ile RES ile sfrlamak ayn sonucu dourur. Bu komut bir satrn
    sandaki en son komut olmaldr.

> MATEMATK LEMLER         {ADD  kay  :=}       {SUB  Ccnt :=}
                            -{ 'a' + 10   }-     -{ Ccnt - 10  }-

>                            {MUL  dest :=}       {DIV  dv :=  }
                            -{ var * -990 }-     -{ dv / -10000}-

    Bu komutun girii doru ise belirtilen hedef deikenine verilen matematik
    ilemin sonucunu kaydeder. lenen bilgi zamanlayc ve sayclar dahil
    olmak zere deikenler yada sabit saylar olabilir. lenen bilgi 16 bit
    iaretli saydr. Her evrimde ilemin yeniden yapld unutulmamaldr.
    rnein artrma yada eksiltme yapyorsanz ykselen yada den kenar
    kullanmanz gerekebilir. Blme (DIV) virglden sonrasn keser. rnein;
    8 / 3 = 2 olur. Bu komut bir satrn sandaki en son komut olmaldr.


> KARILATIRMA         [var ==]        [var >]        [1 >=]
                       -[ var2 ]-      -[ 1   ]-      -[ Ton]-

>                       [var !=]       [-4 <   ]       [1 <=]
                       -[ var2 ]-     -[ vartwo]-     -[ Cup]-

    Deiik karlatrma komutlar vardr. Bu komutlarn girii doru (1)
    ve verilen art da doru ise klar 1 olur.


> SAYICI                       Cname          Cname
                           --[CTU >= 5]--  --[CTD > -5]--

    Sayclar girilerinin 0'dan 1'e her geiinde yani ykselen kenarnda
    deerlerini 1 artrr (CTU) yada eksiltirler (CTD). Verilen art doru ise
    klar aktif (1) olur. CTU ve CTD sayclarna ayn ismi erebilirsiniz.
    Bylece ayn saycy artrm yada eksiltmi olursunuz. RES komutu sayclar
    sfrlar. Sayclar ile genel deikenlerle kullandnz komutlar kullanabilirsiniz.


> DARESEL SAYICI              Cname
                           --{CTC 0:7}--

    Normal yukar saycdan fark belirtilen limite ulanca sayc tekrar 0'dan balar
    rnein sayc 0, 1, 2, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 0, 2,.... eklinde
    sayabilir. Yani bir dizi sayc olarak dnlebilir. CTC sayclar girilerinin
    ykselen kenarnda deer deitirirler. Bu komut bir satrn sandaki
    en son komut olmaldr.


> SHIFT REGISTER            {SHIFT REG   }
                           -{ reg0..3    }-

    Bir dizi deiken ile beraber alr. sim olarak reg verdiinizi ve aama
    saysn 3 olarak tanmladysanz reg0, reg1, reg2 deikenleri ile alrsnz.
    Kaydedicinin girii reg0 olur. Giriin her ykselen kenarnda deerler kaydedicide
    bir saa kayar. Mesela; `reg2 := reg1'. and `reg1 := reg0'. `reg0' deimez.
    Geni bir kaydedici hafzada ok yer kaplar.
    Bu komut bir satrn sandaki en son komut olmaldr.


> DEER TABLOSU             {dest :=     }
                           -{ LUT[i]     }-

    Deer tablosu sralanm n adet deer ieren bir tablodur. Girii doru olduunda
    `dest' tamsay deikeni `i' tamsay deikenine karlk gelen deeri alr. Sra
    0'dan balar. bu nedenle `i' 0 ile (n-1) arasnda olabilir. `i' bu deerler
    arasnda deilse komutun ne yapaca tanml deildir.
    Bu komut bir satrn sandaki en son komut olmaldr.


> PIECEWISE LINEAR TABLE    {yvar :=     }
                           -{ PWL[xvar]  }-

    Bir matris tablo olarak dnlebilir. Bir deere bal olarak deerin nceden
    belirlenen bir baka deer ile deitirilmesi ii oluturulan bir tablodur.
    Bu bir eri oluturmak, sensrden alnan deere gre kta baka bir eri
    oluturmak gibi amalar iin kullanlabilir.

    Farzedelimki x tamsay giri deerini y tamsay k deerine yaklatrmak
    istiyoruz. Deerlerin belirli noktalarda olduunu biliyoruz. rnein;

        f(0)   = 2
        f(5)   = 10
        f(10)  = 50
        f(100) = 100

    Bu u noktalarn eride olduunu gsterir:

        (x0, y0)   = (  0,   2)
        (x1, y1)   = (  5,  10)
        (x2, y2)   = ( 10,  50)
        (x3, y3)   = (100, 100)

    Drt deeri paral lineer tabloya gireriz. Komut, xvar'n deerine bakarak
    yvar'a deer verir. rnein, yukardaki rnee bakarak, xvar = 10 ise
    yvar = 50 olur.

    Tabloya kaytl iki deerin arasnda bir deer verirseniz verilen deer de
    alnmas gereken iki deerin arasnda uygun gelen yerde bir deer olur.
    Mesela; xvar=55 yazarsanz yvar=75 olur. (Tablodaki deerler (10,50) ve
    (100,100) olduuna gre). 55, 10 ve 100 deerlerinin ortasndadr. Bu
    nedenle 55 ve 75 deerlerinin ortas olan 75 deeri alnr.

    Deerler x koordinatnda artan deerler olarak yazlmaldr. 16 bit tamsay
    kullanan baz deerler iin arama tablosu zerinde matematik ilemler
    gereklemeyebilir. Bu durumda LDMicro sizi uyaracaktr. rnein aadaki
    tablo bir hata oluturacaktr:

        (x0, y0)    = (  0,   0)
        (x1, y1)    = (300, 300)

    Bu tip hatalar noktalar arsnda ara deerler oluturarak giderebilirsiniz.
    rnein aadaki tablo yukardakinin ayns olmasna ramen hata
    oluturmayacaktr.

        (x0, y0)    = (  0,   0)
        (x1, y1)    = (150, 150)
        (x2, y2)    = (300, 300)

    Genelde 5 yada 6 noktadan daha fazla deer kullanmak gerekmeyecektir.
    Daha fazla nokta demek daha fazla kod ve daha yava alma demektir.
    En fazla 10 nokta oluturabilirsiniz. xvar deikenine x koordinatnda
    tablonun en yksek deerinden daha byk bir deer girmenin ve en dk
    deerinden daha kk bir deer girmenin sonucu tanml deildir.
    Bu komut bir satrn sandaki en son komut olmaldr.

> A/D EVRCDEN OKUMA        Aname
                           --{READ ADC}--

    LDmicro A/D  eviriciden deer okumak iin gerekli kodlar destekledii
    ilemciler iin oluturabilir. Komutun girii 1 olduunda A/D eviriciden
    deer okunur ve okunan deer `Aname' deikenine aktarlr. Bu deiken
    zerinde genel deikenlerle kullanlabilen ilemler kullanlabilir.
    (byk, kk, byk yada eit gibi). Bu deikene ilemcinin bacaklarndan
    uygun biri tanmlanmaldr. Komutun girii 0 ise `Aname'deikeninde bir
    deiiklik olmaz.

    u an desteklenen ilemciler iin; 0 Volt iin ADC'den okunan deer 0,
    Vdd (besleme gerilimi) deerine eit gerilim deeri iin ADC'den okunan deer
    1023 olmaktadr. AVR kullanyorsanz AREF ucunu Vdd besleme gerilimine
    balaynz.

    Aritmetik ilemler ADC deikeni iin kullanlabilir. Ayrca bacak tanmlarken
    ADC olmayan bacaklarn tanmlanmasn LDMicro engelleyecektir.
    Bu komut bir satrn sandaki en son komut olmaldr.

    > PWM PALS GENL AYARI      duty_cycle
                             -{PWM 32.8 kHz}-

    LDmicro destekledii mikrokontrolrler iin gerekli PWM kodlarn retebilir.
    Bu komutun girii doru (1) olduunda PWM sinyalinin pals genilii duty_cycle
    deikeninin deerine ayarlanr. Bu deer 0 ile 100 arasnda deiir. Pals
    genilii yzde olarak ayarlanr. Bir periyot 100 birim kabul edilirse bu
    geniliin yzde kann palsi oluturaca ayarlanr. 0 periyodun tm sfr
    100 ise periyodun tamam 1 olsun anlamna gelir. 10 deeri palsin %10'u 1 geri
    kalan %90' sfr olsun anlamna gelir.

    PWM frekansn ayarlayabilirsiniz. Verilen deer Hz olarak verilir.
    Verdiiniz frekans kesinlikle ayarlanabilir olmaldr. LDMicro verdiiniz deeri
    olabilecek en yakn deerle deitirir. Yksek hzlarda doruluk azalr.

    Bu komut bir satrn sandaki en son komut olmaldr.
    Periyodun sresinin llebilmesi iin ilemcinin zamanlayclarnn bir tanesi
    kullanlr. Bu nedenle PWM en az iki tane zamanlaycs olan ilemcilerde kullanlr.
    PWM PIC16 ilemcilerde CCP2'yi, AVR'lerde ise OC2'yi kullanr.


> EEPROMDA SAKLA             saved_var
                           --{PERSIST}--

    Bu komut ile belirtilen deikenin EEPROM'da saklanmas gereken bir deiken olduunu
    belirmi olursunuz. Komutun girii doru ise belirtilen deikenin ierii EEPROM'a
    kaydedilir. Enerji kesildiinde kaybolmamas istenen deerler iin bu komut kullanlr.
    Deikenin ierii gerilim geldiinde tekrar EEPROM'dan yklenir. Ayrca;
    deikenin ierii her deitiinde yeni deer tekrar EEPROM'a kaydedilir.
    Ayrca bir ilem yaplmas gerekmez.
    Bu komut bir satrn sandaki en son komut olmaldr.

                        
> UART (SER BLG) AL          var
                           --{UART RECV}--

    LDmicro belirli ilemciler iin gerekli UART kodlarn retebilir. AVR ilemcilerde
    sadece UART1 (UART0) deil) desteklenmektedir. letiim hz (baudrate) ayarlarn
    Ayarlar->lemci Ayarlar mensnden yapmalsnz. Hz kristal frekansna bal olup,
    baz hzlar desteklenmeyebilir. Bu durumda LDMicro sizi uyaracaktr.

    Bu komutun girii yanlsa herhangi bir ilem yaplmaz. Doru ise UART'dan 1 karakter
    alnmaya allr. Okuma yaplamaz ise komutun k yanl (0) olur. Karakter
    okunursa okunan karakter `var' deikeninde saklanr ve komutun k doru (1) olur.
    kn doru olmas sadece bir PLC evrimi srer.


> UART (SER BLG) GNDER      var
                           --{UART SEND}--

    LDmicro belirli ilemciler iin gerekli UART kodlarn retebilir. AVR ilemcilerde
    sadece UART1 (UART0) deil) desteklenmektedir. letiim hz (baudrate) ayarlarn
    Ayarlar->lemci Ayarlar mensnden yapmalsnz. Hz kristal frekansna bal olup,
    baz hzlar desteklenmeyebilir. Bu durumda LDMicro sizi uyaracaktr.

    Bu komutun girii yanlsa herhangi bir ilem yaplmaz. Doru ise UART'dan 1 karakter
    gnderilir. Gnderilecek karakter gnderme ileminden nce `var' deikeninde sakl
    olmaldr. Komutun k UART megulse (bir karakterin gnderildii srece)
    doru (1) olur. Aksi halde yanl olur.
    kn doru olmas sadece bir PLC evrimi srer.

    Karakterin gnderilmesi belirli bir zaman alr. Bu nedenle baka bir karakter
    gndermeden nce nceki karakterin gnderildiini kontrol ediniz veya gnderme
    ilemlerinin arasna geikme ekleyiniz. Komutun giriini sadece k yanl
    (UART megul deilse)ise doru yapnz.

    Bu komut yerine biimlendirilmi kelime komutunu (bir sonraki komut) inceleyiniz.
    Biimlendirilmi kelime komutunun kullanm daha kolaydr. stediiniz ilemleri
    daha rahat gerekletirebilirsiniz.


> UART ZERNDEN BMLENDRLM KELME             var
                                            -{"Pressure: \3\r\n"}-

    LDmicro belirli ilemciler iin gerekli UART kodlarn retebilir. AVR ilemcilerde
    sadece UART1 (UART0) deil) desteklenmektedir. letiim hz (baudrate) ayarlarn
    Ayarlar->lemci Ayarlar mensnden yapmalsnz. Hz kristal frekansna bal olup,
    baz hzlar desteklenmeyebilir. Bu durumda LDMicro sizi uyaracaktr.

    Bu komutun girii yanltan doruya geerse (ykselen kenar) ise seri port zerinden
    tm kelimeyi gnderir. Eer kelime `\3' zel kodunu ieriyorsa dizi ierii
    `var' deikenin ierii otomatik olarak kelimeye (string) evrilerek`var'
    deikeninin ierii ile deitirilir. Deikenin uzunluu 3 karakter olacak ekilde
    deitirilir. Mesela; `var' deikeninin ierii 35 ise kelime 35 rakamnn bana bir
    adet boul eklenerek `Pressure:  35\r\n' haline getirilir. Veya `var'deikeninin
    ierii 1453 ise yaplacak ilem belli olmaz. Bu durumda `\4' kullanmak gerekebilir.

    Deiken negatif bir say olabilecekse `\-3d' (veya `\-4d') gibi uygun bir deer
    kullanmalsnz. Bu durumda LDMicro negatif saylarn nne eksi iareti, pozitif saylarn
    nne ise bir boluk karakteri yerletirecektir.

    Ayn anda birka ilem tanmlanrsa, yada UART ile ilgili ilemler birbirine
    kark hale getirilirse programn davran belirli olmayacaktr. Bu nedenle
    dikkatli olmalsnz.

    Kullanlabilecek zel karakterler (escape kodlar) unlardr:
        * \r   -- satr bana ge
        * \n   -- yeni satr
        * \f   -- kad ilerlet (formfeed)
        * \b   -- bir karakter geri gel (backspace)
        * \t   -- horizontal tab
        * \v   -- vertical tab
        * \a   -- alert
        * \xAB -- ASCII karakter kodu 0xAB (hex)

    Bu komutun k bilgi gnderiyorken doru dier durumlarda yanl olur.
    Bu komut program hafzasnda ok yer kaplar.


MATEMATKSEL LEMLER LE LGL BLG
======================================

Unutmayn ki, LDMicro 16-bit tamsay matematik komutlarna sahiptir.
Bu ilemlerde kullanlan deerler ve hesaplamann sonucu -32768 ile
32767 arasnda bir tamsay olabilir.

Mesela y = (1/x)*1200 formln hesaplamaya alalm. x 1 ile 20
arasnda bir saydr. Bu durumda y 1200 ile 60 arasnda olur. Bu say
16-bit bir tamsay snrlar iindedir. Ladder diyagrammz yazalm.
nce blelim, sonra arpma ilemini yapalm:

   ||         {DIV  temp  :=}          ||
   ||---------{ 1 / x       }----------||
   ||                                  ||
   ||          {MUL  y  :=  }          ||
   ||----------{ temp * 1200}----------||
   ||                                  ||

Yada blmeyi dorudan yapalm:

   ||           {DIV  y  :=}           ||
   ||-----------{ 1200 / x }-----------||

Matematiksel olarak iki ilem aynd sonucu vermelidir. Ama birinci ilem
yanl sonu verecektir. (y=0 olur). Bu hata `temp' deikeninin 1'den
kk sonu vermesindendir.Mesela x = 3 iken (1 / x) = 0.333 olur. Ama
0.333 bir tamsay deildir. Bu nedenle sonu 0 olur. kinci admda ise
y = temp * 1200 = 0 olur. kinci ekilde ise blen bir tamsay olduundan
sonu doru kacaktr.

lemlerinizde bir sorun varsa dikkatle kontrol ediniz. Ayrca sonucun
baa dnmemesine de dikkat ediniz. Mesela 32767 + 1 = -32768 olur.
32767 snr alm olacaktr.

Hesaplamalarnzda mantksal deiimler yaparak doru sonular elde edebilirsiniz.
rnein; y = 1.8*x ise formlnz y = (9/5)*x eklinde yaznz.(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
==============

Programn salad kolaylklardan faydalann. Mesela:

   ||       Xa               Ya        ||
 1 ||-------] [--------------( )-------||
   ||                                  ||
   ||       Xb               Yb        ||
   ||-------] [------+-------( )-------||
   ||                |                 ||
   ||                |       Yc        ||
   ||                +-------( )-------||
   ||                                  ||

yazmak aadakinden daha kolay olacaktr.

   ||       Xa               Ya        ||
 1 ||-------] [--------------( )-------||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||       Xb               Yb        ||
 2 ||-------] [--------------( )-------||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||       Xb               Yc        ||
 3 ||-------] [--------------( )-------||
   ||                                  ||

                  *                 *                  *

Yazdnz kodlarn sonularna dikkat ediniz. Aadaki satrlarda
mantksz bir programlama yaplmtr. nk hem Xa hemde Xb ayn
anda doru olabilir.

   ||       Xa         {v  :=       }  ||
 1 ||-------] [--------{ 12      MOV}--||
   ||                                  ||
   ||       Xb         {v  :=       }  ||
   ||-------] [--------{ 23      MOV}--||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||                                  ||
   ||      [v >]             Yc        ||
 2 ||------[ 15]-------------( )-------||
   ||                                  ||

Aadaki satrlar yukarda bahsi geen tarzdadr. Ancak yaplan
ilem 4-bit binary say tamsayya 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 tarafndan retilen kodlar ok verimli kodlar deildir. Yava alan
ve hafzada fazla yer kaplayan kodlar olabilirler. Buna ramen orta byklkte
bir PIC veya AVR kk bir PLC'nin yapt ii yapar. Bu nedenle dier sorunlar
yer yer gzard edlebilir.

Deiken isimleri ok uzun olmamaldr.

Programnz yada kullandnz hafza setiiniz ilemcinin sahip olduundan
bykse LDMicro hata vermeyebilir. Dikkat etmezseniz programnz hatal alacaktr.

Bulduunuz hatalar yazara bildiriniz.

Teekkrler:
    * Marcelo Solano, Windows 98'deki UI problemini bildirdii iin,
    * Serge V. Polubarjev, PIC16F628 ilemcisi seildiinde RA3:0'n almad
      ve nasl dzelteceimi bildirdii iin,
    * Maxim Ibragimov, ATmega16 ve ATmega162 ilemcileri test ettikleri, problemleri
      bulduklar ve bildirdikleri iin,
    * Bill Kishonti, sfra blm hatas olduunda simlasyonun ktn bildirdikleri
      iin,
    * Mohamed Tayae, PIC16F628 ilemcisinde EEPROM'da saklanmas gereken deikenlerin
      aslnda saklanmadn bildirdii iin,
    * David Rothwell, kullanc arayzndeki birka problemi ve "Metin Dosyas Olarak Kaydet"
      fonksiyonundaki problemi bildirdii iin.


KOPYALAMA VE KULLANIM ARTLARI
==============================

LDMICRO TARAFINDAN RETLEN KODU NSAN HAYATI VE NSAN HAYATINI ETKLEYEBLECEK
PROJELERDE KULLANMAYINIZ. LDMICRO PROGRAMCISI LDMICRO'NUN KENDNDEN VE LDMICRO
LE RETLEN KODDAN KAYNAKLANAN HBR PROBLEM N SORUMLULUK KABUL ETMEMEKTEDR.

Bu program cretsiz bir program olup, dilediiniz gibi databilirsiniz,
kaynak kodda deiiklik yapabilirsiniz. Programn kullanm Free Software Foundation
tarafndan yazlan GNU General Public License (version 3 ve sonras)artlarna baldr.

Program faydal olmas midiyle datlmtr. Ancak hibir garanti verilmemektedir.
Detaylar iin  GNU General Public License ieriine baknz.

Sz konusu szlemenin bir kopyas bu programla beraber gelmi olmas gerekmektedir.
Gelmediyse <http://www.gnu.org/licenses/> adresinde bulabilirsiniz.


COPYING, AND DISCLAIMER
=======================

DO NOT USE CODE GENERATED BY LDMICRO IN APPLICATIONS WHERE SOFTWARE
FAILURE COULD RESULT IN DANGER TO HUMAN LIFE OR DAMAGE TO PROPERTY. THE
AUTHOR ASSUMES NO LIABILITY FOR ANY DAMAGES RESULTING FROM THE OPERATION
OF LDMICRO OR CODE GENERATED BY LDMICRO.

This program is free software: you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation, either version 3 of the License, or (at your
option) any later version.

This program is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License along
with this program. If not, see <http://www.gnu.org/licenses/>.


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

Trke Versiyon : <http://tekelektirik.com/public/ldmicro.rar>
