Файл: Учимся программировать микроконтроллеры Pic на языке PicBasicPro (В.В. Хилинский, 2007).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 17.06.2025
Просмотров: 1779
Скачиваний: 8
ведомых устройств. Если все устройства в первом разряде ИК содержат 1, то Мастер считает 10b. Аналогично, если значения 1 разряда всех устройств равно 0, то Мастер примет 01b. В этих случаях, бит может быть сохранен как значение первого бита всех адресов. После этого Мастер снова выполняет размещение этого бита на шине, чем сигнализирует ведомым о необходимости дальнейшего продолжения передачи разрядов ИК. Если на шине будут присутствовать устройства, как с лог. 0, так и с лог. 1 в первом бите идентификатора, то Мастер примет 00. В этом случае, Мастер должен выбрать с какими адресами продолжать работу, с лог. 0 или 1 в первом разряде. Выбор передается по шине, указывая выбранным подчиненным о необходимости дальнейшей передачи ИК, а остальные ведомые переходят в режим ожидания.
Затем Мастер переходит к считыванию следующих бит и этот процесс повторяется до считывания всех 64 бит. В результате Мастер обнаруживает полный 64-разрядный идентификатор. Для поиска других идентификаторов необходимо снова инициировать команду «Поиск ПЗУ», но в этом случае при возникновении несоответствий сделать другой выбор. Если придерживаться данной последовательности, то в конечном счете можно обнаружить все ведомые устройства. Обратите внимание, что после выполнения первого поиска все ведомые, кроме одного, переходят в режим ожидания. Таким образом, в этом состоянии связаться с активным ведомым можно с помощью команды «Совпадение ПЗУ».
Команды памяти/функций.
Команды памяти/функций – команды, которые специфичны для конкретного типа устройства или их класса работающего по однопроводному интерфейсу. Обычно эти команды относятся к чтению или записи внутренней памяти и регистров ведомых устройств. Количество таких команд фиксировано, но все они поддерживаются конкретным видом ведомого устройства. Последовательность чтения и записи определена для каждой ИС.
Проверка истинности данных циклическим избыточным кодом ЦИК (CRC).
Как уже говорилось, отличительной чертой всех устройств работающих по однопроводному протоколу фирмы Dallas Semiconductor является наличие у каждого устройства индивидуального идентификационного кода. Размер этого кода составляет 64 бита. Младший байт содержит код, свидетельствующий о принадлежности к семейству с однопроводным интерфейсом, определяя одновременно функциональную принадлежность прибора. Следующие 6 байт ПЗУ содержат уникальный серийный номер конкретного экземпляра. И наконец старший байт ПЗУ представляет собой результат проверки истинности данных циклическим избыточным кодом – ЦИК (cyclic redundancy check – CRC). Этот код вычисляется на основе предыдущих семи байтов. Если ЦИК рассчитанный Мастером на основе принятых (семи младших байтов) совпадает с содержимым 8
178
байта ПЗУ, то считается, что данные приняты верно. Если эти данные не совпадают, то процесс чтения ПЗУ повторяется.
Работу схемы расчета ЦИК проще всего объяснить на примере ее аппаратной реализации. В этом случае схема представляет собой сдвиговый регистр с обратной связью (см. рис. 47).
Команды памяти/функций.
Команды памяти/функций – команды, которые специфичны для конкретного типа ИС или их класса. Обычно эти команды относятся к чтению или записи внутренней памяти и регистров подчиненных ИС. Количество таких команд фиксировано, но все они поддерживаются конкретным видом подчиненного устройства. Последовательность чтения и записи определена для каждой ИС. В связи с этим команды памяти здесь в подробностях не рассматриваются.
Рисунок 47. Аппаратная реализация 8-битового алгоритма проверки истинности данных ЦИК, соответствующая математической функции X8+X5+X4+1.
Процедуру выделения ошибки часто описывают в виде полиноминальной функции формальной переменной Х . Показатели степени ненулевых членов полинома показывают, на какие разряды сдвигового регистра замыкаются петли обратной связи. Число разрядов сдвигового регистра (в аппаратной реализации) или степень полинома (при математическом описании) определяют разрядность вычисляемого ЦИК. Обычно при цифровом обмене данными используют 16разрядные ЦИК. Фирма Dallas Semiconductor при чтении 64 битовых ПЗУ своих устройств использует 8-разрядные ЦИК. Расположение точек входа петель обратной связи, обозначенных на рис. 47 логическими элементами «исключающее ИЛИ» (или, что то же самое, степени ненулевых членов полинома) определяет свойства ЦИК и способность алгоритма выявить определенные классы ошибок при передаче данных. Алгоритм, приведенный на рисунке, способен распознать следующие классы ошибок:
•Любое нечетное число ошибок в любом месте 64-битовой последовательности.
•Все двойные ошибки (ошибки в двух смежных битах) в любом месте 64битовой последовательности.
•Любые кластеры ошибок в пределах 8-битового «окна», т.е. кластеры, содержащие от 1 до 8 неправильных битов.
•Большинство кластерных ошибок с размерами кластера, превышающим 8 разрядов.
179
Входные данные подаются на один из входов двухвходового логического элемента «исключающее ИЛИ» (XOR). Ко второму входу этого элемента подключается выход старшего разряда 8-разрядного сдвигового регистра. Математически сдвиговый регистр может рассматриваться как схема деления. Входные данные – это делимое, а сдвиговый регистр с цепями обратной связи служит делителем. Целая часть полученного частного отбрасывается, а остаток представляет собой искомый ЦИК, который окажется в сдвиговом регистре, как только последний бит данных пройдет на вход. Из такого аппаратного описания алгоритма видно, что результат (значение ЦИК) очень сложным образом зависит от предыстории контролируемой последовательности битов. Поэтому комбинации ошибок, способными пройти незамеченными через такой контроль, очень редки.
Приложение 2.
Протокол Х10.
Исторически Х10 (он же Х-10) является первым стандартом передачи сигналов домашней автоматизации. Технология Х10 была изобретена и запатентована в конце 70-х годов шотландской инженерной фирмой PICO Electronics, со штабквартирой в Англии. Инженеры PICO впоследствии перебазировались в НьюЙорк, и продолжили свои работы по развитию методов дистанционного управления проигрывателями, используя готовую электропроводку для передачи сигналов. После выполнения девяти экспериментальных проектов именно десятый оказался наиболее успешным (отсюда название Х10) и именно его результаты определили стандарт передачи сигналов по силовой электропроводке. Группа разработчиков Х10 назвала свою новую компанию по автоматизации домов X10 USA (X10 Inc).
Сегодня, много компаний производят Х10-совместимые устройства: X10 Inc., Leviton, Marmitek, IBM, SmartLinc, PowerHouse и другие.
Что такое Х10?
X10 - широко используемый стандарт в области домашней автоматизации. X10 определяет метод и протокол передачи управляющих сигналов-команд (включить, выключить, ярче, темнее и т.д.) по силовой электропроводке на электронные модули, к которым подключены управляемые электробытовые и осветительные приборы.
Всего в сеть X10 может быть объединено до 256 групп устройств с разными адресами.
Технология передачи сигналов Х10.
Х10 - протокол взаимодействия передатчиков и приемников, включает в себя передачу и прием сигналов по силовым линиям (бытовая электросеть).
Этими сигналами являются пакеты импульсов, которые кодируют цифровую информацию.
Бинарная единица в протоколе Х10 представляет собой пакет длительностью 1
180
мс заполненный импульсами частотой 120 Гц и амплитудой 5 В. Бинарный ноль - отсутствие такого сигнала.
Рис. 48. Осциллограмма сетевого напряжения, в котором присутствуют сигналы протокола Х10.
Передача импульсов синхронизирована переходом переменного напряжения через нулевой уровень в пределах 200 мкс интервала. Так как дом может быть подключенным к трёхфазной сети и на каждой фазе могут присутствовать приемники Х10 сигналов, то единичный импульс повторяется три раза, а каждый пакет сдвинут по времени от предыдущего на 2.778 мс для сети 60 Гц. Если же вы имеете дело с сетью 50 Гц, то сигнал повторяется через 3,33 мс.
Для передачи команды Х10 требуется одиннадцать периодов сетевого напряжения.
Первые два цикла передают стартовый код, следующие четыре цикла представляют код дома (с А по Р) и последние пять циклов передают код прибора (с 1 по 16) или код функции (ВКЛ, ВЫКЛ и т.д.), т.е. ключевой код.
Рис. 49. Формат передачи полного кода.
Этот полный код (стартовый код + код дома + ключевой код) всегда передается дважды непрерывным блоком (Рис. 49) Между блоками разных команд всегда должен быть перерыв в три цикла силового напряжения. Исключением из этого правила являются блоки команд ЯРЧЕ/ТЕМНЕЕ, которые передаются последовательно (минимум два блока) без задержек.
Стартовый код - это уникальный код, всегда равный 1110 и не имеющий дополняющих бит в смежных полупериодах, т.е. значащие биты передаются на каждый переход силового напряжения через нуль.
Внутри каждого блока, код дома и ключевой код должны передаваться с дополняющими до единицы кодами в смежных полупериодах силового
181
напряжения. Например, если единичный импульс передан в первой половине |
||||||||||
периода, то во второй не должно быть никакого сигнала (нулевой бит). Смотри |
||||||||||
рисунок 50. |
||||||||||
Рис. 50. Распределение кодов на осциллограмме сетевого напряжения. |
||||||||||
Таблица значений кодов протокола Х10 |
Таблица 34. |
|||||||||
КОДЫ ДОМОВ |
КЛЮЧЕВЫЕ КОДЫ |
|||||||||
H1 |
H2 |
H4 |
H8 |
D1 |
D2 |
D4 |
D8 |
D16 |
||
A |
0 |
1 |
1 |
0 |
1 |
0 |
1 |
1 |
0 |
0 |
B |
1 |
1 |
1 |
0 |
2 |
1 |
1 |
1 |
0 |
0 |
C |
0 |
0 |
1 |
0 |
3 |
0 |
0 |
1 |
0 |
0 |
D |
1 |
0 |
1 |
0 |
4 |
1 |
0 |
1 |
0 |
0 |
E |
0 |
0 |
0 |
1 |
5 |
0 |
0 |
0 |
1 |
0 |
H |
1 |
1 |
0 |
1 |
6 |
1 |
1 |
0 |
1 |
0 |
F |
1 |
0 |
0 |
1 |
7 |
1 |
0 |
0 |
1 |
0 |
G |
0 |
1 |
0 |
1 |
8 |
0 |
1 |
0 |
1 |
0 |
I |
0 |
1 |
1 |
1 |
9 |
0 |
1 |
1 |
1 |
0 |
J |
1 |
1 |
1 |
1 |
10 |
1 |
1 |
1 |
1 |
0 |
K |
0 |
0 |
1 |
1 |
11 |
0 |
0 |
1 |
1 |
0 |
L |
1 |
0 |
1 |
1 |
12 |
1 |
0 |
1 |
1 |
0 |
M |
0 |
0 |
0 |
0 |
13 |
0 |
0 |
0 |
0 |
0 |
N |
1 |
0 |
0 |
0 |
14 |
1 |
0 |
0 |
0 |
0 |
O |
0 |
1 |
0 |
0 |
15 |
0 |
1 |
0 |
0 |
0 |
P |
1 |
1 |
0 |
0 |
16 |
1 |
1 |
0 |
0 |
0 |
Все модули ВЫКЛ |
0 |
0 |
0 |
0 |
1 |
|||||
Весь свет ВКЛ |
0 |
0 |
0 |
1 |
1 |
|||||
ВКЛ |
0 |
0 |
1 |
0 |
1 |
|||||
ВЫКЛ |
0 |
0 |
1 |
1 |
1 |
|||||
ТЕМНЕЕ |
0 |
1 |
0 |
0 |
1 |
|||||
ЯРЧЕ |
0 |
1 |
0 |
1 |
1 |
|||||
182 |
||||||||||
Весь свет ВЫКЛ |
0 |
1 |
1 |
0 |
1 |
||||||||
Дополнительный код |
0 |
1 |
1 |
1 |
1 |
||||||||
[1] |
HALT |
1 |
0 |
0 |
0 |
1 |
|||||||
запрос |
|||||||||||||
HALT ответ |
1 |
0 |
0 |
1 |
1 |
||||||||
[2] |
Предустановка |
1 |
0 |
1 |
х |
1 |
|||||||
диммера |
|||||||||||||
[3] |
Дополнительные |
1 |
0 |
1 |
1 |
1 |
|||||||
данные |
|||||||||||||
Статус = ВКЛ |
1 |
1 |
0 |
0 |
1 |
||||||||
Статус = ВЫКЛ |
1 |
1 |
0 |
1 |
1 |
||||||||
Запрос статуса |
1 |
1 |
1 |
1 |
1 |
||||||||
1)- HAIL запрос (запрос-приветствие) передается для нахождения передатчиков в зоне покрытия. Это позволяет выставить различные коды домов в случае получения ответа Hail Acknowledge.
2)- В коде функции Pre-Set Dim, бит D8 вместе с четырьмя битами кода дома составляет блок из 5 бит {D8H8H4H2H1}, определяющий абсолютный уровень диммера.
3)- Функция Extended Data (дополнительные данные) предшествует последовательности байт (8 бит) произвольной длины, которые представляют аналоговые данные после аналогово-цифрового преобразования. Код функции и байты данных передаются непрерывно, без пауз. Первый байт данных может указывать на количество байт в последовательности. Если при передаче в последовательности байт допущены паузы, то модуль – приемник может выполнить ошибочную операцию.
Функция Extended Code эквивалентна Extended Data: последовательность байт (без пауз), которые представляют дополнительные коды. Это позволяет разработчикам использовать больше 256 имеющихся кодов.
Первые из 16 ключевых кодов определяют номер модуля, который в дальнейшем будет принимать и выполнять команды (ВКЛ, ВЫКЛ, ЯРЧЕ, ТЕМНЕЕ) до переопределения управляемого модуля. Бит D16 называется "функциональным битом", если он равен 1, то передается функция, иначе код модуля.
Приведем пример. Чтобы включить 5-ый модуль в "доме К", нужно послать по электросети следующую строку бит:
1110010110100101011001111001011010010101100100000011100101101001011001
101110010110100101100110.
Эта посылка содержит 94 бита, и займет 47 циклов силового напряжения или 0,94 с (почти секунда!). Поэтому, когда вы нажимаете на кнопку ВКЛ, свет
183