roboforum.ru

Технический форум по робототехнике.

Вопросы начинающего по книге Мортона

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Вопросы начинающего по книге Мортона

Сообщение Кристиан » 03 фев 2007, 17:33

Доброго дня!

Придеться продублировать сообщение на этом форуме, так как на другом решить мою проблемы пока так и не смогли.

Начал изучение с книги "Мортон Д. - Микроконтроллеры AVR. Вводный курс."
Впечатление от этой книги было крайне положительное, пока не остановился на одном простом месте, на котором окончательно запутался..
Собственно, причина:

Во вложении простейшая схема(из книги), на которой вывод PB0 отвечает за включение/выключение светодиода, а вход PD0 - за проверку нажатия кнопки. На PD0 устанавливается подтяжка. С PB0 вроде бы все понятно: если подана лог.1, то светодиод не горит, если же на PB0 подать лог.0, то идет ток и светодиод загорается. А вот как быть с PD0 и кнопкой? В книге поданы, на мой взгляд, два абсолютно противоположных примера, хотя автор говорит, что они действуют одинаково.
Вот ключевые фрагменты примеров.
Первый:

Start:
sbis PinD, 0    ; Проверяем, нажата ли кнопка
rjmp LEDoff
sbi PortB, 0    ; Включаем СИД
rjmp Start

LEDoff:
cbi PortB, 0    ; Выключаем СИД
rjmp Start

Прочтя этот код я уже несколько удивлен: почему СИД в этой программе включается и выключается с точностью до наоборот моим предположениям?
Второй пример, по-моему, противоречит первому. Он делает то же самое, что и первый, но не использует блоки условий. Вот он:

Start:
in temp, PinD    ; Считываем состояние кнопки
out PortB, temp    ; Изменяем состояние СИД
rjmp Start

Я не понимаю как отражается нажатие кнопки на вход PD0. Почему когда кнопка не нажата на входе PD0 должна быть лог.1, ведь в этот момент ножка ни к чему не подключена? Сначала думал, что это из-за подтяжки, но симулятор в AVR Studio показывает, что там 0.

В общем, эта проблема не дает мне перейти к практике. Помогите разобраться.

Заранее благодарен.
Вложения
circ.JPG
Схема
Кристиан
 
Сообщения: 10
Зарегистрирован: 03 фев 2007, 17:22
Откуда: АР Крым. Севастополь

Сообщение avr123.nm.ru » 03 фев 2007, 18:09

Я тебе советую мой курс и контроллер ATmega16  (ну минимум Мега8)

Книга эта не единственная - книги по АВР есть в курсе. И конечно я советую тебе Си как простой путь для начинающего.

Советую  от PD0 поставить резистор 300 Ом - это не даст сжеч ножку при ошибках в программе.

RESET - нужно заземлить конденсатором 0.01-0.1 мкФ  и соединить резистором 10 ком с питанием.
Последний раз редактировалось avr123.nm.ru 03 фев 2007, 18:17, всего редактировалось 1 раз.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Вопросы начинающего по книге Мортона

Сообщение avr123.nm.ru » 03 фев 2007, 18:14

Производитель снял этот мк с производства

http://www.atmel.com/dyn/products/produ ... rt_id=1992

AT90S1200 Not recommended for new design: replaced by ATtiny2313
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Вопросы начинающего по книге Мортона

Сообщение avr123.nm.ru » 03 фев 2007, 18:22

Кристиан писал(а):Я не понимаю как отражается нажатие кнопки на вход PD0. Почему когда кнопка не нажата на входе PD0 должна быть лог.1, ведь в этот момент ножка ни к чему не подключена?

Сначала думал, что это из-за подтяжки, но симулятор в AVR Studio показывает, что там 0.


Используйте нормальный симулятор VMLAB  -  вот  
http://avr123.nm.ru/img/11_full.png

Именно подтяжка создает высокий уровень  
на выходе при отпущеной кнопке.

Возможные состояния ножки МК - таблица - avr123.nm.ru/02.htm

При нажатии кнопки на PD0  будет  лог "0"

Как МК определяет уровень на ножке рассказано на:
avr123.nm.ru/02.htm
Последний раз редактировалось avr123.nm.ru 03 фев 2007, 18:34, всего редактировалось 1 раз.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Вопросы начинающего по книге Мортона

Сообщение avr123.nm.ru » 03 фев 2007, 18:30

Кристиан писал(а):Первый:

Start:
sbis PinD, 0    ; Проверяем, нажата ли кнопка
; если на PD0  есть "1" то перескочить через следующ инструкцию

rjmp LEDoff

sbi PortB, 0    ; Включаем СИД

rjmp Start  ; начать сначала

LEDoff:
cbi PortB, 0    ; Выключаем СИД
rjmp Start

Прочтя этот код я уже несколько удивлен: почему СИД в этой программе включается и выключается с точностью до наоборот моим предположениям?


т.е. при отпущеной кнопке светодиод не должен  гореть.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: Вопросы начинающего по книге Мортона

Сообщение avr123.nm.ru » 03 фев 2007, 18:36

Кристиан писал(а):Почему когда кнопка не нажата на входе PD0 должна быть лог.1, ведь в этот момент ножка ни к чему не подключена?


она подключена подтяжкой - т.е. как бы резистором 40 ком к питанию МК  -  вот подробней  avr123.nm.ru/02.htm
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Myp » 03 фев 2007, 19:16

на правах начинающих посоветуюю чтото посвежее взять
мортон - 2002 год, это не современно.

