Зачем настраивать пины?

Тема в разделе "Arduino & Shields", создана пользователем ets, 21 окт 2014.

  1. ets

    ets Нерд

    В начале обучения принимал pinMode(PIN, OUTPUT); как должное. Но зачем тогда это прописывать, если схема работает и без этой настройки?
     
  2. Unixon

    Unixon Оракул Модератор

    После сброса контроллера все выводы настроены на вход.
    Если в схеме нет выходов - будет работать. :)
     
  3. funyfizik

    funyfizik Нерд

    Смотря какие... Аналоговые может не настраивать
     
  4. ets

    ets Нерд

    Я нашёл информацию на официальном сайте:

    Я проверял свой вопрос на светодиодах, поэтому, видимо, не ощутил разницы, так как они потребляют малый ток. У кого есть мультиметр, замерьте максимальный ток с пина при настройке и без неё.
     
  5. acos

    acos Официальный гик Администратор

    На самом деле официальный сайт для такого дела - 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
     
     
    Последнее редактирование: 22 окт 2014
    Megakoteyka и ets нравится это.
  6. ets

    ets Нерд

    Я ошибся: перед тем, как проверять схему, я не сбрасывал Arduino, поэтому настройка пинов сохранялась на выход и пин выдавал 5В, что и ввело меня в заблуждение.

    Acos, спасибо большое за объяснение.
     
  7. SSnick

    SSnick Гик

    Знаешь, что такое ток и напряжение? Замерив максимальный ток черевато выходу пина из строя...
     
  8. ets

    ets Нерд

    Это я знаю. Дичайше тупанул, когда это написал. Я имел ввиду 40 мА - максимальный допустимый ток. С резистором, конечно, но раз 5 Вольт выдаёт, значение это не меняется, значит ток и так меняться не будет, замерять бессмысленно. Короче, сплоховал, извините.
     
  9. SSnick

    SSnick Гик

    максимальный это для нормальной работы пина и микроконтроллера, но по факту он может легко и 100mA выдать, но с риском для своего здоровья...
     
  10. r0c

    r0c Гик

    Судя по всему, вы уже выросли из "штанишек Arduino". Пора уже знакомится с регистрами и архитектурой микроконтроллера. И потом даже мысли не появится спрашивать подобное ;)
     
  11. ets

    ets Нерд

    А можно для этих целей использовать микроконтроллер на Ардуино?
     
  12. r0c

    r0c Гик

    можно.
    да и слово "arduino" пора забывать, когда первые шаги пройдены/
    можно использовать те же платы, те же шилды и даже писать в той же IDE, но уже на Си для AVR
     
    Последнее редактирование: 24 окт 2014
  13. Unixon

    Unixon Оракул Модератор

    Как будто сейчас это как-то по другому происходит... именно на C/C++ и для AVR. Просто так без особых на то причин отказываться от существующего библиотечного уровня абстракции совершенно не стоит. Вот IDE то как раз можно и сменить, хотя бы ради удобства редактирования кода, а Wiring вполне себе экономит время, если под руками нет более подходящей библиотеки.
     
  14. r0c

    r0c Гик

    вам виднее....:)