Скетч "Blink". Почему мигает вполсилы встроенный диод, когда не инициализирован порт?

Тема в разделе "Arduino & Shields", создана пользователем Krendelyok, 5 окт 2016.

  1. Krendelyok

    Krendelyok Нерд

    Имеется Arduino Uno клон. При первом знакомстве с ардуино убрал инициализацию порта из скетча "Blink" и обнаружил, что встроенный светодиод при выполнении скетча "Blink" продолжает мигать наглым образом примерно 10% от своей яркости. Я примерно догадываюсь, что это связано с подтягивающим резистором. Но он же должен быть отключен по умолчанию? И почему команда digitalWrite влияет на состояние не инициализированного порта?
     
  2. rkit

    rkit Гуру

    По умолчанию порт включен на чтение. И запись высокого уровня в порт на чтение включает резистор.
     
  3. Krendelyok

    Krendelyok Нерд

    Это какая то недоработка команды записи или фича?))
     
  4. ostrov

    ostrov Гуру

    Это норма. В чем проблема инициировать порт? Вот в STM порты вообще отключены по умолчанию.
     
  5. rkit

    rkit Гуру

    Это низкоуровневое программирование
     
  6. ostrov

    ostrov Гуру

    pinMode() низкоуровневое?
     
    Рязанский_Ардуинщик нравится это.
  7. rkit

    rkit Гуру

    Ага. Хочется высоуровневого - вон есть js-платы. А это, конечно, не самое низкое из возможного, но все равно.
     
  8. ostrov

    ostrov Гуру

    PORTB = 0x00001111;
    И это не самое низкое. А посмотрте как инициируются ножки у STM32 и возрадуйтесь что тут не так.
     
    Рязанский_Ардуинщик нравится это.
  9. в тех платах светодиод подключен через дифференциальный усилитель, чтобы не нагружать выход.. и если 13 выход не сконфигурирован и находится в высокоимпедансом состоянии, то усь ловит наводки и мигает светодиодом, это нормально!
     
  10. Krendelyok

    Krendelyok Нерд

    Не, не, не. В этом клоне как раз усилителя нет, в отличие от оригинала. Светодиод напрямую к порту подвешен через резистор. Наводки тут ни при чём. А то этого еще не хватало)
     
  11. Krendelyok

    Krendelyok Нерд

    Ну примерно этого же я ожидал и от Ардуино) А то так можно скомпилировать, и покажется, что оно работает)) Как например свечение диода на 10%. В полной темноте кажется, что вполне себе прилично светит. А по факту получится, что работает через одно место.
     
  12. rkit

    rkit Гуру

    Через какое место написал, через такое и работает, по факту.
     
  13. ostrov

    ostrov Гуру

    1. инициализировать порты,
    2. дрыгать ножками.

    Если что то пропустить - работать не будет. Если поменять местами - работать не будет. Сначала снять штанишки, потом пописать, не наоборот!
     
  14. Krendelyok

    Krendelyok Нерд

    Но зачем, если есть подгузники? Вот в чем мой вопрос то. Можно ведь сделать IDE так, чтобы вероятности на ошибку было меньше. К примеру, выдавать сообщение об ошибке, если идет запись в порт, который находится в состоянии входа.
     
  15. rkit

    rkit Гуру

    Потому что подгузники не бесплатные, елки-палки. Напиши, и будут тебе подгузники ценой циклов и памяти.
     
  16. Krendelyok

    Krendelyok Нерд

    Причем здесь циклы? Я говорю про логику работы IDE на этапе написания программы.
     
  17. rkit

    rkit Гуру

    Ну путаешь теплое с мягким, чего я могу сказать. IDE тут вообще никаким боком.
     
  18. Krendelyok

    Krendelyok Нерд

    Тоесть моя фраза выше: " Можно ведь сделать IDE так, чтобы вероятности на ошибку было меньше. К примеру, выдавать сообщение об ошибке, если идет запись в порт, который находится в состоянии входа." бессмысленна?
     
  19. rkit

    rkit Гуру

    Запись в порт - не ошибка. Запись в порт включает резистор подтяжки.
    То что ты хочешь - отдельная функция запись_в_порт_включенный_на_выход, которая перед записью проверит, что он включен. Ценой циклов и памяти.
     
  20. Krendelyok

    Krendelyok Нерд

    По-моему, мы друг друга не понимаем)) Я говорю о работе с IDE. Например, программа же нам выдает сообщения о синтаксических ошибках в коде? Тут тоже самое. Причем здесь лишние циклы? Для включения резистора подтяжки, на сколько я помню, есть отдельная команда ведь? Так же можно сигнализировать о том, что пользователь забыл инициализировать порт. Или я неправ?