Я работаю над набором упражнений для новичков с микроконтроллером Arduino Uno. (Впрочем, общий, так как это то, что мне предоставили.)

Программа, которую я запускаю, которая чередует отправку 1 и 0 на последовательный вывод в зависимости от состояния мгновенного переключателя, установила контакт 2 как вход для переключателя. Но. Во время подключения я случайно подключил соединительный кабель к контакту 3 и обнаружил, что он по-прежнему отправляет в основном единицы при нажатии кнопки. Некоторые нули, но в основном единицы.

Сначала я подумал, что, может быть, просто доска была немного изворотливой, но решил немного поэкспериментировать. Подключение к контакту 3 вместо контакта 2 по-прежнему довольно последовательно отправляло 1 при нажатии кнопки, хотя 1 текло немного менее равномерно, чем когда оно было на контакте 2. В сравнении с контактом 2 это было полностью согласовано. Я попробовал пин 4, но с ним вообще нет ответа.

Прав ли я, предполагая, что показания программы, кажется, становятся немного менее отзывчивыми, чем дальше я отодвигаю кабель от контакта, который я запрограммировал на вход? Может ли кто-нибудь помочь мне понять, почему это происходит?

Наверное, совершенно очевидно, что я новичок в электронике. :)

Программа, которую я загрузил на доску, выглядит следующим образом:

// digital pin 2 has a pushbutton attached to it. Give it a name:
int pushButton = 2;
// the setup routine runs once when you press reset:
void setup() {
  // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
  // make the pushbutton's pin an input: 
  pinMode(pushButton, INPUT);
}
// the loop routine runs over and over again forever:
void loop() {
  // read the input pin:
  int buttonState = digitalRead(pushButton);
  // print out the state of the button: 
  Serial.println(buttonState);
  delay(1); // delay in between reads for stability
}
0
Reb 6 Сен 2016 в 18:34

3 ответа

Лучший ответ

Плавающие штифты подвержены шуму. Если вы на самом деле ничего не подключаете к контакту 2, вы будете читать шум. Любой провод, подключенный к контакту 2 (даже соединения на плате), будет действовать как антенна и улавливать шум. В подобных ситуациях всегда следует использовать номер контакта, который вы физически подключаете.

3
JMA 6 Сен 2016 в 15:42

Вам нужно посмотреть в даташит, где описаны функции контактов.

Пинам микроконтроллера можно назначать различные функции через специальные регистры.

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

Если вход активирован как input без какого-либо pull-???, то его состояние не определено и может использоваться как инициатор генератора случайных чисел. По этой причине лучше определить состояние входного вывода по умолчанию, подключив резисторы pull-???.

В Arduino IDE вы не ограничены предоставленными функциями - вы по-прежнему можете использовать манипуляции register напрямую, вам просто нужно изучить внутреннее устройство MCU.

Если вы сделаете это правильно, то очень часто 2-битную программу можно сделать всего лишь несколькими сотнями байт, и она будет работать в сотни раз быстрее.

Работа registers в C не сильно отличается от assembly, в C ++ вы сразу получаете значительные накладные расходы - хотя некоторые преимущества registers все же могут быть значительными.

Библиотеки скрывают от программистов внутренности MCU, что приятно, так как упрощает программирование и не требует понимания того, как работает MCU, какие регистры в какой последовательности меняются.

Но когда разбираешься в аппаратной части - из маленького MCU можно выжать то, что невозможно с использованием библиотек (код просто не влезет в чип). Микроконтроллеры не так сложны (Atmel), чтобы узнать о его внутреннем устройстве - преимущества значительны.

Знание - это сила, которой многие избегают.

0
Polar Bear 16 Янв 2020 в 23:48

Оставление входных контактов открытыми заставляет микроконтроллер считывать плавающее значение, которое колеблется от 0 до 1. Также при подключении переключателя к любому контакту убедитесь, что подключили какой-либо понижающий резистор, чтобы сделать вход 0. Они являются общими для многих электронных устройств. Обратите внимание на то, что необходимо учитывать при разработке собственных схем.

1
SOUHARDHYA PAUL 31 Май 2019 в 17:58