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.
Devre şeması;
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
Şifre-Pass: 320volt.com
Yayım tarihi: 2010/02/16 Etiketler: microchip pic projeleri, PIC16F84 örnekleri, programlanabilir kilit, şifreli kilit devresi
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?)