МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН

Некоммерческое АО

«Алматинский университет энергетики и связи» 

 

Б.С. Байкенов

МИКРОКОНТРОЛЛЕРЫ. СИМУЛЯТОРЫ

Учебное пособие

 

 

Алматы 2013

УДК 681.3(075.8)

ББК 32.973.202я73

Б18 Микроконтроллеры. Симуляторы;

Учебное пособие / Байкенов Б.С. - Алматы: АУЭС, 2013. – 80 с.

 

ISBN 978-601-7307-24-0

 

В учебном пособии рассмотрены вопросы компьютерного моделирования электрических схем на основе микроконтроллеров. Основное внимание уделено программированию микроконтроллеров серии PIC и AVR в ассемблере и С++.

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

Приведены примеры программирования основных модулей микроконтроллеров при приеме, обработке и отображении информации.

Описаны основные этапы САПР в программе Proteus: от моделирования электрической схемы, программирования микроконтроллера, отладки программы, создания прошивочного файла с помощью различных типов компиляторов и до производства печатной платы.

Учебное пособие будет полезно для студентов всех форм обучения специальностей «5В071600 - Приборостроение» и «5В071900 - Радиотехника, электроника и телекоммуникации» при проектировании информационно-управляющих систем, электронных устройств и приборов.

Ил. 56, табл. 3, библиогр. – 20 назв.

 

ББК 32.973.202я73 

РЕЦЕНЗЕНТЫ: КазНТУ, канд.техн. наук, доцент, А.К. Шайхин

                            АУЭС, канд. техн. наук, профессор А.А. Копесбаева

                             

Печатается по плану издания Министерства образования и науки Республики Казахстан на 2012 г.  

 

ISBN 978-601-7307-24-0

 

© НАО «Алматинский университет энергетики и связи», 2013 г.

 

Введение 

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

Моделирование можно рассматривать как замещение исследуемого объекта (оригинала) его условным образом, описанием или другим объектом, именуе­мым моделью и обеспечивающим адекватное с оригиналом поведение в рам­ках некоторых допущений и приемлемых погрешностей. Моделирование обычно выполняется с целью познания свойств оригинала путем исследова­ния его модели, а не самого объекта. Разумеется, моделирование оправдано в том случае, когда оно проще создания самого оригинала или когда последний по каким-то причинам лучше вообще не создавать.

Реальная польза от моделирования может быть получена при выполнении двух главных условий:

- модель должна быть адекватной оригиналу в том смысле, что должна с достаточной точностью отображать интересующие исследователя характери­стики оригинала;

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

Следует отметить, что в большинстве случаев моделирование вовсе не за­меняет реальный объект и не отменяет необходимости в его разработке и на­турном испытании. Оно просто значительно уменьшает объем работ по про­ектированию и исследованию объектов. В тех же случаях, когда это не так, стоимость моделирования может оказаться вполне сравнимой со стоимостью разработок и натурных испытаний изделий.

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

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

Благодаря возможностям современной вычислительной техники переходить к изготовлению опытного образца стали только после создания и испытания на соответствие предъявляемым требованиям компьютерной модели.

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

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

При разработке интегрированных (встроенных) систем управления наибольшее распространение получили AVR-микроконтроллеры фирмы Atmel и PIC компании Microchip. Семейство  АVR  отличается  простотой схемотехники и программирования устройства, преемственностью структуры для различных типов контроллеров.

РIС-микроконтроллеры фирмы Microchip идеально подходят для проектирования несложных уст­ройств, особенно предназначенных для тиражирования.

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

PIC (AVR) Simulator IDE – это программа, позволяющая разработчику непосредственно в отлаживаемом коде, работать с виртуальной периферией. Специальные про­граммные модули имитируют работу различных реаль­ных электронных устройств: символь­ного и графического ЖК-экрана, 7-сегментных индика­торов, терминала связи, 4-канального генератора, осциллографа и другого оборудования. Практически весь про­цесс отладки и написания программы можно выполнить непосредственно в Simulator IDE.

Основным недостатком Simulator IDE является условность описания основных компонентов схемы и их соединений, но с другой стороны эта простота и необходима при первом знакомстве с микроконтроллерами.

В третьей главе кратко описан симулятор Proteus VSM, созданный фирмой Labcenter Electronics и являющийся на сегодняшний день самым мощным, современным симулятором или  средой сквозного проектирования.

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

Четвертая глава посвящена описанию компиляторов MPLAB и WinAVR, используемых для получения кода «прошивки» PIC и AVR микроконтроллеров, т.е. hex-файлов.

1 PIC Simulator IDE

 

PIC Simulator IDE – это отладчик программ, написанных для микроконтроллеров PIC серии 12 и 16 компании Microchip.

В разрабатываемую программу можно включить периферийные устройства с соответствующими измерительными приборами, а процесс отладки и написания программы выполнить непосредственно в PIC Simulator IDE.

Про­грамма позволяет пользователю создавать практически любые системы автоматического управления, предоставляя разработчику широкий выбор виртуальной периферии. Виртуальная периферия - это специальные про­граммные модули PIC Simulator IDE,  имитирующие работу различных реаль­ных электронных устройств: символь­ного и графического 128х64 LCD, 7-сегментных индика­торов, терминала связи, 8-канального 10- разрядного АЦП, осциллографа, шагового двигателя и другого оборудования. Практически весь про­цесс отладки и написания программы можно выполнить непосредственно в PIC Simulator IDE, т.е. нет необходимо­сти, внеся в программу какие-либо из­менения, программировать и под­ключать микроконтроллер в отладочную плату с присоединенными внешними устройства­ми. PIC Simulator IDE - это мощное приложение, которое предназначено для разработчиков в графической среде Windows с интегрированным BASIC компилятором, ассемблером, дизассемблером и отладчиком. В PIC Simulator IDE имеется большое количество всевоз­можных настроек и режимов работы, что позволяет пользователю само­стоятельно выбрать оптимальный ре­жим отладки программы.

В главном окне программы отображается тип PIC-микроконтроллера c внутренней мнемоникой, последней выполненной инструкцией, мнемоника следующей инструкции, такт и счетчик в режиме реального времени (см. рисунок 1.1).

В верхней части находятся различные меню, через которые осуществляется доступ к различным на­стройкам и дополнительным модулям программы.

File - содержит команды очистки, загрузки и сохранения памяти программ.

Simulation - включает команды старта и выключения моделирования, а также включения пошагового режима отладки программы (Step).

Rate - меню установки скорости (step by step - тактовая скорость, slow - низкая, normal, fast - быстрая, extremely fast - очень быстрая, ultimate - сверхбыстрая).

Tools - меню содержит следующие основные команды:

- Basic Compiler - команда вызывает модуль для написания, отладки и компилирования программы  из алгоритмического языка Basic в ассемблер;

- Microcontroller View - команда вызывает модуль микросхемы с интерактивными выводами для работы в режимах АЦП, внешних прерываний, таймеров, захвата, сравнения и ШИМ;

- Alternative SFR Viewer - команда вызывает модуль просмотра содержимого специальных регистров;

- Program Memory Editor - команда открывает доступ к редактору FLASH памяти программ и позволяет вручную ввести код операции инструкции;

- EEPROM Memory Editor - команда открывает доступ к редактору EEPROM памяти данных;

- Hardware Stack Viewer (аппаратный стек) - команда откроет аппаратный стек буфера просмотра;

- Assembler - команда открывает доступ к редактору ассемблер, получению и загрузки hex-файла во FLASH память программ;

- Disassembler - команда восстанавливает из hex-файла программу с расширением asm;

- Breakpoints Manager - команда вызывает модуль отладки программы;

- Special Breakpoints - команда вызывает окно для установки точек разрыва программы при определенном состоянии специальных регистров;

- Interactive Assembler Editor - команда вызова редактора команд ассемблера;

- 8xLED Board - модуль панели с 8 светодиодами;

- Keypad Matrix - модуль клавишной панели 4х4;

- LCD Module - модуль символьного ЖКИ;

- Graphical 128x64 LCD Module - модуль графического ЖКИ;

- Stepper Motor Phase Simulation - модуль шагового двигателя;

- I2C EEPROM - модуль микросхемы 24C256 внешней EEPROM памяти;

- Hardware UART Simulation Interface - модуль приемопередатчика UART;

- PCs Serial Port Terminal - модуль последовательного порта SPI;

- Software UART Simulation Interface - модуль отладки протокола UART;

- Oscilloscope - модуль 4-х канального осциллографа;

- Signal Generator - модуль генератора прямоугольных импульсов;

- 7-Segment LED Displays Panel - модуль панели 7-сегментных индикаторов;

- External Modules - внешние модули клиент/сервер;

- Watch Variables - модуль набора наблюдаемых переменных.

Options - меню включает в себя следующие опции:

- Select Microcontroller - окно выбора типа микроконтроллера (PIC12F629-PIC16F946);

- Change Clock Frequency - окно выбора частоты микроконтроллера;

- Configuration Bits - окно кодов конфигурации микроконтроллера;

- Save Positions - опция сохранения расположения модулей;

- Save Always On Top - опция сохранения результата вверху;

- Auto Start Options - опция автоматического старта моделирования;

- Reset Simulation Statistics - опция сброса результатов моделирования;

- Change EEPROM Write Time - окно изменения времени записи в EEPROM-данных;

- Change A/D Conversion Time - окно изменения времени аналого-цифрового преобразования;

- Change UART Transmit/Receive Time - окно изменения длительности импульсов приемо-передатчика UART;

- Compact Microcontroller View - опция сжатия изображения микросхемы;

- Infinite Loop Stops Simulation - опция бесконечного цикла остановки;

- Basic Program Tracking - опция режима отладки программы на языке Basic;

Show confirmation boxes - опция показа подтверждения;

- Preserve Input States on Simulation Start - опция сохранения начальных входных величин;

- Use Voltage for Analog Inputs - опция использования аналоговых входных величин;

- Continuous Analog Input Slider Update - опция непрерывного аналогового входа с помощью ползунка потенциометра;

- Change Ultimate Rate Refresh Interval - опция изменения максимального интервала восстановления;

- Editor Setup - окно редактора настройки цветовой гаммы;

- Change Color Theme - окно выбора цвета кадра.

Help - меню для справок.

 

 

Рисунок 1.1 - Вид основного окна

В строке Program Location указан путь к выбранной программе.

Во второй строке Microcontroller - тип микроконтролле­ра и Clock Frequency - его частота.

В третьей Last Instruction и Next Instruction - последняя и выполняемая команда.

В четвертой строке слева Program Counter and W Register - счетчик команд и аккумулятор, справа Instruction Counter -  счетчик выполненных команд; Clock Cycle Counter - счетчик количества тактов синхронизации выполненных команд; Real Time Duration - текущее время выполнения программы.

В пятой строке слева Special Function Registers (SFRs) - окно содержимого регистров специального назначения, справа General Purpose Registers (GPRs) - окно содержимого регистров общего назначения.

 

1.1 Работа с программой PIC Simulator IDE

 

Порядок работы с программой-симулятором следующий:

- запуск программы PIC Simulator IDE;

- выбор типа микроконтроллера.

Особенность PIC-микроконтроллеров: в зависимости от типа микроконтроллера команды и синтаксис ассемблера могут быть различными.

В меню Options левой кнопкой мыши нажать  на Select Microcontroller и в появившемся окне Select Microcontroller выделить требуемый контроллер, затем нажать на кнопку Select.

 

 

Рисунок 1.2 - Выбор микроконтроллера PIC16F877

 

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

- выбор частоты кварцевого генера­тора (влияет только на отображае­мые программой данные о времени выполнения программы или ко­манды, но не на скорость работы программы, отлаживаемой в PIC Simulator IDE);

 

 

Рисунок 1.3 - Выбор частоты кварцевого генератора

 

- загрузка программы в виде HEX-файла, например, signal.hex;

 

 

Рисунок 1.4 - Загрузка программы

 

- выбор нужных модулей виртуаль­ных устройств.

В зависимости от проектируемой схемы в меню Tools выбираются требуемые модули, которые конфигурируются («подключаются») к портам микроконтроллера в соответствии с листингом программы:

- выбор скорости выполнения программы;

 

 

Рисунок 1.5 - Выбор выполнения программы

 

- запуск процесса симуляции и остановка PIC Simulator IDE.

 

 

Рисунок 1.6 - Запуск и остановка симуляции

 

Директивы ORG (.ORG), EQU (.EQU), DB (.DB), DEFB (.DEFB), DW (.DW), END (.END) ассемблера поддерживаются. Конфигурация слова и буферов памяти также сохраняются в файл HEX. Эти буферы доступны и редактируются. Также можно использовать директивы D (.DCONF), DEFCONF (.DEFCONF).

 

1.2 Модули внешних устройств меню Tools

 

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

 

1.2.1 Keypad Matrix.

По умолчанию модули внешних устройств подключены к порту В, поэтому конфигурацию кнопочной панели  Keypad Matrix оставляют без изменений: вертикальная 4-х разрядная шина подключена к выводам RB0-RB3, а горизонтальная к выводам RB4-RB7.

Для фиксации положения любой из 16 кнопок необходимо настроить выводы RB0-RB3 как цифровые выходы, а RB4-RB7 как входы с помощью регистра направления TRISB:

MOVLW 0xF0

