Программное обеспечение МПС

При старте программы выполняется инициализацию параметров.

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

Описание алгоритма программы

В объявлении переменных:

Через имена sbit s1, s2, s3 привязывают соответствующие порты контроля датчиков начального положения зажима, выноса и раскрытия стрелы; ll - левое препятствие, rr- датчик правого препятствия; scl, sda - используются для тактирования обмена через последовательные каналы I2С c флеш памятью; k1, k2 - порты, к которым подключены управляющие клавиши: клавиша 1 - Start\stop, для контроля состояния используется флаг Startstop; так же используется еще один флаг Readwrite, который нужен для указания направления передачи во флеш-ПЗУ; pozin - номер загружаемого элемента; счетчики i, j, k, n, p; keyold - предшествующее состояние клавиатуры для отслеживания момента нажатия; p1, p2, p3 - задаваемое положение по каждому из шаговых двигателей; p11, p21, p31 - предшествующие положения по каждому из двигателей; command - команда от компьютера; hadrl - старшая младшая часть адреса при записи\чтении во флеш-ПЗУ; dd1, dd2, dd3, dd4, dd5 - используют только младшую тетраду для задания управляющего слова.

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

Процедура dalay организует задержку, кратную 5мс, чтобы тактировать передачу данных по последовательному каналу I2C. c - данная процедура выполняет, в зависимости от флага readwrite, запись или чтение блоков данных в массиве din, при этом выполнятся последовательность инициализации канала через формирование стартового импульса. Далее в переменную P заносятся префиксный адрес - указатель на то, что это флеш-ПЗУ, так же добавляется бит записи\чтения. Передача выполняется путем контроля младшего бита и если он равен 1, то в момент когда сигнал scl равен 0, линию sda устанавливаем равной 1. После этого производится подвижка передаваемого байта и выдерживается пауза тактирования, равное 25 мкс, и сигнал scl выставляется в состояние 1, указывая устройству, что необходимо считать передаваемые данные, после чего сигнал scl снова переводится в 0. Таким образом выполняется 8 циклов передачи. Далее необходимо принять сигнал подтверждения со стороны ПЗУ о том, что префикс принят и обработан. Для этого мы в течении необходимого времени меняем состояние сигнала scl с 1 на 0 и если при единичном сигнале scl считывается 0, это означает что чип ПЗУ сформировал сигнал ответа, подтверждающий факт обработки данных. Далее выполняется таким же образом передача адреса старшей и младшей части. Далее идут процедуры чтения или записи, по 10 байт, массив din.

Учитывая формат пакета управления, когда первые 6б указывают следующее положение манипулятора, 4 и 5 записи по 2 байта задают: направление движения (7-ой бит старшего байта, 1 правое вращение, 0 - левое вращение) и длительность движения в десятках миллисекунд (оставшиеся 7 бит старшего байта) и младший байт задает число повторов(max 255сек) в движении в текущем направлении.

Чтение производится следующим образом: выполняем формирование тактирующего сигнала с периодом, примерно равным 100 микросек. Данный период определен техническими параметрами микросхемы и если на шине при нулевом сигнале выставляется единица и тактируя единичным сигналом scl мы проверяем состояние сигнала sda, если он равен 1, то мы в промежуточную переменную устанавливаем 7-ой бит, равный 1. После чего сдвигаем ее на 1 вправо. Таким образом выполняя весь цикл мы осуществляем прием 8-ми бит, после чего эти данные переносятся в массив din. Sda устанавливается в 0, формируя сигнал подтверждения для ПЗУ, после чего пауза в 50 микросек. и еще на 50 микросек. scl=1. Так организуется сигнал ответа ACK со стороны мастера для флеш-ПЗУ, говоря ей, что можно продолжить обмен.

Если флаг readwrite=0, выполняем запись 10 байт данных, присланных компьютером. Процедура аналогична приему, только теперь мы формируем записываемый бит сами, и передаем так 8 бит начиная с младшего. Если младший бит больше 0, то тогда sda=1, иначе sda=0. Выдержка нужных задержек: scl=0 - 50 мкс, scl=1 - 50 мкс. Далее повторяем процедуру ACK от ПЗУ. Так записывается 10 байт. По окончанию выполняется формирование стопового импульса, когда при scl=1.

Далее рассмотрим процедуру обработчика прерывания таймера.

Устанавливаем начальное значение счетчика th, tl

В переменной yprdvig: 0000 (стоп), 0110 (вперед), 1001 (назад), 0101 (вправо), 1010 (влево). Далее задана переменная, определяющая время движения в заданном направлении - timedvig - int. Если предыдущее состояние timedvig равно 0, то тогда платформа выполняет команду стоп - if(--timedvig=0) napr = 0

Делаем обнуление адресов для начала приема данных. Если обнаружено, что команда равна ff, то тогда далее ведется прием блока данных. Для этого дополнительно команду назначаем равной ff. По каждому событию RI проверяем, пока команда равна ff и данные, записанные не во всю ПЗУ каждый следующий байт принимаем, если принято 10 байт, записываем их.

Перейти на страницу: 1 2 3

Прочтите также:

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

Разработка генератора сигнала специальной формы
Вторая половина ХХ века характеризуется усложнением электронной аппаратуры. В профессиональной аппаратуре начинают широко использоваться системы автоматического регулирования. Элект ...

Разработка мощного понижающего ШИМ-преобразователя
Прогресс большинства областей современной техники неразрывно связан с успехами энергетической или силовой электроники. Её значимость определяется все возрастающей потребностью в эффекти ...

Основные разделы

2020 © Все права защищены! >> www.techeducator.ru