아두이노 하드웨어 리셋 - adu-ino hadeuweeo lises

코드로 아두이노 보드를 Reset하는 방법 세가지를 테스트 해보았다.

3가지 중 Watchdog 타이머를 사용하는 것은 시간이 너무 짧아서 제외 하였고 다른 2가지를 해봤는데 무난하게 작동이 되는 것을 확인하였다.

테스트 결론은 세번째인 One Wire Solution이 좋은 것 같다. 하지만 글 내용에서 이런 Reset 방식은 모든 설정값들을 제대로 리셋 후 복원하지 않기 때문에 모두 추천하지 않고 있다. 따라서 제한된 용도로만 사용하는 것이 좋을것 같다.

원문 : http://www.xappsoftware.com/wordpress/2013/06/24/three-ways-to-reset-an-arduino-board-by-code/

해결책 1. 찜찜한 해결책.

이 솔루션은 어셈블리 문을 사용하여 프로그램 시작 부분으로 컨트롤을 이동합니다.

이것은 Arduino 보드에 연결된 모든 하드웨어를 재설정하지 않기 때문에 아주 완벽한 솔루션은 아닙니다. 따라서 하드웨어의 기본 구성이 복원되지 않습니다.

여기 Arduino를 재설정하기 위해 호출하는 함수입니다.

void software_Reset()

// Restarts program from beginning but

// does not reset the peripherals and registers

{

asm volatile (" jmp 0");

}

해결책 2. 워치 독 사용

나는 이것이 깨끗한 방법이라고 생각한다. 워치 독을 사용하여 보드를 재설정하고 워치 독의 작업은 보드를 재설정하는 것입니다 ......

“Arduino Mega 2560에서 부트 로더는 워치 독을 지원할 수 없었습니다. 이를 사용하려면 워치 독을 지원하는 부트 로더를 설치해야 합니다.”

"arduino 메가 워치 독 부트 로더"에 대한 구글

“다른 Arduino 보드에서도 동일한 문제가 발생할 수 있으므로 wdt_enable을 사용하기 전에 보드에서 사용하는 부트 로더가 wdt_enable을 지원하는지 확인하십시오”

필요한 구조체는 wdt_enable () 함수를 호출 할 수 있도록 avr / wdt.h 파일에 있습니다. 워치 독 리셋이 발생하지 않으면 보드가 리셋되기 전의 시간을 파라미터로 받아들입니다.

미리 정의 된 여러 값 중에서 선택할 수 있습니다.

15mS WDTO_15MS

30mS WDTO_30MS

60mS WDTO_60MS

120mS WDTO_120MS

250mS WDTO_250MS

500mS WDTO_500MS

1S WDTO_1S

2S WDTO_2S

4S WDTO_4S

8S WDTO_8S

그런 다음 보드를 리셋하기 위해서는 시스템이 재부팅되는 시간이 만료 될 때만 짧은 루프를 구현하면 됩니다 ( francisco 기준 ). 다음 예제에서는 제한 시간에 최소값을 사용했습니다. software_Reboot를 호출하여 보드를 재부팅 하십시오.

#include

void< software_Reboot()

{

wdt_enable(WDTO_15MS);

while(1)

{

}

}

솔루션 3. One Wire Solution

워치 독 타이머를 다른 유용한 것들에 사용한다면 와이어를 사용하여 1K 저항기를 통해 디지털 핀 (예 : pin12)을 리셋 핀에 연결할 수 있습니다. 그런 다음 다음 코드를 사용할 수 있습니다.

void swhwReset()

{

int pin=12;

pinMode(pin, OUTPUT); // sets the digital pin as output

digitalWrite(ledPin, LOW); // sets the LED off

}

* 리셋 명령 실행후 delay()를 여유있게 주는 것이 좋다. 500정도....

유사한 내용 링크 : https://www.instructables.com/id/two-ways-to-reset-arduino-in-software/

아!두이노, 라즈베리, 코딩 노가다

  • 관리
  • 글쓰기
  • 로그인
  • 로그아웃

  • 태그
  • 방명록

아두이노

by 오징어땅콩2 2020. 1. 27.

반응형

이 방법은 약간 하드웨어적인 방법인것 같다.

아두이노의 리셋핀에 디지털 출력핀을 연결해서 리셋했다.

이전에도 이야기 했지만, 로우을 걸어 주면 리셋된다.

하이를 걸어주면 리셋되게 할 것 같은데, 

어째던 만든사람 마음이니 그냥 넘어 가자.

그래서 그런지 시작하자 말자 high를 걸어 주어야 한다. 

안 그러면 리셋이 무한 반복 될것이다.

#define BAUD 115200

void setup() 

{

digitalWrite(2, HIGH);

delay(200);

Serial.begin(BAUD);   

    

Serial.print("ARDUINO RESET TEST!!! \n");

pinMode(2,  OUTPUT);

delay(200);

}

void loop() 

{

software_reset();

}

void software_reset()

{

    

Serial.print("RESET \n");

delay(5000);

digitalWrite(2, LOW);

    

Serial.print("NOTHING!!! \n");

}

http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

아두이노 하드웨어 리셋 - adu-ino hadeuweeo lises

저작자표시 비영리 변경금지

'아두이노' 카테고리의 다른 글

아두이노 Serial MP3 모듈 -#1  (0)2020.02.06
아두이노에서 문장 만들기 #1  (0)2020.02.04
아두이노 reset -#3  (0)2020.01.27
아두이노 reset -#2  (0)2020.01.27
아두이노 reset -#1  (0)2020.01.27

관련글

  • 아두이노 하드웨어 리셋 - adu-ino hadeuweeo lises
    아두이노 Serial MP3 모듈 -#1
  • 아두이노에서 문장 만들기 #1
  • 아두이노 하드웨어 리셋 - adu-ino hadeuweeo lises
    아두이노 reset -#3
  • 아두이노 하드웨어 리셋 - adu-ino hadeuweeo lises
    아두이노 reset -#2

댓글0

    비밀글