회사에서 Arduino를 이용해서 작업을 하다가.
타이머를 사용하게 되었다.
문제는 이 타이머를 사용하니.
millis()와 delay()가 제대로 동작안되는 문제점이 생겼었다.
한동안 이유를 못 찾은 상태로 지내다가 modbus_lib을 사용해야되는데.
modbus_lib에선 millios()을 이용해서 통신되게 되어 있는데.
millis()가 0이 계속 뜨니. 통신이 제대로 동작이 되지 않는다는 점이다.
즉, 윗 문제를 해결해야만했다.
그래서 찾아보니. millis()와 delay()sms Timer0에 영향을 받는다. 라고 설명이 되어 있다.
이걸 보고, 타이머 2,3을 사용하는 곳에서 실수 한게 있는지 확인 하기 위해서 적용해봤다.
void setup() |
여기서 TIMSK(Timer/Counter Interrupt Mask Register)를 이용해서 Timer2에서 OVF(Over Flow)가 발생할시 처리하게 만드는 것이 설정되었는데.
TIMSK에서 Timer0를 설정한게 아닌. TIMSK를 설정이 잘못됨을 알았다.
즉, Timer0의 설정이 기본적으로 설정되어 있었는데.
이것을 TIMSK = (1<<TOIE2);를 사용해서 Timer0 세팅이 사라진 것이다.
void setup() |
이렇게 수정하니. Timer0가 제대로 동작되어서 그래서, millis()에서 값이 이상없이 동작됨을 알 수 있었다.
간단한 문제였지만, 제대로 확인 하지 않으면, 못 찾을 만한 것이다.
'Arduino' 카테고리의 다른 글
[Arduino] Lora32u4의 LoRa 라이브러리. Begin()에서 초기화가 되지 않는다면? (0) | 2019.09.21 |
---|---|
[Arduino]Adafruit_SH1106에 SPI 정보가 변했을 경우 복구하는 소스로 라이브러리 수정 (0) | 2019.05.07 |
[Arduino] Adafruit_SH1106-master에게 직접 레퍼런스 번호를 할당 받아서 쓸 수 있게 라이브러리 수정하기 (0) | 2019.05.06 |