Программируемый логический контроллер

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

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

Контроллерная реализация Бейсика имеет средства для работы с линиями ввода-вывода, с АЦП и ЦАП. Внешний вид контроллера показан на рис.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…C17

13

Конденсаторы серии К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

204GD св.диод зел. d=3мм

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

ICL232CPE=HIN232CP(MAX232CPE)PDIP16

42.00

U2

1

7805

9,10

U3

1

ATmega8-16PI PDIP28

79,00

XS1

1

DRB9FB

16,0

XS2

1

Гнездо питания DS-210

5,00

XP1…XP3

3

IDC-10,BH-10

15,00

Y1

Кв.рез. 11.0592 МГц имп. HC-49U

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
Переводит вывод на новую строчку
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 "**************************"
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 "**************************"
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 – ток полного отклонения стрелки прибора;
– сопротивление рамки постоянному току.

Назначение некоторых переменных в программе:

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 "**************************"
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.