В начале обучения принимал pinMode(PIN, OUTPUT); как должное. Но зачем тогда это прописывать, если схема работает и без этой настройки?
Я нашёл информацию на официальном сайте: Я проверял свой вопрос на светодиодах, поэтому, видимо, не ощутил разницы, так как они потребляют малый ток. У кого есть мультиметр, замерьте максимальный ток с пина при настройке и без неё.
На самом деле официальный сайт для такого дела - atmel.com, а точнее вот этот документ http://www.atmel.com/Images/doc8161.pdf , страница 77, таблица 13-1 Суть. Порт отвечает за работу 8 ножек. у порта есть 2 регистра, отвечающих за конфигурацию пинов. это PORTx и DDRx. когда бит, отвечающий за конкретную ножку в регистре DDRx равен 0 - то эта ножка - вход. Если 1 - то выход. Если DDRx равен 0 и PORT равен 0, то ножка в состоянии HI-Z (то есть тупо вход) Если PORTx = 1, то ножка в состоянии INPUT_PULLUP, т.е. подключена к VCC через резистор 20-50 кОм (Rpu, страница 314). Если DDR = 1, то ножка - выход, при этом,если PORT = 0, то ножка - 0, если 1 - то на ножке VCC. Контроллер стартует с DDR=0, PORT=0. Команды pinMode() просто выставляют нужные биты в DDR регистрах порта (ну и в PORT тоже пишет, чтоб подтяжку выставить или убрать). Команда digitalWrite просто выставляет нужные биты в регистр PORT (ну и за одно ещё отключает всякие ШИМы). Вот и получается что Код (C): pinMode(5, INPUT); // DDR = 0, PORT = 0 digitalWrite(5, HIGH); // PORT=1 (+ отключение ШИМ) эквивалентно Код (C): pinMode(5, INPUT_PULLUP); // DDR=0, PORT=1
Я ошибся: перед тем, как проверять схему, я не сбрасывал Arduino, поэтому настройка пинов сохранялась на выход и пин выдавал 5В, что и ввело меня в заблуждение. Acos, спасибо большое за объяснение.
Это я знаю. Дичайше тупанул, когда это написал. Я имел ввиду 40 мА - максимальный допустимый ток. С резистором, конечно, но раз 5 Вольт выдаёт, значение это не меняется, значит ток и так меняться не будет, замерять бессмысленно. Короче, сплоховал, извините.
максимальный это для нормальной работы пина и микроконтроллера, но по факту он может легко и 100mA выдать, но с риском для своего здоровья...
Судя по всему, вы уже выросли из "штанишек Arduino". Пора уже знакомится с регистрами и архитектурой микроконтроллера. И потом даже мысли не появится спрашивать подобное
можно. да и слово "arduino" пора забывать, когда первые шаги пройдены/ можно использовать те же платы, те же шилды и даже писать в той же IDE, но уже на Си для AVR
Как будто сейчас это как-то по другому происходит... именно на C/C++ и для AVR. Просто так без особых на то причин отказываться от существующего библиотечного уровня абстракции совершенно не стоит. Вот IDE то как раз можно и сменить, хотя бы ради удобства редактирования кода, а Wiring вполне себе экономит время, если под руками нет более подходящей библиотеки.