
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)
    * 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)
        * \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.


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>