MOVWF TRISB.

 

 

Рисунок 1.7 - Клавишная панель

 

После установки единичного сигнала ‘1’ на выходах RB0-RB3 осуществляется последовательный опрос входов RB4-RB7. При определении единичного сигнала на каком-либо входе фиксируется нажатие соответствующей кнопки. Например, фрагмент программы опроса кнопки RB0/RB4 имеет вид:

KEY_1

MOVLW 0x01

MOVWF PORTB

BTFSS PORTB,4                   ; опрос кнопки RB0/RB4

GOTO KEY_1

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

 

1.2.2 8xLED Board.

Панель светодиодов 8xLED Board является наиболее распространенным устройством индикации, используемая в системах контроля и технической диагностики.

Для конфигурации выводов порта нужно поочередно нажимать левой кнопкой на окошко справа, начиная с  PORTB.0, появляется окно Select Pin, в котором можно выбрать необходимый порт, например, PORTC с указанием вывода 0; далее на PORTB.1 и т.д.

По умолчанию все светодиоды горят зеленым (Green) цветом. Для изменения цвета светодиода нужно нажать на зеленый квадратик, расположенный напротив выбранного вывода порта, – появляется окно PIC Simulater IDE Regist, в котором указаны возможные цвета: Green, Red, Yellow, Blue.

 

Рисунок 1.8 - Конфигурация панели светодиодов

 

1.2.3 Microcontroller View.

 

 

Рисунок 1.9 - Конфигурация канала AN0 в режиме АЦП

 

Модуль Microcontroller View отображает микросхему с интерактивными выводами для работы в режимах АЦП, внешних прерываний, таймеров, захвата, сравнения и ШИМ. На рисунке 1.9 приведен скриншот конфигурации модуля микроконтроллера в режиме АЦП для подключения канала AN0.

 

1.2.4 LCD Module.

Наибольшее распространение получили LCD (Liquid Christal Display) с контроллером HD44780 фирмы Hitachi.

Для конфигурации модуля (как бы монтажа подключения модуля LCD к микроконтроллеру) в окне LCD Module необходимо нажать на кнопку Setup (см. рисунок 1.10).

 

 

Рисунок 1.10 - Конфигурация модуля LCD

 

Выбор типа ЖКИ осуществляется нажатием на вкладку LCD Type, после чего в проявившемся окне делается отметка на соответствующей строке:

- 1 строчный, 16 символов;

- 2 строчный, 16 символов;

- 4 строчный, 16 символов;

- 2 строчный, 20 символов;

- 4 строчный, 20 символов;

- 2 строчный, 24 символа;

- 2 строчный, 40 символов.

Выбор порта для шины данных осуществляется нажатием на окошко Data Lines, затем появляется окно Select Port и выбирается требуемый порт, например, PORTD.

Выбор разрядности шины данных осуществляется нажатием на вкладку Interface и в появившемся окне выбирается 8 bit.

В правой нижней части модуля LCD расположены выводы управления микросхемой LCD, при нажатии на них появляются однотипные окна Select Pin, в которых выбираются соответствующие программе выводы порта микроконтроллера, например:

RS Line – PORTC,1.

E Line – PORTC,3.

R/W Line PORTC,2.

Для выбора подсветки табло необходимо нажать на кнопку Change LCD Module Color Scheme и в появившемся окне выбрать желаемый цвет.

Кнопка Setup LCD Module Busy Delays служит для  установки задержки инициализации шины, команд шины и данных шины в мс.

Для запоминания параметров настройки нужно нажать на кнопку Apply.

Программная часть работы модуля LCD будет подробно рассмотрена во второй главе.

 

1.2.5 Graphical 128x64 LCD Module.

 

 

Рисунок 1.11 - Модуль графического LCD

Кнопки настройки графического модуля идентичны по назначению и названию символьного модуля LCD, но только вместо кнопок LCD Type и Interface ставлены кнопки подключения контроллеров KS0108 фирмы Samsung CS1 Line и CS2 Line (Controller Select Line), каждый из которых управляет работой половиной табло размером 64х64. При нажатии на любую из них появляется окно Select Pin, в котором выбирается соответствующий программе вывод порта.

Модуль разбит на два кристалла, каждый по  64х64 точки, кристаллы полностью идентичны. Каждой светящейся точке на кристалле соответствует логическая единица в ячейки ОЗУ. Следовательно, ОЗУ каждого кристалла представляет собой 64х64 ячейки памяти.

На рисунке 1.12 показано соответствие между адресом ОЗУ и конкретной точкой выводимой на индикацию.

Рисунок 1.12 – ОЗУ графического 128х64 LCD

 

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

Выбор страниц осуществляется  командой Set Page - 0хВ8 (нулевая, 1 - 0хВ9 и т.д.),  столбца командой Set Address - 0х40 (нулевой). Если в программе не указано, где выводить информацию, контроллер индикатора начнет дальше инкрементировать счетчик номера столбца.

 

Таблица 1.1 – Команды Graphical 128х64 LCD

 

Инициализация может быть в нескольких вариантах. Наиболее распространенный: вывод RES подключен к шине питания. Программно выполняется команда «выключить ЖКИ» - задержка 1мкс, команда «включить ЖКИ» -  задержка 10мкс.

Для перехода изображения в двоичный код разработана программа «KS0108»  для индикатора на основе контроллера KS0108 (см. рисунок 1.13). Эта программа позволяет нарисовать  на индикаторе любое изображение и перевести в готовый код для каждой страницы памяти индикатора.

Программа имеет 10 буферов, в каждом из которых может находиться отдельное изображение. Двоичные коды изображений хранятся в файлах с расширением имени .CHR.

 

 

Рисунок 1.13 - Вид экрана программы KS0108

 

Изображение в окне программы разбито на сегменты. Утолщенная вертикальная линия посередине разделяет зоны, которыми управляют 2 контроллера. Горизонтальные линии делят изображение на страницы ОЗУ контроллеров. Тонкие вертикальные линии совместно с горизонтальными формируют квадратные сегменты размерами 8х8 элементов.

Программа работает в нескольких режимах, основным из которых является редактирование изображения. Для редактирования нужный сегмент изображения выбирают двойным щелчком по нему левой кнопкой мыши. Содержимое сегмента отображается на панели «Редактируемый символ». Элемент изображения делают темным с помощью левой кнопки мыши, а светлым - с помощью правой кнопки. Для завершения редактирования выбранного сегмента достаточно щелкнуть мышью по любому другому.

Контекстное меню, вызываемое щелчком правой кнопки мыши по фрагменту изображения, позволяет копировать или перемещать его в пределах текущего буфера, так и в любой из остальных 9 буферов программы. Это позволяет предварительно заготовить стандартные наборы символов или рисунков, а затем создавать из них требуемое изображение, просто копируя подходящие сегменты.

По окончании редактирования изображения создается код для микроконтроллера. Для этого на панели «Преобразование данных» следует выбрать директиву DB и нажать на экранную кнопку «Преобразовать».

 

1.2.5.1 Моделирование отображения информации.

Необходимо выполнить следующие действия:

- запустить PIC симулятор IDE;

- нажать на Options/Select Microcontroller.

- выбрать PIC16F877 и нажать на Select;

- нажать на Tools/LCD Module.;

- осуществить настройку схемы подключения модуля ЖКИ;

- нажать на Tools/Assembler. Набрать нижеприведенную программу risunok - 1.asm;

- в окне Assembler нажать на Tools/Assemble & Load. Программа risunok - 1.asm загрузится в память микроконтроллера;

- выбрать Rate/Ultimate;

- выделить опцию в Options/Infinite Loop Stops Simulation;

- нажать на «Simulation/Start» - начнется моделирование.

 

1.2.5.2 Листинг программы risunok - 1.asm.

; 3 и 6 страницы формы сигналов - со 2 по 7 сегмент

;PORTB - шина данных

;RD0 - CS1    выбор кристалла 1

;RD1 - CS2    выбор кристалла 2

;RD2 - RS=0 - регистр команд, 1-  регистр данных

;RD3 - E   строб записи/чтения

;RD4 - R/W при 0 - запись

R0L EQU 0x20

R0H EQU 0x21

R1L EQU 0x22

R1H EQU 0x23

R2L EQU 0x24

R2H EQU 0x25

R3L EQU 0x26

R3H EQU 0x27

R4L EQU 0x28

R4H EQU 0x29

Temp EQU 0x2A        ;  регистр кол-ва байтов вертикали

Reg EQU 0x2B           ;  регистр сохранения

Num EQU 0x2C         ; регистр счета байтов сегмента

ORG 0x0000

BCF PCLATH,3

BCF PCLATH,4

GOTO START

ORG  0x0004

START

CLRF STATUS            ; bank 0

CLRF PORTB             ; очистка портов

CLRF PORTD

BSF STATUS,RP0            ; bank 1

CLRF TRISB                       ; выходы

CLRF TRISD                      ; выходы 

BCF STATUS,RP0           ; bank 0

; инициализация ЖКИ МТ-12864А

MOVLW 0x02

MOVWF R0L

MOVLW 0x00

MOVWF R0H                    ; задержка 0002Н

CALL W001                       ; п\п задержки

BSF PORTD,0     ; выбираем контроллер 1

BSF PORTD,1     ; выбираем контроллер 2

MOVLW 0x3E

CALL Zap_com

MOVLW 0x3F       ; код “Display ON”

CALL Zap_com          ; и подаем команду ЖКИ

MOVLW .4           ; пауза 13 мкс (на 3 мкс больше

MOVWF Temp      ; минимально необходимой)     

M_1

DECFSZ Temp

GOTO M_1

; инициализация завершена, ЖКИ готов к работе

; переход на  кристалл 1

BSF PORTD,0           ; включить1 кристалл (левый)

BCF PORTD,1           ; выключить 2 кристалл (правый)

MOVLW 0xC0               ; курсор в начало строки 0

CALL Zap_com             ; записать команду

MOVLW 0xBA              ; выбираем 3-ю стр

CALL Zap_com             ; записать команду

MOVLW 0x48           ; выбираем начальный столбец 9

CALL Zap_com            ; записать команду

MOVLW .48                 ; число байтов на страницу 2-7 сегментов

MOVWF Temp              ; заносим в регистр-счетчик

CLRF Num

WR_1

MOVF Num,W

CALL TEXT_1

CALL Zap_dan                ;  выполняем запись байта таблицы

INCF Num,1

BTFSC Num,3

CLRF Num

DECFSZ Temp,1            ; если записанный байт не последний,

GOTO WR_1               ; повторяем цикл с метки WR_1

; иначе можно приступить к загрузке след. страницы

MOVLW 0xBD              ; выбираем 6-ю стр

CALL Zap_com             ; записать команду

MOVLW 0x48              ; выбираем начальный столбец 9

CALL Zap_com            ; записать команду

MOVLW .48                 ; число байтов на страницу 2-7 сегментов

MOVWF Temp             ; заносим в регистр-счетчик

CLRF Num

WR_2

MOVF Num,W

CALL TEXT_2

CALL Zap_dan                ; и выполняем запись

INCF Num,1

BTFSC Num,3

CLRF Num

DECFSZ Temp,1            ; если записанный байт не последний,

GOTO WR_2                  ; повторяем цикл с метки WR_1

; иначе можно приступить к загрузке след. страницы

POVTOR

GOTO POVTOR

; задержка 1,64 мс

W001:        

MOVF R0L,W

BTFSC STATUS,Z

GOTO W002

CALL W003

DECF R0L,F

NOP

NOP

NOP

NOP

NOP

GOTO W001

W002:        

MOVF R0H,W

BTFSC STATUS,Z

RETURN

CALL W003

DECF R0H,F

DECF R0L,F

GOTO W001

W003:

MOVLW 0x0C

MOVWF R2H

W004:        

DECFSZ R2H,F

GOTO W004

NOP

NOP

MOVLW 0x12

MOVWF R1L

W005:        

DECFSZ R1L,F

GOTO W006

CALL W007

CALL W007

NOP

NOP

RETURN

W006:        

CALL W007

GOTO W005

W007:        

MOVLW 0x0D

MOVWF R2L

W008:        

DECFSZ R2L,F

GOTO W008

NOP

RETURN

; задержка длиной в 1 байт – 40мс

X001:

MOVLW 0x0A

SUBWF R4L,F

BTFSS STATUS,C

RETURN

GOTO X002

X002:

MOVLW 0x06

SUBWF R4L,F

BTFSS STATUS,C

RETURN

GOTO X002

; задержка длиной в 2 байта – 100 мс

Y001:

MOVLW 0x10

SUBWF R4L,F

CLRW

BTFSS STATUS,C

ADDLW 0x01

SUBWF R4H,F

BTFSS STATUS,C

RETURN

GOTO Y002

Y002:

MOVLW 0x0A

SUBWF R4L,F

CLRW

BTFSS STATUS,C

ADDLW 0x01

SUBWF R4H,F

BTFSS STATUS,C

RETURN

GOTO Y002

; запись данных

Zap_dan                              

BCF PORTD,4

BSF PORTD,2           ; регистр данных

MOVWF PORTB

CALL Strobe               ; строб записи

MOVLW 0x32

MOVWF R4L

CALL X001

RETURN

Strobe                                      

BSF PORTD,3           ; Е=1 запись

NOP

