Во второй схеме питание устройств осуществляется информационными импульсами, передаваемыми по шине данных.
![]()
Исходные состояния на шине определяются источником питания U=5В – это напряжение подается с помощью подтягивающего регистра. Информация между master и slave подается путем закорачивания шины на общий провод. Как только master или slave отпускает шину, на ней тут же устанавливается высокий уровень напряжения. Если шина устанавливается в 0 на интервале не менее 480 мкс (60x8), помощники будут сброшены и информация в них потеряна. Получить доступ к какому-либо устройству на шине можно в следующей последовательности:
Все операции начинаются с импульса сброса, который формирует мастер. Вслед за сбросом устройство-помощник формирует ответный импульс присутствия. Если хотя бы одно устройство подключено, оно ответит. После получения импульса присутствия мастер передает адрес устройства, к которому он хочет обратиться.
Временная диаграмма (как происходит инициализация)
![]()
После того, как мастер получит ответ, он может передавать одну из команд функций ПЗУ. Передача ведется путем формирования мастером специальных временных интервалов (time slots). Каждый интервал служит для передачи 1 бита.
Первым передается младший бит, интервал начинается импульсом низкого уровня (1-15 мкс). Далее шина отпускается, устанавливается 0 или 1 и передается непосредственно информационный блок. В подчиненном устройстве запускается схема временной задержки, которая определяет момент считывания данных (около 30 мкс()оторая определяет момент считывания данныхменноц задержкиу из команд функций ПЗУи:
ормации.). Максимальное время задержки 60 мкс. Передаваемый бит должен удерживаться мастером в течение 60-120 мкс от начала интервала. Временной интервал завершается переводом шины в 1 на время не менее 1 мкс.
ПЕРЕДАЧА 0:
![]()
ПЕРЕДАЧА 1:
![]()
Запись данных
Передача 0 и 1 отличается длительностью отрицательного импульса, который формирует мастер. Если передается 1, то длительность отрицательного импульса равна 1-15 мкс, если передается 0 – длительность 60 мкс.
Чтение данных
Мастер формирует импульс 1-15 мкс. Затем он должен освободить шину для того, чтобы дать возможность подчиненному устройству вывести бит данных. По отрицательному фронту подчиненное устройство сразу выводит на шину бит данных и запускает схему задержки, определяющую, как долго этот бит данных будет на шине. Время задержки – 15-60 мкс. Момент считывания данных мастером должен быть как можно дальше от начала интервала, но не позднее 15 мкс.
![]()
Как задавать временные интервалы
Будем использовать таймер T0 в 16-разрядном режиме. Частота импульсов на входе таймера равна 2,097152 МГц (это частота ядра по умолчанию). С такой частотой идут импульсы при запуске.
![]()
Пример
Надо задать временной интервал 10 мс. Этому интервалу соответствует 20971,52 период.
Переполнение таймера происходит, когда в нем записан код 65535. Нам нужно сформировать количество импульсов 20971,52, чтобы таймер переполнился. Для того чтобы флаг переполнения установился в 1 через 10мкс после запуска, в таймер нужно записать число 65535-20971,52 = 4456410=AE1416.
f10(){
TMOD=Ox1; // 16-разрядный режим
TH0=0xAE;
TL0=0x14;
TCON=0x10; // запуск T0
while (!TF0); // дождаться переполнения
}
t480(){
…………
TH0=0xFC;
TL0=0x11;
…………}
Можно учитывать время выполнения одной команды t=0,477.
Схема подключения температурного датчика DS1820
![]()
Сброс (инициализация)
unsigned char Init DS1820(){
int temp;
Into=0; // сброс шины
t480(); // пауза 480 мкс
Into=1;t=30;
if(Into) temp=1;else temp=0;
t300();
return temp;
}
![]()
Запись бита
DS1820 Wbit (bit D){
Into=0;
t7(); // пауза 7 мкс
Into=D;
t60(); // удержание на шине в течение 60 мкс
Into=1; //отпускаем шину
}
![]()
Чтение бита
bit DS1820 Rbit (){
bit temp;
Into=0;
t3(); // короткий импульс
Into=1;
t7(); // пауза 7 мкс
temp=Into; // чтение бита
t60();
return temp;
}
![]()
Запись байта
DS1820 Wbyte (unsigned char D){
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.