1시간에서 15시간까지 타이머설정이 가능합니다.
스타트 스위치를 on하면 회로에 전기가 통전됩니다.
회로에서는PIC16F84의 프로그램에 따라 RB0~RB7포트를 출력단자로 RA0~RA3포트를 입력단자로 설정하고
곧바로 트랜지스터를 on시킵니다.
트랜지스터가 on하면 릴레이가 on하고 ac아웃렛이 통전되고 달음에RA0~RA3포트에 접촉된 디지털스위치의
정보를 레지스터로 이동합니다.
후에는 루우프타이머프로그램에 따라 설정된시간이 되면 트랜지스터가 OFF하고 자기유지의 해제와 AC아웃렛의
통전을 단절합니다.회로에 있는 강제OFF스위치는 릴레이를 구동할 트랜지스터를 OFF시켜 강제로 자기유지를
해제시키는
스위치입니다.
다이오드브릿지:W02로 정류후에 1KΩ저항이 접속되어 무하지만 접속되어 쓸데없는 생각이 듭니다만 이것은
자기유지를 해제 후에 평활콘덴서: 470μF의 전하를 재빠르게 방전시
강제OFF스위치로 해 릴레이를
OFF하고
키기 위해서 입니다.
재빠르게 방전하지 않습니다와 PIC16F84가 당분간 동작 상태가 되고 있기 때문에 강제 OFF 스윗치를 해제해도
재차 릴레이가 on 해 버릴 우려가 있습니다.
소스파일은 timer.asm 대로 입니다. 처음 PIC를 사용하는 분에도 알기 쉽게 코멘트를 많이 써 두었기 때문에,
대략적으로 이해한 다음 제작하면 좋을 것입니다.
매우 간단한 프로그램이므로 처음하는 분도 곧 바로 이해할 수 있다고 생각합니다.
PIC를 잘 다루고 있는 분은 물론 부족할 것입니다. 이 프로그램에서는 개개인의 습관이 있어
더 효율적인 좋은 방법도 있을 것입니다. 프로그램에는 일부 MPLAB의 매크로 명령을 사용하고 있습니다.
덧붙여 디지털 스윗치를「0」(타이머: 0시간)으로 설정하면 상시 on 이 되도록 프로그램 해 두었습니다.
또, 타이머 동작시는 0.5초 마다 LED를 점멸시키고 있습니다.
(주의)컨피그레이션으로 워치 도크 타이머는 무효로 해 써 주세요.。
;*************************Timer Project*************************************************
;timer.pro...
;by_y.ishizuka
;Modified by naryseo 2009.09.20 (Sun)
LIST P=PIC16F84
INCLUDE "P16F84.INC"
;변수설정************************************************************************
CNT1 EQU 0CH
CNT2 EQU 0DH
CNT3 EQU 0EH
CNT4 EQU 0FH
CNT5 EQU 10H
SETT EQU 11H
;리셋**************************************************************************
ORG 0 ;리셋
;초기설정**************************************************************************
CLRF PORTB ;PORT-B를 전부0
BSF STATUS,RP0 ;뱅크1로
CLRF TRISB ;PORT-B를 전부 출력으로 설정
MOVLW H'000F' ;00001111
MOVWF TRISA ;PORT RA0에서 RA3을 입력으로 설정
BCF STATUS,RP0 ;뱅크0으로
MOVLW H'00EF' ;11101111(RB4이외를 모두High레벨)
MOVWF PORTB ;POTR-B에서 출력
;스위치의 확인********************************************************************
COMF PORTA,W ;PORT-A의 정보를 반전해서 W레지스터로
ANDLW H'000F' ;bit0-3의 필터
MOVWF SETT ;SETT레지스터에 격납
MOVF SETT ;Z플래그를 변화
BZ LOOP ;0으로 있으면 라벨LOOP로, 0 이외로 있으면 다음 행으로
CALL LOOPSET ;라벨LOOPSET로
MOVLW H'0000' ;00000000
MOVWF PORTB ;PORT-B를 전부LOW레벨로
GOTO LOOP ;라벨LOOP로
;무한루프************************************************************************
LOOP GOTO LOOP ;무한루프
;0.5초타이머***********************************************************************
TIME500 MOVLW H'0014' ;14h
MOVWF CNT3 ;CNT3레지스터로이동
LOOP3 MOVLW H'00F7' ;F7h
MOVWF CNT4 ;CNT4레지스터로 이동
NOP ;아무것도 안함(시간의 미조정)
NOP ;아무것도 안함(시간의 미조정)
NOP ;아무것도 안함(시간의 미조정)
LOOP4 MOVLW H'0053' ;53h
MOVWF CNT5 ;CNT5레지스터로 이동
LOOP5 DECFSZ CNT5,F ;CNT5에서1을 빼서 0이라면 다음 명령스킵
GOTO LOOP5 ;라벨LOOP5로
DECFSZ CNT4,F ;CNT4에서1을 빼서 0이라면 다음 명령스킵
GOTO LOOP4 ;라벨LOOP4로
DECFSZ CNT3,F ;CNT3에서1을 빼서 0이라면 다음 명령스킵
GOTO LOOP3 ;라벨LOOP3로
RETURN ;원래로 돌아간다
;0.5초마다LED점멸(1초타이머)*****************************************************
LED CALL TIME500 ;라벨TIME500(0.5초타이머)로
MOVLW H'00FF' ;11111111
MOVWF PORTB ;PORT-B를 전부HIGH레벨로
CALL TIME500 ;라벨TIME500(0.5초타이머)으로
MOVLW H'00EF' ;11101111
MOVWF PORTB ;RB4만 LOW레벨로
RETURN ;원래로 돌아간다.
;1분타이머*************************************************************************
TIME2 MOVLW H'003C' ;003Ch(60)
MOVWF CNT2 ;CNT2레지스터로 이동
LOOP2 CALL LED ;라벨LED로
DECFSZ CNT2,F ;CNT2에서1을 빼서0이면 다음명령스킵
GOTO LOOP2 ;라벨LOOP2로
RETURN ;원래로돌아간다
;1시간타이머***********************************************************************
TIME1 MOVLW H'003C' ;003Ch(60)
MOVWF CNT1 ;CNT1레지스터이동
LOOP1 CALL TIME2 ;라벨TIME2(1분타이머)로
DECFSZ CNT1,F ;CNT1에서1을 빼서 0이면 다음 명령 스킵
GOTO LOOP1 ;라벨LOOP1으로
RETURN ;원래로돌아감
;설정시간카운트****************************************************************
LOOPSET CALL TIME1 ;라벨TIME1(1시간타이며)로
DECFSZ SETT,F ;SETT에서1을 빼서 0이면 다음 명령스킵
GOTO LOOPSET ;라벨LOOPSET로
RETURN ;원래로돌아간다.
END ;프로그램종료
timer.asm : 소스파일
프로그램 써넣기에서 설정이 중요하다.
동영상을 찍어보았습니다.
크리스탈은 10MHz이나 없어 11.0592MHz로 대치함
반응형
'펌웨어디자인(Firmware Design)' 카테고리의 다른 글
mp3플레이어만들기 (0) | 2009.09.20 |
---|---|
LC메터 (0) | 2009.09.20 |
PIC마이컴 (0) | 2009.09.18 |
적외선통신 (0) | 2009.07.19 |
AVR로터리엔코더볼륨 (0) | 2008.12.09 |