BCF PORTD,3           ;  Е=0 при переходе из 1 в 0 запись

NOP                            ;  задержка для страховки

RETURN

; запись команд

Zap_com                              

BCF PORTD,4

BCF PORTD,2           ; регистр команд

MOVWF PORTB

CALL Strobe               ; строб записи

MOVLW 0xD0

MOVWF R4L

MOVLW 0x07

MOVWF R4H

CALL Y001

RETURN

TEXT_1

ADDWF PCL,F

RETLW 0x08

RETLW 0x08

RETLW 0x08

RETLW 0xF8

RETLW 0x80

RETLW 0x80

RETLW 0x80

RETLW 0xF8

TEXT_2

ADDWF PCL,F

RETLW 0x08

RETLW 0x10

RETLW 0x20

RETLW 0x40

RETLW 0x40

RETLW 0x20

RETLW 0x10

RETLW 0x08

END

Программа выводит прямоугольные импульсы на 3-й странице со второго сегмента по 7-й, а на 6-й странице - треугольные импульсы.

 

Рисунок 1.14 - Вид экрана графического  LCD

 

1.2.6 Stepper Motor Phase Simulation.

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

 

 

Рисунок 1.15 - Модуль шагового двигателя в PIC Simulator IDE

 

Таблица 1.2 – Байты управления (против часовой стрелки)

Направление

Обмотки

PORTA,биты для установки в 1

B

HEX

A

0

0001

01

А, D

3, 0

1001

09

D

3

1000

08

C, D

2, 3

1100

0C

C

2

0100

04

B, C

1, 2

0110

06

B

1

0010

20

A, B

0, 1

0011

03

 

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

 

1.2.6.1 Листинг программы stepdv.asm

SEC EQU 0x20

DVP EQU 0x21

ORG   0x0000

BCF PCLATH,3

BCF PCLATH,4

GOTO START          

ORG   0x0004

START   

CLRF STATUS

            BSF STATUS, RP0                  ; bank 1

CLRF TRISC                            ; PORTC - OUT

MOVLW B’11110000’

MOVWF TRISB                           ; RB0-RB3 – OUT, RB4-RB7 - IN

BCF STATUS, RP0                 ; bank 0

ENTER_KEY

            CLRF  PORTB

            BSF     PORTB,0                   

            BTFSS  PORTB,4                  ; Опрос кнопки «Пуск» - RB0/RB4

            GOTO ENTER_KEY

CW:                                            ;  вращение по часовой стрелке

MOVLW .4

            MOVWF DVP

            CALL PAUSE

            MOVLW 0x02

            MOVWF PORTC

            CALL PAUSE

            MOVLW 0x06

            MOVWF PORTC

            CALL PAUSE

            MOVLW 0x04

            MOVWF PORTC

            CALL PAUSE

            MOVLW 0x0C

            MOVWF PORTC

            CALL PAUSE

            MOVLW 0x08

            MOVWF PORTC

            CALL PAUSE

            MOVLW 0x09

            MOVWF PORTC

            CALL PAUSE

            MOVLW 0x01

            MOVWF PORTC

            CALL PAUSE

            MOVLW 0x03

            MOVWF PORTC

            CALL PAUSE

            GOTO ENTER_KEY

PAUSE:          

            DECFSZ DVP, F

            GOTO PAUSE

            RETURN

 

 

Рисунок 1.16 – Вид экрана выполняемой программы

1.2.7 Oscilloscope.

 

 

Рисунок 1.17 - Модуль осциллографа

 

Модуль 4-х канального осциллографа Oscilloscope подключается к любому выводу микроконтроллера, фиксируя только наличие или отсутствие напряжения. Подключение канала производится путем нажатия правой кнопки inactive, после чего в появившемся окне Select Pin выбирается вывод требуемого порта. Направление вывода порта определяется нажатием на соответствующие вкладки Input Pin или Output Pin, расположенные в нижней части панели прибора. В меню Mode осуществляется постройка частоты горизонтальной развертки.

Оставшиеся внешние модули будут рассмотрены во второй главе AVR Simulator IDE.

 

1.3 Команды меню Tools

 

1.3.1 Assembler.

Редактор Assembler имеет рабочее поле для размещения или написания программы, осуществляет проверку синтаксиса ассемблера и загрузку hex-файла во FLASH память программ.

 

 

Рисунок 1.18 - Окно Assemler

 

Следует отметить, что текст основной программы пишется с отступом не менее 8 символов для размещения названия меток. Компиляция программы производится нажатием в этом же окне в меню Tools на кнопку Assemble, в результате должно появиться сообщение в нижней части  окна об отсутствии ошибок Number of errors = 0. После получения hex-файла его загружают в память программ нажатием кнопки Assemble & Load.

 

1.4 Среда MPLAB IDE

 

Среда MPLAB IDE предназначена для разработки программного обеспечения 8-разрядных микроконтроллеров PICmicro в виде hex-файлов.

Для того чтобы перейти в режим отладки в среде MPLAB необходимо создать рабочую область и проект:  в меню Project для запуска специального мастера нажать на команду Project wizard, затем - на кнопку «Далее» и в появившемся окне Step one: Select a divice выбрать требуемый тип микроконтроллера, например, PIC16F877 (см. рисунок 1.19).

 

 

Рисунок 1.19 - Выбор типа микроконтроллера

 

После нажатия на кнопку «Далее» в окне выбираем MPLIB (см. рисунок 1.20).

 

 

 

Рисунок 1.20 - Выбор приложения библиотек

 

На диске С, где установлена программа MPLAB, рекомендуется создать отдельную папку с именем, например, SIGNALING, в которую будет помещен создаваемый проект с именем «papa»  вместе с исходной программой signal - 1.asm.

 

 

Рисунок 1.21 - Создание проекта исходной программы

 

Затем необходимо включить в проект «papa» с помощью команды Add файл исходной программы signal - 1.asm, предварительно записав в него адреса портов и переменных через EQU, т.к. они не известны в MPLAB.

STATUS equ 03h

RP0 equ 5h

PORTB equ 06h

TRISB equ 06h

PORTC equ 07h

TRISC equ 07h

 

 

Рисунок 1.22 - Выполнение команды Add

 

 

Рисунок 1.23 - Образование файла проекта с расширением .mcp

 

После нажатия на кнопку «Готово» откроется окно papa.mcw (см. рисунок 1.24).

 

 

Рисунок 1.24 - Содержимое проекта

 

После нажатия левой кнопкой мыши 2 раза на прикрепленный к проекту файл signal - 1.asm откроется окно редактирования исходной программы.

 

 

Рисунок 1.25 - Окно редактирования исходной программы

 

После редактирования текста в меню Project необходимо нажать на команду Project-build all и в папке Build должно появиться сообщение об успешной компиляции BUILD SUCCEEDED.

 

Рисунок 1.26 - Результат компиляции исходной программы

 

В папке SIGNALING появится hex-файл signal.hex с одинаковым именем исходной программы в ассемблере signal - 1.asm.

 

 

Рисунок 1.27 - Местонахождение полученного hex-файла

 

Для проверки работоспособности полученного hex-файла, можно загрузить его в симулятор PIC Simulator IDE - программа должна работать.

  

2 AVR Simulator IDE

 

У АVR-контроллеров есть две особенности, которые отличают это семейство от остальных микроконтроллеров. Во-первых, система команд и архитектура ядра АVR разрабатывались совместно с фирмой-разработчиком компиляторов с языков программирования высокого уровня IAR Systems.

В результате появилась возможность писать АVR-программы на языке С без большой потери в производительности по сравнению с программами, написанными на языке ассемблера.

Во-вторых, одним из существенных преимуществ АVR стало применение конвейера. В результате для АVR не существует понятия машинного цикла: большинство команд выполняется за один такт. Для сравнения отметим, что микроконтроллеры семейства РIC выполняют команду за 4 такта.

Правда есть некоторые сложности и в области операций с битами. Тем не менее, тексты программ получаются короче и больше напоминают программу на языке высокого уровня. Следует также учесть, что из общего числа команд от 90 до 130, в зависимости   от   модели,   только   50-60   уникальных,   остальные   взаимозаменяемые.

Этот недостаток полностью нивелируется при использовании языка С, фактически уравнивающего разные архитектуры с точки зрения особенностей про­граммирования.

Огромное преимущество АVR-архитектуры - наличие 32 оперативных регистров, не совсем равноправных, но позволяющих в ряде случаев вообще не обращаться к оперативной памяти и не использовать стек. Более того, в младших моделях АVR (например, ATtiny11) стек вообще недоступен для программиста. Поэтому структура ассемблерных программ для АVR напоминает программы на языке высокого уровня, где операторы работают не с ячейками памяти и регистрами, а с абстрактными переменными и константами. Кроме того, все выводы в них могут пребывать в трех состояниях: вход - отключено - выход и электриче­ски представляют собой КМОП-структуры, т. е. имеет место симметрия выходных сигналов и высокое сопротивление для входных.

Семейство  АVR  рекомендуется  для   начинающих  электронщиков-практиков в силу простоты и универсальности устройства, преемственности структуры для различных типов контроллеров, простоты схемотехники и программирования. Под "программированием" (или прошивки) понимается процесс записи программ в микросхему.

Компания Oshon Software разработала программу-отладчик AVR Simulator IDE по заказу фирмы ATMEL для семейства микроконтроллеров серии AVR, начиная от простых ATtiny11 до сложных ATMega644P.  Внешний вид модели, меню и команды практически идентичны симулятору PIC Simulator IDE, исключение составляет только синтаксис ассемблера и структурное построение, включая внутреннюю память микроконтроллеров.

Например, если в PIC-микроконтроллерах команды связаны с аккумулятором, то в AVR-микроконтроллерах аккумулятор W как таковой отсутствует и операции производятся через регистры общего назначения R0-R31 (см. рисунок 2.1). Можно также отметить и наличие аналоговых компараторов, которые отсутствуют в PIC-микроконтроллерах.

 

 

Рисунок 2.1 - Внешний вид симулятора AVR

 

Как видно из приведенного рисунка 2.1, меню, строки, вкладки и, самое главное, их назначение и содержание одинаковое, как и у симулятора PIC, подробно описанного в первой главе.

Эта глава будет посвящена описанию ранее не рассмотренных внутренних и внешних модулей микроконтроллера, а именно:

- конфигурации и программированию АЦП, символьного LCD;

- созданию протокола обмена с внешней EEPROM-памятью.

 

2.1 Модули меню Tools

 

Для убедительности вышесказанного приведем содержимое меню Tools, из которого видно поразительное сходство с PIC Simulator IDE.

 

 

Рисунок 2.2 - Содержимое меню Tools

 

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

 

2.1.1 Модуль АЦП.

Модуль аналого-цифрового преобразования (АЦП) микроконтроллера ATMega32 имеет восемь каналов ADC0-ADC7 порта А.

Для управления АЦП в микроконтроллере используется 4 регистра:

- регистр результата ADСH (старший байт);

- регистр результата ADСL (младший байт);  

- регистр управления ADCSRA;   

- регистр управления ADMUX.    

Регистр ADCSRA используется для настройки работы модуля АЦП, а с помощью регистра ADMUX осуществляется выбор используемого канала и тип выравнивания результата.

Управляющий регистр ADCSRA содержит следующие биты:

бит 7:  ADEN – бит включения модуля АЦП;

бит 6:  ADCS - установка бита вызывает начало преобразования АЦП;

бит 5:  ADFR – режим измерений:

          ADFR=1 – режим непрерывных измерений;

          ADFR=0 – режим одиночных измерений;

бит 4: ADIF – бит флага окончания работы АЦП;

бит 3: ADIE – разрешение прерывания модуля АЦП;

биты 2-0: ADPS2:ADPS0 – выбор коэффициента деления частоты:

101= Fosc/32 – 125 кГц;

110 = Fosc/64 – 62,5 кГц.

 

Регистр ADMUX  включает в себя следующие биты:

биты 7-6: REFS1:REFS0 – выбор источника опорного напряжения UREF;

бит 5:  ADLAR – тип выравнивания результата АЦП:

ADLAR=1 – выравнивание влево;

ADLAR=0 – выравнивание вправо;

биты 4-0:  MOX4:MUX0 - выбор аналогового канала;

00000 = канал 0, (RA0/ADC0);

00001 = канал 1, (RA1/ADC1);

00010 = канал 2, (RA2/ADC2);

00011 = канал 3, (RA3/ADC3);

00100 = канал 4, (RA4/ADC4);

00101 = канал 5, (RA5/ADC5);

00110 = канал 6, (RA6/ADC6);

00111 = канал 7, (RA7/ADC7).

 

В регистрах ADСH:ADСL сохраняется 10-разрядный результат аналого-цифрового преобразования. Когда преобразование завершено, результат преобразования записывается в регистр ADСH:ADСL. После чего сбрасывается флаг ADIF (ADCSRA<4>) и устанавливается флаг прерывания ADIF.

После включения и конфигурации АЦП выбирается рабочий аналоговый канал. Соответствующие биты DDRA аналоговых каналов должны настраивать порт ввода/вывода на вход. Перед началом преобразования необходимо выдержать временную паузу.

Алгоритм функционирования АЦП:

1) Настроить модуль АЦП:

- настроить  выводы   как  входы   (DDRA);

