Придеться продублировать сообщение на этом форуме, так как на другом решить мою проблемы пока так и не смогли.
Начал изучение с книги "Мортон Д. - Микроконтроллеры AVR. Вводный курс." Впечатление от этой книги было крайне положительное, пока не остановился на одном простом месте, на котором окончательно запутался.. Собственно, причина:
Во вложении простейшая схема(из книги), на которой вывод PB0 отвечает за включение/выключение светодиода, а вход PD0 - за проверку нажатия кнопки. На PD0 устанавливается подтяжка. С PB0 вроде бы все понятно: если подана лог.1, то светодиод не горит, если же на PB0 подать лог.0, то идет ток и светодиод загорается. А вот как быть с PD0 и кнопкой? В книге поданы, на мой взгляд, два абсолютно противоположных примера, хотя автор говорит, что они действуют одинаково. Вот ключевые фрагменты примеров. Первый:
Прочтя этот код я уже несколько удивлен: почему СИД в этой программе включается и выключается с точностью до наоборот моим предположениям? Второй пример, по-моему, противоречит первому. Он делает то же самое, что и первый, но не использует блоки условий. Вот он:
Start: in temp, PinD ; Считываем состояние кнопки out PortB, temp ; Изменяем состояние СИД rjmp Start
Я не понимаю как отражается нажатие кнопки на вход PD0. Почему когда кнопка не нажата на входе PD0 должна быть лог.1, ведь в этот момент ножка ни к чему не подключена? Сначала думал, что это из-за подтяжки, но симулятор в AVR Studio показывает, что там 0.
В общем, эта проблема не дает мне перейти к практике. Помогите разобраться.
Кристиан писал(а):Я не понимаю как отражается нажатие кнопки на вход PD0. Почему когда кнопка не нажата на входе PD0 должна быть лог.1, ведь в этот момент ножка ни к чему не подключена?
Сначала думал, что это из-за подтяжки, но симулятор в AVR Studio показывает, что там 0.
на правах начинающих посоветуюю чтото посвежее взять мортон - 2002 год, это не современно.
также курс 123avr может очень сильно помочь! там ответы на все глупые вопросы которые возникнут=)
AVR студия для начинающего не то что требуется. CodeVisionAVR или WinAVR гораздо удобней для начала также, что важно, много проектов для начинающих доступны именно для этих компиляторов.
вобще рекомендую обзавестись несколькими книжками потому что сам уже заметил у всех авторов свой подход
ассемблер это конечно хорошо но лучше начинать с СИ гораздо практичней и доступней для понимания
также присоединяюсь к совету 123авр что лучше сразу взять "нормальный" контроллер с аппаратными UART, ШИМами и АЦП - ЦАП
сам на эти грабли наступил, хотел чё попроще и стал 2313 штудировать. потом когда дошло дела до реальных прототипов понял что зря не начал с меги.
Как раз ATmega16 и выбрал для начала, просто пример был для AT90S1200.
С Си уже давно знаком, так как имею большой опыт программирования, поэтому чтобы лучше разобраться во внутреннем строении МК решил использовать ассемблер.
arvr123.nm.ru, твой курс я почитываю, но хочу изучать МК параллельно вместе с книгой Мортона.
Start: sbis PinD, 0 ; Проверяем, нажата ли кнопка ; если на PD0 есть "1" то перескочить через следующ инструкцию
rjmp LEDoff
sbi PortB, 0 ; Включаем СИД
rjmp Start ; начать сначала
LEDoff: cbi PortB, 0 ; Выключаем СИД rjmp Start
Почему в этой программе включение диода производится инструкцией sbi PortB, 0? Ведь если установить PB0 в "1", тогда не будет разности потенциалов, соответственно и тока. Выключение диода получается тогда тоже с точностью до наоборот.
Я так понял, что автор в нескольких раз ошибся, а потом и ошиблись переводчики этой книги, написав неправильные комментарии. Или все-таки нет? Помогите в этом разобраться, чтобы я мог двигаться дальше.
Знаю, книга не новая, но до того как я наткнулся на эти неточности мне она казалась интересной и понятной.
Кристиан писал(а):Почему в этой программе включение диода производится инструкцией sbi PortB, 0?
Ведь если установить PB0 в "1", тогда не будет разности потенциалов, соответственно и тока. Выключение диода получается тогда тоже с точностью до наоборот.
Я так понял, что автор в нескольких раз ошибся, а потом и ошиблись переводчики этой книги, написав неправильные комментарии. Или все-таки нет?
Молодецю Ты сам в это разобрался. Я специально не стал этого писать выше а повторил то что было в комментариях.
Если ты сам это понял то теперь врядли забудешь. (макаренко типа)
Тогда все проясняется. Вопрос решен. Спасибо, avr123.nm.ru.
Теперь вот думаю переходить к практике. Для начала проверить эту схему на живом МК. Так как я раньше никогда не занимался цифровой электроникой, по мои прикидкам необходимо купить следующее оборудование:
1) Паяльник Читал, что нужен на 25-30 Ватт. Особая ли разница между этими 25 и 30? Некоторые паяльники имеют возможность подключать заземление. Так вот, стоит ли искать именно такой?
2) Макетная плата В магазинах есть много разных моделей, все по размеру примерно одинаковые. Подойдет любая?
3) Микроконтроллер Решил брать ATmega16 + сокет под него
4) Кварц Насколько я понял, он обязателен для создания программатора для меги. Какой брать?
Вы же пишете что читали курс??? Там на седьмой странице (кажется давно не читал) описан простейший (и по-этому безглючный) програматор я сам им пользуюсь в нем только четыре резистора и нет ни каких стабилизаторов