Программируемый логический контроллер
Предлагаемый вашему вниманию Бейсик-контроллер представляет собой масштабную действующую модель программируемых логических контроллеров (ПЛК), которые широко применяются в «большой» автоматике в качестве «строительных» модулей при создании различных систем распределенного контроля и управления. Данный модуль представляет собой небольшое устройство, позволяющее решать задачи управления, регулирования. Тем не менее, этому малышу не составит труда «позвонить» при помощи модема на удалённый компьютер и отправить, например, результаты измерений. Кроме этого, он может реализовывать функции управления, выдавая различные управляющие сигналы.
Как и традиционный ПЛК, он имеет дискретный, аналоговый ввод-вывод и коммуникационный интерфейс, который может быть использован для связи с другими устройствами или перезагрузки управляющей программы. Управляющая программа представляет собой текст на языке Бейсик. Задачей контроллера является интерпретация и исполнение команд этого языка.
Контроллерная реализация Бейсика имеет средства для работы с линиями ввода-вывода, с АЦП и ЦАП. Внешний вид контроллера показан на рис.1
Рис.1
Контроллер имеет следующие характеристики:
- 1. Количество каналов дискретного ввода TTL или 5V CMOS, шт 4
- 2. Количество каналов дискретного вывода TTL или 5V CMOS, шт 4
- 3. Количество каналов аналогового ввода 0…5V, шт 2
- 4. Количество каналов аналогового вывода ШИМ, шт 1
- 5. Характеристики коммуникационного интерфейса RS232:
- бодовая скорость, bps 57600
- количество бит данных 8
- количество стоповых бит 1
- бит чётности отсутствует
- согласование потока аппаратное
- 7. Язык программирования встроенного интерпретатора Tiny-Basic
- 8. Размер программной области, байт, не менее 2000
- 9. Среднее время исполнения операторов, мкС, не более 500
- 10 Хранение программы (текста) в энергонезависимой памяти
Схема контроллера приведена на рисунке 2
Рис.2
Микросхема U3 – AVR микроконтроллер ATMEGA8. Управляющая программа для этого контроллера, содержащая интерпретатор языка Бейсик, заносится в контроллер, когда схема полностью собрана. Для этой цели служит разъём внутрисхемного программирования XP3. Авторы использовали программатор PonyProg, который можно взять на сайте http://www.lancos.com/prog.html. На рис.3 показано как надо запрограммировать служебные биты микроконтроллера.
Рис.3
Микросхема U1 служит для преобразования уровней сигналов ТТЛ/КМОП в уровни интерфейса RS-232. Микросхема U2 – линейный стабилизатор. Если предполагается питание от стабилизированного источника 5 Вольт, микросхему можно исключить и запаять перемычку между контактными площадками 1 и 3 этой микросхемы. В качестве динамика (“пищалки”) может быть использован излучатель любой системы, важно, чтобы он был пассивным (не содержал встроенного генератора) и ток, потребляемый от ножки 5 микросхемы U3, не превышал 20 мА., что определяется величиной резистора R1.
Чтобы избежать возможного непреднамеренного стирания содержимого программной памяти, использована перемычка JP1. предназначена для защиты от случайной перезаписи пользовательской программы. Когда перемычка установлена, запись программы невозможна.
Светодиоды D1…D4 предназначены для индикации состояния дискретных выводов. Светодиод D5 служит для индикации состояния программы. Если D5 горит, то программа находится в цикле. Погашенный светодиод означает останов программы, например, ожидание ввода символа при использовании оператора INPUT или при формировании задержки оператором DELAY.
Кнопочный переключатель SW1 управляет линией RESET микроконтроллера ATMEGA8 и активно используется при записи программы пользователя, вывода содержимого программной памяти и пуска программы в работу. Кнопочные переключатели SW2…SW5 служат для изменения состояния дискретных линий ввода для тестовых и учебных целей.
Разъёмы XP1 и XP2 предназначены для включения в схему устройства пользователя. Контроллер как “чёрный ящик” показан на рисунке 4.
Рис.4
Нагрузочная способность линий дискретного вывода определяется нагрузочной способностью микроконтроллера ATMEGA8 и составляет 20 мА на вывод, следует учитывать, что порядка 8 мА потребляют светодиоды, подключенные к каждому выводу.
Дискретный ввод совместим по уровням с ТТЛ и КМОП при напряжении питания 5 Вольт. Необходимо иметь в виду, что к каждому входу подключен кнопочный ключ на плате контроллера, образуя с источником сигнала монтажное ИЛИ. В общем случае, не следует пользоваться кнопочными ключами на плате, при наличии внешнего источника сигнала.
На аналоговый входы могут подаваться сигналы в диапазоне от 0 до 5 вольт, что соответствует дискретному представлению от 0 до 1023 единиц. АЦП работает в режиме непрерывной дискретизации (с периодом около 30 мкС), но реальная дискретизация зависит от частоты считывания при помощи оператора ADC и зависит от длины цикла, в который это оператор включен.
Аналоговый вывод представляет собой на самом деле дискретный выход с ШИМ частотой 5,4 кГц. Значению 0 соответствует напряжению 0В на ШИМ выходе, а значению 1023 – напряжение питания контроллера +5В. Остальные значения соответствуют усредненному значению импульсного сигнала с шириной импульса, пропорциональной введенному при помощи оператора DAC значению. Параметры RC-цепи определяются пользователем. В общем случае, вместо R10 должна быть запаяна перемычка, а конденсатор C17 отсутствует.
Конструктивно контроллер представляет собой печатную плату размером 80 x 90 мм. С целью обеспечения возможности использования «лазерно-утюжной технологии» печатные проводники выполнены с одной стороны. Однако желательно использовать и верхний слой, как экранный, подключенный к цепи GND. Это снизит уровень электромагнитного излучения от цепей контроллера.
Под микросхему U3 желательно установить панельку. Это позволит использовать плату контроллера как “программатор”. Ведь отлаженный контроллер, предназначенный для встраивания в изделие, может иметь очень ограниченный набор компонентов. В пределе это сам AVR-микроконтроллер, кварцевый резонатор и 3 керамических конденсатора.
Вид проводников печатной платы показан на Рис.5
Рис.5
Сборочный чертёж показан ниже
Рис.6
Позиционное
обозначение
Количество
Наименование компонентов
по классификации Чип и Дип
НоминалЦены в Чип-Дип на 27.06.2006,
рублиC1…C4, C6…C9,
C13…C1713
Конденсаторы серии К10-17 импортные
0.1 мкФ 50В
0,50
C5,C10
2
Электролитические конденсаторы
47мкФ 25 В
4,60
C11,C12
Конденсаторы серии К10-17 импортные
18 пФ 50 В
0,50
D1
1
204RD св.диод красн. d=3мм
2,40
D2…D5
4
2,40
LS1
Пьезоизлучатель KPE-120
18,00
SW1…SW5
5
TS_A4PS_130
3,50
R1,R5…R9
6
С2-23-0.125 5%
470
0,70
R2…R4,R10
4
С2-23-0.125 5%
10K
0,70
U1
1
42.00
U2
1
7805
9,10
U3
1
79,00
XS1
1
DRB9FB
16,0
XS2
1
Гнездо питания DS-210
5,00
XP1…XP3
3
IDC-10,BH-10
15,00
Y1
11MHZ0592
8,40
Встроенное программное обеспечение микроконтроллера ATMEGA8 содержит интерпретатор языка Бейсик и систему загрузки текста пользовательской программы в постоянное запоминающее устройство.
В основе интерпретатора лежит код, найденный в Интернете текст интерпретатора языка Tiny Basic на языке Си под DOS, авторство не указано, текст файла датирован 1992 годом. Надо упомянуть, что Tiny Basic был разработан хакерами в середине семидесятых годов (тогда хакерами называли компьютерных самодельщиков). Существовало множество реализаций этого языка. Он имел сокращённый набор команд и размещался в нескольких килобайтах памяти. Была даже разработана спецификация на него. В то славное время Бил Гейтс трудится над своим бейсиком Альтаир и уже готов оставить учёбу в Гарварде, чтобы основать Майкрософт.
В Интернете можно найти Tiny Basic от фирмы Intel для однокристального микроконтроллера MCS-51 (INTEL INSITE LIBRARY FILE BF10:TB51 V2.2 (MCS-51 TINY BASIC). Реализация сделана на языке ассемблера.
Существует коммерческий продукт фирмы Parallax (www.parallax.com) BASIC Stamp microcontrollers, представляющий собой линейку микроконтроллеров со встроенным интерпретатором языка Parallax PBASIC. Текст программы для такого контроллера подвергается преобразованию в промежуточный язык при помощи специального программного обеспечения на персональном компьютере. Фирма позиционирует свои изделия как ПЛК для малых профессиональных проектов, учебных целей и любительского применения.
При реализации данного проекта авторы добавили в Tiny Basic ряд команд, позволяющих обслуживать периферийные устройства предлагаемого модуля. Кроме того, были добавлены, отсутствовавшие в спецификации Tiny Basic операторы SCALE и REM. Первый из них позволяет повысить точность целочисленных вычислений. Назначение второго общеизвестно. Ввод-вывод остался консольным (консолью называли телетайпный аппарат, с помощью которого оператор общался с компьютером), вместо консоли теперь можно использовать любой персональный компьютер, подключенный по интерфейсу RS-232, с запущенной терминальной программой. Причём, работа через консоль актуальна только на этапе загрузки и отладки программы или когда контроллер взаимодействует с другим устройством, например с модемом. Следует отметить, что в целях ускорения процесса загрузки пользовательской программы, использован способ обмена с квитированием. Это означает, что загрузочный кабель должен иметь в дополнение к линиям RX, TX, GND еще как минимум линии RTS,CTS.
Покажем, как нужно настроить терминальную программу для работы с контроллером на примере терминала Hyper Terminal, входящего в операционную систему WINDOWS.
Для этого нужно начать движение от меню Пуск по пути Пуск -> Программы ->Стандартные -> HyperTerminal. После чего появится окно программы HyperTerminal и диалоговое окно Описания подключения. Заполнить поле Название подключения и выбрать значок, как показано на рис.7, после чего нажать кнопку ОК.
Рис.7
Выбрать свободный коммуникационный порт, к которому предполагается подключать контроллер (Рис.8)
Рис.8
Установить параметры коммуникационного порта, как показано на рис.9
Рис.9
После чего последовательно нажать кнопки Применить и ОК
После чего порт терминала готов к работе, но требуется настройка параметров передачи символов, для чего нужно нажать на кнопку в позиции 1, как показано на Рис.10
Рис. 10
Далее в свойствах соединения необходимо выбрать закладку Параметры (Рис.10, позиция 1). На этой закладке установить эмулятор терминала ANSI или ANSIW, это позволит, при выводе на терминал, управлять цветом и позиционированием курсора. Далее нажать кнопку Параметры ASCII (Рис.10, позиция 2). Установить в параметрах ASCII дополнение символов возврата каретки переводами строк для отправляемых символов, как показано на Рис. 11.
Рис.11
Сохранить текущую настройку терминала, воспользовавшись пунктами главного меню терминала Файл -> Сохранить как. Это позволит избежать повторной настройки параметров при следующем вызове терминальной сессии.
Для запуска терминала в работу необходимо использовать пункты главного меню Вызов -> Вызов, после чего терминал готов к работе.
Подготовка контроллера для записи пользовательской Бейсик программы заключается в том, что необходимо убедиться в отсутствии перемычки JP1. Дело в том, что когда перемычка снята, контроллер, после подачи питания (или нажатия кнопки RESET) не сразу переходит на выполнение пользовательской программы, а ожидает прихода символов по интерфейсу RS-232 в течение секундного интервала – временного окна. Если за время действия временного окна пришёл символ Enter, то контроллер выводит по интерфейсу RS-232 текст содержащейся в нём программы. А если получен символ пробела, то контроллер выводит слово Reflash и ожидает текст Бейсик программы по интерфейсу RS-232. Отменить этот режим можно повторным нажатием кнопки RESET.
Ниже показан пример работы с контроллером и с консолью. В текстовом редакторе создаётся текст, а затем копируется в стандартный буфер обмена Windows
Рис.12
Далее на котроллере нажимается кнопка RESET, в течение секундного временного окна с терминала должен быть передан код клавиши пробел (просто нажимается клавиша пробела) и контроллер переходит в режим ожидания текста.
Рис.13
В терминале, по нажатию правой кнопки мышки вызывается выпадающее меню и выбирается пункт Передать главному компьютеру (главный в данном случае - контроллер).
Далее происходит передача текста в контроллер, на каждый записанный блок размером 64 байта, контроллер выводит символ W.
Рис.14
По окончании загрузки выводится OK. Для запуска приложения нужно снова нажать RESET, через одну секунду программа запустится на исполнение. Данный пример показывает весь цикл работы с контроллером. Из этого видно, что специальную программистскую “кухню” организовывать не придётся. Для загрузки в контроллер собственной программы на языке Бейсик никакого специального оборудования или программного обеспечения не требуется. Для этой цели годится практически любой компьютер, у которого есть интерфейс RS-232 и может быть запущена терминальная программа (наладонные компьютеры, ноутбуки современные и древние, настольные PC). А вот так выглядит консоль на КПК
Рис.15
Контроллерная версия языка Tiny-Basic
Особенностью данного диалекта языка Tiny Basic является то, что в одной строке записывается один оператор, и строки не нумеруются. Для обозначения точек перехода используются метки.
Операторы
- Оператор
- Действие
- Пример использования
- Описание
- Оператор вывода.
- Вывод на консоль сообщений
- Переводит вывод на новую строчку
- PRINT “Это сообщение”
- Выводит сообщение
- PRINT X
- Выводит значение переменной или выражения
- PRINT “$”;X;
- PRINT “$”;65;
- Выводит одиночный символ с кодом, указанным явно или через выражение
- PRINT “X=”;X;” “;”$”;C;
- Выводит список, символ “;”
- означает, что вывод производится подряд без пробелов. Пробелы, указанные внутри кавычек, выводятся. Символ ”;” в конце строчки означает, что следующий оператор PRINT продолжит печать в текущей строчке
- PRINT X,Y,Z,
- Выводит список, символ “,”
- означает, что вывод производится c табуляцией на 8. Символ ”,” в конце строчки означает, что следующий оператор PRINT продолжит печать в текущей строчке в текущей позиции табуляции.
- INPUT
- Оператор ввода
- INPUT X
- Выводит знак вопроса “?” и ожидает ввода числа
- INPUT “X=”,X
- Выводит сообщение в двойных кавычках и ожидает ввода числа
- INPUT “$”,C
- Ожидает ввода одиночного символа в переменную
- IF THEN
- Условный оператор
- IF X<10 THEN X=X+1
- Если условие истина, то вычисляется выражение
- IF X=0 THEN GOTO 100
- Если условие истина, то производится переход на строчку с меткой 100
- IF Z=65 THEN GOSUB 200
- Если условие истина, то производится вызов подпрограммы меткой 200
- FOR TO NEXT
- Оператор цикла
- FOR I=32 TO 127
- PRINT “$”;I,I
- NEXT
- Производит действие 127-32+1 раз с наращиванием переменной цикла. В качестве действия, вывод переменной как символа с кодом I и вывод значения переменной
- GOTO
- Оператор перехода
- GOTO 100
- Производится переход на строчку с меткой 100
- GOSUB
- Оператор вывода подпрограммы
- GOSUB 200
- Производит вызов подпрограммы меткой 200
- RETURN
- Возврат из подпрограммы
- 100 PRINT X
- RETURN
- END
- Завершает выполнение программы
- IF Z=0 THEN END
- Операторы, добавленные в контроллерную реализацию языка
- ADC
- Чтение текущего
- канала АЦП
- ADC A
- Производит чтение текущего канала АЦП в переменную
- DAC
- Вывод в ЦАП
- DAC X
- DAC 255
- DAC X+100
- Выводит в ЦАП значение, определяемое выражением
- SETB
- Установка бита
- SETB 1
- SETB X
- SETB X+1
- Устанавливает бит, номер которого определяется выражением
- CLRB
- Сброс бита
- CLRB 1
- CLRB X
- CLRB X+1
- Очищает бит, номер которого определяется выражением
- TSTB
- Чтение бита
- TSTB B,1
- TSTB B,X
- TSTB B,X+1
- Производит чтение в переменную состояния бита, номер которого определяется выражением
- DELAY
- SCALE
- Формирование задержки
- Оператор масштабирования
- DELAY 100
- DELAY X
- DELAY X + I * 10
- Формирует задержку, длительность которой определяется выражением. Дискретность задания 1 миллисекунда.
- SCALE X,100,Y
- Рассчитывает процент числа X от числа Y.
- Сначала производится умножение X на 100 и результат помещается в 32-х битную временную переменную, затем производится деление на Y, результат помещается в X
- SCALE X,1000,Y
- Тоже, но с точностью до десятых долей процента
- STOP
- Оператор останова
- Применяется только в симуляторе для отладочных целей. Когда интерпретатор встречает этот оператор, выполнение останавливается для просмотра состояния переменных и периферии. Выполнение программы может быть продолжено
- REM
- Оператор комментирования
- REM Это комментарий
- Комментарий, интерпретатор не исполняет эту строчку
- REM GOTO 100
- Шунтирование оператора GOTO, строчка превращается в комментарий
Числа:
Все числа являются знаковыми целыми в диапазоне -32767 до +32767
Переменные:
Существует 26 переменных, обозначаемых буквами от A до Z.
Внутреннее представление 16-битное.Операторы
Арифметические:
- + сложение
- - вычитание
- * умножение
- / целочисленное деление (нужно иметь в виду, что, например, 14/5=2)
- % - взятие остатка от деления (14%5=4)
- & побитное И
- | побитное или
Сравнения (используются только оператором IF):
- = равно
- > больше
- < меньше
Выражения
Выражения составляются из чисел, переменных, арифметических и битовых операторов. Операторы сравнения не могут быть использованы в выражениях. Вычисления производятся слева направо. Применением скобок можно изменить порядок вычислений.
Существует 3 уровня.
- - cначала вычисляются выражение с унарными операторами + и -.
- - затем вычисляются выражения с * / % &
- - вычисляются выражения с + - и |
Метки
Набор от 1 до 3 символов, состоящий из цифр. Метка ставится в начале строки, на которую предполагается делать переход или адресовать вызов подпрограммы
Пример допустимых меток: 10, 200, 210.Системные биты контроллера
Биты ввода
Номер бита
Назначение
1
Дискретный ввод 1
2
Дискретный ввод 2
3
Дискретный ввод 3
4
Дискретный ввод 4
126
Бит-признак наличия данных в буфере консоли. Служит для организации чтения символов на лету
Пример 1. Программа циклически считывает состояние бита ввода и выводит состояние этого бита на терминал
- 100 TSTB X,1
- IF X=1 THEN PRINT “1”
- IF X=0 THEN PRINT “0”
- GOTO 100
Пример 2. Программа на лету опрашивает состояние консоли и, если в буфере есть данные, выполняет оператор INPUT
- 10 tstb a,126
- if a=0 then goto 10
- input "$",b
- print "$";b;
- goto 10
Биты вывода
Номер бита
Назначение
1
Дискретный вывод 1
2
Дискретный вывод 2
3
Дискретный вывод 3
4
Дискретный вывод 4
127
Бит разрешения генерации звука биппером
128
Бит переключения канала АЦП
0 – канал 1
1 – канал 2Пример. Программа формирует двойной сигнал биппера
- GOSUB 200
- GOSUB 200
- END
- 200 SETB 127
- DELAY 100
- CLRB 127
- DELAY 100
- RETURN
Интерпретатор осуществляет диагностику времени исполнения. Когда встречается ошибка, выполнение останавливается, и на консоль выводятся код ошибки и номер строки, в которой ошибка была встречена.
Код ошибки
Значение ошибки
0
Синтаксическая ошибка
1
Нарушена парность скобок
2
Ожидалось выражение
3
Ожидался знак выражения
4
Ожидалась переменная
5
Таблица меток переполнена
6
Несколько меток с одинаковыми именами
7
Неопределённая метка
8
Ожидался оператор THEN
9
Ожидался оператор TO
10
Слишком много вложенных циклов
11
Встречен оператор NEXT, не принадлежащий оператору FOR
12
Слишком много вложенных подпрограмм
13
Встретился оператор RETURN, но вызова подпрограммы не было
Далее приведены небольшие проекты, реализованные с использованием данного контроллера.
1. Пример простой программы “Бегущий огонь”
- rem *********************************************
- rem * Бегущий огонь *
- rem * Состояние бита 1 изменяет направление *
- rem * перемещенияогонька *
- rem *********************************************
- print "**************************"
- print "* Running light *"
- print "* 23.06.2006 TbcGroup *"
- print "**************************"
- 100
- for i=1 to 4
- tstb y,1
- x = 5-i
- if y=1 then goto 400
- x = i
- 400
- setb x
- delay 100
- clrb x
- next
- delay 200
- goto 100
2. Покажем применение контроллера при создании электронного ключа кода Морзе. Данный вариант реализации, вполне имеет право на жизнь и хорошо демонстрирует возможности контроллера. Кроме собственно функций ключа, выполнена функция телеграфного VOX. “Ввод” скорости и времени задержки отпускания VOX производится путём измерения напряжения на движках потенциометров как показано на рисунке 16.
Рис.16
- rem *********************************************
- rem * ELBUG KEY
- rem * d - длительность элемента (точки)
- rem * p - задержка на отпускание PTT
- rem * t - "одновибратор" задержки отпускания
- rem * ВЫХодные биты:
- rem * 1 - манипуляция
- rem * 2 - PTT
- rem * ВХодные биты:
- rem * 1 - точки
- rem * 2 - тире
- rem * Аналоговые входы:
- rem * 1 - перем. резистор "Скорость манипуляции"
- rem * 2 - перем. резистор "Время удержания PTT"
- rem **********************************************
- print "**************************"
- print "* ElbugKey Version 1.1 *"
- print "* 23.06.2006 TbcGroup *"
- print "**************************"
- 50 clrb 2
- 100
- adc d
- d=d+15
- setb 128
- tstb A,1
- if a=0 then gosub 200
- tstb a,2
- if a=0 then gosub 300
- adc p
- p=p+50
- clrb 128
- if t=0 then goto 50
- t=t-1
- goto 100
- rem ------------------
- rem Подпрограмма точек
- rem ------------------
- 200 setb 1
- setb 2
- t=p
- setb 127
- clrb 3
- delay d
- clrb 1
- clrb 127
- delay d
- return
- rem ------------------
- rem Подпрограмматире
- rem ------------------
- 300 setb 2
- setb 127
- setb 1
- t=p
- delay d
- delay d
- delay d
- clrb 1
- clrb 127
- delay d
- return
3. Другой пример, автоматический измеритель КСВ
Схема включения будет иметь вид, показанный на рисунке 17
Рис.17
В данном приложении контроллер является точнее вычислителем, входящим в состав измерителя.
На входы АЦП подаются нормированные, детектированные сигналы от направленных ответвителей. Нормирование должно быть выполнено таким образом, чтобы максимальной мощности соответствовало напряжение питания AVR-микроконтроллера (5 Вольт).
Вывод показаний производится на стрелочный прибор.
Положение “С”, переключателя является сервисным и служит для градуировки шкалы при изготовлении измерителя. В этом положении (терминальная программа должна быть подключена) производится запрос ввода значений КСВ, умноженных на 100 (для КСВ 1.5 нужно вводить 150). Перед началом градуировки нужно ввести значение -1, это приведёт к тому, что в ЦАП будет выведено значение 1000, для которого нужно подобрать величину резистора R1 на ток полного отклонения стрелки миллиамперметра. Далее производить последовательный ввод значений КСВ для градуировки шкалы.
Значение резистора R1 можно предварительно рассчитать по формуле:
R1 = 0.976 * U/I – Rр,
- где U – напряжение питания контроллера;
- I – ток полного отклонения стрелки прибора;
- Rр – сопротивление рамки постоянному току.
Назначение некоторых переменных в программе:
- N – количество отсчётов для усреднения;
- K – определяет “растяжку” шкалы”
Конечная точка шкалы в КСВ определяется по формуле КСВ=(10+K)/K
- Ноль шкалы соответствует КСВ=1
- При K=1, конечная точка шкалы 11
- При K=2, конечная точка шкалы 6
- При K=3, конечная точка шкалы 4.333
- При K=4, конечная точка шкалы 3.5
- При K=5, конечная точка шкалы 3
- При K=6, конечная точка шкалы 2.666
- PRINT "**************************"
- PRINT "* SWR-meter Version 1.0 *"
- PRINT "* 24.06.2006 TbcGroup *"
- PRINT "**************************"
- N=10
- K=4
- 50 CLRB 1
- F=0
- R=0
- FOR I=1 TO N
- CLRB 128
- ADC A
- F=F+A
- SETB 128
- ADC A
- R=R+A
- NEXT
- F=F/N
- R=R/N
- TSTB A,1
- IF A=0 THEN GOSUB 100
- TSTB A,2
- IF A=0 THEN GOSUB 200
- TSTB A,3
- IF A=0 THEN GOSUB 300
- TSTB A,4
- IF A=0 THEN GOSUB 400
- IF D>1023 THEN D=1023
- DAC D
- GOTO 50
- REM---------------------------
- REM Вывод КСВ
- REM---------------------------
- 100 X=F+R
- Y=F-R
- IF Y=0 THEN GOTO 110
- SCALE X, K*100, Y
- PRINT "F=";F;" R=";R;" SWR=";X/K
- D=X-K*100
- RETURN
- 110 SETB 1
- DELAY 250
- PRINT "SWR can't be calculated"
- D = 1023
- RETURN
- REM---------------------------
- REM Вывод падающей мощности
- REM---------------------------
- 200 D=F
- PRINT "F=";F
- RETURN
- REM---------------------------
- REM Вывод отражённой мощности
- REM---------------------------
- 300 D=R
- PRINT "R=";R
- RETURN
- REM---------------------------
- REM Градуировка
- REM---------------------------
- 400 INPUT "SWR=",X
- D=K*(X-100)
- IF X=-1 THEN D=1000
- PRINT D
- RETURN
На этом заканчивается раздел, показывающий возможные применения данного контроллера.
Следующий раздел посвящен описанию программы симулятора данного контроллера.
Для того, чтобы можно было в комфортных условиях, не прибегая к программированию реального контроллера, освоить язык, отладить алгоритмы, произвести предварительное тестирование, был разработан симулятор контроллера на PC. Симулятор эмулирует практически все ресурсы реального контроллера, за исключением эмуляции биппера, к тому же консоль симулятора не распознаёт управляющие последовательности ANSI терминала.
Симулятор позволяет создавать, сохранять, загружать тексты программ и запускать их в работу. Возможно пошаговое исполнение команд, запуск и останов на лету. Для остановки программы в нужном месте, в текст вставляется оператор STOP, после чего программу нужно перезапустить. При выполнении оператора STOP, исполнение останавливается. Можно просмотреть состояние переменных и периферии и продолжить исполнение в пошаговом режиме или в режиме запуска. Панель симулятора показана на Рис.18.
Рис.18
Все ресурсы контроллера лежат на поверхности, видны все переменные и периферия. Загрузка, сохранение программ производится через меню File командами Load, Save и Save as…
Процесс отладки производится четырьмя клавишами или соответствующими кнопками
F2 – принудительный останов запущенной программы. Программа останавливается на следующем операторе. Текущий оператор будет выполнен до конца. Поэтому, например задержка, сформированная оператором DELAY, будет выполнена до конца и только после этого произойдёт останов на следующей строчке. После останова можно модифицировать переменные и изменять состояние других ресурсов.
F4 – Сброс симулятора,
F9 – запуск программы, при этом обнуляются все переменные. После запуска можно наблюдать состояние ресурсов и влиять на ресурсы (дискретный, аналоговый ввод и состояние бита готовности данных в приёмнике RS-232)
F8 – пошаговое исполнение, при этом индицируется текущее состояние всех ресурсов контроллера.
В окне редактора работают все обычные операции копирования, вставки и отмены, вызываемые по Ctrl+C, Ctrl+V,Ctrl+Z
Документация в электронном виде, файл для программирования микроконтроллера ATMEGA8 и симулятор
Авторы:
Александр Костюк (UA6ANN)
Евгений Фадеев (RV3BJ)Эта статья опубликована в журнале "Радио" 2006, №10,11.