수정 된 Arduino 보드 : Atmega 1281 MCU 칩이 탑재 된 Gizduino X를 사용하고 있습니다. 응용 프로그램은 Arduino IDE 프로그래머를 사용하여 MCU에 업로드됩니다. 나는 Atmega 1281의 워치 독 타이머 리셋 기능을 사용하려고 시도하고 라이브러리 "wdt.h"를 사용했다. 문제는 워치 독 리셋 후에 마이크로가 계속해서 리셋 할 때 반복되는 것처럼 보입니다.Watchdog이 AVR Atmega 1281을 한 번 트리거하면 계속 재설정합니다.
이#include <stdint.h>
#include <avr/wdt.h> //Watchdog Timer library
#define RST_PIN 38 //pin for MCU reset indicator
uint8_t mcusr_mirror __attribute__ ((section (".noinit")));
void get_mcusr(void) __attribute__((naked)) __attribute__((section(".init3")));
void get_mcusr(void)
{
mcusr_mirror = MCUSR;
MCUSR = 0;
wdt_disable();
}
char ch;
char pn = 0;
bool ledState = false;
#define wdtReset() wdt_reset(); \
digitalWrite(RST_PIN, LOW)
#define wdtBegin() wdt_reset(); \
wdt_enable(WDTO_500MS); \
bitSet(WDTCSR, WDIE)
/******************************************/
void setup() {
wdtBegin();
Serial.begin(115200);
// initialize digital pin 13 as an output.
wdtReset();
pinMode(13, OUTPUT);
pinMdoe(RST_PIN, OUTPUT);
}
/******************************************/
// the loop function runs over and over again forever
void loop() {
if(Serial.available()) {
ch = Serial.read();
if(ch == 'R' || ch == 'r') {
ledState = !ledState;
digitalWrite(13, ledState);
while(true);
}
}
if(pn >= 255) pn = 0;
Serial.println(pn++);
wdtReset();
}
/******************************************/
ISR(WDT_vect) {
digitalWrite(RST_PIN, HIGH);
}
코드의 목적은 다음과 같습니다 : 다음과 같이 내 코드에 포함 있도록 자동으로 재설정 후 활성화되기 때문에, 워치 독 설정()하기 전에 비활성화해야합니다 데이터 시트 사양을 알고 있었다이다 내가 원하는대로 워치 독 문제를 격리하고 워치 독 리셋을 호출하십시오. MCU에 전원이 공급되면 코드가 잘 실행되지만 워치 독 재설정 ('r'또는 'R') 호출 문자를 보내면 RST_PIN이 HIGH (인터럽트 발생을 나타냄)로 설정되고 재설정하지만 보드의 LED 표시등이 켜져 있습니다. 이 상태가되면 리셋 버튼을 눌러 보드에서 전원을 제거 할 때까지 MCU를 더 이상 재설정하지 않습니다. 또한 리셋 버튼을 계속 누르면 리셋 버튼 옆의 ICSP 핀 중 하나를 실수로 터치 할 때 보드의 LED 표시등이 조금 어두워지고 깜박이기 시작합니다.
은 또한이 링크에서 감시를 설정하는 방법 다음 :http://donalmorrissey.blogspot.com/2011/09/using-watch-dog-on-atmega1281-as-lock.html은 내가 Atmega328 MCU에서 동일한 코드를 업로드를하지만 그것을 잘 작동합니다. 워치 독이 시스템 재설정 후 기본값으로 계속 활성화되어 있기 때문에 새로운 칩에 문제가 있다고 생각합니다.
이 나는 뭔가를 놓치고 있습니까? 문제가있는 하드웨어가 특정한가요?