TA2CBA Barbaros Aşuroğlu
E-Mail: ta2cba@www.antrak.org.tr
URL: http://www.antrak.org.tr/~ta2cba
Artık bir PIC16C84 sistemi, bu sistemi pogramlamak için bir programlayıcı
devresi ve yazılımı, sistemi test etmek için basit bir test programı
bu ana
kadar elde ettiklerimizdi.
Bu noktadan sonra artık gerçek anlamda programlamaya girebiliriz.
Pic16c84 için program yazarken PLC (Programmable Logic Controller)
simulasyonundan yararlanacağız. PLC daha cok otomasyonda kullanılan
ve
sıralı işlemlerin lojik aileleri ile biraraya getirilerek yapıldığı
bir sistemdir.
Bu sistem daha çok endüstriyel tesis otomasyonu için geliştirilmiş
olup
ilk yıllarında röleler ve mekanik zamanlama elemanları kullanılarak
yapılırdı.
Daha sonra işin içine mikroişlemciler girdi, hayat bu noktadan sonra
daha
kolaylaştı. Günümüzde PLC olanaklarını kullanmayan endüstriyel tesis
yoktur.
PLC ile pic birleştiği zaman ortaya esnek ve ucuz bir yapı çıkmaktadır.
PLC yapısında AND, OR, XOR, TIMER, NOT, IN, OUT, LATCH, IN, OUT gibi
lojik gruplarını kullanırız. Bu grupları farklı kombinasyonlarda birleştirerek
Portlardan girdiğimiz TTL seviyesindeki sinyalleri kombinasyonun
öngördüğü işlemlere tabi tutup çıkış olarak sectiğimiz Port’tan dışarı
alırız.
Buna bir ornek vermek gerekirse test porgramımızı ele alalım. Bir led
‘i port
RB0 ‘a bağlayıp 0.5 saniye ON 0.5 saniye OFF şeklinde yakıp
söndürmüştük. Bu işlemi PLC sistemi olarak tasarlarsak –1 Adet TIMER-
elemanına ve –1 Adet çıkış elemanına ihtiyaç duyarız.timer elemanı
0.5 saniye ile açıp kapanmalı sonucuda çıkış elemanına iletmelidir.
Çıkış elemanı ilgili Porttur, bizim programımızda bu RB0 idi.
Bu programı yaparken grafik tabanlı bir PLC programlama yazılımından
faydalanacağız. Bu yazılımı picbit_s.zip
dosyasında bulabilirsiniz.
Bu dosyayı picbit adı altında açacağınız bir directory’e
kaydederseniz sorunsuz çalışır.
Bu program dos altında, vga ekranlı, 386 ve üstü işlemcili herhangi
bir
PC de çalışır.
PICBIT grafik editorü ile yazacağımız PLC programını gene aynı
programdaki MPASM ile compile edip elde ettiğimiz. hex sonlu
dosyayı
programlayıcımız ve ilgili yazılımıyla PIC16C84 içine programlayabiliriz
daha sonra bu programı minimum pic devresiyle çalıştırırız.
Şimdi yukarda saydıklarımıza bir örnek olarak PICBIT ‘i test programımızı
tekrar yazmakta kullanalım.
Amaç: 0.5 saniye aralıkla yanıp sönen port RB0’a bağlı bir adet led
ile
flaşör yapmak.
PICBIT programını dos ortamında PICBIT yazarak çalıştırdığımızda
karşımıza çıkan ekran ortasına mouse ile gidip sol tuş ile tıkladığınızda
programlama grafik editor ekranı karşımıza gelir.
Bu ekran üzerine istediğimiz elemanı (örneğin timer, out, in gibi)
koyarız.
Led Flaşör programı elemanları aşağıdaki gibi yer alır. Bir adet TIMER
ve
bir adet OUT elemanı işlemi bitirir.
Led flaşör grafik PLC programı yukarda görüldüğü gibi iki adet elemandan
oluşmaktadır. IN elemanı Timer T10 elemanının bir parçasıdır.
T10 üstündeki 512,00 rakamı 512ms karşılığıdır ve bir listeden
sabit değerler arasından uygun olanı seçilir.
OUT elemanı ise TIMER çıkışı ile Port RB0 arasındaki baglantıyı
düzenleyen
program parçasıdır.
PLC programının text çıktısı ise aşağıdaki gibidir:
ld
Timer_2,2 ;[D:1] 4
out
Port_B,0 ;[E:1] 5
;
Görüldüğü gibi PLC tekniği ile program yapmak assemblerdan çok daha
kolaydır.
Gelecek ay PICBIT yazılımını ve PLC elemanlarını yakından tanıyacağız.
Merak edenlere yukarıdaki iki satırlık programın assembler listesini
aşağıda veriyorum.
MPASM 01.50 Released
PIC4.ASM 6-23-1998 14:51:58
PAGE 1
LOC OBJECT CODE LINE
SOURCE TEXT
VALUE
00001 ; produced by PICBIT
00002 include "plc_2.inc"
00001 ;modified from 5X to 16C84
2007 3FFD
00002 __FUSES 0x3FFD
00003
00344 LIST
00345
00346 ;Place PLC specific register names here
00347 ;C84 Equates
00000005
00348 Port_A equ 5h
00000006
00349 Port_B equ 6h
00000001
00350 Timer_1 equ 01h
00000002
00351 PCL equ 02h
00352
00353 CBLOCK 0x0C
0000000C
00354 step1 ;Schrittmotor Phasenzeiger Motor-1
0000000D
00355 step2 ;Schrittmotor Phasenzeiger Motor-2
0000000E
00356 steptmp ;Stepper Temp-Register
0000000F
00357 Timer_2
00358 ENDC
00359
00360 CBLOCK 0x10
00000010
00361 Creg_l
00362 ENDC
00363
00364 CBLOCK 0x18
00000018
00365 Creg_h
00366 ENDC
00367
00368 CBLOCK 0x20
00000020
00369 _DFF
00370 ENDC
00371
00372 CBLOCK 0X28
00000028
00373 Aux_1, Aux_2
0000002A
00374 Cflag, Ct
0000002C
00375 Temp_1, Temp_2, unused1, unused2
00376 ENDC
00377
00378 ;
00379 ;Init
00380 ;
0000 280A
00381 Reset goto init
00382
0001
00383 stepbits
0001 0782
00384 addwf
PCL,f
0002 34AA 3482 3496 00385
DT 0AAh, 082h, 096h, 014h, 055h, 041h, 069h,
028h
3414 3455 3441
3469 3428
00386
000A 3000
00387 init movlw 0
;Initialise all RAM bits to 'safe' values
000B 0086
00388 movwf
Port_B ;
000C 0081
00389 movwf
Timer_1
MPASM 01.50 Released
PIC4.ASM 6-23-1998 14:51:58
PAGE 2
LOC OBJECT CODE LINE
SOURCE TEXT
VALUE
000D 008F
00390 movwf
Timer_2
000E 008C
00391 movwf
step1
000F 008D
00392 movwf
step2
0010 0090
00393 movwf
Creg_l
0011 0091
00394 movwf
Creg_l+1
0012 0092
00395 movwf
Creg_l+2
0013 0093
00396 movwf
Creg_l+3
0014 0094
00397 movwf
Creg_l+4
0015 0095
00398 movwf
Creg_l+5
0016 0096
00399 movwf
Creg_l+6
0017 0097
00400 movwf
Creg_l+7
0018 0098
00401 movwf
Creg_h
0019 0099
00402 movwf
Creg_h+1
001A 009A
00403 movwf
Creg_h+2
001B 009B
00404 movwf
Creg_h+3
001C 009C
00405 movwf
Creg_h+4
001D 009D
00406 movwf
Creg_h+5
001E 009E
00407 movwf
Creg_h+6
001F 009F
00408 movwf
Creg_h+7
0020 00AA
00409 movwf
Cflag
0021 00AB
00410 movwf
Ct
0022 00A8
00411 movwf
Aux_1
0023 00A9
00412 movwf
Aux_2
0024 00AC
00413 movwf
Temp_1
0025 00AD
00414 movwf
Temp_2
0026 00A0
00415 movwf
_DFF
00416
0027 1683
00417 Scan bsf 3,5
0028 301F
00418 movlw
1fh
;Main scan loop
0029 0085
00419 movwf
Port_A ;RA0-RA4 =
inputs
002A 3000
00420 movlw
0
002B 0086
00421 movwf
Port_B ;RB0-RB7 =
outputs
002C 3007
00422 movlw
07
;Enable RTCC, count up on CLKOUT
002D 0081
00423 movwf
0x01
;OPTION
002E 1283
00424 bcf
3,5
00425
;Increment Timer_2 on Timer_1 overflow
002F 1B81
00426 btfsc
1,7
; IF RTCC = 1xxx xxxxb THEN
0030 172D
00427 bsf
Temp_2,6 ;
Set bit 6 in Temp_2 (overflow flag)
00428
; ENDIF
0031 1B81
00429 btfsc
1,7
; IF RTCC = 0xxx xxxxb THEN
0032 2837
00430 goto
Nzero
0033 1F2D
00431 btfss
Temp_2,6 ;
IF bit 6 in Temp_2 = 1 THEN
0034 2837
00432 goto
Nzero
0035 0A8F
00433 incf
Timer_2,f ;
Increment Timer_2
0036 132D
00434 bcf
Temp_2,6 ;
Clear bit 6 in Temp_2
00435
; ENDIF
0037
00436 Nzero
; ENDIF
0037 16AD
00437 bsf
Temp_2,5 ;Used to set shift/rotate
direction (right)
0038 122D
00438 bcf
Temp_2,4 ;Used to set shift/rotate
direction (left)
00439
00003 ; ============================
00004 ; === UserCode starts here ===
00005 ; ============================
MPASM 01.50 Released
PIC4.ASM 6-23-1998 14:51:58
PAGE 3
LOC OBJECT CODE LINE
SOURCE TEXT
VALUE
00006 ld
Timer_2,2 ;[D:1] 4
0039 3000
M movlw 0
003A 190F
M btfsc Timer_2,2
003B 3001
M movlw 1
00007 out
Port_B,0 ;[E:1] 5
003C 00AC
M movwf Temp_1
003D 182C
M btfsc Temp_1,0
003E 1406
M bsf
Port_B,0
003F 1C2C
M btfss Temp_1,0
0040 1006
M bcf
Port_B,0
00008 ;
00009 endp
0041 0064
M clrwdt
0042 2827
M goto
Scan
M end
MPASM 01.50 Released
PIC4.ASM 6-23-1998 14:51:58
PAGE 4
SYMBOL TABLE
LABEL
VALUE
Aux_1
00000028
Aux_2
00000029
Cflag
0000002A
Creg_h
00000018
Creg_l
00000010
Ct
0000002B
Nzero
00000037
PCL
00000002
Port_A
00000005
Port_B
00000006
Reset
00000000
Scan
00000027
Temp_1
0000002C
Temp_2
0000002D
Timer_1
00000001
Timer_2
0000000F
_DFF
00000020
__16C84
00000001
and
and_not
ctr
dff
endp
idff
init
0000000A
inv
inv_lat
inv_out
latch
ld
ld_not
or
or_not
out
out_not
rsff_r
rsff_s
shift
step1
0000000C
step2
0000000D
stepbits
00000001
stepp_1
stepp_2
steptmp
0000000E
unused1
0000002E
unused2
0000002F
xor
xor_not
MPASM 01.50 Released
PIC4.ASM 6-23-1998 14:51:58
PAGE 5
MEMORY USAGE MAP ('X' = Used, '-' = Unused)
0000 : XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXX
0040 : XXX------------- ---------------- ----------------
----------------
2000 : -------X-------- ---------------- ----------------
----------------
All other memory blocks unused.
Program Memory Words Used: 67
Program Memory Words Free: 957
Errors : 0
Warnings : 0 reported,
0 suppressed
Messages : 0 reported,
0 suppressed
|