Elektronik / Mikrodenetleyici Projeleri/

PIC16F84 ile programlanabilir şifreli kilit devresi

Sponsorlu Bağlantılar

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.

Dosyalar: PIC16F84 ile programlanabilir şifreli kilit devresi

Dosya indirme LINK listesi (TXT formatında) link-9183.zip şifre-pass: 320volt.com

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ı;

programlanabilir-kilit-led-buzer-isis

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 

  • emesut

    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

  • mehmet

    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.

  • kadir

    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.

  • emesut

    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.

  • deniz acar

    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

  • oNurrr

    Devrede kullanılan gerekli malzemeler neler acaba.?