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
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ářů
Dobry den som amater a potreboval by som presny zoznam sučiastok poprosil by aby ste ich odoslali na e-mail: bachar@azet.sk :-)
HEX subor
(Lukas_D, 30. 1. 2012 18:58)nemohol bi si sem dať link na HEX súbor prípadne mi to pošli na luki222555@azet.sk alebo sem daj nejaký kompilátor ktorý to prevedie do hex súboru diki
Atmel
(Zbyňa, 19. 7. 2011 22:51)Dobrý večer, chtěl bych se zeptat pánů zde přispívajících a autora tohoto webu, jestli by byl ochoten naprogramovat mi mikroprocesor Atmel, přesněji AT89C2051. Nikdo v mém okolí nemá na tento typ programátor. Všichni pouze na PICy. Snad to není zas až taková rarita. Prázdný procák mám a program taky, jen ho nahrát. Myslíte, že by to šlo? Děkuji za odpověď :-)
Re: Atmel
(nub, 26. 1. 2012 20:30)cago, sice pisu pozde ale jestli porad potrebujes naprogramovat atmela, muzem se domluvit ze mi posles hex. atmelu mame v praci tuny
PIC16F84
(Vl@k, 15. 10. 2010 11:11)Ahoj,nedal by jsi tu náplň do 16f84 na net ve formě 16f84.hex.Dík :)
zdrojak
(Nub, 4. 5. 2010 22:53)čágo bastlíři :) pokud není aktivní code protect, lze z něj hex vyčíst a uložit do PC a po sléze jej disassemblerem přeložit na zdroják. Bohůžel nebo bohu dík :) bez labelů...
dotaz
(macpe, 14. 4. 2010 18:36)jj dik moc a jeste jedna otazkaa kdys mam naprogramovanej mikroprocesor da se nneho ten zdrojak stahnout zpět do pc?
dotaz
(Lukis, 9. 4. 2010 15:46)Postavíš si programátor, třeba JDM, stáhneš si třeba MPlab, kam zkopíruješ tenhle program, dáš přeložit a vyplivne ti to soubor .hex. Ten pak otevřeš v nějakém programu, kterej komunikuje s tim programátorem a ten kód v hexu ti tam naprogramuje do toho PICu... Podivej se na pandatronu, tam je škola programování s PIC...
dotaz
(macpe, 9. 4. 2010 15:29)
ahoj mam takovou otázku :chtěl by sem si postavit tady to to
Kódový zámek s PIC16F84A a Nevím jak mám na programovat ten procesor nemohl bys mi poradit??
předem děkuji
program
(Lukis, 7. 7. 2009 19:38)To co sem natlačil do procesoru je zde o kousek výše, zkopírovat do MPlabu snad umíš :-)
....
(Tom, 7. 7. 2009 13:06)A mohl bys mi poslat ten proram, kterej jsi nakonec natlačil do procesoru? (kdyžtak *.asm i *.hex) Jestli můžu poprosit. :-) Mail: tsvec@nbox.cz
DECFSZ
(Lukis, 7. 7. 2009 11:52)Jo dík, já už si to nepamatuju, jsou to snad dva roky co sem naposled programoval...
DECFSZ
(Tom, 7. 7. 2009 11:11)Instrukce DECFSZ f,d: Od registru f se odečte jednička, pokud je výsledek nulový, následující instrukce se přeskočí, výsledek se uloží do registru f, pokud je d=1. Pokud bude d=0, výsledek se uloží do pracovního registru.
RE: chyby
(Lukis, 5. 6. 2009 13:24)
Ten oscilátor mam špatně, už si vzpomínám, že jsem ten oscilátor předělával... MCLR je RESET, pokud si dobře pamatuji, myslel jsem si že přivedení +5V na MCLR se RESET aktivoval, ale čtu opak... No myslim že to tak mam a funguje to doteď, zkus to a uvidíš, pak to schéma předělam až bude čas... Jinak u instrukce DECFSZ je přeskoč když je nula, takže myslim že nemusíš dávat za něj 1, nebo 0.... Jinak to piezo tak funguje, třeba tam ten odpor už je... Jinak si to už vůbec nepamatuji, takže třeba plácám blbosti, ale s předěláním toho oscilátoru mi to funguje doteď.
// sry za pomalou reakci.
Chyby v programu a schématu
(Tom, 1. 6. 2009 18:01)Ahoj, chtěl jsem postavit tenhle zámek a narazil jsem na pár problémů. 1. Neměl by ve schématu být pin č.4 (MCLR) přiveden na +5V přes rezistor? Dále pak RC článek by měl být připojen z +5V přes rezistor na pin č.16 a z tohoto pinu přes kondenzátor na GND. Takhle zapojené piezo nemůže fungovat, vzhledem k tomu, že vývod RA4 je "s otevřeným kolektorem", měl by tam být rezistor z RA4 na +5V. Ještě by mě zajímalo, jestli v programu za instrukce decfsz cas4 apod. patří jednička, nebo nula? Já se programovat učím sám, ale když něco budu vědět, rád ti poradím. Kdyžtak piš na mail: tsvec@nbox.cz, nebo na ICQ: 432-537-728
Otazka
(Marek, 15. 5. 2009 22:33)ocuj ja programovat vobec neviem to by si ma musel naucit ja sa zase velmi ryhlo ucim no len ked mi to nema kto ukazat alebo aspon navod ajk nato wes
pic
(Lukis, 15. 5. 2009 13:53)Jo dyžtak bych ti to naprogramoval, stálo by to poštovný... Ale nebylo by lepší si udělat vlastní JDM programovadlo a naprogramovat sám? pak si můžeš cokoli změnit v programu a vyplatilo by se ti to víc než posílat PICe....
pic
(Marek, 15. 5. 2009 7:01)keby som chcel naprogramoval by si mi ten Pic,, a kolko by to stalo?
Sučiastky
(Martin, 5. 12. 2012 9:41)