Не объясните, почему при использовании в программе порта PB МК не работает. Любой другой порт - пожалуйста, а стоит повесить на PB (любой) хотя бы светодиод и никаких признаков жизни? Не связано ли это с тем, что на PB висит SPI и через него МК программируется? Нормально ли это? Попробовал несколько Атмег, штуки 4. Что я делаю не так?
Да нет всё работает.И LCD и светодиоды и релюхи через ключи.SPI никак не связан правда не рекомендуют загружать выводы MISO MOSI SCK но это скорее пожелание.А так работает точно также как и PORTC PORTD я правда на С вешаю выходы а на D входы так как там RX/TX INT0 INT1 и.т.д. А как это у тебя проявляется?
Ок. Схема обычная, питание в две ноги, земля в две ноги, выход на светодиод из любого В через 220Ом. Программа блинк обычный тестовый. На других портах моргает без проблем, на В нет. Более того, МК вообще не работает в таком случае.
Попробуй такой НЕХ :020000020000FC :1000000000C00FE50DBF04E00EBF0FEF07BB04BB40 :1000100001BB08BB05BB02BB07D0002708BB05BB63 :1000200002BB02D00FEFF5CF16E02AE130E83150E5 :0800300020401040E0F70895A4 :00000001FF Мега 8 фьюзы дефолтные будет мигать всеми Портами.Я проверял у меня мигает.
Так. Разобрался. Почему то был уверен, что строка типа: digitalWrite(PB5, HIGH); обращается именно к ноге PB5. А она обращается просто к ноге 5, которая на самом деле PD5. То есть надо пользоваться либо соответствием реальных ног их псевдонимам 1-13, либо записывать бит непосредственно в порт. Жалко конечно, иногда запись вида PB6, например, могла бы быть удобнее чем: PORTB |= 1 << 6;
Нескромный вопрос. А как объявлена константа PB5? Подозреваю, что это просто 5, т.е. пятый пин. А обратиться этому пину придется напрямую. Вроде Код (Text): PORTB&=~(1<<5); //LOW PORTB|=(1<<5); //HIGH А если хочется непременно использовать digitalWrite, то надо искать таблицу соответствия номеров пинов реальным пинам. А она может быть весьма нетривиальной.
Да вот именно, в этом и была ошибка. Таблицу вывести не трудно, но например пинов 14 и 15 на Атмеге 8 нет, а их реальные прототипы PB6 и PB7 есть и к ним можно обращаться. Код (C++): // pinMode(14, OUTPUT); - не правильно DDRB |= 1 << 6; // правильно. и т.д. // digitalWrite(14, HIGH); PORTB |= 1 << NB; // digitalWrite(14,LOW); PORTB &= ~(1 << NB);
При чем тут Леонардо? У каждого МК своя распиновка и свои соответствия. Если требуется конкретика, то всегда можно обращаться к конкретной ноге напрямую, оно и быстрее и правильнее, но менее универсально, так как при переносе программы на другой МК, возможно, потребуется вносить прилично изменений.
В том то и дело!Меня это тоже сначала бесило как ассемблерщика но потом ничего так-привык.Иной раз пишу на Асме под Ардуино и всегда держу перед собой листок с распиновкой но иногда бывает ошибаюсь н "не та" нога дрыгается.
Леонардо ни при чём сорри думал что УНО.Но у него тоже пины как у УНО и у Искры тоже принцип такой же. Вот он УНО http://tinyurl.com/nkzoth6
Здесь http://tinyurl.com/nkzoth6 же всё написано.Смотрите внимательнее.Сиреневым цветом-номер пина Ардуино тёмно серым-ножки МК жёлтым-"имя" Порта светло серым-доп.функции.Например 5 ножка МК-она же PD3-она же 3пин Уны-она же INT1 или PC5 она же 28 ножка МК-она же 19 пин Уны-она же ADC5 На "голых" да несомненно.А как там по-другому?Я пишу в AVR Studio а на Си в Codevision
А в чем тут правильность или неправильность? Голый контроллер принципиально ничем не отличается от ардуино.