OpenPLC-Ladder-Editor/ldmicro-rel2.2/ldmicro/manual-tr.txt

791 lines
36 KiB
Plaintext
Raw Normal View History

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