
Hazırlayan: F. San – Devre pic-16f84 üzerine kurulu 1 adet röle kontrol ediyor tuş takımı led göstergesi ve buzer uyarısı bulunuyor kaynak .bas, .hex kodları ve proteus isis simülasyon dosyası var. Emeği geçen hazırlayan kişilere teşekkürler.
Kilit şifresi 4×3 matrix şeklinde bağlı bir tuş takımından girilir. Devre programlandığı anda kilit şifresi 1234 dür. Röle çıkışını aktif hale getirmek yani kilidi açmak için 1234 tuşlanır ve ardından # basılır. Eğer şifrede hata yoksa röle çeker.
Mevcut şifreyi değiştirmek için ise , örneğin 1961’e :1234 * 1961#1961# gibi bir tuş işlem sırası izlenmelidir. Şifre değiştirme başarısızsa eski şifre geçerliliğini korur.

piccodelock.bas yazılımı;
'****************************************************************
'* Name : CodeLock.bas *
'* Author : F. San *
'* Date : 18.12.2003 *
'* Version : 1.0 *
'* Notes : Programable Code Lock with the PIC-16F84 *
'****************************************************************
@ device xt_osc, wdt_off, pwrt_on, protect_off
'**************************************************
RL1_ON_time con 1000 * 3 'sec. Relay ON time
'**************************************************
TrisA = 0 ' PORTA, all outputs
PortA = 16 ' turn off Buzer
OPTION_REG.7 = 0 ' PORTB Pullups.
TrisB = %11110000 ' PORTB.0-3 outputs, 4-7 inputs
PortB = 0
LD1 var PortA.2
RL1 var PortA.3
BUZ var portA.4
cnt var byte
key var byte
col var byte
row var byte
keycnt var byte
pwOK var bit
keybuf var byte[15]
pwbuf var byte[4]
EEPROM 0,[1,2,3,4] 'Default password 1,2,3,4 programmed at EEprom location 0..3
Read 0, pwbuf[0] 'Copy password from EEprom address 0..3 in to pwbuf[0..3]
Read 1, pwbuf[1]
Read 2, pwbuf[2]
Read 3, pwbuf[3]
pwOK = 0
keycnt = 0
Main:
high ld1
gosub Chk_KEYPAD
pause 1
goto Main
Chk_KEYPAD:
for row = 0 to 3
PORTB = (dcd row) ^ $f
pause 1
col = PORTB >> 4
if (col <> $f) then 'key pressed
key = (row * 3) + (ncd (col ^ $f))
gosub Got_KEY
key = 255
endif
next
return
Beep:
low ld1
low buz
pause 40
high buz
return
Got_KEY:
gosub Beep
while (PORTB >> 4) <> $f
pause 1
wend
if key = 11 then key = 0
keybuf[keycnt] = key
gosub Chk_keycnt
return
Chk_PwOK:
PwOK = 0
if (keybuf[0] = pwbuf[0]) and (keybuf[1] = pwbuf[1]) and (keybuf[2] = pwbuf[2]) and (keybuf[3] = pwbuf[3]) then pwok = 1
return
Chk_NewPwOK:
PwOK = 0
if (keybuf[5] = keybuf[10]) and (keybuf[6] = keybuf[11]) and (keybuf[7] = keybuf[12]) and (keybuf[8] = keybuf[13]) then pwok = 1
return
Pw_Change:
pwbuf[0] = keybuf[5]
pwbuf[1] = keybuf[6]
pwbuf[2] = keybuf[7]
pwbuf[3] = keybuf[8]
Write 0, pwbuf[0] 'Store new password to EEprom location 0..3
Write 1, pwbuf[1]
Write 2, pwbuf[2]
Write 3, pwbuf[3]
return
Chk_keycnt:
select case keycnt
case 4
gosub Chk_PwOK
if pwOK then
if keybuf[keycnt] = 12 then Access_OK
if keybuf[keycnt] <> 10 then Clr_keybuf
gosub Beep
else
goto Clr_keybuf
endif
case 9
if keybuf[keycnt] <> 12 then Clr_keybuf
gosub Beep
case 14
if keybuf[keycnt] <> 12 then Clr_keybuf
gosub Beep
gosub Chk_NewPwOK
if pwOK then
gosub Beep
gosub Pw_Change
gosub Beep
goto Clr_keybuf
else
goto Clr_keybuf
endif
case else
if keybuf[keycnt] = 12 then Clr_keybuf
end select
keycnt = keycnt + 1
return
Access_OK:
High RL1
pause RL1_ON_time
low RL1
Clr_keybuf:
for cnt = 0 to 14
keybuf[cnt] = cnt
next
keycnt = 0
goto Main
end
pic16f84-ile-programlanabilir-sifreli-kilit-devresi ZIP Dosyası Şifre-Pass: 320volt.com
Paylaşım için teşekkürler gevv hocam..
Acaba rölenin çekme süresini kısaltabilirmiyiz.
Ben bunu bina giriş kapısına koymak istiyorum fakat röle 4 saniyeden fazla çekiyor. Buda kapı otomatiğinin 4 saniye cayırdaması demek. Rahatsız edici yani.
Bu süreyi 1 saniyeye çekebilirmiyiz..
Kod içinde
pause 1
col = PORTB >> 4
ifadesi var bilgim yok ama 4 sayısı 4 saniye anlamında olabilir bunu 1 yapıp denersiniz birde pause 1 kodları var onları değiştirerekte deneme yapın umarım uzman okurlarımız bir çözüm bulur 🙂 ben kesin bir şeyler söyleyemiyorum iyi çalışmalar
hocam oradaki 4 bit kaydırma yapmış sanırım
RL1_ON_time con 1000 * 3 ‘sec. Relay ON time tahminim doğruysa buradaki 1000 çarpı 3 demiş 3 sn demek istemiş buraki 100 carpı 3 olarak deiştirir se 300 ms olur diye düşünüyorum.
selam bu devreyi kurdum gayet güzel çalışıyor ancak pıc ile başka bir devre kontrol ederken yanlışlıkla 3 nolu portu yaktım şimdi bu devredede 18 veya 17 boşta acaba bu çıkışı oraya yönlendire bilirmiyiz mplab 8.59da denedim .bas dosyasını bir türlü hex dosayasına çeviremedim bu konuda yardımcı olursanız sevinirim. şimdiden teşekkürler.
RL1_ON_time con 1000 * 3 ‘sec. Relay ON time
Bu satırı 3 değilde 1 olarak değiştiriyorum.
similasyonda çalışıyor fakat pic e atıp devrede denediğimde: enerji verir vermez hızlı bir şekilde röleyi çekip bırakıyor ve bu böyle enerji kesene kadar devam ediyor.
Varmı bir çözümü olan arkadaşlar.
devreyi kurdum ama devrede bı garıplık var şifreyi hızlı gırdıgımızde açılıyor bazen açıl mıyor ama genellıkle açılmıyor bunun nedenı ne olabılır bağlantılar aynı sadece devreye sıfreyı kac sanıyede gırmemız gerektıgı falan kayıtlımı yardımcı olursanız sevınırım .emegı geçenlere tesekkurler
Devrede kullanılan gerekli malzemeler neler acaba.?
que ide esta usando(proton?)