Я установил свой Atmel ATMega32U4 с помощью реле (используя транзистор NPN для управления питанием 5 В на реле, а не с прямым приводом с микроконтроллером). Я хочу использовать PD4 как цифровой выход для управления состоянием реле. Поскольку я буду использовать USB-связь позже, у меня есть внешний кварцевый генератор, поэтому я установил соответствующий предохранитель и оставил остальные по умолчанию.Осциллирующий сигнал на цифровом выходе AVR ATmega32U4
Когда я запускаю очень простую программу, подобную приведенной ниже, которая должна просто включать реле один раз, вместо этого я слышу, что реле включается и выключается быстро примерно на 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
, как показано в (раздел 10.3.3, P78) datasheet, но я не знаю, как отключить эту функцию функциональность.
Есть ли у кого-нибудь идеи, в которых я ошибаюсь?
Вы не указали ссылку на таблицу, в которой указаны альтернативные функции. Для PD4 нет альтернативных выходных функций, это либо вход АЦП, либо вход триггера таймера, поэтому, возможно, чип будет сброшен, что отключит реле, так как PORTD переходит в тристат. Что происходит после выхода main()? Вы пробовали положить время (1); цикл после установки PORTD, поэтому main() не выходит, посмотрите, стабилен ли результат? Вы пытались управлять реле с булавки на другом порту? У вас есть последовательный резистор, управляющий базой транзистора, диодом через катушку реле? – barny
@barny, я пробовал некоторое время (1) и получил те же результаты. Когда вы упоминаете, реле управляется резистором и диодом. Я не пробовал другой порт, потому что это на печатной плате, которую я печатал, но я могу взломать что-то вместе, если ничего не работает. Знаете ли вы, можно ли отключить функцию tristate этого порта? – Sean
Когда процессор сбрасывает порты по умолчанию по умолчанию на входы, то есть высокий импеданс, который отключит ваше реле. Вы не можете и не хотите изменять это поведение. У вас есть осциллограф или другой способ взглянуть на сигнал на порту? У вас нет ничего похожего на аппаратный сторожевой таймер в цепи, который бы сбросил CPU? – barny