Причина, по которой сигнал не возвращается на НИЗКИЙ уровень

Я написал простой скетч Arduino, который будет генерировать тактовый сигнал.

Вот код:

void setup() {
  // put your setup code here, to run once:

}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(8,HIGH);
  delayMicroseconds(500);
  digitalWrite(8,LOW);
  delayMicroseconds(500);
} 

А именно, контакт 8 Arduino Uno периодически устанавливается в положение HIGH и LOW.

Выходные данные, которые я получаю для трех разных частот, следующие:

Мой вопрос: почему спадающий фронт не такой острый, как нарастающий? Как можно заметить, на высоких частотах сигнал все-таки не переходит в НИЗКИЙ уровень.

, 👍0

Обсуждение

Я не знаю деталей аппаратного обеспечения Arduino, но разве вам не нужно явно настроить вывод 8 как выход в вашей функции setup()? Похоже, вы просто включаете/отключаете подтягивание по умолчанию., @Dave Tweed

@DaveTweed Нет, похоже, проблема в том, что ОП не объявил контакт 8 как выходной., @Long Pham

@DaveTweed Действительно, объявление контакта выходным привело к появлению красивой прямоугольной волны. Не могли бы вы рассказать о причинах этого (например, что вы подразумеваете под включением/отключением подтягивания по умолчанию), и это будет ответом на этот вопрос., @balboa


1 ответ


Лучший ответ:

4

Вывод не настроен как ВЫХОД.

По умолчанию все контакты GPIO практически любого микроконтроллера настроены как входы после сброса. Это предотвращает «борьбу» чипа с внешним устройством, которое может управлять любым из этих контактов, прежде чем прошивка сможет правильно настроить GPIO.

В микроконтроллере, используемом в Arduino, выходная защелка управляет состоянием внутреннего подтягивающего резистора, когда контакт настроен как вход. Ваш код просто включал и отключал этот резистор. Когда вы устанавливаете на вывод низкий уровень, он размыкается, и вы видите медленное снижение напряжения на щупе осциллографа.

,