결과) 로터리 엔코더를 신나게 빙빙 돌려도
건너띄는 것 없이 데이터 값 모두 추종합니다.
발반장님이 그림을 잘 올려 주었습니다.
아주 이해하기 쉽습니다.
논리 변화 인터럽터를 사용합니다.
하이=> 로, 혹은 로 => 하이
변화가 생기면 read_encoder() 함수를 호출 합니다.
변화 직후의 엔코더 A 값과 엔코더 B 값으로
CW ( 값 증가) , CCW (값 감소)를 판별합니다.
(Freq 변수가 글로벌 변수로 잡혀 있습니다.)
메인에서 주파수 표시
인터럽터를 논리변화로 설정
헤드파일
-끝-
첫댓글 코딩의 내용은 같은 아래 올린 것과 같은 이야기네요.
파형이 발싸개님이 올린 것과 같이 나와주면 잘 읽히겠죠.
문제는 첨부된 그림의 파형처럼 rising edge에 시간차가 없는 경우, 있다하더라도 없는 경우나 같을 정도로 짧은 경우 등등 엔코더의 품질이 않좋을 경우겠죠.
하필이면 현송님이 테스트 한게 불량난 엔코더 아닌가요. 다른게 있으면 그것으로 테스트 한번 해 보세요.
QRP 학동들을 공부케 하기 위한 삼족오 군사님의 혜안에 머리가 숙여집니다.
이번 로터리 엔코더만이 아닐 것이라는 작은 깨침도 듭니다.
그나 저나 코드를 이해해야 하는데... 뭔 말인지~ ~
보안관님 말씀대로 하니까 잘 됩니다. int0 사용하니까 잘 안되는 것 같았는데 착각이었고요, int0 에서도 잘 되네요.
게시글에 답글 달았는데 사라졌습니다. 그리고 전원 투입시 팝 노이즈 최소화 알고리즘을 생각해 봐야 할 것 같습니다. AUDIO ON 전에 충분한 딜레이를 주면 어떨까요
에구 답글 달린 걸 모르고 지워 버렸네요. AUDIO_ON 하기 전에 딜레이를 충분히 주면 팝 노이즈가 두 번 납니다. (스위치 조작 순간+ AUDIO_ON 순간) 소리가 별로 크지 않아서 신경쓰이지는 않아요.
제가 가진 엔코더는 불량이었어요. 제 코드나 보안관님 코드나 다 안됩니다. 새로운 엔코더를 수배 중입니다.
가는 날이 장날이었네요. 이상없는 코든데 불량난 엔코더 가지고 시간만 소비했네요.
문제가 있으면 반드시 해결하는 방법이 있다는걸 이번 또 깨달았습니다
문제를 제기하신 발반장님과 해결에 적극적으로 동참하신 여러회원님의 모습에 경의를 표하는 바 입니다.