- выбрать входной канал АЦП (ADMUX<4:0>);

- выбрать источник опорного напряжения (ADMUX<7:6>);

- выбрать тип выравнивания (ADMUX<5>);

- включить модуль АЦП (ADCSRA<7>).  

2) Настроить прерывание от модуля АЦП:

- установить бит ADIE в 1;        

3) Выдержать паузу.  

4) Начать аналого-цифровое преобразование:

- установить бит ADCS в 1 (ADCSRA<6>).      

5) Ожидать окончания преобразования:

- ожидать, пока бит ADCS не будет сброшен в 0;

- ожидать прерывание по окончанию преобразования.

6) Считать результат преобразования из регистров ADCH:ADCL.

7) Для следующего преобразования необходимо выполнить шаги, начиная с пункта 1 или 2.

Запись результата преобразования может выполняться с правым или левым выравниванием (см. рисунок 10.1), в зависимости от значения бита ADLAR регистра ADMUX<5>. Незадействованные биты регистров ADCH:ADCL читаются как «0».

 

Рисунок 2.3 – Выравнивание результата  АЦП

 

2.1.1.1 Порядок работы с симулятором AVR.

Необходимо выполнить следующие действия:    

- запустить AVR Simulator IDE;

- нажать Options/Select Microcontroller;

- выбрать ATMega32 и нажать кнопку Select;

- нажать Options/ Compact Microcontroller View;

- нажать на Tools/ Microcontroller View – появится окно со всеми портами;

- нажать на Tools/ 8xLED board – появится панель светодиодов (по умолчанию порт В);

- нажать на Tools/Assemler;

- в окне Assemler набрать, отредактировать и загрузить программу во FLASH-память;

- выбрать скорость в меню Rate/Fast;

- выделить опцию в Options/Infinite Loop Stops Simulation;

- нажатием в меню Simulation/Start начнется моделирование.

Будем считать, что аналоговый датчик подключен к выводу РА0/ADC0. Для установления аналогового значение необходимо нажать на кнопку Т данного вывода, затем при нажатии правой кнопки появится число 1023 (максимальное значение оцифровки) и снова левую - в появившемся окошке ADC0 нажать на поле 1023 и в появившемся окне AVR Simulator IDE - Register Copy введите нужное число с клавиатуры, затем там же ОК. которое появится на выводе РА0/ADC0 и уже с буквой А.

 

 

Рисунок 2.4 - Конфигурация канала модуля АЦП

 Учитывая, что цифровое значение будет отражено на 8 светодиодах, подключенных к порту B, а результат оцифровки 10-ти разрядный, при левом выравнивании в программе предусмотрено сбрасывать на панель светодиодов только содержимое регистра ADCH. Поэтому шаг оцифровки будет кратен 4, т.к. два младших бита результата остались в регистре ADCL. Например, аналоговое значение 35 оцифруется в 0х08, т.к. 35/4 = 8.

 

2.1.1.2 Листинг программы.

        .ORG    0x000000

        LDI R16,low RAMEND

        OUT SPL,R16

        LDI R16,high RAMEND

        OUT SPH,R16

START:

        LDI R31,0xFF

        OUT DDRB,R31          ; PORTB - выход

        LDI R30,0x00

        OUT DDRA,R30         ; ADC0-ADC7 входы

        LDI R31,0x20

        OUT ADMUX,R31     ; канал 0, левое выравнивание

        LDI R30,0xBD

        OUT ADCSRA,R30     ; вкл АЦП, K=32

        NOP

        NOP

L0001:

        RCALL L0002

        IN R16,ADCL

        IN R17,ADCH

        OUT PORTB,R17        ; PORTB = ADCH

        RJMP L0001

L0004:

        RJMP L0004              ; бесконечный цикл

L0002:

        SBI ADCSRA,6                ; начало АЦ преобразования

L0005:

        LDI XL,0x26

        LDI XH,0x00

        LD R31,X

        SBRC R31,6                    ; проверка окончания АЦП    

        RJMP L0005

        RET

L0007:

        RJMP L0007                     ; бесконечный цикл

        .END

 

 

Рисунок 2.5 – Вид выполняемой программы АЦП

2.1.2 LCD Module.

Наибольшее распространение получили ЖКИ (Liquid Christal Display - LCD) с контроллером HD44780 фирмы Hitachi.

 

 

Рисунок 2.6 -  Внешний вид ЖКИ

 

Обычно используется 8-битная шина данных и  3 линии управления:  EN, RS, и R/W.

Линия  EN называемая "Включить" (Enable), используется как импульс-строб для ЖКИ при передаче данных/команд. Перед передачей микроконтроллер должен убедиться, что эта линия является низкой (EN=0), а затем установить другие две линии контроля и поместить данные на шину данных. Когда другие линии полностью готовы, сделать EN = 1 высоким с выдержкой времени, необходимого для приема  данных LCD.

Линия RS является линией "Выбора Регистра" (Register Select). При RS =0 в ЖКИ подключается регистр команд IR (instruct register) для приема команды (например, очистка экрана, позиция курсора и т.д.). При RS=1 подключается регистр DR (data register) для приема передаваемых данных.

Линия RW – это линия управления "чтение / запись" (Read/Write). При RW=0 информация шины данных записывается на ЖК-дисплее. При

RW=1 микроконтроллер читает сообщения о состоянии LCD, например, команда "Get LCD status " – 80Н.

В модуле HD44780 используется две разные памяти:

- DDRAM - для хранения отображаемых данных;

- CGRAM - для хранения битовых комбинаций, которые соответствуют матрице размером 5x8 или 5x10 (определяет форму символа).

Знакогенератор - это память типа ROM, предназначенная для хранения би­товых комбинаций, соответствующих матрице размерами 5x8 или 5x10. Распределение знаков показано в таблице 5.2, причем четыре старших разряда байта символа определяют его размещение по горизон­тали, а четыре младших - по вертикали (например, "А" = $41).

Таблица 2.1 – Набор символов знакогенератора

 

2.1.2.1 Конфигурирование модуля LCD.

Необходимо выполнить следующие действия:

- запустить AVR симулятор IDE;

- в меню Options выбрать команду Select Microcontroller;

- выделить 'ATmega32' и нажать на кнопку Select;

- в меню Options выбрать команду Change Clock Frequency;

- в рабочем поле набрать '4MHz' и нажать на кнопку OK;

- в меню Options выбрать команду Infinite Loop Stops Simulation;

- нажать на Tools/Assemler;

- в окне Assemler набрать, отредактировать и загрузить программу во FLASH-память;

- в меню Tools выбрать команду LCD Module и в появившемся окне нажать на Setup для настройки параметров LCD;

- для выбора фона нажать на вкладку Change LCD Module Color Scheme;

- нажать на кнопку Apply! (Применить!);

- в меню Rate выбрать скорость Ultimate.

- нажать на Simulation/Start - начнется моделирование.

 

 

Рисунок 2.7 - Настройка ЖКИ

 Для запоминания параметров настройки нужно нажать на кнопку Apply.

 

2.1.2.2 Листинг программы.

.ORG    0x000000

CLR R15

LDI R16,low RAMEND

OUT SPL,R16

LDI R16,high RAMEND

OUT SPH,R16

START:

; Инициализация LCD

CBI PORTD,3                ; очистка PORTD,3=0

CBI PORTD,1                ; очистка PORTD,1=0

CBI PORTD,2                ; очистка PORTD,2=0

SBI DDRD,3                  ; PORTD,3 - выход

SBI DDRD,1                  ; PORTD,1 - выход

SBI DDRD,2                  ; PORTD,2 - выход

SER R16                         ; R16=0xFF

OUT DDRB,R16            ; PORTB - выход

LDI R24,0x02

LDI R25,0x00                  ; R25,R24 ==0002 – 2 цикла

RCALL W001                 ; п/п задержка времени 1мс

LDI R31,0x33                 ; код команды режима LCD

RCALL LC02                 ; п/п передача команд

LDI R31,0x33

RCALL LC02

LDI R31,0x33

RCALL LC02

LDI R31,0x38

RCALL LC02

LDI R31,0x0D

RCALL LC02

L0001:

LDI R31,0x01                  ; очистка экрана LCD

RCALL LC02                  ; п/п передача команд

;  задержка 1мс

LDI R24,0x01

LDI R25,0x00                 ; R25,R24 ==0001 – 1 цикл

RCALL W001                ; п/п задержка времени 1мс

; текст для 1-й строки ЖКИ

            LDI R31,0x50                    ; “P” - код ASCII

            RCALL LC01                    ; передача кода на LCD

            LDI R31,0x52                    ; “R

            RCALL LC01                    ; передача кода на LCD

            LDI R31,0x49                    ; “I

            RCALL LC01                    ; передача кода на LCD

            LDI R31,0x56                    ; “V

            RCALL LC01                    ; передача кода на LCD

            LDI R31,0x45                    ; “E

            RCALL LC01                    ; передача кода на LCD

            LDI R31,0x54                    ; “T

            RCALL LC01                    ; передача кода на LCD

            LDI R31,0x21                     ; “!” - код ASCII

            RCALL LC01

; текст для 2-й строки

LDI R31,0xC0                    ; перевод курсора на 2-ю строку

RCALL LC02

LDI R31,0x48                     ; “H”

RCALL LC01

LDI R31,0x49                     ; “I”

RCALL LC01

LDI R31,0x21                    ; “!”

RCALL LC01

;  задержка в 1мс

LDI R24,0x01

LDI R25,0x00                    ; R25,R24=0001 – время задержки 1мс

RCALL W001                   ; п/п задержки

RJMP L0001                    ; бесконечный цикл

; Waitms Routine

W001:

MOV R16,R24                   ; R16=0x01

OR R16,R25                       ; R16=R16vR25=0x01

BRNE W002                       ; если R16≠00, то на W002

RET

W002:

RCALL W003                    ; п/п задержка времени

SBIW R25:R24,0x01         ; R25,R24-01=00, z=1

BRNE W002                      ; если z≠1, то на W002

RET

W003:

LDI R26,0xE5

LDI R27,0x03                    ; R27,R26=03E5

W004:

SBIW R27:R26,0x01         ; R27,R26=03E5 – 01=03E4

BRNE W004                      ; если z≠1, то на W004

RET

X000: 

LDI R19,0x00                   ; R19=00

LDI R20,0x01                   ; R20=01

X002: 

SUB R16,R19                   ; R16=00

SBC R17,R20                   ; R17=R17-R20-C=-01, C=1

BRCC X002                      ; если С=0, о на X002

RET

Y000: 

LDI R19,0x40

LDI R20,0x01                  ; R20:R19=0140

Y002: 

SUB R16,R19                    ; R16=-40, C=1

SBC R17,R20                    ; R17=R17-R20-C=00

SBC R18,R15                    ; R18=R18-R15-C

BRCC Y002                      ; если С=0, о на Y002

RET

; Передача данных на LCD

LC01: 

          SBI PORTD,1                    ; выбор регистра данных RS=1

            CBI PORTD,2                    ; запись

            OUT PORTB,R31              ; сброс байта данных на LCD

            RCALL LCX1                    ; п/п строба-запись

            LDI R16,0x80

            LDI R17,0x2E                    ; R17:R16=2E80

RCALL X000                    ; п/п задержки

RET

LCX1:

         SBI PORTD,3               ; формирование 1-го импульса строба на LCD

            LDI R16,0x00

            LDI R17,0x00               ; R17:R16=0000

            RCALL X000               ; п/п задержки

            CBI PORTD,3              ; формирование 0-го импульса строба на LCD

            LDI R16,0x00              

            LDI R17,0x00              ; R17:R16=0000

RCALL X000               ; п/п задержки

RET

; Передача команды на LCD

LC02: 

          CBI PORTD,1                    ; выбор регистра команд RS=0

            CBI PORTD,2                    ; запись

            OUT PORTB,R31              ; сброс байта данных на LCD

            RCALL LCX1                   ; п/п строба-запись

            LDI R16,0x00                    ; R16=00

            LDI R17,0xE4                   

            LDI R18,0x03                     ; R18:R17=03E4

RCALL Y000                     ; п/п задержки

RET

.END

 

Рисунок 2.8 – Вид выполняемой программы LCD

 2.1.3 Модуль I2C EEPROM.

Интерфейс I2С, как и UART, требует двухпроводного соединения, но с обязатель­ным объединением "земель", т. к. сигналы в нем абсолютные, а не дифференциаль­ные, отсчитываются относительно "земли" и соответствуют уровням КМОП-логики. Как и в SPI, в интерфейсе I2С устройства могут работать в режиме “веду­щий” (Master) или "ведомый" (Slave). В отличие от большинства других интерфей­сов, ведомые устройства с интерфейсом I2С (память, часы реального времени, раз­личные датчики) должны иметь индивидуальный адрес, присваиваемый производи­телем.

I2С, как и SPI, как правило, служит для связи между собой микросхем на одной плате или в пределах одного устройства. Однако это значительно более медленный интерфейс (типовое значение скорости обмена - 100 кбит/с), и потому применяет­ся там, где не требуется скоростной передачи данных. В принципе с помощью это­го интерфейса можно соединять и удаленные устройства, если не нужна высокая помехозащищенность. Интересно, что существуют устройства (например, датчики температуры фирмы Dallas Semiconductor, в настоящее время являющейся подраз­делением фирмы Maxim), которые способны работать без питания, получая его от сигнальных линий интерфейса I2С.

