Вверх ↑
Ответов: 5227
Рейтинг: 587
#1: 2016-03-11 07:00:13 ЛС | профиль | цитата
Konoplj2010, ссылки я тебе давал, библиотека с примерами и схемой подключения там же.
Вот обёртка
#pas
unit OWire_Module;

interface

const


// Коды ошибок (возвращает функция OW_GetLastErr()).
OW_Err_OK = 0; // Ошибок нет.
OW_Err_Port = 1; // Нет открытого порта (для OW_OpenPort() - ошибка открытия порта).
OW_Err_NoDevice = 2; // Не найдены 1-Wire устройства.
OW_Err_IO = 3; // Ошибка при обмене информацией.
OW_Err_BaudRate = 4; // Ошибка при изменении скорости порта.
OW_Err_Search = 5; // Ошибка происходит если во время поиска ни одно 1-Wire устройство не ответило.
OW_Err_BadParam = 6; // Некорректный параметр.
OW_Err_NoData = 7; // Нет данных.

// Режим работы модуля.
OW_Mode_CPU_MinUsage = 1; // Уменьшить загрузку процессора.
OW_Mode_Invert = 2; // Инвертирование сигналов DTR и RTS.
OW_Mode_NoControlPin = 4; // Не изменять состояние управляющих выходов DTR и RTS.

// Управление выходами порта (функция SP_SetControlPin()).
SP_Pin_DTR = 1;
SP_Pin_RTS = 2;
SP_Pin_TXD = 4;
// Чтение состояния входов порта (функция SP_GetControlPin()).
SP_Pin_RI = 0;
SP_Pin_DCD = 1;
SP_Pin_DSR = 2;
SP_Pin_CTS = 3;


type

OW_RAM = packed record // ОЗУ датчика DS18B20.
L_Termo: Byte; // Младший байт температуры
H_Termo: Byte; // Старший байт температуры
Max_Termo: Byte; // Верхний предел температуры
Min_Termo: Byte; // Нижний предел температуры
Config: Byte; // Байт конфигурации
x: array [1..3] of Byte; // Резерв 3 байта (в датчике не реализовано)
CRC: Byte; // Контрольная сумма
end;

OW_Write_RAM = packed record
Max_Termo: Byte; // Верхний предел температуры
Min_Termo: Byte; // Нижний предел температуры
Config: Byte; // Байт конфигурации
end;

OW_SN = packed record // Идентификатор датчика.
DevType: Byte; // Тип устройства (код семейства).
Number: array [1..6] of Byte; // Серийный номер.
CRC: Byte; // Контрольная сумма.
end;

// Режим. См. константы OW_Mode_xxxx.
function OW_GetMode() : Integer; stdcall; external 'OWire_Module.dll';
function OW_SetMode(Mode:Integer) : Integer; stdcall; external 'OWire_Module.dll';
// Код ошибки (см. константы OW_Err_xxxx и SP_Err_xxxx).
function OW_GetLastError() : Integer; stdcall; external 'OWire_Module.dll';
// Закрывает последовательный порт.
function OW_ClosePort(Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Открывает последовательный порт.
function OW_OpenPort(ComPort:String; Port:Integer=0): Integer; stdcall; external 'OWire_Module.dll';
// Сброс 1-Wire устройства.
function OW_Reset(Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Чтение байта.
function OW_ReadByte(Port:Integer=0): Byte; stdcall; external 'OWire_Module.dll';
// Запись байта.
function OW_WriteByte(Byte:Byte; Port:Integer=0): Byte; stdcall; external 'OWire_Module.dll';
// Вычисление контрольной суммы.
function OW_GetCRC(Buff:Pointer; Count:Integer): Byte; stdcall; external 'OWire_Module.dll';
// Чтение массива байт.
function OW_ReadMultiByte(Buff:Pointer; Count:Integer; Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Запись массива байт.
function OW_WriteMultiByte(Buff:Pointer; Count:Integer; Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// 1-Wire устройство передает 8-битный код семейства (10h для DS18S20 и 28h для DS18B20),
// затем 48-битный серийный номер, а затем 8-битную CRC для проверки правильности принятой информации.
function OW_ReadROM(var Info:OW_SN; Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Эта функция позволяет адресовать на шине требуемое 1-Wire устройство.
// Необходимо передать 64-битный код 1-Wire устройства и только то,
// что имеет такой код, будет «откликаться» до следующего импульса сброса.
function OW_SelectROM(var Info:OW_SN; Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Пропуск сравнения серийного номера.
function OW_SkipROM(Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Начало поиска 1-Wire устройств.
function OW_SearchROM_Reset(): Integer; stdcall; external 'OWire_Module.dll';
// Перечисление устройств. Вернет не 0 если еще есть устройства.
function OW_SearchROM_Enum(var Sensor:OW_SN; Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Поиск температурных датчиков у которых результат последнего измерения температуры
// выходит за предустановленные пределы TH и TL.
function OW_SearchAlarm_Reset(): Integer; stdcall; external 'OWire_Module.dll';
// Перечисление устройств. Вернет не 0 если еще есть устройства.
function OW_SearchAlarm_Enum(var Sensor:OW_SN; Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Чтение данных из промежуточного ОЗУ датчика DS18B20.
function OW_ReadRAM(var Info:OW_RAM; Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Запись данных в промежуточное ОЗУ датчика DS18B20.
function OW_WriteRAM(var Info:OW_Write_RAM; Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Копирование данных из промежуточного ОЗУ в энергонезависимую память датчика.
// Это требует около 10мс.
function OW_CopyRAM(Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Запуск процесса преобразования температуры.
function OW_ConvertT(Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Эта функция действует обратным образом по отношению к процедуре OW_CopyRAM(),
// т.е. она позволяет считать байты TH и TL из энергонезависимой памяти в промежуточное ОЗУ.
function OW_Recall(Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Проверка, использует ли 1-Wire устройство паразитное питание.
// 1 - не использует или 0 если использует.
function OW_ReadPowerSupply(Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';
// Функция возвращает дескриптор порта.
function SP_PortID(Port:Integer=0): Integer; stdcall; external 'OWire_Module.dll';
// Функция возвращает количество байт в приемном буфере порта.
function SP_CountInBytes(Port:Integer=0): Integer; stdcall; external 'OWire_Module.dll';
// Чтение байта из порта.
function SP_ReadByte(Port:Integer=0): Byte; stdcall; external 'OWire_Module.dll';
// Запись байта в порт.
function SP_WriteByte(Byte:Byte; Port:Integer=0): Integer; stdcall; external 'OWire_Module.dll';
// Чтение состояния управляющих входов.
function SP_GetControlPin(Pin:Integer; Port:Integer=0): Integer; stdcall; external 'OWire_Module.dll';
function SP_SetControlPin(Pin:Integer; Value:Boolean; Port:Integer=0): Boolean; stdcall; external 'OWire_Module.dll';

implementation

end.
Неужели просто взять и использовать готовое и проверенное
карма: 4
Мой форум - http://hiasm.bbtalk.me/ схемы, компоненты...
0