Kódový zámek s PIC16F84A
Tento kódový zámek sem udělal kvůli tomu, když jdu ze školy a zapomenu si klíče, tak čekam před barákem, ono by se to dalo přelízt, ale to je jedno. A také když něco dělam v dílně nebo na PC a zazvoní návšěva (babička děda) , musel bych seběhnout schody dolu, otevřít jim a pak poslouchat tys nám ale vyrost..... :-) A taky když táta chodí k sousedovi, dělají v garáži auta apod, přebíhaji knám a zase knim, to by si táta musel nosit klíče, je jednoduší naklepat kód, zámek zavrčí a jeto. Nic složitýho.
Ale teď už k samotnému zapojení.
Srdce tohoto zámku je mikroprocesor PIC16F84A, dá se běžně sehnat. Napájení 5V je stabilizováno stabilizátorem 7805 , jako oscilátor je použit odpor a kondenzátor, krystal je na to zbytečný. U toho odporu budete muset experimentovat, už nevim jakej sem tam dával, a rozebírat to opravdu neudu :-) ale měl by se pohybovat kolem 10k. Na port B je připojena klávesnice, na portu A je tranzistor, který spíná relé, potom LED diody, červená na signalizaci špatně zadaného kódu, zelená na otevření zámku a bílá na podsvícení klávesnice. Dále je připojen piezo reproduktorek, které při mačkání tlačítek pípá a když se zadá špatný kód, tak asi 3 vteřiny pípne. Kmitočet a délka pípání se nastaví rovnou v procesoru.
Soubory DPS do eaglu ke stažení zde
Schéma
Program pro PIC16F84A v .asm
___________________________________________________________________________#include p16f84a.inc
__config _RC_OSC & _WDT_OFF
;piny, které vedou na klávesnici -> s1 až s3 jsou sloupce, r1 až r4 jsou řádky na portu B
s1 equ 2
s2 equ 1
s3 equ 0
r1 equ 6
r2 equ 5
r3 equ 4
r4 equ 3
;číslice kódu
c1 equ 1
c2 equ 2
c3 equ 3
c4 equ 4
c5 equ 0x0a
;registry, do kterých se ukládá kód při zadávání
p1 equ 0x0c
p2 equ 0x0d
p3 equ 0x0e
p4 equ 0x0f
p5 equ 0x1a
;výstup pro piezo na portu B
piezo equ 7
;zámek na portu A
rele equ 0
;časovače pro piezo
cas0 equ 0x10
cas1 equ 0x11
;časovače pro zámek
cas2 equ 0x12
cas3 equ 0x13
cas4 equ 0x14
;flagy
flag equ 0x15
flag0 equ 0 ;začalo se zadávat číslo
;výstup pro LED
LED_chyba equ 2
LED_rele equ 3
LED_podsvit equ 1
org 0
clrf INTCON
bsf STATUS, RP0
bsf TRISB, r1
bsf TRISB, r2
bsf TRISB, r3
bsf TRISB, r4
bcf TRISB, s1
bcf TRISB, s2
bcf TRISB, s3
bcf TRISB, piezo
bcf OPTION_REG, 7 ;aktivace pull-up odporů na portu B
bcf TRISA, rele
bcf TRISA, LED_chyba
bcf TRISA, LED_rele
bcf TRISA, LED_podsvit
bcf STATUS, RP0
bcf PORTA, rele
bcf PORTA, LED_chyba
bcf PORTA, LED_rele
bcf PORTA, LED_podsvit
clrf cas0
clrf cas1
clrf cas2
clrf cas3
BEGIN
bcf PORTA, LED_podsvit
bcf flag, flag0
call BZUCAK
call DEJCISLO
movwf p1
call BZUCAK
bsf flag, flag0
bsf PORTA, LED_podsvit
call DEJCISLO
movwf p2
call BZUCAK
call DEJCISLO
movwf p3
call BZUCAK
call DEJCISLO
movwf p4
call BZUCAK
call DEJCISLO
movwf p5
call BZUCAK
movf p1, W
xorlw c1
btfss STATUS, Z
goto CHYBA
movf p2, W
xorlw c2
btfss STATUS, Z
goto CHYBA
movf p3, W
xorlw c3
btfss STATUS, Z
goto CHYBA
movf p4, W
xorlw c4
btfss STATUS, Z
goto CHYBA
movf p5, W
xorlw c5
btfss STATUS, Z
goto CHYBA
call ZAMEK
goto BEGIN
DEJCISLO
bcf PORTB, s1
bcf PORTB, s2
bcf PORTB, s3
DEJCISLO1
btfss PORTB, r1
goto DEJCISLO1
btfss PORTB, r2
goto DEJCISLO1
btfss PORTB, r3
goto DEJCISLO1
btfss PORTB, r4
goto DEJCISLO1
movlw D'4'
movwf cas2
clrf cas3
clrf cas4
DEJCISLO2
bcf PORTB, s1
bsf PORTB, s2
bsf PORTB, s3
btfss PORTB, r1
retlw 7
btfss PORTB, r2
retlw 4
btfss PORTB, r3
retlw 1
btfss PORTB, r4
retlw 0x0a
bsf PORTB, s1
bcf PORTB, s2
bsf PORTB, s3
btfss PORTB, r1
retlw 8
btfss PORTB, r2
retlw 5
btfss PORTB, r3
retlw 2
btfss PORTB, r4
retlw 0
bsf PORTB, s1
bsf PORTB, s2
bcf PORTB, s3
btfss PORTB, r1
retlw 9
btfss PORTB, r2
retlw 6
btfss PORTB, r3
retlw 3
btfss PORTB, r4
; retlw 0x0b
goto BEGIN
btfss flag, flag0
goto DEJCISLO2
decfsz cas4
goto DEJCISLO2
decfsz cas3
goto DEJCISLO2
decfsz cas2
goto DEJCISLO2
goto BEGIN
ZAMEK
movlw D'30'
movwf cas2
bsf PORTA, rele
bsf PORTA, LED_rele
ZAMEK1
decfsz cas4
goto ZAMEK1
decfsz cas3
goto ZAMEK1
decfsz cas2
goto ZAMEK1
bcf PORTA, rele
bcf PORTA, LED_rele
return
BZUCAK
bsf PORTB, piezo
BZUCAK1
decfsz cas0, 1
goto BZUCAK1
bcf PORTB, piezo
BZUCAK2
decfsz cas0, 1
goto BZUCAK2
decfsz cas1, 1
goto BZUCAK
return
CHYBA
bsf PORTA, LED_chyba
call BZUCAK
call BZUCAK
call BZUCAK
call BZUCAK
call BZUCAK
call BZUCAK
call BZUCAK
call BZUCAK
call BZUCAK
call BZUCAK
call BZUCAK
bcf PORTA, LED_chyba
goto BEGIN
END
Komentáře
Přehled komentářů
Dal sem zde odkaz na DPS do eaglu
nazdar
(magor-ghost, 16. 2. 2009 22:42)
Zdarvim,
a nebyl by třeba soubor přímo z eagle, dík
DPS
(Lukis, 17. 2. 2009 0:40)