Технические характеристики шины I2С:

- последовательная работа только с двумя проводами, благодаря чему требуется меньше мест соединения и минимизируются за­траты на проводку;

- зона действия - до 3 м;

- возможность работать в режиме с одним ведущим блоком (Single-Master) или с несколькими ведущими блоками (Multi-Master).

Шина I2С состоит всего из двух проводов:

SCL (Serial Clock Line) - линия последовательной передачи синхроим­пульсов;

SDA (Serial Data Line) - линия последовательной передачи данных.

Линия SCL

До тех пор, пока через шину не передаются никакие данные ("шина свободна"), линия SCL содержит высокий уровень сигнала.

Тактовая шина SCL выполнена как структура с открытым стоком/коллек­тором (OK), благодаря чему существует возможность ее подключения как монтажное "И" (то есть, тактовая шина содержит низкий уровень сигнала, когда хотя бы один блок генерирует сигнал низкого уровня, и высокий уровень, когда все блоки генерируют сигнал высокого уровня). Тактовая шина соединена c питающим напряжением через подтягивающий резистор.

При питающем напряжении 5 В определены следующие уровни:

- сигнал низкого уровня - самое больше 1,5 В;

- сигнал высокого уровня - самое меньшее 3 В.

Блоки типа I2С в случае сигнала низкого уровня имеют максимальное выход­ное напряжение 0,4 В и при этом в состоянии принимать ток силой до 3 мА.

Линия SDA

До тех пор, пока через шину не передаются данные, линия последовательной передачи данных SDA имеет высокий потенциал. Данные по линии SDA переда­ются последовательно. Они действительны в фазе высокого уровня такта и могут менять свое состояние только в фазе низкого уровня. Каждый блок, подсоединен­ный к шине, во время передачи данных может быть или приемником (ресивером), или передатчиком (трансмиттером).

Линия SDA так же, как и тактовая шина SCL, выполнена в виде структуры с открытым стоком/коллектором, благодаря чему ее можно подклю­чать как монтажное "И", т. е. линия передачи данных содержит сигнал низко­го уровня, когда хотя бы один блок генерирует сигнал низкого уровня, и сигнал высокого уровня, когда все блоки генерируют сигналы высокого уровня. Линия соединена с питающим напряжением через подтягивающий резистор. Уровень на­пряжения определяется так же, как для тактовой шины SCL.

 

2.1.3.1 Конфигурирование микроконтроллера и шины I2C.

Необходимо выполнить следующие действия:

- запустить AVR Simulator IDE;

- в меню Options выбрать команду Select Microcontroller;

- выделить “ATmega32” и нажать на кнопку Select;

- в меню Options выбрать команду Change Clock Frequency;

- в рабочем поле набрать '4MHz' и нажать на кнопку OK;

- в меню Options выбрать команду Infinite Loop Stops Simulation;

- нажать на Tools/Assemler;

- в окне Assemler набрать, отредактировать и загрузить программу во FLASH-память;

- в меню Tools выбрать команду I2C EEPROM;

- нажать на вкладку SDA Line и выбрать вывод PORTC.1;

- аналогично для вкладки SCL Line выбрать вывод PORTC.0;

- выделить строку 24C256 для выбора EEPROM Type и подтвердить Select;

- в меню Rate выбрать скорость Ultimate;

- в меню Simulation выбрать команду Start.

 

Программа записывает массив данных (С8Н - А9Н) длиной 32 байта с адреса 0000 по 001F во внешнюю EEPROM-память типа АТ24C256 c адресом 0хА0 через последовательный интерфейс I2C. Энергонезависимая память типа АТ24С256 имеет структуру EEPROM, т.е. индивидуальную адресацию каждого байта. Последнее число в обозначении означает объем памяти в килобитах – 256 Кбит или 32 Кбайт.

 

2.1.3.2 Листинг программы.

; R31 – регистр приема-передачи

.EQU    addr = 0x0D

.EQU    data = 0x1E

.EQU  oshonsoft_temp_1 = 0xB            ;адрес oshonsoft_temp_1 = 0xB

.ORG    0x000000

            LDI R16,low RAMEND

            OUT SPL,R16

            LDI R16,high RAMEND

            OUT SPH,R16

START:          

            CLR R15

MOV R13,R15            

            MOV R14,R15               ; начальный адрес памяти R14,R13 = 0000

; Получение адреса массива

L0001:

            MOV R16,R13

            MOV R17,R14               ; начальный адрес массива R17,R16 = 0000

            LDI R18,0x1F

            LDI R19,0x00                ; конечный адрес массива R19,R18 = 001F

            CP R18,R16                   ; R18=R18-R16=0x1F

            CPC R19,R17                 ; R19-R17-C=0x00, C=0

            BRCC L0003                 ; перейти на L0003, если С=0 

            RJMP L0005                  ; конец программы

L0003:

            LDI R16,0xC8

            LDI R17,0x00                    ; R17,R16=0x00C8=200 – начальное число

            SUB R16,R13                    ; К16 = 200 – 00=200=0xС8 – новое число

            SBC R17,R14                    ; R17=0x00, C=0

            MOV R11,R16

            MOV R12,R17                   ; R12,R11=R17,R16=0x00C8

            MOV R16,R11

            MOV R30,R16                   ; R30=0xC8=200 –число для записи

; Инициализация SPI - sda, scl,  передача 0xА0, addr, data

            LDI XL,0x35

            CLR XH                              ; XH,XL=0035 – адрес порта С

            LDI R24,0x02                     ; R24=0x02

            RCALL IC20                      ; п/п передачи SCL=1

            SBI DDRC,1                       ; PORTC,1 - выход

            LDI YL,0x35

            CLR YH                              ; YH,YL=0035 – адрес порта С

            LDI R25,0x01                     ; R25=0x01

            RCALL IC22                      ; п/п передачи SCL=1

            SBI DDRC,0                      ; PORTC,0 - выход

            RCALL IC41                     ; передача сигналов SDA=SCL=1

            RCALL IC41                      ; передача сигналов SDA=SCL=1

            RCALL IC31                     ; передача сигналов SDA=SCL=0

            LDI R31,0xA0                   ; R31=0xA0 – адрес внешней EEPROM

            RCALL IC01                     ; передача байта через SDA

            MOV R31,R14

            RCALL IC01                     ; передача ст. байта адреса массива

            MOV R31,R13                  

            RCALL IC01                     ; передача мл. байта адреса массива

            MOV R31,R30

            RCALL IC01                     ; передача числа, записываемого в EEPROM

            RCALL IC41                     ; передача сигналов SDA=SCL=1

; Next addr

            MOV R16,R13

            MOV R17,R14

            INC R16                              ; R17,R16=0001 – след. адрес памяти

            BRNE L0004                      ; если R16≠0, то идти на L0004

            INC R17                              ; R17=01

            BREQ L0005                      ; если R17=0, то идти на конец

L0004:

            MOV R13,R16

            MOV R14,R17                    ; R14,R13=0001 – новый адрес массива

            RJMP L0001                       ; идти на начало передачи L0001

L0005:

RJMP L0005                       ; конец программы

; Передача байта и SCL в I2CEEPROM

IC01:  

          LDI R23,0x08           ; R23=0x08 – счетчик 8 битов

IC02:  

          SBRC R31,7              ; если R31,7=0,  то пропустить след. команду

            RCALL IC20             ; п/п передача SDA=1

            SBRS R31,7              ; если R31,7=1,  то пропустить след. команду

            RCALL IC21             ; п/п передачи SDA=0

            RCALL IC22              ; п/п передачи SCL=1

            RCALL IC23               ; п/п передачи SCL=0

            LSL R31                     ; сдвиг влево через С

            DEC R23                    ; R23=R23 - 1=7

            BRNE IC02                ; если R23≠0, то на IC02

            RCALL IC22             ; п/п передачи SCL=1

            RCALL IC23             ; п/п передачи SCL=0

            RCALL IC21             ; п/п передачи SDA=0 – стоп-сигнал

            RET

; передача сигналов SDA=SCL=0

IC31:  

         RCALL IC21                  ; п/п передачи SDA=0

            RCALL IC23                 ; п/п передачи SCL=0

            RJMP IC29                    ; п/п задержка

; передача сигналов SDA=SCL=1

IC41:  

         RCALL IC22                  ; п/п передачи SCL=1

            RCALL IC20                 ; п/п передача SDA=1

            RJMP IC29                    ; п/п задержка

; п/п передачи SCL=1

IC20:  

          LD R16,X                         ; R16=PORTC

            OR R16,R24                     ; R16=R16 v 02      

            ST X,R16                          ; PORTC=R16=02

            RJMP IC29                       ; п/п задержка

; п/п передачи SDA=0

IC21:  

          LD R16,X                       ; R16=PORTC,1

            COM R24                        ; R24= FD - инверсия текущего адреса

            AND R16,R24                 ; R16=PORTC,1

            COM R24                        ; R24=02

            ST X,R16                         ; PORTC=R16=00

            RJMP IC29                      ; п/п задержка

; п/п передачи SCL=1

IC22:  

          LD R16,Y                        ; R16=PORTC

            OR R16,R25                    ; R16=R16 v 01      

            ST Y,R16                         ; PORTC=R16=01

            RJMP IC29                      ; п/п задержка

; п/п передачи SCL=0

IC23:

            LD R16,Y                        ; R16=PORTC     

            COM R25                        ; R25=FE

            AND R16,R25                 ; R16=PORTC,0=00     

            COM R25                        ; R25=01

            ST Y,R16                         ; PORTC=R16=00

            RJMP IC29                      ; п/п задержка

IC29:

            LDI R16,0x00

            LDI R17,0x00                  ; R17,R16=0000

            RCALL X000                  ; п/п задержка

            RET

X000: 

          LDI R19,0x00                  ; R19=00

            LDI R20,0x01                  ; R20=01

X002: 

          SUB R16,R19                  ; R16=00

            SBC R17,R20                  ; R17=R17-R20-C=-01, C=1

            BRCC X002                    ; если С=0, о на X002

            RET

.END

 

 

Рисунок 2.9 – Вид выполняемой программы

 

2.2 Компилятор WinAVR

 

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

Для начала нужно создать MakeFile, который задает алгоритм выполнения программы.  После запуска программы MFile, входящей в состав WinAVR, появляется окно mfile с написанным шаблоном-mfile.

Затем выполнить следующие действия:

1) В меню Makefile выбирается имя файла для прошивки, например, signal - 1.

 

 

Рисунок 2.10 - Вид окна mfile

 

2) Затем выбирается используемый тип микроконтроллера - ATMega32.

 

 

Рисунок 2.11 - Выбор типа микроконтроллера

 

3) Проверяется формат файла с информацией для отладки:  

- файл .COFF  используется для отладки программы в VMLAB;  

- файл .ELF используется для отладки программы в PROTEUS  и  AVR Studio; - оставить без изменения.

 

 

Рисунок 2.12 - Выбор формата ELF

 

Можно выбрать интерфейс для прошивки программы в AVR
и выбрать порт, к которому будет подключен программатор. Это можно сделать позже или использовать другую программу для прошивания AVR.

Замечания:

- частота тактирования  AVR по умолчанию - 8 МГц;

- уровень оптимизации в меню Makefile по умолчанию средний - S.

4) Сохранить  "File" -> "Save" отредактированный   makeFile  нужно в папке проекта _Test  сохранить C/ATMEL/_Test, которая должна находиться на одном жестком диске с компилятором WinAVR.

5) Открыть программу текстового редактора в среде IDE Programmers Notepad.

В меню File с помощью команды Open открывается программа signal - 1.doc  и выбирается из списка язык программы, в данном случае ассемблер.

6) Перед компиляцией в меню Tools осуществить очистку папки от предыдущих результатов командой [WinAVR] Make Clean  и только затем воспользоваться командой компиляции  [WinAVR] Make All. 

 

 

Рисунок 2.13 - Компилирование программы signal - 1.asm

 

В папке _Test с проектом появятся файлы с различными расширениями:

signal - 1.lss   - содержит листинг программы на ассемблере, сопоставленный со строками программы на  С.  

signal - 1.hex  -   программа для прошивки в  AVR- микроконтроллер. 

signal - 1.eep  -  для прошивки в EEPROM.  

При прошивке, помимо signal - 1.hex файла, WinAvr также использует файл «MakeFile».

  

3 PROTEOS VSM

 

Симулятор-отладчик Proteus VSM, созданный фирмой Labcenter Electronics на основе ядра SPICE3F5 университета Berkeley, является так называемой средой сквозного проектирования. Это означает создание устройства, начиная с принципиальной схемы и заканчивая изготовлением печатной платы устройства, с возможностью контроля на каждом этапе разработки.

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

Proteus VSM состоит из двух самостоятельных программ:

- ISIS (Intelligent Schematic Input System) – графический редактор принципиальных схем со встроенным менеджером библиотек;

- ARES - графический редактор печатных плат со встроенным менеджером библиотек и трассировщиком.

 

3.1 Программа ISIS

 

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

При запуске программы появляется основное окно ISIS.

 

 

Рисунок 3.1 – Вид основного окна ISIS

