Digispark игнорирует кнопку

Тема в разделе "Микроконтроллеры AVR", создана пользователем dmb, 24 сен 2020.

  1. dmb

    dmb Нерд

    Доброе время, столкнулся с проблемой, используя digispark на Attiny85 - а именно не отрабатывает функцию нажатия кнопки. С скетче задумано переключение звуковой частоты по нажатию тактовой кнопке, что нормально работает на arduino nano. Digispark же перебирает все частоты так, как будто кнопка постоянно нажата (если бузер на 0 пине, а кнопка на любом другом), если же бузер на другом, кроме нулевого пина - то не звучит вообще: но если кнопка нажать - то звучит полсекунды и перестает, следующее нажатие - следующая частота, но тоже через полсекунды перестает. Хотя должно быть наоборот: непрерывно должна звучать первая частота, пока не будет нажата кнопка, после чего непрерывно звучит вторая частота - и так далее. Подскажите, плз, может для attiny85 нужен какой-то особый код? Заранее благодарен.
    Код (C++):
    #define Sound 0
    #define button 3
    const byte count = 9;
    const unsigned int frequency[count] = {174, 285, 396, 417, 528, 639, 741, 852, 963};
    byte pos = 0;

    void setup()
    {
      pinMode(Sound, OUTPUT);
      pinMode(button, INPUT_PULLUP);
    }

    void loop()
    {
      tone(Sound, frequency[pos]);
      if (!digitalRead(button))
      {
        pos++;
        delay(500);
        if (pos == count) pos = 0;
      }
    }
     
  2. Tomasina

    Tomasina Сушитель лампочек Модератор

    А INPUT_PULLUP применимо к attiny85?
     
  3. dmb

    dmb Нерд

    Этого я не знаю! Чем можно заменить, что было бы понятно Аттини?
     
  4. Andy16

    Andy16 Нерд

    А как кнопка подключена? Может, достаточно добавить резистор на плюс?
     
  5. parovoZZ

    parovoZZ Гуру

    Ну вы даёте))

    Ну как обычно: бит необходимого пина регистра PORTx перевести в 1. Тогда к пину подключится внутренний резистор.
    http://easyelectronics.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-vvoda-vyvoda.html
    А ведь ещё каких-то 10 лет назад программисты были совсем другие. Вот что делает дурина...
     
  6. dmb

    dmb Нерд

    Тут дело даже не в физической кнопке, в данный момент на опытном Digispark не припаяна никакая кнопка - но код отрабатывает так, как будто она есть и постоянно зажата...
     
  7. dmb

    dmb Нерд

    Помог бы решить сначала - а потом обзывался! Ссылку на учебные материалы любой д... может дать!
     
  8. b707

    b707 Гуру

    ээээ да вы видно ждете. что вам кто-то готовый код напишет?
    Ссылку на учебник за помощь не считаете?
     
  9. b707

    b707 Гуру

    вам именно об этом и говорят - но вы похоже не очень разбираетесь.
    Если конструкция INPUT_PULLUP на аттини правильно не работает. - у вас на пине будет постоянно LOW - а значит для программы ваша кнопка все время будет казаться нажатой.
    А вот если вы ФИЗИЧЕСКИ соедините пин кнопки и VCC через резистор от 3-5К до 20К - ложные срабатывания исчезнут.
     
  10. parovoZZ

    parovoZZ Гуру

    можно цитату на оскорбления с моей стороны?

    напишу ещё раз:
    Из всех AVR я люблю именно Attiny. Поверь мне - на всех пинах, способных работать как входы, есть внутренние подтягивающие резисторы.
    Размышлять на тему того, что авторы библиотеки для тиньки85 взвели бит PUD и таким образом запретили подключение этих резисторов, я не буду. Просто не знаю.
     
  11. b707

    b707 Гуру

    почитал описания - INPUT_PULLUP должно работать.
    Но можно и просто единичку в третий бит PORTB записать, как Паровоз советует
    это че за регистр такой ? :)
     
  12. parovoZZ

    parovoZZ Гуру

    Как всегда - регистр MCUCR, 6-ой бит.
     
  13. parovoZZ

    parovoZZ Гуру

    т.к. ТС лентяй, то я посмотрел за него.
    [​IMG]
    Третий пин на этой плате попадает на пин, который используется внутренней библиотекой как USB+. Естественно, что библиотека не отдаёт горе-программисту такой ценный ресурс. Вот и не работает ничего.
     
  14. dmb

    dmb Нерд

    Я считаю такое высказывание лишним, может я не правильно Вас понял - тогда сори. Если любите Attiny - подсобите, я первый раз с ним имею дело, мне для проекта нужен очень мелкий МК - диджиспарк идеально подходит. Сопротивление 10 КОМ с +5 на пин кнопки - не помогает, все равно, все частоты по кругу проигрывает, как будто кнопко постоянно нажата...
    Третий пин в скетче для примера, уже пробовал все - и первый, и второй, и пятый...
     
  15. b707

    b707 Гуру

    Паровоз. это не та плата, у ТС МК Аттини85
     
  16. b707

    b707 Гуру

    все с резисторами попробовали?
    если нет - выберите пин 2. не забудьте резистор добавить. Кнопку подключать не надо
     
  17. dmb

    dmb Нерд

    Ссылку на учебник помощью считаю, просто не обязательно называть дураком того, кто не имеет грамотности в узкой специализации. Сопротивление на с +5 на ногу кнопки не помогло, может для аттини нужна какая-то другая команда?
     
    issaom нравится это.
  18. b707

    b707 Гуру

    другая команда для чего?
    Код у вас элементарный, отличий от нано быть не должно.
    Если только вы загружаете именно тот код, что в первом сообщении - проверьте.
    и еще - когда переключаете кнопку на другой пин - константу button в коде не забывайте менять.
     
  19. parovoZZ

    parovoZZ Гуру

    Да без разницы. Картинка просто красивая. Тем более та, которая, она слева вторая. )))))

    Сова - ты же умная птица. Высоко сидишь, далеко глядишь. Сказано же: третий пин попадает на программный USB.
     
  20. parovoZZ

    parovoZZ Гуру

    ты так считаешь, а я так считаю. Вот и разошлись, как в море корабли.