Mega2560 and encoder

Тема в разделе "Arduino & Shields", создана пользователем my_name_Виктор, 24 мар 2024.

  1. ИгорьК

    ИгорьК Гуру

    Первоисточник, все таки, здесь.

    В конце страницы. Плюс выше на странице написано что ноги 20 и 21 в прерываниях не так хороши.


    pinToInterrupt() находится здесь.
     
    Последнее редактирование: 27 мар 2024
    my_name_Виктор нравится это.
  2. b707

    b707 Гуру

    Первоисточник, все-таки - это даташит на контроллер.
    А ссылка на сайте Ардуино, как ни странно, тоже врет.
    Страница 81 из даташита на Атмегу2560 ясно указывает, что прерывания INT0-INT3 располагаются на пинах PD0-PD3, что соответвует ардуиновским 18-21. А на ардуиновских пинах 2 и 3 - располагаются прерывания INT4 и 5

    Давно тут не был, забыл можно ли сюда вставлять картинки прямо с компа, не выкладывая их в инет.
    Если можно - могу вставть иллюстрации
     
    Ariadna-on-Line и ИгорьК нравится это.
  3. b707

    b707 Гуру

    Вы все время это цитируете, давно хотел спросить.
    Вас не смущает, что строчками
    Код (C++):
    attachInterrupt(0, int0, CHANGE);
    attachInterrupt(0, int1, CHANGE);
    Вы вешаете два обработчика на одно и то же прерывание?
    Или ноль в начале ОБОИХ строчек - это опечатка?
     
  4. ИгорьК

    ИгорьК Гуру

    Не факт. Это же Ардуино, а не МК. Ардуино может и подменять определения. "Практика - критерий истины". Я бы проверил, коль надо.

    Можно.
     
    b707 нравится это.
  5. b707

    b707 Гуру

    Думаете ардуиновцы поменяли номера прерываний? По даташиту было 4 и 5 на пинах 2 и 3, а они "для совместимости" с уно переназвали как 0 и 1? - об этом я не подумал.
    Пожалуй, не исключено.
     
    Ariadna-on-Line и my_name_Виктор нравится это.
  6. Код (C++):
    void setup()
    {
      Serial.begin (9600);
    ...................................................................
      attachInterrupt(0, int0, CHANGE);
      attachInterrupt(1, int0, CHANGE);
      ..................................................................
      //------------------------------------------------------------------------------------
    Sorry, оЧепятка :)
     
  7. parovoZZ

    parovoZZ Гуру

    достоверная инфа только в даташите. Всё остальное бла бла бла
     
    Feofan нравится это.
  8. parovoZZ

    parovoZZ Гуру

    принтскрин и контролц здесь в окне
     
  9. b707

    b707 Гуру

    Да, @my_name_Виктор@ИгорьК ,были правы, все-таки в Ардуино на Меге прерывание 0 на 2 пине, а прерывание 1 - на третьем. Вот макрос из внутренностей Ардуино ИДЕ
    Код (C++):
    #define digitalPinToInterrupt(p) ((p) == 2 ? 0 : ((p) == 3 ? 1 : ((p) >= 18 && (p) <= 21 ? 23 - (p) : NOT_AN_INTERRUPT)))
     
    my_name_Виктор и ИгорьК нравится это.
  10. Ariadna-on-Line

    Ariadna-on-Line Гуру

    ...Кит был маленький, усатый. Кот - огромный полосатый...

    А какие прерывания тогда сидят на Пинах платы 20, 21 ?
    Схема 2560-й Ардуины ясно показывает, что на 2-м пине платы - INT4, а на 3-м - INT5

    Очевидно что, в угоду совместимости кода УНО и МЕГА - в парсере кода прерывания - пере-обозвали. Не зря же требуют обращаться к прерываниям не по "именам", а по пинам. Кому не приходит в голову лезть рассматривать схемы Ардуин - всё вполне ОК.
     

    Вложения:

    Последнее редактирование: 29 мар 2024
  11. ИгорьК

    ИгорьК Гуру

    Заменить слова "Видимо в угоду" на слова "Здорово что в целях" - информационная часть сообщения не изменится, а краски заиграют совсем по-другому.

    См документацию Ардуино, ссылки и выжимки здесь на предыдущей странице. И ничто не мешает вам задействовать ноги МК мимо ардуиновских шаблонов.

    Уверен, что если бы вам реально была необходима плата с этим процессором, вы бы на раз разобрались с этими прерываниями. А вот ТС, возможно, слышит об этом явлении впервые. Для него, начинающего, и повторяются прерывания like Uno.
     
    my_name_Виктор и Ariadna-on-Line нравится это.
  12. Заметьте, вопрос в исходном посте был о том, почему код, приведённый в нём не работает на Меге, так же как и на Уно.
    А предположение, кто о чём слышит впервые, наверное выглядит некорректно.
     
  13. ИгорьК

    ИгорьК Гуру

    Ну, извиняйте.

    Просто у вас такой вопрос, повторюсь, что экспериментально его решить проще, чем вопрошать здесь.
     
    b707 и Ariadna-on-Line нравится это.
  14. b707

    b707 Гуру

    Девочки не ссорьтесь

    В современном мире на любой вопрос в разы быстрее найти ответ в гугле, чем спрашивать на форумах, так что в определенном смысле любой, кто задает тут вопросы - лентяй и халявщик :)
     
    ИгорьК нравится это.
  15. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Согласен отчасти. Бывают такие темы, что как ни пытайся сформулировать "гугло-доступно" - нифига не получается. Лезет только одна реклама вместо ответов. Вот и приходится поднимать тему в форумах.
     
    Последнее редактирование: 2 апр 2024
    ИгорьК нравится это.
  16. ИгорьК

    ИгорьК Гуру

    Нет. Не всякий раз. Есть случаи, когда не удается нагуглить.

    Но! Если не удается нагуглить, этот форум точно не то место, где задавать такие вопросы (если с Ардуино ру кто не забежит и ответит. Но а Ардуино ру заходить тоже не айс - там страшно и убивают на раз ).
     
  17. ИгорьК

    ИгорьК Гуру

    Угу. Вот я за LVGL взялся и не знаю пока с какой стороны подойти. Но не спрашивать же это на форуме: "Я нииизнаю что делать с LVGL! Памагите!".

    Ответ заранее известен: вентилятор сломается :)
     
  18. parovoZZ

    parovoZZ Гуру

    не на любой и не быстрее.
     
  19. b707

    b707 Гуру

    вот именно.
    Для осмысленных вопросов по любой теме нужна база. А если даже не знаете, что спрашивать - значит и на форум рано, сначала найти пару ресурсов по теме и почитать.
    Любые "новички", которые вываливаются на форум с вопросом "Не знаю с чего начать" - ничего, кроме вентилятора, и не заслуживают
     
    parovoZZ нравится это.
  20. b707

    b707 Гуру

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