DDS모듈을 사용자의 목적에 맞게 구동하기 위해 여러가지 주변 회로 및 관계 부품이 있고, 목적한 주파수를 입력하기 위해 로터리 엔코더, 스위치 등을 사용합니다.
스위치 입력을 사용할 때 고려할 사항이 바로 "채터링" 입니다.
사용자는 한번 스위치를 눌렀지만, 고속으로 접점 상태를 감시하는 마이컴은 그 사이 몇 번이나 스위치가 ON 되어 있는 것으로 판단하고 그에 맞는 과정을 처리해버립니다. 사용자의 의도와는 다르게 몇단계가 후다닥 진행 되버리는 결과를 초래합니다. 기계적인 채터링 문제에 대해서는 Pass !
몇가지 궁리를 해 봅니다.
1. 스위치 ON을 체크한 후 일정시간 Delay time을 갖게한다.
-> 적절한 Delay time에 따라 채터링을 방지 할 수 있습니다. 그런데... Delay time동안 마이컴은 아무일도 못하고 허송세월 ! 그 사이 로터리 엔코더는 열심히 신호를 주고있는데....
-> 동시 다발적인 변화에 대응하는 순발력에 문제 있음. 실효성 떨어짐.
2. 스위치의 현재값(Now)과 과거값(Old)을 비교하여 차이가 있으면 눌러진 것으로 판단한다.
-> 논리 연산자로 "XOR"이 있습니다. 2가지 입력에 대한 " 배타적OR값 "을 출력합니다. 쉽게 말해 두개가 같지 않아야 "TRUE" 값을 출력합니다.
-> 스위치가 계속 ON 상태던지 , OFF 상태던지 한 가지 상태를 유지하면 출력은 계속 "FALSE"입니다. 그러나 한번이라도 OFF상태(OLD)가 되고 다시 ON상태(NOW)로 바뀌면 그 때는 XOR에 의해 "TRUE" 값을 갖게 됩니다.
-> 결과 : 만족
적절한 채터링 대책. 마이컴의 순발력은 그대로 유지. 컴퓨터 자판처럼 계속 버튼을 누를 경우 채터링을 적절히 방지 하면서도 입력 속도가 점점 빨라지게 하는 것은 고급 프로그램 기법에 속한다고 합니다.
-> PIC 마이컴 코딩의 예 : XOR을 이용한 채터링 대책
STEP ; STEP 버튼 체크
BTFSC PORTB,3 ; 눌려지면 active "LOW"
GOTO STEPNOWOFF ; 안 눌렀으면...
STEPNOWON
MOVLW .1
MOVWF STEPNOW
XORWF STEPOLD,1 ; STATUS Z에 영향. 서로 달라야 "1"
BTFSS STATUS,Z ; 명령결과 0 이면 1로 setting
GOTO STEPON ; 계속 진행 상태, 한번 누른 것으로 인정
MOVLW .1
MOVWF STEPOLD
RETURN
STEPNOWOFF
CLRF STEPOLD
RETURN
STEPON
MOVLW .1
MOVWF STEPOLD
DECFSZ STEPVAL,1
RETURN
MOVLW .10 ; STEPVAL RE-SETTING
MOVWF STEPVAL
RETURN
첫댓글 제일 염려되는 부분이었는데 깔끔하게 처리하셨군요,....발싸개님 DDS 마이컴 회로도 보내주시면 작업 들어갑니다. 오늘 청계천에서 부품 다구해왔습니다.LCD,SSOP변환기판,소형메터,만능기판,등등...
DDS 구동에 필요한 프로그램을 부분(모듈)별로 준비하고 테스트 중 입니다. 가장 어렵고 중요한 부분이 STEP에 의한 단위별 자리 설정 & 그 위치에서의 로터리 엔코더 입력으로 주파수 변경, RIT 버튼에 의한 주파수 가감 부분입니다. 나머지 전원 전압 A/D 컨버팅, Audio BPF 주파수 카운터 부분은 준비되어있는 상태구요. 조금씩 계속 진행합니다.
flow chart에 자세한 설명까지 감사드립니다.꾸 벅~
발싸개님 이메일을 몰라서 자료실에 AD9834 이용 DDS VFO 자료보냅니다.
자료 감사합니다. 최종 사용 주파수 기억을 위해 EEPROM 마이컴이 필요합니다. 원래 계획했던 것에 비해 가격이 2배(3K)네요. 시험용 회로는 AD9834와 직접 연결된 부품(OSC, 컨덴서 등) 정도면 될 것 같습니다. 마이컴과의 입출력 연결은 브레드 보드를 사용하면 되구요. LCD, 마이컴 등은 제게 준비되어 있습니다. 보내주신 자료를 보니 SMD부품을 이용하면 크기를 아주 작게 할 수도 있네요. 조만간 회로도 보내겠습니다.
PIC 고수분이 계시네요.. 어셈블은 배운적이 없어서...