Карта адресуемых бит в памяти данных. Программирование процедур управления с помощью CodeWizardAVR. брос и исходная идентификация микроконтроллера, страница 3

Откройте окно Pick Device библиотеки компонентов. Последовательно вводите в окно Keywords имена компонентов и выбирайте их из библиотеки: ATMEGA16 для микроконтроллера, BUTTON для кнопки, LED-RED для светодиода, RES для резистора.

Разместите все компоненты в окне редактора согласно схеме на рис. 1. Сделайте необходимые соединения, отредактируйте величины параметров и надписи.

После завершения разводки необходимо сохранить проект. Для этого выберите пункт меню File > Save Design As…  В диалоговом окне раскройте папку e:\....\AVR\Led_sb    и сохраните в ней проект под именем  led_sb.dsn.

Далее необходимо установить параметры микроконтроллера. С этой целью подведите курсор мыши на изображение микроконтроллера и дважды щелкните левой кнопкой. Откроется окно редактирования свойств компонентов Edit Component. Прежде всего нужно записать hex-код программы в память МК, или, как часто говорят, запрограммировать МК. С этой целью щелкните по кнопке в правой части строки ProgramFile. Откроется окно SelectFileName с файлами из папки с проектами  Led_sb. Раскройте папку с именем Exe (исполняемые).  Выберите файл с именем led_sb.hex  и нажмите кнопку «Открыть».

В строке ProcessorClockFrequency (тактовая частота процессора) выставьте 8 МГц. Остальные установки изменять нет необходимости.

Щелкните по кнопке ОК для подтверждения выбора параметров. Затем щелкните по пустому месту схемы для снятия выделения с МК.

3.1.8. Теперь можно проверить работу МКУ. С этой целью с помощью кнопки  Play – ПУСК запустите программу работы МК. После запуска светодиод не горит. Нажмите кнопку SB1. Светодиод должен загореться. Теперь отпустите кнопку. Светодиод должен погаснуть. Если все выполняется, как надо, то все в порядке.

3.2. Разработка генератора меандра на микроконтроллере

Необходимо разработать с помощью CodeWizardAVR программу, которая будет формировать на выводе PD1 порта D микроконтроллера ATmega16 периодическую последовательность импульсов – меандр частотой 1 кГц. Этот сигнал можно использовать для звукового генератора, тактирования каких-либо устройств и т.д.

Так частота сигнала 1 кГц, то, следовательно, период – 1 мс (100 мкс), а полупериод – 0,5 мс (500 мкс). Таким образом, каждые 500 мкс  логический уровень сигнала на выводе PD1 должен меняться на противоположный: если была «1» - должен стать «0», если был «0» - должна стать «1». Для формирования временных промежутков в 500 мкс используем прерывания по переполнению таймера/счетчика 0 (T/C0).

Таким образом, требуется так сконфигурировать T/С0, чтобы каждые 500 мкс он переполнялся и прерывал выполнение основной программы, а в программе обработки прерывания необходимо изменить на противоположный уровень сигнала на выводе PD1 порта D.

В таймере T/C0 имеется предварительный делитель (прескалер), коэффициент деления которого KPS можно программно установить  равным 8, 64, 256 и 1024.

Для системной тактовой частоты МК, равной 8 МГц, выберем KPS = 64. В этом случае тактовая частота на входе Т/С0 будет:

F0 = 8 МГц / 64 = 125 кГц

Период тактовых импульсов для Т/С0 будет:

Т0 = 1 / F0 = 8 мкс

Максимальное время, которое может подсчитать 8-разрядный Т/С0 до переполнения будет:

tmax = 256 × 8 мкс = 2048 мкс

Видно, что tmax  больше требуемых 500 мкс. Поэтому требуется определить начальное значение, которое необходимо загрузить в Т/С0, чтобы его переполнение, а следовательно, и запрос прерывания наступал после отсчета 500 мкс.

Обозначим ТПР = 500 мкс – период прерывания от T/C0. Тогда получается, что

ТПР = Т0 × (Nmax – N0)

Следовательно,

N0 = Nmax – (ТПР / Т0), где      Т0 – период тактовых импульсов на входе Т/С0;

Nmax – максимальное значение Т/С0 (Nmax = 256);

N0 – начальное значение Т/С0, которое требуется определить.

Подставив все числовые значения в формулу, получим:

N0 = Nmax – (ТПР / Т0 ) = 256 – (500·10-6 / 8·10-6) = 256 – 62,5 = 193,5