Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Отладка приложений

Популярность микроконтроллеров AVR привела к появлению на рынке огромного количества самых разнообразных средств отладочных средств. Среди продуктов сторонних разработчиков существуют как мощные дорогостоящие симуляторы типа Proteus, так и совершенно бесплатные на подобие VMLab. Фирменные внутрисхемные эмуляторы от Atmel (ISE40, ISE40, ISE200), работающие в IDE AVR Studio, вообще, позволяют вести отладку в реальном режиме времени. Все модели AVR последних поколений обязательно имеют в своем составе отладочные модули dW или JTAG. В их системе команд появилась даже инструкция программной точки останова break. Комплекты разработчика (AVR Dragon, AVR ONE и т.д.) для таких микроконтроллеров стали значительно проще и функциональней.

Симуляторы, эмуляторы и отладчики, безусловно, очень мощные и разносторонние инструменты. С их помощью можно сэкономить много времени сил при отыскании программных и аппаратных ошибок. Не уменьшая достоинств этого арсенала отладочных средств, все же нужно сказать и о двух недостатках. Это сложность использования   и цена. Именно поэтому “простые” методы отладки до сих пор остаются актуальными. Иногда для того чтобы убедится в работоспособности программы, легче вывести необходимый сигнал на светодиод на макетной плате, чем моделировать в симуляторе всю схему.

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

Пошаговый режим отладки

У AVR-микроконтроллеров существует одна важная особенность, которая позволяет реализовать пошаговый режим работы, что особенно удобно при отладке отдельных участков кода не критичных ко времени. Выполнение очередной команды будет происходить только после нажатия SB1, как показано на рис.1а.

Простой 8-разрядный ЦАП
Рис.1 Схема подключения кнопки при пошаговом режиме отладки
а - с помощью внешнего прерывания INT0
б - с помощью прерывания от аналогового компаратора

Кнопка подключена через фильтр для подавления дребезга контактов R1C1 к линии 2 порта D микроконтроллера. Сам же вывод по совместительству является еще и входом внешнего прерывания INT0. Если это прерывание будет разрешено и условием его генерации будет изменение состояния с лог.0 на лог.1 (по спаду), то нажатие SB1 приведет нас на подпрограмму обработчика прерывания service_INT0. При этом флаг прерывания INTF0 в регистре GIFR, как и флаг глобального разрешения прерываний I в SREG, будут сброшены на нуль. В нутрии обработчика находится цикл ожидания, в котором производится опрос PD2 до тех пор, пока на выводе будет установлен сначала высокий (кнопка отпущена), а затем низкий (кнопка нажата) логические уровни. Но последнее событие одновременно приведет к установке флага INTF0 (состояние INT0 изменилось с 1 на 0). После выхода из подпрограммы по команде reti прерывания снова окажутся разрешены, а так как INTF0 уже установлен, то процессор вновь уйдет на обработчик service_INT0, предварительно выполнив одну команду в тексте основной программы (аппаратная особенность AVR). Таким образом, каждое нажатие кнопки будет приводить к эмуляции режима пошаговой работы микроконтроллера.

      .def temp = R16
  
      .org 0
      rjmp  main          ;вектор сброса
      rjmp  service_INT0  ;вектор внешнего прерывания INT0     
      .

main:
      cbi   PORTD,PD2     ;настраиваем линию 2 порта D на ввод
      cbi   DDRD,DDD2     ;отключаем внутреннее сопротивление
      ldi   temp,1 << ISC01 ;выбираем условием прерывания INT0 
      out   MCUCR,temp    ;изменение на входе с лог. 1 на лог. 0
      ldi   temp,1 << INT0  ;разрешаем прерывание INT0 
      out   GICR,temp
      sei                 ;глобальное разрешение прерываний
     .

service_INT0:
      sbis  PIND,PD2      ;ожидаем, пока не будет отпущена
      rjmp  service_INT0  ;кнопка SB1
wait: sbic  PIND,PD2      ;ожидаем, пока не будет нажата
	  rjmp  wait          ;кнопка SB1
	  reti

Вести отладку с помощью прерывания INT0, конечно, наиболее удобно. Во всех моделях AVR оно имеет наивысший приоритет и будет обслуживаться в первую очередь. Но в большинстве случаев с тем же успехом можно использовать также INT1, INT2, INT3,…, PCINT1, PCINT2 и т.д. На схеме из рис.1б, например, показано, как в тех же целях применить встроенный компаратор. Кнопка SB1 подключена к инвертирующему входу AIN1. Резистор R1 создает на этом выводе смещение равное напряжению питания VCC. К неинвертирующему входу AIN0 приложено напряжение от внутреннего ИОН (для разных моделей 1.1…1.4 В). Нормально на выходе компаратора (читается через бит ACO в управляющем регистре ACSR) присутствует низкий логический уровень, поскольку UAIN0 < UAIN1. Как только происходит нажатие SB1, AIN1 соединяется с землей и на выходе установится высокий уровень напряжения. В этот момент будет установлен флаг ACI в ACSR, что приведет к возникновению прерывания (условием прерывания предварительно задается изменение состояние выхода с лог.0 на лог.1). В обработчике service_ANA_COMP производятся те же по смыслу действия, что и при обработке прерывания INT0.

      .def temp = R16
  
      .org 0
      rjmp  main             ;вектор сброса
      .
      .org 0x10
      rjmp  service_ANA_COMP ;вектор прерывания от компаратора     
      .

main:
      cbi   PORTD,PD7  ;настраиваем линию 7 порта D на ввод
      cbi   DDRD,DDD7  ;отключаем внутреннее сопротивление
      ldi   temp,(1<< ACBG)|(1<< ACIE)|(1<< ACIS1)|(1<< ACIS0)
      out   ACSR,temp  ;подключаем к AIN0 внутренний ИОН и ;разрешаем прерывания при изменении состояния выхода с 0 на 1
      sei              ;глобальное разрешение прерываний
      .

service_ANA_COMP:
      sbic  ACSR,ACO         ;ожидаем, пока не будет отпущена
      rjmp  service_ANA_COMP ;кнопка SB1
wait: sbis  ACSR,ACO         ;ожидаем, пока не будет нажата
	  rjmp  wait             ;кнопка SB1
	  reti

Перейти к следующей части:

Теги:

Котов Игорь Юрьевич Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Сатфайндер Программатор Pickit3
вверх