Ремонт принтеров, сканнеров, факсов и остальной офисной техники


назад Оглавление вперед




[6]

Make All". По сравнению с make-файлом, созданным по рис.4, добавилось число выводимых сообщений. В частности, появилась полезная информация о проценте занимаемого прошивкой места в FLASH-ПЗУ МК (рис.6).

После компиляции открыть программу PonyProg, ввести в нее вновь созданный файл "avr41.hex", подключить кабель ISP-адаптера к пробному устройству, подать питание 5 В. Далее запрограммировать фьюзы SUT0, CKSEL3, CKSEL2, CKSEL1 согласно строке 3 листинга 2, после чего нажать одновременно клавиши <Ctrl> и <P>. Через 30 с дождаться сообщения "Programming Successful" и проверить кнопками SB1, SB2 пробного устройства правильность свечения индикаторов HL1,

"Маячок-мигалка"

Второй эксперимент будет заключаться в проверке динамических возможностей МК. Стандартная задача - заставить попеременно мигать два светодиода, превратив их в своеобразные "маячки". Для удобства предлагается использовать ту же самую схему, что на рис.3, но без кнопок SB1, SB2 и резисторов R3, R4.

Управляющая программа приведена в листинге 3. Ее построение сходно с листингом 2.

Строки 13, 14 - стандартный прием установки лог."0" и лог."1" на выходах линий портов. Это надо запомнить.

Строка 15 - организация задержки времени. При запуске программы на выполнение значение переменной "pause" устанавливается в 0 (строка 7). При каждом проходе строки 15 к переменной "pause" добавляется единица (два знака "+"). Через 15000 проходов (итераций) число, накопленное в "pause", сравняется с 15000, и управление будет передано на строку 16. Каждая итерация занимает какое-то время процессора, в результате чего получается определенная задержка во времени. Изменить ее можно в любую сторону, например, увеличив число 15000 до 65535 или уменьшив до 1.

Строка 18 - второй вариант задержки времени. Свое начальное значение (15000) переменная "pause" получает при выходе из строки 15. Каждый проход строки 18 уменьшает ее величину на единицу (два знака "-"). Через 15000 итераций значение "pause" обнулится, и управление будет передано на строку 19. Получается своеобразная лестница: в строке 15 идем вверх, в строке 18 - вниз.

Виртуальный осциллограф

После компиляции программы "avr42.c" и получения файла "avr42.hex" производят программирование МК и опробование в работе. Казалось бы, мигание светодиодов должно быть симметричным (одинаковое число итераций в строках 15, 18 листинга 3), однако на глаз заметно, что HL2 светится дольше, чем HL1.

Для разгадки феномена будет привлечен "компьютерный судья".

Существует проблема, общая для всех без исключения Си-компиляторов. Речь идет о формировании точных отрезков времени. Как, например, узнать, сколько миллисекунд уйдет на выполнение операторов в строках 15, 18 листинга 3? Иными словами, какой период свечения индикаторов HL1, HL2 и какова скважность импульсов на линиях PC3, PD7 микросхемы DD1 в "маячке-мигалке"?

Визуальный или секундомерный контроль времени здесь не проходит, так как светодиоды мигают примерно 3-4 раза в секунду. Проблема решается при наличии цифрового запоминающего осциллографа, в котором измерения длительностей проводят с высокой точностью.

С другой стороны, а чем компьютер хуже? Он всегда под рукой, да и математические уравнения решает лучше осциллографа. Если "объяснить" компьютеру, как устроен МК ATmega8, заложить в него точные значения времени выполнения контроллерных инструкций, то можно смоделировать работу процессорной системы и рассчитать абсолютно все отрезки времени без погрешностей.

Такие программы существуют и одна из них - это Visual Micro Lab (VMLab) фирмы AMTools. На сайте http: www.amctools.com имеется информация о двух версиях программы - бесплатной демонстрационной (http: www.amtools.net/vmlab310.zip, 3,8 Мб) и платной полной (75 евро). Ограничения в демо-версии следующие: размер исполняемого кода не более 4 Кб, объем используемой в МК памяти не более 50%, число одновременно открываемых файлов проекта не более 4, моделирование не более 50 тысяч инструкций.

На счастье, простые любительские конструкции, использующих ATmega8, проходят ниже планки ограничений. Для сравнения, 4 Кб - это в два раза больше, чем у AT89C2051. Следовательно, демо-вер-сия VMLab может служить хорошим подспорьем разработчику, заменяя во многих случаях паяльник.