Самое большое пространство отведено под окно редактирования EDIT WINDOW, в котором происходят все основные процессы создания, редактирования и отладки схемы устройства.

Слева вверху находится маленькое окно предварительного просмотра Overview Window. Щелкая левой кнопкой мыши по окну, можно перемещаться по окну предварительного просмотра, если схема имеет большие размеры.

Перемещать окно редактирования по схеме можно другим способом: удерживая нажатой кнопку SHIFT, двигать курсор мыши, не нажимая ее кнопок.

Приближать и отдалять схему в окне можно соответственно кнопками F6 и F7 или же колесом мыши. F5 центрирует схему в окне, а нажатие F8 подгоняет размер схемы под окно редактирования.

 

 

Рисунок 3.2 – Окно предварительного просмотра Overview Window

 

Под   окном   предварительного   просмотра   находится   Object   Selector - список выбранных в данный момент компонентов, символов и других элементов. Выделенный в списке объект отображается в окне предварительного просмотра.

Все возможные функции и инструменты Proteus VSM доступны через меню и пиктограммы, находящиеся под меню и слева от основного окна, а также через клавиши F1-F12.

Внизу основного окна расположены слева направо: кнопки вращения и разворота объекта вокруг своей оси, панель управления интерактивной симуляцией ( выглядит как панель магнитофона): ПУСК-ПОШАГОВЫЙ РЕЖИМ - ПАУЗА - СТОП и строка статуса, отображающая  ошибки, подсказки, текущее состояние процесса симуляции и т.д. Справа отображаются в милидюймах (th) координаты курсора.

 

 

Рисунок 3.3 – Вид кнопок управления режимами симуляции

Манипулирование объектами осуществляется после их выделения при выключенном процессе симуляции проекта. Для выделения объекта нужно щелкнуть по нему правой кнопкой мыши. Для выделения группы объектов можно либо, удерживая клавишу Ctrl, последовательно щелкать правой кнопкой по всем объектам, либо, удерживая правую кнопку, протащить область выделения по необходимым объектам. Выделять объекты надо очень осторожно, т.к. повторный щелчок правой кнопкой мыши по выделенному объекту удалит его. Удаление выделенных объектов происходит при нажатии кнопки DELETE. Отменить последние и все предыдущие действия по порядку можно с помощью кнопок отмены UNDO, REDO. Кнопки отмены действуют как назад, так и вперед.

 

 

Рисунок 3.4 – Кнопки отмены команд

 

Выделенные объекты можно перемещать по схеме, ухватив их левой кнопкой мыши и передвинув в нужное место, отпустить кнопку.

Групповые операции с выделенными объектами: копирование, перемещение, поворот и удаление производятся с помощью кнопок, показанных на рисунке 3.5.

 

 

Рисунок 3.5 – Кнопки групповых операций с выделенными объектами

 

Процесс симуляции проекта осуществляется нажатием кнопки ПУСК, расположенной внизу основного окна панели управления.

 

 

Рисунок 3.6 – Кнопка запуска программы

Все элементы находятся в библиотеке компонентов. Чтобы попасть в библиотеку, нужно перейти в режим COMPONENT, нажав на соответствующую пиктограмму.

 

 

Рисунок 3.7 – Режим Component

 

Теперь, либо щелкнув по пиктограмме Р (Pick devices – выбор приборов), либо дважды щелкнув левой кнопкой в поле выбора компонентов Object Selector, попадем в библиотеку.

 

 

Рисунок 3.8 – Окно Pick Devices

 

Компоненты можно выбирать по категориям Category, подкатегориям - Sub category , по производителю Manufacturer или же искать по ключевым словам Keywords. Выберем CAPACITOR библиотеки ACTIV . Дважды щелкнем по строке с названием объекта, подтверждая выбор компонента.

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

Чтобы  открыть  окно  редактирования  компонента,  нужно  либо  выделить  компонент, щелкнув по нему левой кнопкой мыши, либо,   поместив на него курсор, нажать CTRL + Е.   

 

3.1.1 Схемы с PIC-микроконтроллерами.

Как любой компонент электронной схемы: транзистор, резистор, индуктивность и т.д., — тип микроконтроллера (PIC или AVR) выбирается на соответствующем этапе разработки устройства. При выборе учитываются многие факторы, порой выбор зависит от характера предприятия, осуществляющего проект.

Один из факторов при выборе конкретного типа - это выполнение задачи данным элементом. Если он выполняет свою задачу, не выходит ни по стоимости, ни по габаритам за пределы заданных параметров, то выбор между PIC и AVR контроллером может определяться только тем, что специалисты предприятия имеют большой опыт работы с одним типом и малый с другим. Выбор может быть обусловлен возможностями постоянного поставщика элементной базы.

Исходный текст на ассемблере TL.ASM:

LIST    p=16F84                ; PIC16F84 is the target processor

#include "P16F84.INC"     ; Include header file

CBLOCK 0x10                  ; Temporary storage

state

11,12

ENDC

org     0                     ; Start up vector

goto    setports          ; Go to start up code.

org     4                     ; Interrupt vector,

halt   

goto    halt                ; Sit in endless loop and do nothing.

setports        

clrw                          ; Zero in to W.

movwf   PORTA      ; Ensure PORTA is zero before we enable it.

movwf   PORTB      ; Ensure PORTB is zero before we enable it.

bsf     STATUS,RPO     ; Select Bank 1

clrw                      ; Mask for all bits as outputs.

movwf        TRISB        ; Set TRISB register.

bcf    STATUS,RPO     ; Reselect Bank 0.

initialise      

clrw   ; Initial state,

movwf   state            ; Set it.

loop  

call    getmask              ; Convert state to bitmask.

movwf        PORTB      ; Write it to port,

incf    state,W          ; Increment state in to W.

andlw 0x03               ; Wrap it around,

movwf        state      ; Put it back in to memory.

call    wait                ; Wait :-)

goto   loop                ; And loop :-)

;  Function to        return bitmask for output port  for current state.

; The  top nibble contains the bits for one set of lights and the

; lower nibble the bits for the other set. Bit 1 is red, 2 is amber

; and  bit three       is green. Bit four is not used.

getmask         

movf  state,W       ; Get state in to W.

addwf         PCL,F        ; Add offset in W to PCL to calc. goto.

retlw  0x41         ; state==0 is Green and Red.

retlw  0x23         ; state=l is Amber and Red/Amber

retlw  0x14         ; state==3 is Red   and Green

retlw  0x32         ; state==4 is Red/Amber and Amber.

; Function using two loops to achieve a delay.

wait  

movlw   5

movwf   11

wl     

call wait2

decfsz 11

goto wl

return

wait2 

clrf 12

w2    

decfsz 12

goto w2

return

END

 

Для создания hex-файла прошивки TL.hex можно использовать MPLAB или Piklab микроконтроллера PIC

В программе ISIS Proteus есть симулятор светофора TRAFFIC LIGHTS, который находится  в разделе Miscellaneous библиотеки компонентов.

Далее выбрать в компонентах микроконтроллер PIC16F628A и собрать схему.

Затем навести курсор на микроконтроллер и щелчком правой кнопки мыши открыть окно Edit Properties с выпадающим меню, в котором в пункте  Programm File добавить полученный hex-файл программы.

Запуск симуляции клавишей Play продемонстрирует работу светофора.      

 

 

Рисунок 3.9 - Основное окно программы ISIS

 

Для наблюдения сигналов можно использовать осциллограф или графические средства отображения сигналов после расстановки пробников напряжения в нужные точки, например, на выводы микроконтроллера. При выборе типа отображения графика, естественно, требуется применить DIGITAL. Дальнейшая работа с графиком проводится обычным образом: рисуется окно графики, добавляются трассы наблюдения и запускается симуляция графика.

Программа ISIS позволяет  создать hex-файл прошивки без использования внешних компиляторов  MPLAB или Piklab.

Для этого в разделе основного меню Source выбирается пункт Add/Remove Source Files, где в окне диалога можно выбрать исходный файл и встроенный транслятор MPASMWIN.

 

 

Рисунок 3.10 - Окно выбора исходного файла и транслятора

 

Для открытия окна Source Editor с кодом ассемблера  внизу меню Source (исходник) необходимо нажать на имя TL.asm.

 

 

Рисунок 3.11 - Окно редактора исходного текста

 

Для отладки программы следует нажать на Ctrl + F12 или выбрать соответствующий пункт в разделе меню Debug.

В окне с исходным кодом можно задать или снять точку останова, используя клавишу F9 или выбирая эту команду из выпадающего меню, получаемого после выделения левой клавишей мышки нужной строки, по которой следует щелкнуть правой клавишей мышки. После задания точки останова клавишей F12 запускается симуляция, доходящая до точки останова. Клавиша F11 или соответствующий пункт в меню Debug позволяют сделать шаг внутрь цикла: красная стрелка, отмечающая перемещения в окне исходного кода, переместится соответственно ниже.

В меню Debug можно открыть окно состояния регистров, наблюдения (watch) и т.д.

 

 

Рисунок 3.12 - Окна наблюдения за состоянием микроконтроллера

 

После исправления ошибок запускается команда Build All в меню Source для получения различных файлов расширения, включая hex.

Затем добавить полученный hex-файл TL.hex к схеме через выпадающее меню раздела редактирования свойств компонента Edit Properties.

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

Можно заменить встроенный редактор на внешний, в качестве которого подходит Notepad. В меню Source зайти в  диалог настройки с помощью пункта Set External Text Editor, где указать блокнот в качестве внешнего редактора и открыть ассемблерный текст для правки в блокноте.

Рекомендуется файл проекта и файлы исходного текста перенести в отдельную папку рядом с Ptoteus, например, /home/ asm. Теперь можно открыть и поправить текст, сохранить его, оттранслировать его, включить файл ассемблерного текста для отладки и загрузить после компиляции (Build All) hex-файл в микроконтроллер.

 

3.1.2 Схемы с AVR-микроконтроллерами.

Схема с микроконтроллером ATMega8 и графическим 128х64 LCD, который рисует горы и солнце, приведена ниже.

 

 

Рисунок 3.13 - Схема ATMega8 с 128х64LCD

 

Алгоритм получения hex-файла прошивки микроконтроллера подробно описан во второй       главе. В данном примере использован простой и надежный компилятор WinAVR, в котором происходит редактирование, компиляция и получение MakeFile. Программа написана в С++, т.к. для программа в ассемблере для графического 128х64LCD будет очень большая и громоздкая, а значит ненадежная и трудная для отладки.

Листинг программы gori.c имеет следующий вид:

#include <iom8.h>

#include <avr/io.h>

#include <util/delay.h>

#include "lcd12864.h"

#define F_CPU 4000000

int main()

