Я настроил свой Atmel ATMega32U4 с реле (используя NPN-транзистор для управления подачей 5 В на реле, а не управляя им напрямую с микроконтроллера). Я хочу использовать PD4 в качестве цифрового выхода для управления состоянием реле. Поскольку позже я буду использовать связь через USB, у меня подключен внешний кварцевый генератор, поэтому я установил соответствующий предохранитель и оставил остальные по умолчанию.
Когда я запускаю очень простую программу, подобную приведенной ниже, которая должна просто включать реле один раз, вместо этого я слышу, как реле быстро включается и выключается с частотой около 10 Гц.
#include <avr/io.h>
int main(void)
{
// toggle PD4 as an output
DDRD |= _BV(4);
// set output high
PORTD |= _BV(4);
}
Я заметил, что закомментирование строки PORTD |= _BV(4);
останавливает колебание, но, конечно, это не решает мою проблему. В любом случае, кажется, что эта линия создает проблему.
Я использую Atmel Studio 6.2, программирую JTAG через программатор Atmel-ICE.
Приняв дикий удар в темноте, я предполагаю, что это может иметь какое-то отношение к альтернативной функции PD4 как ICP1/ADC8
, как показано в datasheet (раздел 10.3.3, стр. 78), но я не знаю, как отключить эту функцию.
У кого-нибудь есть идеи, где я ошибаюсь?
MCUSR &= ~(1 << WDRF);
в начало моей функцииmain()
остановило колебания. Спасибо за вашу помощь, очень признателен! - person Sean   schedule 13.12.2016