также курс 123avr может очень сильно помочь! там ответы на все глупые вопросы которые возникнут=)

AVR студия для начинающего не то что требуется.
CodeVisionAVR или WinAVR гораздо удобней для начала
также, что важно, много проектов для начинающих доступны именно для этих компиляторов.


вобще рекомендую обзавестись несколькими книжками
потому что сам уже заметил у всех авторов свой подход

ассемблер это конечно хорошо но лучше начинать с СИ
гораздо практичней  и доступней для понимания

также присоединяюсь к совету 123авр что лучше сразу взять "нормальный" контроллер с аппаратными UART, ШИМами и АЦП - ЦАП

сам на  эти грабли наступил, хотел чё попроще и стал 2313 штудировать. потом когда дошло дела до реальных прототипов понял что зря не начал с меги.
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Кристиан » 03 фев 2007, 20:25

Спасибо за ответы.

Как раз 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", тогда не будет разности потенциалов, соответственно и тока. Выключение диода получается тогда тоже с точностью до наоборот.

Я так понял, что автор в нескольких раз ошибся, а потом и ошиблись переводчики этой книги, написав неправильные комментарии. Или все-таки нет? :)
Помогите в этом разобраться, чтобы я мог двигаться дальше.

Знаю, книга не новая, но до того как я наткнулся на эти неточности мне она казалась интересной и понятной.
Кристиан
 
Сообщения: 10
Зарегистрирован: 03 фев 2007, 17:22
Откуда: АР Крым. Севастополь

Сообщение avr123.nm.ru » 03 фев 2007, 21:22

Кристиан писал(а):Почему в этой программе включение диода производится инструкцией sbi PortB, 0?

Ведь если установить PB0 в "1", тогда не будет разности потенциалов, соответственно и тока. Выключение диода получается тогда тоже с точностью до наоборот.

Я так понял, что автор в нескольких раз ошибся, а потом и ошиблись переводчики этой книги, написав неправильные комментарии. Или все-таки нет? :)


Молодецю Ты сам в это разобрался.  Я специально не стал этого писать выше а повторил то что было в комментариях.

Если ты сам это понял то теперь врядли забудешь.  (макаренко типа)
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Кристиан » 03 фев 2007, 21:56

Тогда все проясняется. Вопрос решен.
Спасибо, avr123.nm.ru.

Теперь вот думаю переходить к практике. Для начала проверить эту схему на живом МК.
Так как я раньше никогда не занимался цифровой электроникой, по мои прикидкам необходимо купить следующее оборудование:

1) Паяльник
Читал, что нужен на 25-30 Ватт. Особая ли разница между этими 25 и 30?
Некоторые паяльники имеют возможность подключать заземление. Так вот, стоит ли искать именно такой?

2) Макетная плата
В магазинах есть много разных моделей, все по размеру примерно одинаковые. Подойдет любая?

3) Микроконтроллер
Решил брать ATmega16
+ сокет под него

4) Кварц
Насколько я понял, он обязателен для создания программатора для меги. Какой брать?

Вроде бы из ключевых элементов ничего не забыл...
Кристиан
 
Сообщения: 10
Зарегистрирован: 03 фев 2007, 17:22
Откуда: АР Крым. Севастополь

Сообщение avr123.nm.ru » 03 фев 2007, 22:20

Кристиан писал(а):Паяльник

Макетная плата

ATmega16 + сокет под него


Там все ЭТО описано - avr123.nm.ru/06.htm

Кристиан писал(а):Кварц

Насколько я понял, он обязателен для создания программатора для меги.

Какой брать?



для программирования кварц не обязателен.

все что нужно для прошивки МК на стр.  avr123.nm.ru/07.htm

=====

А кварц лучше брать  7.3728 MHz  (или 3.6864 MHz  или  14.7456 MHz)
из таблицы:  "Examples of UBRR Settings for Commonly Used Oscillator Frequencies"

Такая чатота кварцев позволяет работать на
стандартных компьютерных скоростях COM.

Советую сделать адаптер для связи с ПК по - avr123.nm.ru/z4.htm - на этой же странице сказано что ПК это прекрасный инструмент для отладки.

=========

Для быстрого старта на Меге16 в CVAVR и VMLAB есть мой шаблон

http://avr123.nm.ru/codevisionavr_vmlab.rar

о нём написано на http://avr123.nm.ru/04.htm
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение Кристиан » 04 фев 2007, 16:53

Еще такой вопрос: зачем в программаторе(даже самом простом) используют стабилизатор 78L05 ? Это действительно оправдано?
Кристиан
 
Сообщения: 10
Зарегистрирован: 03 фев 2007, 17:22
Откуда: АР Крым. Севастополь

Сообщение Myp » 04 фев 2007, 17:37

в самом простом не используется=)
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Сообщение Кристиан » 04 фев 2007, 18:15

Ну а для чего он тогда нужен, если без него можно обойтись?
Кристиан
 
Сообщения: 10
Зарегистрирован: 03 фев 2007, 17:22
Откуда: АР Крым. Севастополь

Сообщение D-M » 04 фев 2007, 18:32

Вы же пишете что читали курс???
Там на седьмой странице (кажется давно не читал) описан простейший (и по-этому безглючный) програматор я сам им пользуюсь в нем только четыре резистора и нет ни каких стабилизаторов :wink:
Аватара пользователя
D-M
 
Сообщения: 486
Зарегистрирован: 28 мар 2006, 17:28
Откуда: Пенза

След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9