МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РЕСПУБЛИКИ КАЗАХСТАН
Некоммерческое АО
«Алматинский университет энергетики и связи»
Б.С. Байкенов
МИКРОКОНТРОЛЛЕРЫ. СИМУЛЯТОРЫ
Учебное пособие
Алматы 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;
- PC’s 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 в I2C–EEPROM
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 |