{

LCD12864_Init();

LCD12864_Clr();

 

LCD12864_Line(0,35,0,59);

LCD12864_Line(1,34,1,58);

LCD12864_Line(2,24,2,26);

LCD12864_Line(2,33,2,57);

LCD12864_Line(3,22,3,27);

LCD12864_Line(3,33,3,39);

LCD12864_Line(3,41,3,56);

LCD12864_Line(4,21,4,28);

LCD12864_Line(4,33,4,39);

LCD12864_Line(4,43,4,50);

LCD12864_Line(4,33,4,39);

LCD12864_Line(4,43,4,55);

LCD12864_Line(5,20,5,30);

LCD12864_Line(5,33,5,41);

LCD12864_Line(5,20,5,30);

LCD12864_Line(5,33,5,41);

LCD12864_Line(5,44,5,54);

LCD12864_Line(6,10,6,13);

LCD12864_Line(6,19,6,42);

LCD12864_Line(6,45,6,53);

LCD12864_Line(7,9,7,14);

LCD12864_Line(7,13,7,40);

LCD12864_Line(7,42,7,44);

LCD12864_Line(7,47,7,52);

LCD12864_Line(8,8,8,34);

LCD12864_Line(8,43,8,45);

LCD12864_Line(8,48,8,51);

LCD12864_Line(9,0,9,3);

LCD12864_Line(9,9,9,33);

LCD12864_Line(9,41,9,46);

LCD12864_Line(10,0,10,5);

LCD12864_Line(10,9,10,33);

LCD12864_Line(10,41,10,48);

LCD12864_Line(11,0,11,3);

LCD12864_Line(11,9,11,33);

LCD12864_Point(11,37);

LCD12864_Line(11,41,11,49);

LCD12864_Line(12,0,12,1);

LCD12864_Line(12,10,12,14);

LCD12864_Line(12,16,12,38);

LCD12864_Line(12,40,12,49);

LCD12864_Line(13,11,13,12);

LCD12864_Line(13,19,13,39);

LCD12864_Line(13,41,13,49);

LCD12864_Line(14,22,14,49);

LCD12864_Line(15,23,15,48);

LCD12864_Line(16,23,16,47);

LCD12864_Line(17,23,17,46);

LCD12864_Line(18,23,18,45);

LCD12864_Line(19,23,19,45);

LCD12864_Line(20,24,20,44);

LCD12864_Line(21,25,21,34);

LCD12864_Line(21,36,21,42);

LCD12864_Line(22,27,22,33);

LCD12864_Line(22,37,22,41);

LCD12864_Line(23,28,23,32);

LCD12864_Line(23,38,23,40);

LCD12864_Line(24,29,24,33);

LCD12864_Line(25,30,25,33);

LCD12864_Line(26,30,26,34);

LCD12864_Line(27,30,27,36);

LCD12864_Line(28,30,28,37);

LCD12864_Line(29,31,29,38);

LCD12864_Line(30,35,30,38);

LCD12864_Line(32,39,32,45);

LCD12864_Line(33,38,33,46);

LCD12864_Line(34,37,34,47);

LCD12864_Line(35,36,35,49);

LCD12864_Line(36,36,36,51);

LCD12864_Line(37,36,37,51);

LCD12864_Line(38,37,38,52);

LCD12864_Line(39,37,39,52);

LCD12864_Line(40,36,40,52);

LCD12864_Line(41,39,41,52);

LCD12864_Line(42,42,42,51);

LCD12864_Line(43,42,43,51);

LCD12864_Line(44,42,44,50);

LCD12864_Line(45,42,45,50);

LCD12864_Line(46,42,46,49);

LCD12864_Line(47,42,47,49);

LCD12864_Line(48,42,48,48);

LCD12864_Line(49,42,49,47);

LCD12864_Line(50,42,50,46);

LCD12864_Line(51,42,51,45);

LCD12864_Line(52,42,52,45);

LCD12864_Line(53,42,53,45);

LCD12864_Line(54,41,54,45);

LCD12864_Line(55,41,55,44);

LCD12864_Line(56,41,56,44);

LCD12864_Line(57,41,57,43);

LCD12864_Line(58,40,58,43);

LCD12864_Line(59,0,59,2);

LCD12864_Line(59,40,59,42);

LCD12864_Line(60,0,60,5);

LCD12864_Line(61,0,61,9);

LCD12864_Line(61,34,61,45);

LCD12864_Line(61,65,61,70);

LCD12864_Line(62,0,62,12);

LCD12864_Line(62,32,62,94);

LCD12864_Line(62,127,62,127);

LCD12864_Line(63,0,63,98);

LCD12864_Line(63,115,63,127);

LCD12864_Line(33,0,10,14);

LCD12864_Line(10,14,30,35);

LCD12864_Line(26,31,19,40);

LCD12864_Line(19,40,28,52);

LCD12864_Line(39,45,11,64);

LCD12864_Line(11,64,34,82);

LCD12864_Line(19,71,4,78);

LCD12864_Line(4,78,23,90);

LCD12864_Line(41,78,17,95);

LCD12864_Line(17,95,41,111);

LCD12864_Line(26,4,29,8);

LCD12864_Line(29,8,23,15);

LCD12864_Line(23,15,21,25);

LCD12864_Line(27,89,30,93);

LCD12864_Line(30,93,26,95);

LCD12864_Line(26,95,31,102);

LCD12864_Line(44,0,44,128);

LCD12864_Line(0,97,3,103);

LCD12864_Line(9,91,9,101);

LCD12864_Line(22,99,15,105);

LCD12864_Line(18,112,25,112);

LCD12864_Line(15,118,20,122);

LCD12864_Line(8,122,9,126);

LCD12864_Line(19,59,20,62);

LCD12864_Line(20,62,18,64);

LCD12864_Line(18,64,24,69);

LCD12864_Line(24,69,72,19);

 

LCD12864_String(10,10,string,sizeof(string)-1);

LCD12864_String(0,8,string,sizeof(string)-1);

while(1);

}

 

После создания схемы в Proteus, элементы которой приведены на рисунке 3.14, устанавливается hex-файл в строке Programe File окна свойств компонента Edit Properties. Все файлы, полученные в компиляторе WinAVR, желательно сохранить в отдельной папке рядом с Proteus.

 

 

Рисунок 3.14 - Окно свойств микроконтроллера

 

 

Рисунок 3.15 - Окно Edit Properties (правка компонента)

 

3.2 Графический редактор печатных  плат ARES

 

После того как схема полностью начерчена, необходимо передать список цепей Netlist в редактор печатаных плат ARES для дальнейшей работы с проектом.

Для этого необходимо каждому элементу на схеме указать соответствующий ему корпус на печатной плате, что позволит в дальнейшем произвести упаковку Packaging элементов в ARES на печатной плате. Упаковка элементов – это перенос элементов электрической схемы в соответствующие корпуса на печатной плате со всеми электрическими связями между ними. Упаковку элементов можно осуществить тремя способами:

а) метод ручной упаковки в ISIS.

Для этого в окне редактирования свойств элемента Edit Component в текстовом поле Other Properties (другие свойства) необходимо набрать PACKAGE=[библиотечное имя корпуса в ARES]. Например, для 561LA7 нужно набрать PACKAGE=DIL14, для резистора - PACKAGE=RES30, для транзистора КТ814 - PACKAGE=ELINE100 и.т.д.;

б) метод автоматической упаковки.

Для этого нужно создать текстовый ADI-файл (ASCII Data Import), т.е. файл перекрёстных ссылок. Создать ADI-файл можно в любом текстовом редакторе (Notepad(Блокнот), WordPad, Word).

ADI-файл должен иметь содержать следующий текст:

DATA DEVICE:   PACKAGE-                             - заголовок блока 1

[Библиотечное имя элемента 1 в ISIS]:  [Библиотечное имя элемента 1 в ARES]

[Библиотечное имя элемента 2 в ISIS]:  [Библиотечное имя элемента 2 в ARES]         

……………………………………………………………….                                         

[Библиотечное имя элемента n в ISIS]:  [Библиотечное имя элемента n в ARES]

END                                                                              - конец блока.

DATA DEVICE + VALUE : PACKAGE-        - заголовок блока 2

[Библиотечное имя элемента 1 в ISIS]  [Значение] : [Библиотечное имя элемента 1 в ARES]

…………………………………………………………………………..

[Библиотечное имя элемента n в ISIS]  [Значение] : [Библиотечное имя элемента n в ARES]

END

Например,  проект содержит следующие элементы: DD1, DD2 – К561ЛА7, DD3 -  К561ИЕ10, R1, R2 – МЛТ-0,125, R3 – МЛТ-0,5, C1 – К10-17, C2 – К50-6 10 мкФ х 16В, C3 – К50-6 470 мкФ х 25В ,C4 – К50-6 2200 мкФ х 25В, VD1 – КД522, VD2 – КС515А, VD3 – КЦ405А, VT1 – КТ315, VT2 – КТ814, VT3 – МП42Б.

В этом случае ADI-файл будет выглядеть следующим образом:

DATA DEVICE    :   PACKAGE-

561LA7                  :   DIL14                                (К561ЛА7)

561IE10                 :   DIL16                                (К561ИЕ10)

CAP                       :   CAP20                               (К10-17)

R0125                    :    RES20                               (МЛТ-0,125) 

R05                        :    RES30                               (МЛТ-0,5)

VD                         :    DIODE25                          (КД522)

VDZEN                 :    DIODE40                          (КС515)

BRIDGE               :    MOST405                          (КЦ405)

VTNPN                 :    ELINE100                          (КТ315) 

END

DATA DEVICE + VALUE : PACKAGE-

CAP_ELEC   10u       :  ELECRAD10                (К50-6 10 мкФ х 16В) 

CAP_ELEC   470u     :  ELECRAD13                (К50-6 470 мкФ х 25В)

CAP_ELEC   2200u   :  ELECRAD20                (К50-6 2200 мкФ х 25В)

VTPNP   KT814          :  TO126                           (КТ814)

VTPNP   MP42            :  TO5                                (МП42Б)

END

После того как ADI-файл создан, его можно назвать любым именем, например, Primer.txt. После чего в файловом менеджере (FAR, Norton Commander) необходимо расширение .txt заменить на .adi (Primer.adi). Созданный ADI-файл необходимо импортировать в этот проект. Для этого в ISIS в меню Tools выбираем команду ASCII Data Import и в открывшемся окне  указываем путь к ADI-файлу (Primer.adi). Затем элементам электрической схемы, которым в ADI-файле необходимо было для выбора корпуса указывать значения, в окне редактирования свойств Edit Component в строке Component Value необходимо ввести такое же значение как и в ADI-файле (для С2 – 10u, С3 – 470u, С4 – 2200u, VT2 – KT814, VT3 – MP42);

 в) метод комбинированной упаковки.

Этот метод является наиболее удобным для упаковки элементов и заключается в том, что сначала редактируется при необходимости ADI-файл Device.adi (загружаемый по умолчанию) для  групп элементов (резисторов, конденсаторов, диодов, транзисторов и т.д.), имеющих при разных значениях одинаковые корпуса. А затем для элементов, имеющих при разных значениях разные корпуса, а также для элементов, не вошедших в перечень ADI-файла Device.adi, применяется метод ручной упаковки.

После того как упаковка элементов произведена, в меню Tools выбираем команду Netlist to ARES либо нажимаем комбинацию клавиш [Alt]+[A]. На этом работа по проекту в редакторе ISIS заканчивается.

 

3.2.1 Работа в редакторе ARES.

 

 

Рисунок 3.16 - Внешний вид редактора ARES

 

Работа в редакторе ARES является основным этапом проектирования печатных плат и по своему характеру совершенно отличается от работы в редакторе ISIS.

В ARES в левом нижнем углу добавлен раскрывающийся список, в котором производится выбор текущего слоя, а также фон рабочей области - черный.

 

 3.2.1.1 Создание и редактирование корпусов элементов.

Выбираем необходимый шаг сетки. Доступны следующие градации сетки (Snap):                    

- 1 th = 0,025 мм (только из меню Display - Snap);

- 5 th = 0,125 мм [F2];

- 25 th = 0,625 мм [F3];

- 50 th = 1,25 мм [F4].

В ARES имеется возможность переключения сетки на метрическую систему координат. Для этого в меню Display в пункте Metric ставим метку, после чего текущие координаты курсора в правой нижней панели будут отображаться в мм с дискретностью, равной текущему шагу сетки. Шаг сетки при этом имеет следующие градации: 0,1 мм (только из меню Display - Snap),    0,5 мм [F2],   1 мм [F3],  2,5 мм [F4].

Начало координат на рабочей области обозначено синим крестиком, очерченным кругом. Однако пользоваться метрической системой координат при разводке корпусов, созданных в другой системе координат (th), нужно  внимательно, т. к. автотрассировщик привязан к сетке выбранной системы координат, узлы которой не совпадают с узлами сетки другой системы (в которой создан корпус элемента). При  автотрассировке дорожек между контактными площадками, расположенными друг от друга на расстоянии 2,5мм, может быть недопустимое сближение дорожки с одной из контактных площадок из-за несовпадения координатных сеток в разных системах координат.

Полноценно пользоваться метрической системой координат можно, лишь создав библиотеку с необходимым набором корпусов изначально в метрической системе. Также можно пользоваться метрической системой при рисовании контура печатной платы заданных размеров.

Необходимый масштаб выбираем также из меню Display Zoom  или 10:1 [F5], 5:1 [F6], 2:1 [F7], 1:1 [F8], 1:2 [F9], 1:5 [F10], 1:10 [F11], показать все [F12].

На панели пиктограмм команд выбираем Graphic Mode, после чего становятся доступны графические примитивы: линия,  прямоугольник,   эллипс, круг, сектор, замкнутая область, TEXT - текст.

Комбинируя данными примитивами, можно создать контур любого по форме корпуса. Корпус элемента представляет собой проекцию корпуса натуральной величины на горизонтальную плоскость платы (отпечаток) с обязательным наличием всех посадочных мест (для штырьковых выводов элемента) или контактных площадок (для планарных элементов). Но прежде чем рисовать контур, необходимо разместить на рабочей области контактные площадки (pad), строго соблюдая их взаимное расположение в будущем корпусе элемента. Для этого на панели пиктограмм команд выбираем кнопку       (Pad mode), после чего становятся доступны кнопки:       - круглая контактная площадка со сквозным отверстием;      - квадратная контактная площадка со сквозным отверстием;     - прямоугольная контактная площадка со скруглёнными углами и сквозным отверстием;   - прямоугольные и квадратные контактные площадки для планарных элементов (без отверстия);     - элементы разъёмных контактов, изготавливаемых печатным монтажом.

При нажатии курсором мыши на одну из вышеперечисленных кнопок в перечне компонентов появляется список модификаций выбранного типа контактной площадки. Если ни один из вариантов нам не подходит, то, нажав на кнопку Е в левом верхнем углу перечня компонентов, появляется окно Edit Pad Style, в котором быстро можно задать контактной площадке необходимые параметры.

Выбрав контактные площадки, сетку и масштаб, размещаем их на рабочей области таким образом, чтобы отверстия в контактных площадках в точности соответствовали расположению штыревых выводов в реальном корпусе элемента, а для планарных элементов – центры контактных площадок в точности соответствовали расположению планарных выводов. В корпусах элементов с большим числом выводов (микросхемы, разъёмы) первый по нумерации вывод различными способами помечают – делают ключевым, чтобы избежать неоднозначности ориентировки корпуса при монтаже.

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

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

Для этого по очереди выделяем контактные площадки правой кнопкой мыши и затем щелчком левой кнопки мыши вызываем диалоговое окно Edit Single Pin (редактирование одного вывода), в котором в строке Number вводится имя или номер вывода связанного с данным корпусом элемента ISIS.