Важная деталь. Связка WinAVR-VMLab обладает уникальными возможностями по сравнению с другими Си-компиляторами. Только для WinAVR в VMLab можно на ходу перекомпилировать Си-программу и сразу же увидеть результат коррекции на экране виртуального ос-

Листинг 3

Маячок-мигалка =AVR, ступень 4=. Журнал РА, №4-2005 =1 Make: Name=avr42, MCU=atmega8, Level=2, Debug=VMLab =2 Фыозы: SUT0=CKSEL3=CKSEL2=CKSELl="ranO4KM" (1 МГц) =3 #include <avr/io.h> Библиотека ввода-вывода =4

========ОСНОВНАЯ ПРОГРАММА========== =5

int main(void) Начало основной программы =6

{ unsigned int pause=0; Переменная для паузы =7

PORTB = PORTC = PORTD = OxFF; Входы с резисторами =9 DDRC = BV(PC3) ; РСЗ выход е лог.1 =10

DDRD = BV(PD7); PD7 выход с лог.1 =11

while (1) Бесконечный цикл между строками 13-19

{ PORTC = BV(EC3); PORTD S= ~ BV(PD7) ; while (++pause < 15000), PORTC S= ~ BV(PC3) ; PORTD = BV(PD7) ; while (-pause > 0);

РСЗ выход с лог.1 PD7 выход с лог.0 Пауза 15000 итераций РСЗ выход с лог.0 PD7 выход с лог.1 ПауЗа 15000 итераций

Окончание функции "while" в строке 12 WinAVR-20050214, длина программы 148 байтов

=12 =13 =14 =15 =16 =17 =18 =19 =20

циллографа. Еще одна приятная мелочь - возможность "шагать" прямо по тексту Си-программы и делать остановки, наблюдая за диаграммами.

Эмулятор, симулятор, имитатор

Как правильно называть VMLab - эмулятор, имитатор или симулятор МК? Различия между этими понятиями следующие.

Слово "эмуляция" (emulation) относится к однородным системам, составленным из одного и того же материала [1]. Например, компьютер, состоящий из металла и кремния, не может эмулировать человека, состоящего из белковых органических соединений, и наоборот. При эмуляции одна система выполняет функцию другой, стараясь делать это в реальном времени. Эмуляции на IBM PC подвергаются: игровые автоматы, игровые приставки, домашние компьютеры, китайские "Те-трисы" и даже программируемые карманные калькуляторы.

Процесс имитации (imitation) неразрывно связан с подражанием [1]. Человек может петь как соловей, а компьютер - "разговаривать" как человек. Программы-имитаторы - это настольные игры (имитация логического мышления), программы синтеза голосовой информации (имитация голоса), машинные собеседники (имитация искусственного интеллекта).

Технический термин "симуляция" (simulation) относится к случаю, когда одна система моделирует поведение другой, имея на входах одни и те же данные, а на выходах - идентичные или подобные [1]. Это эквивалентно "черному ящику" с неизвестной внутренней структурой, причем его начинка может быть разнородной, а не одинаковой, как при эмуляции. Известны компьютерные симуляторы самолетов, вертолетов, велосипедов, парусников, автомобилей и т.д.

Как видно, к VMLab из трех определений больше подходит название "симулятор", что подтверждает фирменный термин "software simulation with analog simulation" из его файла помощи. Программные си-муляторы, в отличие от внутрисхемных эмуляторов, работают гораздо медленнее. Скорость расчетов у VMLab низкая, требуется как минимум IBM PC с процессором 800...1000 МГц, чтобы долго не ждать до прорисовки очередной линии.

Технология работы с VMLab

Краеугольным камнем в философии VMLab служит понятие "проект". Это текстовый файл с расширением .prj, в котором на специальном языке описывается словами электрическая схема подключения внешних цепей к МК. Примеры проектов расположены в папках C:\Vmlab\AVR demo\ и C:\Vmlab\WinAVRdemo\, которые появляются в процессе инсталляции VMLab на диск С. Судя по ним, подключать к МК можно: резисторы, конденсаторы, транзисторы, светодиоды, ЖК-индикаторы, кнопки, синусоидальные генераторы и даже терминал RS-232 с изменяемой скоростью передачи данных.

Этапы работ для получения файла-проекта "маячка-мигалки".

1.Запустить на выполнение программу VMLab: "Пуск - Программы - Vmlab". Создать в ней новый проект "Project-New project", заполнить в пошаговом режиме (Step1-4) графы, как показано на рис.7. В качестве пути хранения проекта указать ту папку, где находятся файлы "avr42.c", "makefile", "avr42.hex" и т.д. Нажать OK, после чего на экране монитора появятся три окна. В окне "Messages" наблюдать сообщение "PRJ file is OK!".

2.Развернуть окно с проектом avr42.prj и произвести коррекцию текста согласно листингу 4(англоязычные комментарии сокращены и русифицированы). В самом конце текста надо не забыть доба-


вить одну лишнюю пустую строку. Проект составлен в предположении, что на рис.3 интерес представляют только функционально значимые элементы: R5, R6, HL1, HL2, DD1. Резисторы R1, R2 и конденсатор С1 в логической работе не участвуют, а элементы SB1, SB2, R3, R4 для "маячка" не нужны.

3.Построить проект, для чего нажать клавишу F9 или иконку "Build". В окне "Messages" наблюдать сообщение "Success! All ready to run".

4.Запустить проект на выполнение, для чего нажать клавишу F5 или иконку "Go/Continue". В окне "Messages" наблюдать сообщение "Starting hardware-software co-simulation..."

5.Открыть экран виртуального осциллографа "View-Scope". Установить в его настройках развертку по горизонтали 20 мс/дел, развертку по вертикали 2 В/дел. Подождать, пока будет построен график изменения напряжений на линиях PC3, PD7 (рис.8). Как и ожидалось, единичному уровню PC3 соответствует нулевой уровень PD7 и наоборот. Особенность VMLab состоит в том, что рисуются не только логические уровни на линиях МК, но и вычисляются их абсолютные аналоговые величины.

6.Для временной остановки изображения нажать клавиши Shift+F5 или иконку "Pause program". Далее в левой стороне экрана поставить точку в окошке "Cursor 1", затем "мышью" на осциллограмме провести вертикальную линию первого замера. Поставить точку в окошке "Cursor 2" и провести линию второго замера. Цифровые данные будут высвечиваться на поле осциллограммы. В частности, на рис.8 отсчеты равны 1322,4 и 1427,2 мс, следовательно, время между переходами напряжений "0"-"1" (свечение индикатора HL2) составляет t2=104,8 мс. Сместив линию курсора к левому фронту импульса, аналогичным образом определяют время свечения индикатора HL1

t1=60 мс.

Обсуждение результатов

Почему t2 почти в половину больше t1? В листинге 3 за время t2 отвечает строка 15, за время t1 - строка 18. И в том, и в другом случае задержка производится подсчетом 15000 инструкций. Однако в строке 15 к ним каждый раз добавляется сравнение с числом 15000 функции "while". Эта операция по времени длиннее, чем сравнение с нулем в строке 18 (такая особенность у всех МК), следовательно, и общая задержка будет больше.

Модельные эксперименты

Виртуальный осциллограф помог определить точные значения времени, не прибегая к услугам измерительных приборов. Для проведе-

Листинг4

***************************************************

PROJECT: Маячок-мигалка. =Микроконтроллеры AVR. Ступень 4=

; AUTHOR: .

Журнал PA №4-2005, Рюмик CM.

; ************************************************************

.MICRO "ATmega8"

Микроконтроллер (МК) ATmega8

.TOOLCHAIN

GCC"

Си-компилятор AVR-GCC

.GCCPATH

C: \WinAVR"

Путь к папке с пакетом WinAVR

.GCCMAKE

makefile"

Использовать "родной" make-файл

. TARGET

avr42.hex"

Указатель на НЕХ-файл

.SOURCE

avr42,c"

Указатель на Си-программу

Начало блока трассировки связей МК

.POWER VDD=5 VSS=0

Цепи питания VDD=5B, VSS=o6upOT провод

.CLOCK lmeg

1 МГц, тактовая частота МК

.STORE 250m

250 мс, длина развертки по горизонтали

Описание линий связи на электрической схеме

Dl VDD Dl NODE

R5 D1JTODE РСЗ 0.36К

D2 VDD D2 NODE

R6 D2JJODE PD7 0.36К

.PLOT v(PC3) v(PD7)

HL1 подключается между +5В и R5 R5=360 Ом подключается между HL1 и РСЗ HL2 подключается между +5В и R6 R6=360 Ом подключается между HL2 и PD7 Вывод на экран напряжений РСЗ, PD7

ния модельных экспериментов можно попробовать изменить период следования импульсов свечения. Для этого, не выходя из VMLab, развернуть окно "Code. Target file: avr42.hex", выбрать внизу закладку "avr42.c" и заменить в строке 15 число 15000 на 1000 (на вопрос "Restart simulation?" нажать "Да"). Затем клавишами F9, F5 запустить построение графика, открыть окно осциллографа, уменьшить развертку по горизонтали и наблюдать рисунок с измененными параметрами. Иногда для правильного отображения времени может потребоваться полное перестроение проекта: "Project-Re-build all".

Там же, в закладке "avr42.c", можно установить точки останова, нажав одну или несколько кнопок с левой стороны листинга. По мере прохождения импульсов, задействованные строки в Си-программе окрашиваются желтым цветом. При останове строка становится серой. В пошаговой отладке задействуются три иконки с названием "Step" в верхней части экрана. После завершения работы над проектом, его следует закрыть "Project-Close project", изменения автоматически будут сохранены в Си-программе и HEX-файле.

Практическое задание. Собрать на макетной плате пробное устройство. Проверить его в работе. Изменить прошивку МК под "маячок-мигалку". Скачать демо-версию программы VMLab и потренироваться в наблюдении осциллограмм. Самостоятельно составить проект VMLab для пробного устройства (листинг 2) и промодулировать его работу на виртуальном осциллографе.

Литература

1. The Blackwell Guide to Philosophy of Computing and Information. Edited by Luciano Floridi, August 2003, 392 pages, http: www.blackwellpub-lishing.com/pci/downloads/Glossary.pdf.


Микроконтроллеры AVR. Ступень 5

С.М. Рюмик, г. Чернигов

Чтобы устройство, собранное на микроконтроллере (МК), было интересным, оно должно содержать "изюминку". Разумеется, трудно ожидать от простых учебных конструкций феноменальных возможностей, уникальных параметров и досконального сервиса, но все же...

Разработка приборов, содержащих МК, состоит из нескольких эта-

•Логический уровень: анализ поставленной задачи, уяснение алгоритма работы, проведение математических расчетов.

•Физический уровень: определение числа входных и выходных сигналов, выбор МК, интерфейса сопряжения, составление электрической схемы устройства.

•Программный уровень: разработка алгоритма функционирования МК, составление листинга программы, компиляция, компьютерное моделирование процессов.

•Практический уровень: монтаж и сборка устройства, программирование МК, отладка, опробование в реальной работе.

Не все составляющие в перечисленных этапах обязательны для выполнения. Допускается их коррекция и повторное проведение. В зависимости от сложности поставленной задачи состав уровней может меняться (сокращаться, уточняться, дополняться). Разработка - процесс творческий. И вдвойне приятно, если удается найти нестандартные схемные и программные решения или неожиданные сферы применения.

В частности, предлагается разработать несколько простых микроконтроллерных приборов для экспериментов в такой "малотехнической" области науки, как психология. Заодно можно будет попрактиковаться в программировании линий портов МК, в формировании задержек сигналов, в устранении "дребезга" контактов кнопок, в организации светодиодных шкал.

"Иллюзия октавы"

По определению словаря, октава - это музыкальный интервал, отношение частот между нотами которого равно 2. Древние римляне удивились бы такому противоречию, ведь в переводе с латыни слово "октава" означает "восьмая". Разгадка банальная: в диатоническом музыкальном ряду, который был изобретен позже, октава является восьмой по счету ступенью.

Эффект под названием "иллюзия октавы" относится скорее к области практической психологии, чем к музыке. Впервые он был исследован в 1974 г. Дианой Дойч (Diana Deutsch) - профессором психологии Университета Калифорнии, США (http: philomel.com/pdf/Nature-1974 251 307-309.pdf, 67 Кб). Суть эксперимента. Испытуемому надевают стереонаушники и предлагают прослушать звуковой сигнал, в котором в противофазе смешаны ноты основной частоты 400 Гц и на октаву выше 800 Гц (рис.1,а). Ноты звучат с одинаковой длительностью и громкостью, каждое ухо получает 50% высоких и 50% низких тонов.

Казалось бы, слышимость в обоих ушах должна быть примерно одинаковой. Однако суммарную звуковую картину редко кто слышит правильно, а вместо этого возникает множество иллюзий. Например, одним людям кажется, что появляются биения сигналов, другим - что звуки периодически перемещаются из одного уха в другое, третьим -что высокий тон слышится с паузами из одного уха, а низкий - из другого и т.д. Любопытно, что картина практически не меняется, если переставить наушники местами или изменить частоту основного тона.

По статистике большинство людей слышат периодический высокий звук из правого уха (R) и низкий - из левого (L). На рис. 1,6 показана нотная запись этого случая. На ней специально выделены ноты с прямоугольником в центре, которые соответствуют диаграмме R на рис.1,а. Напрашивается догадка, что "иллюзия октавы" связана с особенностями работы мозговых полушарий, которые различаются у левшей и правшей.

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

Исходные данные для разработки: частота основного тона 400 Гц, удвоенного - 800 Гц, длительность звучания одной ноты 250 мс (одна четвертая при темпе 240 ударов в минуту), нотные диаграммы в левом и правом каналах - согласно рис.1,а.

Электрическая схема прибора "Иллюзия октавы" (рис.2) содержит управляющий МК DD1, который работает от внутреннего RC-генератора частотой 1 МГц. Кварцевая стабилизация не требуется, поскольку слуховой аппарат человека чувствителен к изменению интервалов, а не к абсолютной высоте звука. На линиях портов PB0, PB1 формируются сигналы для правого R и левого L наушников, подключенных к разъему X1.

Как измерить Человека? А. Сент-Экзюпери

Конденсаторы С2-С5 совместно с резисторами R1*, R2* образуют фильтры, которые сглаживают форму прямоугольных сигналов, устраняют металлические хрипы и призвуки. Для соблюдения симметрии номиналы элементов в каждом канале должны быть идентичными. Кроме того, резисторы R1*, R2* снижают громкость звука до комфортных 40...50 дБ (уровень разговора в комнате). Уменьшать сопротивления R1, R2 не рекомендуется, чтобы наушники не превратились для слушателя в источник рева авиационного двигателя.

Кнопкой SB1 дискретно регулируют длительность звучания одной ноты от 175 до 475 мс (5,7.2,1 Гц) с пятью градациями. В исходных данных такого требования не было, да и в экспериментах Дианы Дойч -тоже. Но практика показала, что для лучшего осмысления результатов желательно прослушивать ноты при разных темпах.

Си-программа прибора "Иллюзия октавы" приведена в листинге 1.

Строки 2, 3 содержат сведения, необходимые для создания make-файла (MFile) и программирования фьюзов (PonyProg).

Строки 5, 6. Чтобы использовать в программе стандартные системные функции задержек во времени, надо подключить библиотеку "avr/delay.h" и указать тактовую частоту МК в герцах. Буквы "UL" в константе F CPU расшифровываются как "Unsigned Long", т.е. "длинное целое число" в пределах 0.4,2 млрд.

Строка 13. Типичный прием перевода в режим выхода сразу двух линий PB0 и PB1.

Строки 15-25. Формирование временной диаграммы нечетного такта (длительность одной ноты) согласно рис.3. Библиотечная функция " delay loop 1(X)", где "X"=TIK=208, производит задержку времени "T1" по формуле T1[мкс]=3*F CPU[МГц]*X=3*1*208=624 мкс, что близко к требуемому для 800 Гц полупериоду 625 мкс. Меняя константу TIK в строке 7 в пределах 1...256, можно увеличить или уменьшить частоту звучания ноты.

Строки26-28. Если нажата кнопка SB1, то происходит циклическое изменение переменной "temp" согласно ряду: 70, 100, 130, 160, 190. От нее зависит длительность одного такта (см. строки 15, 30). Каждое срабатывание кнопки сопровождается перерывом в звучании на 1 с, тем самым слушателю понятно, что происходит переход к следующему темпу. Библиотечная функция " delay loop 2(Y)" производит задержку времени T2 по формуле T2[мс]= (F CPU[МГц]*Y)/250=

=(1*62500)/250=250 мс. Меняя значение "Y" в пределах 1...65536 можно увеличить или уменьшить паузу после нажатия кнопки.



[стр.Начало] [стр.1] [стр.2] [стр.3] [стр.4] [стр.5] [стр.6] [стр.7] [стр.8] [стр.9] [стр.10] [стр.11]