Академический Документы
Профессиональный Документы
Культура Документы
1
Подождав буквально секунду (все дела делаются быстро, да и программа
одноцикловая), нужно выключить питание, вынуть ПИК из панельки устройства, после
чего произвести, например, в PonyProg или IcProg105 стандартное считывание.
После его окончания, нужно прокрутить “портянку”, с результатами считывания, до
конца вниз, и в районе области EEPROM памяти “завизуализировать” результат.
Этот результат будет представлять собой 8 байтов, считанных из ПЗУ DS1820,
расположенных в первых 8-ми ячейках EEPROM памяти ПИКа в следующем порядке:
В ячейке с адресом 07h будет “лежать” строго фиксированное число 10h.
Это код устройства. Он одинаков для всех DS1820 (DS18S20).
При определении порядка старшинства, на это числовое значение можно
ориентироваться.
В ячейках с адресами 06h … 01h Вы увидите числовые значения 6-ти байтов серийного
номера.
В ячейке с адресом 00h Вы увидите числовое значение контрольной суммы (байт со
стандартным названием CRC).
Все это “добро” нужно переписать на бумагу, а соответствующий датчик как-то
пометить.
Приведу пример результата считывания содержимого ПЗУ одного из моих датчиков:
A1 00 08 00 E5 31 62 10 FF FF FF FF FF FF FF FF
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
……………………………… ……………………………….
Зеленым цветом показано числовое значение кода устройства.
Темно – красным цветом показано числовые значения 6-ти байтов серийного номера.
Ярко – красным цветом показано числовое значение байта контрольной суммы (CRC).
Естественно, что Вы считаете другие числовые значения байтов, но имейте ввиду, что
в 8-й ячейке (адрес 07h) обязательно должно записаться число 10h.
Такую же “манипуляцию” нужно произвести со всеми имеющимися у Вас датчиками (с
каждым по-отдельности).
После этого, Вы будете иметь исходные данные для осуществления процедуры
адресации к нескольким датчикам и можно двигаться дальше.
Для тех из Вас, кто по каким-то причинам не смог собрать устройство, описанное в
разделе 5/2, ниже опубликована максимально упрощенная, принципиальная схема
предмета разговора:
2
Это то же самое, что и на рис.1 предыдущего подраздела (5/2), но только без ЖКИ
модуля.
Кроме того, на вывод RA3, я “посадил” светодиод, который индицирует окончание
процесса считывания байтов из ПЗУ DS1820 в EEPROM память PIC16F84A (выделено
синим цветом).
Вполне можно обойтись и без него (не подключать), просто с его помощью можно
убедиться, что полный цикл программы исполняется достаточно быстро: светодиод
“загорается” практически сразу же после включения питания.
Задержка его “загорания”, визуально, практически не ощущается.
Ниже опубликована программа под это устройство:
;********************************************************************************
; CRC_PZU.asm УСТРОЙСТВО СЧИТЫВАНИЯ ИЗ ПЗУ DS1820 (DS18S20), В EEPROM ПАМЯТЬ
; PIC16F84A, БАЙТОВ ТИПА УСТРОЙСТВА, СЕРИЙНОГО НОМЕРА И
; КОНТРОЛЬНОЙ СУММЫ
;********************************************************************************
; "Практикум по конструированию устройств на PIC контроллерах".
; Эта программа входит в состав 5-го раздела.
;********************************************************************************
; Используется м/контроллер PIC16F84A. Частота кварца 4 Мгц.
; Сигнальный вывод (DQ) датчика DS1820 подключается к выводу RA4.
; Между выводом RA4 и шиной питания подключается подтягивающий резистор
; номиналом 4,7-5,1 кОм.
; DS1820 включается по схеме с активным питанием, т.е.: вывод 1 - общий,
; вывод 2 - сигнальный,
; вывод 3 - питание (+5в).
; К выводу RA3 подключен контрольный светодиод (можно не подключать).
;--------------------------------------------------------------------------------
; Объем программы: 101 команда.
;================================================================================
LIST p=16F84a ; Используется м/контроллер PIC16F84A.
__CONFIG 03FF1H ; Бит защиты выключен, WDT выключен, XT-
генератор.
;================================================================================
; Определение положения регистров специального назначения.
;================================================================================
IndF equ 00h ; Доступ к памяти через FSR.
PC equ 02h ; Счетчик команд.
Status equ 03h ; Регистр Status.
FSR equ 04h ; Регистр косвенной адресации.
PortA equ 05h ; Регистр Port A.
TrisA equ 05h ; Регистр Tris A-банк1.
EECon1 equ 08h ; Регистр EECon1-банк1.
EECon2 equ 09h ; Регистр EECon2-банк1.
IntCon equ 0Bh ; Регистр IntCon.
EEData equ 08h ; Регистр данных (EEPROM).
EEAdr equ 09h ; Регистр адреса (EEPROM).
;================================================================================
; Определение названия и положения регистров общего назачения.
;================================================================================
N equ 0Ch ; Счетчик битов.
N1 equ 0Dh ; Еще один.
Temp equ 0Eh ; Многофункциональный регистр.
; временного хранения.
Count equ 0Fh ; Счетчик количества проходов задержки 10 мкс.
Buff1 equ 10h ; Байт типа устройства.
Buff2 equ 11h ; 1-й байт серийного номера.
Buff3 equ 12h ; 2-й байт серийного номера.
Buff4 equ 13h ; 3-й байт серийного номера.
Buff5 equ 14h ; 4-й байт серийного номера.
Buff6 equ 15h ; 5-й байт серийного номера.
Buff7 equ 16h ; 6-й байт серийного номера.
Buff8 equ 17h ; Байт контрольной суммы (CRC).
;================================================================================
3
; Определение места размещения результатов операций.
;================================================================================
W equ 0 ; Результат направить в аккумулятор.
F equ 1 ; Результат направить в регистр.
;================================================================================
; Присваивание битам названий.
;================================================================================
C equ 0 ; Флаг переноса-заема.
RP0 equ 5 ; Бит выбора банка.
DQ equ 4 ; Бит порта A для управления DS1820.
;================================================================================
org 0 ; Начать выполнение программы с PC = 0.
;********************************************************************************
;********************************************************************************
; ----------------------- "РАБОЧАЯ" ЧАСТЬ ПРОГРАММЫ ---------------------
;********************************************************************************
; НАЧАЛО ПРОГРАММЫ
;********************************************************************************
clrf PortA ; Сброс всех защелок порта А.
clrf IntCon ; Запрет всех прерываний.
bsf Status,RP0 ; Переход в 1-й банк.
clrf TrisA ; Все выводы порта А работают на выход.
bcf Status,RP0 ; Переход в 0-й банк.
; Остальные настройки - по умолчанию.
;################################################################################
; Начало работы с датчиком DS1820.
;################################################################################
; Инициализация DS1820.
;================================================================================
call PIN_HI ; Установка вывода в высокоимпедансное
; состояние: за счет подтягивающего резистора,
; на линии устанавливается 1.
;----> Возврат по стеку из ПП PIN_HI.
call PIN_LO ; Установка на линии нуля.
;----> Возврат по стеку из ПП PIN_LO.
movlw .60 ; Установка количества проходов по 10мкс.
call PAUSE_X ; Переход в ПП задержки
; (задержка=60х10=600мкс.).
;----> Возврат по стеку из ПП PAUSE_X.
call PIN_HI ; Установка вывода в высокоимпедансное
; состояние: за счет подтягивающего резистора,
; на линии устанавливается 1.
;----> Возврат по стеку из ПП PIN_HI.
movlw .60 ; Установка количества проходов по 10мкс.
call PAUSE_X ; Переход в ПП задержки
; (задержка=60х10=600мкс.).
;----> Возврат по стеку из ПП PAUSE_X.
;--------------------------------------------------------------------------------
; Передача команды Read ROM для чтения ПЗУ DS1820.
; После этого из ПЗУ считываются 8 байтов: байт типа устройства (10h),
; 6 байтов серийного номера и байт контрольной суммы (CRC).
;--------------------------------------------------------------------------------
movlw 033h ; Запись команды чтения ПЗУ (Read ROM).
movwf Temp ; в регистр Temp.
call OUT_BYTE ; Переход в ПП передачи байта.
;----> Возврат по стеку из ПП OUT_BYTE.
;--------------------------------------------------------------------------------
; Процедура чтения 8 байтов из ПЗУ DS1820 (применена косвенная адресация).
;--------------------------------------------------------------------------------
movlw Buff1 ; В FSR записывается адрес
movwf FSR ; регистра Buff1.
movlw .8 ; Определение количества
movwf N1 ; считываемых байтов.
4
SNOVA call IN_BYTE ; Переход в ПП приема байта.
;----> Возврат по стеку из ПП IN_BYTE.
movwf IndF ; Копирование содержимого регистра W
; в текущий регистр Buff...
;--------------------------------------------------------
incf FSR,F ; Запись в FSR адреса следующего
; регистра Buff...
decfsz N1,F ; Декремент счетчика байтов.
goto SNOVA ; Если результат не =0, то переход на прием
; следующего байта.
; Если результат =0, то программа
; исполняется далее.
;--------------------------------------------------------
; На данном этапе в регистрах Buff1 ... Buff8 находятся:
; Buff1 - байт типа устройства (для DS1820 - 10H),
; Buff2 - 1-й байт серийного номера,
; Buff3 - 2-й байт серийного номера,
; Buff4 - 3-й байт серийного номера,
; Buff5 - 4-й байт серийного номера,
; Buff6 - 5-й байт серийного номера,
; Buff7 - 6-й байт серийного номера,
; Buff8 - байт контрольной суммы (CRC).
; Например: A1 00 08 00 E5 31 62 10
;================================================================================
; Теперь их нужно записать в первые 8 ячеек EEPROM памяти ПИКа.
;================================================================================
movlw Buff1 ; В FSR записывается адрес
movwf FSR ; регистра Buff1.
movlw .8 ; Определение количества записываемых байтов
movwf N1 ; и количества ячеек, в которые произойдет
; запись.
;-----------------------------------------------
; Подпрограмма потоковой записи в EEPROM память.
;-----------------------------------------------
EEPR decf N1,W ; Декремент счетчика с сохранением
; результата в W.
movwf EEAdr ; Содержимое текущего регистра Buff...
movf IndF,W ; записывается в ячейку памяти с
movwf EEData ; текущим адресом.
5
;================================================================================
;################################################################################
; В PonyProg (IcProg105) ПРОИЗВЕДИТЕ СЧИТЫВАНИЕ ИЗ PIC16F84A. РЕЗУЛЬТАТ
; СЧИТЫВАНИЯ БАЙТОВ ИЗ ПЗУ DS1820 БУДЕТ ЗАПИСАН В ПЕРВЫХ 8-ми ЯЧЕЙКАХ
; EEPROM ПАМЯТИ ПИКа.
;################################################################################
;********************************************************************************
; Базовые процедуры чтения/записи по 1-Wire протоколу.
;********************************************************************************
; Подпрограмма передачи "мастером" байта: цикл передачи бита начинается импульсом
; низкого уровня длительностью 1...15 мкс, далее следует передаваемый бит.
; Цикл завершается импульсом высокого уровня длительностью не менее 1 мкс.
;================================================================================
OUT_BYTE movlw .8 ; Запись количества бит передаваемого
movwf N ; байта в регистр N.
METKA_1 rrf Temp,F ; Сдвиг вправо содержимого передаваемого
; байта.
btfss Status,C ; В бите С "лежит" 0 или 1 ?
goto OUT_0 ; Если С=0, то переход в ПП передачи нуля.
goto OUT_1 ; Если С=1, то переход в ПП передачи единицы.
METKA_2 decfsz N,F ; Уменьшение на 1 содержимого счетчика битов.
goto METKA_1 ; Если результат не =0, то переход на метку
METKA_1.
return ; Если результат =0, то возврат по стеку.
;================================================================================
; Подпрограмма приема "мастером" байта: цикл приема бита начинается импульсом
; низкого уровня длительностью 1...15 мкс, после чего DS1820 выставляет на линии
; бит. Цикл завершается импульсом высокого уровня длительностью не менее 1 мкс.
;================================================================================
IN_BYTE movlw .8 ; Запись количества бит принимаемого
movwf N ; байта в регистр N.
clrf Temp ; Очистка регистра принимаемого байта.
IN_BYTE_1 call PIN_LO ; Формирование на линии уровня 0.
;----> Возврат по стеку из ПП PIN_LO.
call PIN_HI ; Формирование на линии уровня 1.
;----> Возврат по стеку из ПП PIN_HI.
nop ; Калибровочный NOP.
;-------------------------------------------------------------------
; Запись, в бит С, уровня текущего бита, выдаваемого DS1820 в линию.
;-------------------------------------------------------------------
btfss PortA,DQ ; На линии 0 или 1 ?
bcf Status,C ; Если на линии 0, то в бите С выставляется 0.
btfsc PortA,DQ ; Если на линии 1 (а также после исполнения
; предыдущей команды), то еще одна проверка
; состояния линии.
bsf Status,C ; Если на линии 1, то в бите С выставляется 1.
; Если на линии 0 (а также после исполнения
; предыдущей команды), то программа
; исполняется далее.
;-------------------------------------------------------------------
; Последовательное заполнение битами регистра Temp.
;-------------------------------------------------------------------
rrf Temp,F ; Сдвиг содержимого регистра Temp вправо
; (через C).
movlw .4 ; Установка количества проходов по 10мкс.
call PAUSE_X ; Переход в ПП задержки
; (задержка=4х10=40мкс.).
;----> Возврат по стеку из ПП PAUSE_X.
decfsz N,F ; Уменьшение на 1 содержимого счетчика битов.
goto IN_BYTE_1 ; Если результат не=0, то переход
; на прием следующего бита.
movf Temp,W ; Если =0, то копирование принятого байта
; в регистр W.
6
return ; Возврат по стеку.
;================================================================================
; Подпрограмма передачи бита с уровнем "0".
;================================================================================
OUT_0 call PIN_LO ; Переход в ПП установки уровня 0.
; Начало передачи.
;----> Возврат по стеку из ПП PIN_LO.
movlw .6 ; Установка количества проходов по 10мкс.
call PAUSE_X ; Переход в ПП задержки
; (задержка=6х10=60мкс.).
;----> Возврат по стеку из ПП PAUSE_X.
call PIN_HI ; Переход в ПП установки уровня 1.
; Конец передачи.
;----> Возврат по стеку из ПП PIN_HI.
goto METKA_2 ; Переход на исполнение процедуры декремента
; и анализа содержимого счетчика битов.
;================================================================================
; Подпрограмма передачи бита с уровнем "1".
;================================================================================
OUT_1 call PIN_LO ; Переход в ПП установки уровня 0.
; Начало передачи.
;----> Возврат по стеку из ПП PIN_LO.
call PIN_HI ; Переход в ПП установки уровня 1
; (передача 1).
;----> Возврат по стеку из ПП PIN_HI.
movlw .6 ; Установка количества проходов по 10мкс.
call PAUSE_X ; Переход в ПП задержки
; (задержка=6х10=60мкс.).
;----> Возврат по стеку из ПП PAUSE_X.
goto METKA_2 ; Переход на новый цикл передачи бита.
;--------------------------------------------------------------------------------
; Формирование на линии уровня "1" за счет подтягивающего резистора
;--------------------------------------------------------------------------------
PIN_HI bsf Status,RP0 ; Переход в банк 1.
bsf TrisA,DQ ; Настройка вывода RA4 на работу "на вход".
bcf Status,RP0 ; Переход в банк 0.
return ; Возврат по стеку.
;--------------------------------------------------------------------------------
; Формирование на линии уровня "0" средствами микроконтроллера
;--------------------------------------------------------------------------------
PIN_LO bcf PortA,DQ ; Установка 0 на выходе защелки вывода RA4.
bsf Status,RP0 ; Переход в банк 1.
bcf TrisA,DQ ; Настройка вывода RA4 на работу "на выход".
bcf Status,RP0 ; Переход в банк 0.
return ; Возврат по стеку.
;********************************************************************************
;================================================================================
; Подпрограмма задержки.
;================================================================================
; Задание количества проходов по 10 мкс.
;----------------------------------------
PAUSE_X movwf Count ; Копирование количества проходов из W
; в Count.
;----------------------------------------
; Пауза в 10 мкс.
;----------------------------------------
PAUSE_10 nop ;
goto $+1 ; Одноразрядный,
goto $+1 ; вычитающий
goto $+1 ; счетчик
decfsz Count,F ; с "врезкой".
goto PAUSE_10 ;
8
"Практикум по конструированию устройств на PIC контроллерах" http://ikarab.narod.ru E-mail: karabea@lipetsk.ru