Порт B у Atmega 8

Тема в разделе "Микроконтроллеры AVR", создана пользователем DrProg, 18 окт 2015.

  1. DrProg

    DrProg Вечный нерд

    Не объясните, почему при использовании в программе порта PB МК не работает. Любой другой порт - пожалуйста, а стоит повесить на PB (любой) хотя бы светодиод и никаких признаков жизни? Не связано ли это с тем, что на PB висит SPI и через него МК программируется? Нормально ли это?

    Попробовал несколько Атмег, штуки 4. Что я делаю не так?
     
    ИгорьК нравится это.
  2. Airbus

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

    Да нет всё работает.И LCD и светодиоды и релюхи через ключи.SPI никак не связан правда не рекомендуют загружать выводы MISO MOSI SCK но это скорее пожелание.А так работает точно также как и PORTC PORTD я правда на С вешаю выходы а на D входы так как там RX/TX INT0 INT1 и.т.д. А как это у тебя проявляется?
     
  3. Airbus

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

    Вечером приеду кину тестовый скетч попробуешь ОК?
     
  4. Megakoteyka

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

    Где схема и код?
     
  5. DrProg

    DrProg Вечный нерд

    Ок.
    Схема обычная, питание в две ноги, земля в две ноги, выход на светодиод из любого В через 220Ом. Программа блинк обычный тестовый. На других портах моргает без проблем, на В нет. Более того, МК вообще не работает в таком случае.
     
    ИгорьК нравится это.
  6. Airbus

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

    Попробуй такой НЕХ

    :020000020000FC
    :1000000000C00FE50DBF04E00EBF0FEF07BB04BB40
    :1000100001BB08BB05BB02BB07D0002708BB05BB63
    :1000200002BB02D00FEFF5CF16E02AE130E83150E5
    :0800300020401040E0F70895A4
    :00000001FF

    Мега 8 фьюзы дефолтные будет мигать всеми Портами.Я проверял у меня мигает.
     
  7. Airbus

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

    И кстати а 13 вывод Уно это же PortB.5?Блинк моргает?Значит работает?
     
  8. DrProg

    DrProg Вечный нерд

    Так. Разобрался. Почему то был уверен, что строка типа:
    digitalWrite(PB5, HIGH);
    обращается именно к ноге PB5. А она обращается просто к ноге 5, которая на самом деле PD5. То есть надо пользоваться либо соответствием реальных ног их псевдонимам 1-13, либо записывать бит непосредственно в порт. Жалко конечно, иногда запись вида PB6, например, могла бы быть удобнее чем:
    PORTB |= 1 << 6;
     
    Последнее редактирование: 19 окт 2015
    ИгорьК нравится это.
  9. geher

    geher Гуру

    Нескромный вопрос. А как объявлена константа PB5?
    Подозреваю, что это просто 5, т.е. пятый пин.
    А обратиться этому пину придется напрямую. Вроде
    Код (Text):

    PORTB&=~(1<<5); //LOW
    PORTB|=(1<<5); //HIGH
     
    А если хочется непременно использовать digitalWrite, то надо искать таблицу соответствия номеров пинов реальным пинам. А она может быть весьма нетривиальной.
     
  10. DrProg

    DrProg Вечный нерд

    Да вот именно, в этом и была ошибка. Таблицу вывести не трудно, но например пинов 14 и 15 на Атмеге 8 нет, а их реальные прототипы PB6 и PB7 есть и к ним можно обращаться.

    Код (C++):
    //  pinMode(14, OUTPUT); - не правильно
      DDRB |= 1 << 6; // правильно. и т.д.

    // digitalWrite(14, HIGH);
      PORTB |= 1 << NB;

    // digitalWrite(14,LOW);
      PORTB &= ~(1 << NB);
     
    Последнее редактирование: 19 окт 2015
    ИгорьК нравится это.
  11. Airbus

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

    Так и есть это номера пинов.причём их всего 19.Надо смотреть распиновку http://tinyurl.com/q69xybk
     
  12. DrProg

    DrProg Вечный нерд

    При чем тут Леонардо? У каждого МК своя распиновка и свои соответствия. Если требуется конкретика, то всегда можно обращаться к конкретной ноге напрямую, оно и быстрее и правильнее, но менее универсально, так как при переносе программы на другой МК, возможно, потребуется вносить прилично изменений.
     
    ИгорьК нравится это.
  13. Airbus

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

    В том то и дело!Меня это тоже сначала бесило как ассемблерщика но потом ничего так-привык.Иной раз пишу на Асме под Ардуино и всегда держу перед собой листок с распиновкой но иногда бывает ошибаюсь н "не та" нога дрыгается.
     
  14. Airbus

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

    Леонардо ни при чём сорри думал что УНО.Но у него тоже пины как у УНО и у Искры тоже принцип такой же. Вот он УНО http://tinyurl.com/nkzoth6
     
  15. DrProg

    DrProg Вечный нерд

    Ну вот где, например, у УНО 14 и 15 ноги?
     
    ИгорьК нравится это.
  16. Megakoteyka

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

    Почитайте файлы pins_arduino.h для разных плат.
     
    DrProg нравится это.
  17. DrProg

    DrProg Вечный нерд

    Спасибо, но на голых МК правильнее считаю обращаться к ноге напрямую, а на платах они подписаны. )
     
    ИгорьК нравится это.
  18. Airbus

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

    Здесь http://tinyurl.com/nkzoth6 же всё написано.Смотрите внимательнее.Сиреневым цветом-номер пина Ардуино тёмно серым-ножки МК жёлтым-"имя" Порта светло серым-доп.функции.Например 5 ножка МК-она же PD3-она же 3пин Уны-она же INT1 или PC5 она же 28 ножка МК-она же 19 пин Уны-она же ADC5
    На "голых" да несомненно.А как там по-другому?Я пишу в AVR Studio а на Си в Codevision
     
  19. Megakoteyka

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

    А в чем тут правильность или неправильность?
    Голый контроллер принципиально ничем не отличается от ардуино.
     
  20. Megakoteyka

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

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