Вся нумерация контактных площадок производится со стороны элементов, т.е. если смотреть на корпус сверху.   После того как все контактные площадки проименованы, выбираем режим Graphic Mode , в списке слоев выбираем слой Top Silk (голубой) и с помощью графических  примитив рисуем контур корпуса. После чего выделяем окном все элементы созданного корпуса и выбираем в меню Edit команду Make Package. В появившемся окне Make Package в строке New Package Name вводим библиотечное имя корпуса, а в списке Library выбираем библиотеку, в которую необходимо поместить созданный корпус. После чего его можно выбирать для упаковки элемента, под который создавался этот корпус, на печатную плату. Можно также применить редактирование уже созданных корпусов, что существенно сэкономит время. Для этого нажимаем на кнопку       и после этого, нажав на кнопку Р перечня компонентов, вызываем окно Pick Packages (выбор корпусов), откуда производим выбор корпуса. Затем, выделив его, разбиваем его на графические примитивы командой меню Edit Decompose. После чего, сделав все необходимые изменения, сохраняем его под новым именем в библиотеке.

Работа с менеджером библиотек в ARES производится таким же образом, как и в ISIS.

      

3.2.2.2 Компоновка корпусов элементов на печатной плате.

 После того, как в редакторе ISIS в меню Tools выбрана команда Netlist to ARES, система открывает редактор ARES и производит автоматическую выборку из всех существующих библиотек те корпуса, которые в процессе упаковки получили связь с соответствующими элементами электрической схемы. Если при этом возникают неоднозначности, связанные с допущенными при упаковке ошибками, в ARES открывается окно Package Selector, в котором предлагается, указанному в поле Component элементу схемы, выбрать из списков Libraries и Packages соответственно библиотеку и необходимый корпус. При этом можно запустить из главного меню или с рабочего стола еще одну версию ARES и, нажав на Р, войти в окно Pick Packages, которое предоставляет визуальный просмотр корпусов всех библиотек. Все выбранные корпуса помещаются в локальную библиотеку (буфер) текущего проекта и отображаются в перечне компонентов.

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

Для ручной компоновки необходимо в меню Display выбрать команду Layers и выбрать метками слои:

Top Copper – дорожки со стороны элементов;

Bottom Copper – дорожки со стороны монтажа;

Top Silk – вид на корпуса, расположенные на верхней стороне платы;

Bottom Silk - вид на корпуса, расположенные на нижней стороне платы;

Pin Numbers – номера выводов;

Ratsnest – визуальные связи (“резиновые нити”), которые существенно помогают при компоновке.

Печатные платы, изготовляемые под определённый корпус, имеют либо фиксированные  размеры либо ограниченные максимально допустимыми пределами. Для таких плат перед началом компоновки рисуется бордюр – краевой периметр платы. Для этого выбираем режим Graphic Mode и в списке слоев - текущим  выбираем Board Edge. Затем с помощью графических примитив рисуем края платы – бордюр и крепежные отверстия. В списке слоев выбираем текущим слой Component Side (сторона компонентов). После этого, выделив левой кнопкой мыши нужный элемент в перечне компонентов, производим щелчок левой кнопкой мыши в том месте рабочей области, где предполагается установка корпуса выбранного элемента. Таким же образом размещаем на рабочей области электрически связанный с предыдущим элемент. Между этими двумя элементами образовались визуальные зеленые связи - “резиновые нити”. Выделив один из элементов правой кнопкой мыши (окрашивается белым цветом), затем нажимаем на левую кнопку мыши и с последующим ее удержанием тянем мышью выделенный элемент к другому элементу. Выделенный элемент можно вращать на 900 , используя кнопку , а также зеркально отображать, используя кнопку , но при зеркальном отображении элемент переместится на другой слой  Solder Side, и он станет текущим. При повторном щелчке правой кнопкой мыши на выделенном элементе – этот элемент не удаляется, а перемещается обратно в перечень компонентов. Это свойство полезно при необходимости временного устранения мешающих элементов.

Таким образом, перетаскивая из перечня компонентов элемент за элементом на рабочую область, производим равномерное заполнение корпусами элементов площади печатной платы.

В ARES есть замечательная особенность – возможность проведения электрических связей при помощи «резиновых нитей», что позволяет обходиться без рисования электрической схемы в ISIS. Для этого выбираем    Ratsnest и на предварительно размещенных на плате корпусах элементов, выбрав левой кнопкой мыши необходимый вывод, ведем курсор на соединяемый вывод. После того, как все элементы из перечня компонентов извлечены и скомпонованы на плате, наступает этап трассировки.

 

3.2.1.3 Автотрассировка печатной платы.

Для выработки стратегии автотрассировки  в меню System выбирается пункт Set Strategies.

В открывшемся диалоговом окне Edit Strategies  из списка Strategy To Edit выбирается группа цепей – Power (цепи питания VCC и GND), Signal или Bus.

В зависимости от характера трассировки для каждой группы редактируются следующие  настройки:

- Priority – приоритет трассировки, 1 – самый высокий приоритет;

- Trace Style – из списка выбирается ширина дорожки;

- Via Style – из списка выбирается диаметр переходного отверстия;

- Neck Style - из списка выбирается ширина дорожки в узких местах;

- Pair (Hoz) и (Vert) –  из списков попарно задаются слои, по которым будут прокладываться горизонтальные и вертикальные дорожки.

В случае необходимости  односторонней трассировки, для всех групп цепей в строке Pair (Hoz) и (Vert) необходимо выбрать одинаковые слои Bottom Copper, либо из списка Pair (Hoz) выбрать слой Bottom Copper, а из списка Pair (Vert) выбрать (None).

- Tactics – выбирается тактика прокладки дорожек (Power, Bus, Signal);

- Vias – для переходных отверстий выбираются Normal, Top Blind, Bottom Blind, Buried;

- Corners – для угловых участков дорожек выбираются Optimize – оптимизация углов, Diagonal – замена прямых углов усечёнными под 450;

- Hide Ratsnest – спрятать связи («резиновые нити»).

После задания  стратегии трассировки необходимо установить на плате барьеры трассировки – участки па печатной плате, запрещающие по своей территории прокладку дорожек. Барьеры  необходимы для защиты участков платы в местах крепежа, установки радиаторов, а также для мест между соседними выводами микросхем и т.д. Для построения барьеров используется режим Graphic Mode, а из левого нижнего списка слоев выбираем слой Keepout. После чего рисуем на печатной плате  контуры барьеров  необходимой формы.

Далее из меню Tools выбираем команду Auto Router, после чего появляется диалоговое окно Auto Router (автотрассировщик), в котором задаются следующие режимы:

- Grid – шаг координатной сетки, в узлах которой автотрассировщик будет размещать центры проводников и переходных отверстий – 50 th, 25 th, 20 th, 10 th.

Routers – выбор трассируемых связей:

- All – трассировка всех связей;

- Tagged - трассировка выделенных связей;

- Untagged - трассировка невыделенных связей;

- Design Rules – правила прокладки проводников: минимально допустимые зазоры Pad - Pad (контактная площадка), Pad – Trace (проводник), Trace – Trace;

- Router Options – параметры трассировки:

- Routing Pass – проходы трассировки (обязательный параметр); 

- Tidy Pass – «подчищающие» проходы (по желанию);   

- Protect manual tracks – защита дорожек, разведенных вручную (по желанию); Enable map cacheing – активизация кэширования (обязательный параметр);

- Rip-up and Retry Routing – алгоритм трассировки «стирание – замена - повторный проход»;

- Enable Rip-up and Retry – активизировать алгоритм «стирание – замена - повторный проход»;

- Auto-tidy on Stalemate – автоматическое завершение трассировки цепей, не имеющим возможности для разводки - «тупик» (желательно включить);

- Infinite Retry – возвращение к неразведенной цепи, до тех пор, пока не будет достигнут результат (нежелательно).

Задав необходимые режимы в окне Auto Router, нажимаем на OK. Для остановки работы автотрассировщика нужно нажать клавишу Esc.

Если результат трассировки не устраивает, то удалить дорожки можно, войдя в режим    , в списке слоёв выбрать необходимый текущий слой, затем, выделив окном правой кнопкой мыши, нажимаем клавишу Delete. Также можно удалять по одной цепи - двойным щелчком правой кнопки мыши.

В ARES имеется возможность ручной трассировки цепей. Вручную рекомендуется разводить цепи питания, а также цепи, наиболее требовательные к электромагнитной совместимости и к ёмкости монтажа. После ручной трассировки в окне Auto Router нужно обязательно включить Protect manual tracks. Режим ручной трассировки выбирается нажатием на кнопку  , затем, выбрав в перечне компонентов Traces необходимую ширину дорожки и в списке слоев – необходимый текущий слой, ставим курсор мыши на вывод элемента, от которого будет прокладываться дорожка. При этом выделится вся цепь, в которую входит данный вывод. Щелчком левой кнопки мыши тянем курсор в нужном направлении. Двойной щелчок левой кнопки мыши ставит на плате переходное отверстие и меняет текущий слой на слой противоположной стороны платы.

Таким образом, имея определённые навыки, можно вручную быстро трассировать не только отдельные проводники, но и несложные платы в целом.  

Список литературы

 

1. Баранов В.Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы. - М.: Додэка – ХХI, 2004. – 288 с.

2. Белов А.В. Конструирование устройств на микроконтроллерах. – СПб.: Наука и Техника, 2005. – 256 с.

3. Бродин В.Б., Калинин А.В. Системы на микроконтроллерах и БИС программируемой логики.  – М.: ЭКОМ, 2002. – 400 с.

4. Вальпа О. Полезные схемы с применением микроконтроллеров и ПЛИС. – М.: Додэка - ХХ1, 2006. – 416 с.

5. Голубцов М.С.  Микроконтроллеры AVR: от простого к сложному. – М: СОЛОН-Пресс, 2003. – 288 с.

6. Гребнев В.В. Микроконтроллеры семейства AVR фирмы Atmel. – М.: ИП РадиоСофт, 2002. – 176 с.

7. Евстифеев А.В. Микроконтроллеры семейства Classic фирмы ATMEL. – М.: Додэка - ХХI, 2006. – 288 с.

8. Евстифеев А.В. Микроконтроллеры семейства Tiny и Mega фирмы ATMEL. – М.: Додэка - ХХI, 2006. – 312 с.

9. Микушин А.В. Занимательно о микроконтроллерах. – СПб.: БХВ-Петербург, 2006. – 278 с.

10. Мортон Дж. Микроконтроллеры AVR. Вводный курс. – М.: Додэка-XXI, 2006. – 356 с.

11. Новиков Ю.В. Основы микропроцессорной техники. – М.: ДМК-Пресс, 2006. – 386 с.

12. Предко М. Руководство по микроконтроллерам. Том 1. – М.: Постмаркет, 2001. – 416 с.

13. Предко М. Руководство по микроконтроллерам. Том 2. – М.: Постмаркет, 2001. – 488 с.

14. Ревич Ю.В. Практическое программирование микроконтроллеров Atmel AVR на языке ассемблера. – СПб.: БХВ-Петербург, 2011. – 352 с.

15. Ремизевич Т.В. Микроконтроллеры для встраиваемых приложений: от общих подходов – к семействам НС05 и НС08 фирмы Motorola/ Под ред. И.С. Кирюхина. – М.: ДОДЭКА, 2000. – 272 с.

16. Тавернье К. PIC-микроконтроллеры. – М.: ДМК Пресс, 2003. – 272 с.

17. Траперт В. Измерение, управление и регулирование с помощью AVR–микроконтроллеров. – Киев: МК – Пресс, 2007. – 324 с.

18. Швец В.А.Одноплатные микроконтроллеры. Проектирование и применение. – Киев: МК-Пресс, 2005. – 304 с.

19. Шпак Ю.А. Программирование на языке С для AVR и PIC микроконтроллеров. – Москва-Киев: Додэка-ХХ1, МК-Пресс, 2007. – 376 с.

20. Яценков В.С. Микроконтроллеры Microchip. Практическое руководство. – М.: Горячая линия - Телеком, 2002. – 296 с.

Содержание

 

Введение

3

1 PIC Simulator IDE

5

1.1 Работа с программой PIC Simulator IDE

8

1.2 Модули внешних устройств меню Tools

10

1.2.1 Keypad Matrix

10

1.2.2 8xLED Board

11

1.2.3 Microcontroller View

12

1.2.4 LCD Module

13

1.2.5 Graphical 128x64 LCD Module

14

1.2.6 Stepper Motor Phase Simulation

24

1.2.7 Oscilloscope 

26

1.3 Команды меню Tools

27

1.3.1 Assembler

27

1.4 Среда MPLAB IDE

28

2 AVR Simulator IDE

33

2.1 Модули меню Tools

36

2.1.1 Модуль АЦП

36

2.1.2 LCD Module

41

2.1.3 Модуль I2C EEPROM

46

2.2 Компилятор WinAVR 

52

3 PROTEUS VSM

54

3.1 Программа ISIS

54

3.1.1 Схемы с PIC-микроконтроллерами

59

3.1.2 Схемы с AVR-микроконтроллерами

64

3.2 Графический редактор печатных  плат ARES

69

3.2.1 Работа в редакторе ARES

71

3.2.1.1 Создание и редактирование корпусов элементов

72

3.2.1.2 Компоновка корпусов элементов на печатной плате

74

3.2.1.3 Автотрассировка печатной платы

76

Список литературы

78