본문 바로가기

카테고리 없음

아두이노 OLED 시계 멈춤 현상 -> 와치독 사용

아두이노 OLED 시계 (maxpulse.tistory.com/270)를 사용하다가

며칠 후에 보니 OLED가 멈춘 상태였다. (2-3일 연속 동작시 멈추는 듯)

전원을 분리했다가 다시 연결하니 RTC에 의해서 정확한 시간으로 동작했다.

아두이노가 다운되었거나 OLED가 다운되었거나 두가지 경우가 가능한데,

우선은 아두이노의 와치독 기능도 시험해볼겸, 

와치독(Watchdog) 기능을 추가하였다.

와치독이란, 집을 지키는 개란 뜻처럼

집(아두이노 프로그램) 을 감시하다가 문제가 생기면(무한 루프) 짖어서 알려주는 것(리셋)을 말한다.

 

실제 동작은.. 와치독 타이머가 다른 타이머와 별도로 동작하면서 시간을 측정하다가

정해진 시간이 되면 아두이노를 리셋 시켜버린다.

아두이노가 리셋되지 않으려면 loop() 함수 안에서 와치독 타이머를 계속 초기화시켜주면 된다.

만약 어떤 조건에서 무한 루프에 빠지면 와치독 타이머가 리셋되지 않으므로

와치독 타이머가 정해진 시간에 도달하고, 리셋이 발생하게 된다.

1. setup() 함수에 와치독 설정 추가

    wdt_enable(WDTO_10S);    //와치독 타이머가 10초에 도달하면 리셋 발생

           -> 이때 와치독 타이머의 시간은 loop 함수가 동작하는 시간보다 길어야 한다.

               만약 기본 동작이 10초 이상 소요되는 loop 함수라면 계속 리셋이 되게 된다.

2. loop() 함수에 와치독 리셋 추가

    wdt_reset();   

 

RTC_OLED_CLOCK.ino
0.00MB

 

이렇게 해도 OLED 멈춤 현상이 발생한다면, OLED를 일정 시간마다 초기화 하는 방법을 찾아야 할듯