-

Осваиваем AVR!

новости  | с чего начать? | ссылки | учебник | примеры | программатор | отладчики | осциллограф | давно это было | download | сотрудничество | пишите мне

пример отладки  | бегущие огни | мигалка | Экономим ресурс ПЗУ | Работаем с USART | 555

Для этого примера вам надо скачать демо-программу для отладочного модуля попроще


в формате 
Algorithm Builder

в формате ASM

или для отладочного модуля покруче


в формате
Algorithm Builder

в формате ASM

Устройство собрано, программа (демо) зашита, есть отладочный обмен. Ну, во первых, мы видим изменяющиеся значения в регистрах R18-R21. Это понятно, программа там крутит 4-х байтный счетчик. Посему видно, что старший, 21 регистр изменяется редко, он ведь инкрементируется после переполнения трех байт, а это  256*256*256=16777216, образнее говоря - один его инкремент - это 16,7 миллионов рабочих циклов.


Ну да бог с ними, циклами. Демо-программа должна была прибавлять к регистру 23 содержимое регистра 22, если последний не 0, и очищать его. Значит, нам надо в регистр 22 занести число. Как это сделать?


- Ctrl-клик по значению R22 (по белому полю!) - число 22 появилось в левом окошке группы "Запись".

- В правое окошко этой группы вводим число. Если нужно в 16-чном виде, то перед ним поставьте $   (как положено в Паскале :-)

- Кликнике кнопочку "Send"

В результате - в регистре 22 как был 0, так и есть. Просто ничего заметить там невозможно, а вот R23 стал больше на введенное число. Ведь после сложения R22 программа очищает.

И еще заметим, что R31 (или R3 - для демо2) при каждом клике по "Send" инкрементируется. Так и должно быть, см. программу Демо.

Теперь нажмите на кнопочки "1"-"9" - нажатое число появится в переменной _spicmd, или по адресу 0x61. Да, кстати, адрес 0x61 нам ничего не говорит... Кликните по этому адресу (серому полю) и в открывшемся окошке введите - либо spicmd, либо "во блин", короче - что вам угодно.

Ну ладно, это все не очень наглядно... Пойдем далее. Припаяйте светодиод по следующей схеме к выводу PA0 (у 8535 это 40-й вывод). Резистор может быть любым от 200 Ом до 1 кОм.  Светодиод не горит, все правильно - по сбросу выводы МК находятся в режиме ввода и в 3-м состоянии. (кстати, паять-таки лучше отключив питание!)

Что нужно, чтобы этот светодиод зажечь?

-PA0 запрограммировать на вывод. Смотрим в даташит, DDRA имеет адрес $1A ($3A) - нам нужно то, что в скобках, первый адрес используется в командах OUT - а мы пишем в память, там адреса +$20 Итак, а группе "запись" левое окно=$3A, правое=$01, жмем SEND. Пока ничего не произошло - потому как PORTA по сбросу =0 -Выведем "1" в PORTA. Для этого, как вы уже догадались, по адресу $3B надо записать 1. Урра! Горит! Заработало! :-) Теперь по тому же адресу $3B запишите 0 - два раза ура, потухло.

Экспериментируйте... Только аккуратно. Если у вас какой-то пин может быть замкнут на землю, не стОит программировать его на вывод и тем более писАть туда "1" - пожжете. Остальное не страшно - максимум повесите программу МК - лечится Reset-ом.

кривее нарисовать не получилось

Rekl:  

(с)nml 10-Jul-2009