Читаем PIC-микроконтроллеры. Все, что вам необходимо знать полностью

Выполнение различных операций, поддерживаемых термометром, таких как «Преобразование» (h’44’) и «Чтение температуры» (h’BE’), инициируется ведущим посылкой соответствующих 8-битных значений. Процесс передачи каждого из этих значений начинается с посылки старт-бита (), за которым следуют восемь слотов записи, как показано на Рис. 12.28, б. Как и в случае шины I2С, состояние ВЫСОКОГО уровня на линии данных DQ формируется за счет ее подтяжки к шине питания, соответственно ведущий имитирует посылку лог. 1 переключением линии порта на вход (см. Рис. 12.14,б). В этом состоянии ведущий может контролировать линию на предмет данных, посылаемых ведомым, как показано на Рис. 12.28, в.

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

Решение

Из Рис. 12.28, б видно, что процесс записи одного бита в ведомое устройство состоит из следующих этапов:

1. Ведущий инициирует процесс обмена, выставляя на линию данных НИЗКИЙ уровень на время не менее 1 мкс.

2. Ведущий либо оставляет на линии НИЗКИЙ уровень (запись лог. 0), либо высвобождает линию (запись лог. 1) на время 60…120 мкс.

3. Ведомый считывает состояние линии через 15…45 мкс после начала слота.

4. Ведущий освобождает линию (если он записывал лог. 0) на время не менее 1 мкс для приведения системы в исходное состояние.

В подпрограммах, код которых приведен в Программе 12.20, предполагается, что вывод порта, управляющий линией данных DQ, уже сконфигурирован так же, как и выводы, управляющие линиями шины I2С (см. стр. 396), — жесткий НИЗКИЙ уровень и открытый выход, подтянутый к линии питания для формирования ВЫСОКОГО уровня. Также мы предполагаем, что в нашем распоряжении имеется макрокоманда Delay_us, которая формирует задержку длительностью K мкс, где К — параметр, передаваемый в макрокоманду.

Delay_us macro К; К — длительность задержки в мкс

              local DELAY_US_LOOP

              movlw (K*XTAL)/(4*3)+1; 1~

DELAY_US_LOOP

              addlw -1; Декрементируем счетчик: N~

              btfss STATUS,Z; до нуля: N + 1~

                 goto DELAY_US_LOOP;:2(N — 1)~

              endm

Дополнительная операция прибавления единицы в выражении для вычисления количества итераций цикла предназначена для округления К в бóльшую сторону

Выполнение обеих подпрограмм начинается с выставления на линию DQ НИЗКОГО уровня на время не менее 1 мкс, в результате чего на линии формируется состояние СТАРТ Запись каждого бита на шину происходит в слоте длительностью 60…120 мкс и инициируется либо выдачей на линию НИЗКОГО уровня (0), либо ее высвобождением (1). Ведомый считывает состояние линии данных через 15 мкс после начала временного слота. Хотя длительность временного слота и не критична, необходимо быть внимательным, поскольку состояние НИЗКОГО уровня длительностью 480…960 мкс интерпретируется ведомым как команда сброса (см. Вопрос для самопроверки 12.3).

Для передачи одного байта используются восемь временных слотов, разделенных паузами длительностью не менее 1 мкс. Значение, передаваемое в каждом слоте, соответствует значению флага переноса, которое формируется в результате циклического сдвига байта данных DATA_OUT. После восьми циклов сдвига/выдачи процесс завершается.

Чтение байта из ведомого устройства происходит следующим образом:

1. Ведущий инициирует процесс чтения, выставляя на линию НИЗКИЙ уровень на время не менее 1 мкс.

2. Ведущий считывает значение бита, выдаваемое на линию ведомым, которое должно быть корректным в течение 15 мкс после формирования фронта состояния СТАРТ.

3. Через 15 мкс ведомый высвобождает линию, на которой к моменту завершения 60-мкс слота в результате подтяжки должен появиться ВЫСОКИЙ

4. Ведущий ждет не менее 1 мкс перед формированием следующего слота.

Указанный алгоритм реализуется подпрограммой чтения READ_1W, которая считывает состояние линии данных до наступления 15 мкс с момента начала временного слота, т. е. в тот момент, когда напряжение на линии, определяемое ведомым, уже установилось. Значение считанного бита используется для установки/сброса флага переноса, который затем вдвигается в переменную DATA_IN. После восьми операций чтения/сдвига в этой переменной окажется принятый байт данных.

В отличие от протокола I2С, протокол 1-Wire предполагает наличие только одного ведущего устройства. Однако все ведомые устройства имеют уникальный 64-битный адрес, хранящийся во внутреннем ПЗУ. Первые восемь битов обозначают код семейства 1-Wire, к примеру, микросхема DS18S20 имеет код h’10’. Следующие 48 бит являются уникальным серийным номером, а последние восемь битов представляют собой контрольную сумму всех предыдущих байтов.

Программа 12.20. Подпрограммы чтения и записи по шине 1-Wire

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

Все книги серии Программируемые системы

PIC-микроконтроллеры. Все, что вам необходимо знать
PIC-микроконтроллеры. Все, что вам необходимо знать

Данная книга представляет собой исчерпывающее руководство по микроконтроллерам семейства PIC компании Microchip, являющегося промышленным стандартом в области встраиваемых цифровых устройств. В книге подробно описывается архитектура и система команд 8-битных микроконтроллеров PIC, на конкретных примерах изучается работа их периферийных модулей.В первой части излагаются основы цифровой схемотехники, математической логики и архитектуры вычислительных систем. Вторая часть посвящена различным аспектам программирования PIC-микроконтроллеров среднего уровня: описывается набор команд, рассматривается написание программ на ассемблере и языке высокого уровня (Си), а также поддержка подпрограмм и прерываний. В третьей части изучаются аппаратные аспекты взаимодействия микроконтроллера с окружающим миром и обработки прерываний. Рассматриваются такие вопросы, как параллельный и последовательный ввод/вывод данных, временные соотношения, обработка аналоговых сигналов и использование EEPROM. В заключение приводится пример разработки реального устройства. На этом примере также демонстрируются простейшие методики отладки и тестирования, применяемые при разработке реальных устройств.Книга рассчитана на самый широкий круг читателей — от любителей до инженеров, при этом для понимания содержащегося в ней материала вовсе не требуется каких-то специальных знаний в области программирования, электроники или цифровой схемотехники. Эта книга будет также полезна студентам, обучающимся по специальностям «Радиоэлектроника» и «Вычислительная техника», которые смогут использовать ее в качестве учебного пособия при прослушивании соответствующих курсов или выполнении курсовых проектов.

Сид Катцен

Радиоэлектроника

Похожие книги

Электроника для начинающих
Электроника для начинающих

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию для защиты от проникновения в дом, елочные огни, электронные украшения для одежды, устройство преобразования звука, кодовый замок, автономную роботизированную тележку и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий.Для начинающих радиолюбителей

Паоло Аливерти , Чарльз Платт

Радиоэлектроника / Технические науки