Объясните за что отвечают pinmode

Тема в разделе "Arduino & Shields", создана пользователем Danil0000, 23 мар 2023.

  1. Airbus

    Airbus Радиохулиган Модератор

    Один пин на вход и на выход? Зачем?
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Модернизировал Ваш скетч. Работает без объявления
    Код (Text):

    void setup()
    {
      //pinMode(7, INPUT); //ненада
      //pinMode(5, OUTPUT); //ненада
     
    }
    void loop()
     {
    if (digitalRead(7)) {  //если на пине 7 HIGH
        for(int i = 0 ; i <= 255; i++) { //Увеличиваем яркость на 5 пине
           analogWrite(5, i);      
           delay(100);
       }
     }
    }
     
    Последнее редактирование: 25 мар 2023
  3. KindMan

    KindMan Гуру

    Не понял, вы про это?
    Код (C++):
    void setup() {
      pinMode(13, OUTPUT);
    }

    void loop() {
      digitalWrite(13, (!digitalRead(13)));
      delay(1000);
    }
     
     
  4. parovoZZ

    parovoZZ Гуру

    в течение всего срока работы программы направление работы выводов, как правило, не меняется. Поэтому надо взять за правило все инициализации совершать в отдельной функции.

    ни в каком варианте чтение регистра PIN не приведёт к КЗ.

    ATMega не умеет ничего копировать. AtXMega может создавать образ регистра в область ОЗУ. AtMega нет. Поэтому что на выходной лапке, то и прочитаем из регистра PIN.
     
  5. parovoZZ

    parovoZZ Гуру

    для эмуляции работы интерфейса. OneWire тому пример.
     
  6. a1000

    a1000 Гуру

    Наверное я не смог правильно довести до уважаемой публики свои философские размышления на тему неправильной конфигурации выходов. Старенький уже наверное. Со всеми вышеизложенными доводами я согласен. Добавлю несколько пояснений.
    Сознательно так делать ни кто не будет. Имелись ввиду ошибки в коде.
    Хороший пример, но и там мы осознано меняем его направление в зависимости от выполняемой задачи. Если слушаем шину переводим на вход и Z состояние, когда передаём на выход. Всё правильно и логично.
    Я тоже примерно таким проверял. Не стал его выкладывать, а просто сообщил результат
    Я не имел ввиду програмное копированое. Вы-же сами подтверждаете мои слова
    А что у нас на лапках порта при DDRx = FF? Правильно - значение регистра PORTx. Вот оно через лапки и "перетечёт" в PIN.
    Програмно да. Но мы не просто так совершаем действия в программе. Мы-же что-то ещё вешаем на ноги МК снаружи. Например кнопку, замыкающую контакты на GND. Представим дикую ситуацию. Соответствующий пин регистра DDRx ошибочно установлен в 1. Желая подключить внутренний pull-up резистор мы пишем в соответствующий бит PORTx единицу. Сомневаюсь, что порт переживёт нажатие кнопки. Повторюсь, ситуация дикая, но законы Мерфи действуют.
     
  7. DetSimen

    DetSimen Гуру

    Рассмотрим обычную бытовую ситуацию: две девочки качаются на невесомых бесконечных качелях в вакууме...
     
  8. a1000

    a1000 Гуру

    Не, лучше поведение шарообразного коня в вакууме.....
    На днях читал Мартина Гарднера "Теория относительности для миллионов". Интересно, что курят физики-теоретики что-бы до такого додуматься.
     
    DetSimen нравится это.
  9. Airbus

    Airbus Радиохулиган Модератор

    [​IMG]
     
    DetSimen нравится это.
  10. parovoZZ

    parovoZZ Гуру

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

    если пин случайно замкнулся на ноль, то всегда будет ноль.