Подцепить датчик DS1821 к 2313
- Sailanser
- Друг Кота
- Сообщения: 3126
- Зарегистрирован: Ср фев 01, 2006 22:29:02
- Откуда: г.Ростов-на-Дону
Подцепить датчик DS1821 к 2313
Добрый вечер!
Хотелось бы спросить ни у кого нет случайно куска программы на ASM как подцепить датчик DS1821 к 2313 даташит на него скачал поглядел по инету но там только описания DS1820 различных модификаций. Сам еще только разбираюсь в програмировании микроконтроллеров. А то на днях порылся в своих запасах и его обнаружил и хотелось бы разобраться более подробно глядя в прогу и в даташит на датчик.
Заранее спасибо за ответ.
Хотелось бы спросить ни у кого нет случайно куска программы на ASM как подцепить датчик DS1821 к 2313 даташит на него скачал поглядел по инету но там только описания DS1820 различных модификаций. Сам еще только разбираюсь в програмировании микроконтроллеров. А то на днях порылся в своих запасах и его обнаружил и хотелось бы разобраться более подробно глядя в прогу и в даташит на датчик.
Заранее спасибо за ответ.
- Реклама
- Sailanser
- Друг Кота
- Сообщения: 3126
- Зарегистрирован: Ср фев 01, 2006 22:29:02
- Откуда: г.Ростов-на-Дону
DS1821 не устраивает по одной простой причине за отсутствием оных в любой модификации интнересовался по нашим фирмам и на нашем базаре говорят нет предлагают 1821 а смысл мне его покупать коль у меня он уже есть
А в магазинах предлагают на заказ вести и там срок от 1-3 недель. Как они говорят сначала заказы формируем а потом уще поставщику шлем, вот поэтому и приходиться с DS1821.
- Max
- Админ
- Сообщения: 10815
- Зарегистрирован: Вт авг 23, 2005 15:23:25
- Откуда: Москва
- Контактная информация:
Понятно... и чего - по даташитам они сильно различаются?
По-моему, там базовая система команд одна и таже - по крайней мере, для измерения температуры вполне хватит...
По-моему, там базовая система команд одна и таже - по крайней мере, для измерения температуры вполне хватит...
А вот футболки кому? Кружки, значки!
Мысли Пачкают Мозги
Мысли Пачкают Мозги
- Реклама
- Max
- Админ
- Сообщения: 10815
- Зарегистрирован: Вт авг 23, 2005 15:23:25
- Откуда: Москва
- Контактная информация:
Ну по 1820 точно тема уже была - посмотрите в форуме...
А вот футболки кому? Кружки, значки!
Мысли Пачкают Мозги
Мысли Пачкают Мозги
- Sailanser
- Друг Кота
- Сообщения: 3126
- Зарегистрирован: Ср фев 01, 2006 22:29:02
- Откуда: г.Ростов-на-Дону
Поглядел по форуму по DS1820 поглядел форум есть упоминание там про датчик DS18S20 это полный аналог DS1820 откопал у себя еще DS18B20 но унего разрядность выбирается между 9,10,11 и 12 битами по умолчанию с завода идут настроенны на 12 бит мож ктио подскажет как его переключить на 9 бит. Глядел по даташиту но все равно что-то не пойму.
- moLCHec
- Мявтор!
- Сообщения: 825
- Зарегистрирован: Вс дек 18, 2005 20:04:42
- Откуда: Свердловская обл.
- Контактная информация:
в блокнотной памяти есть байт конфигурации который за это отвечает
адреса его не знаю но думаю в дате найдёшь
адреса его не знаю но думаю в дате найдёшь
- Вложения
-
- регистр.JPG
- в книге откуда инфу брал байт был под намером 4 после 2-байтов темп. и 2-х байтов темп.границ измерения
- (25.87 КБ) 771 скачивание
Настоящий кот всегда либо голоден,
либо невыспался ...
либо невыспался ...
- moLCHec
- Мявтор!
- Сообщения: 825
- Зарегистрирован: Вс дек 18, 2005 20:04:42
- Откуда: Свердловская обл.
- Контактная информация:
почитал тут по 1WRIE вот что я понял;
начинается всё со сброса по этой команде все устройства
подглюченные на шину бросают свои дела и бегут к телевизору
на тебя смотреть
и вот чё они видят
reset:
"садим" линию
ждём 700мкс
"отпускаем" линию
ждём 65мкс
проверяем линию если 0 то продолжаем иначе выводим "Устройство не подключено"
ждём 500мкс
проверяем линию если 1 то продолжаем иначе выводим "КЗ в линии"
ret
после того как мы определили что нас кто-то всё таки глядит проводим интерактивное шоу
чтение слота:
"гасим" линию
ждём 1мкс
"отпускаем"
ждём 13мкс
проверяем линию какой уровень такой и бит
ret
теперь по результатам опроса показываем кино
запись 0 в слот:
"садим" линию
ждём 80мкс
отпускаем линию
ret
запись 1 в слот
"садим" линию
ждём 4.5мкс
отпускаем линию
ждём 75 мкс
ret
если у тебя один датчик подглючен то тебе с ID кодами парится не надо
делаешь так
rcall reset
выводишь на линию команду сетевого уровня пропуск пзу 0x0СС
выводишь транпортную команду 0x44 преобразовать температуру
ждём 750мкс
выводим команду 0x0BE чтение озу
читаем сначала мл. затем старший байт
передачабайта по 1-WIRE осуществляется начинается с млядшего,
по умолчанию датчик выдаёт 9 разрядный код температуры
начинается всё со сброса по этой команде все устройства
подглюченные на шину бросают свои дела и бегут к телевизору
на тебя смотреть
и вот чё они видят
reset:
"садим" линию
ждём 700мкс
"отпускаем" линию
ждём 65мкс
проверяем линию если 0 то продолжаем иначе выводим "Устройство не подключено"
ждём 500мкс
проверяем линию если 1 то продолжаем иначе выводим "КЗ в линии"
ret
после того как мы определили что нас кто-то всё таки глядит проводим интерактивное шоу
чтение слота:
"гасим" линию
ждём 1мкс
"отпускаем"
ждём 13мкс
проверяем линию какой уровень такой и бит
ret
теперь по результатам опроса показываем кино
запись 0 в слот:
"садим" линию
ждём 80мкс
отпускаем линию
ret
запись 1 в слот
"садим" линию
ждём 4.5мкс
отпускаем линию
ждём 75 мкс
ret
если у тебя один датчик подглючен то тебе с ID кодами парится не надо
делаешь так
rcall reset
выводишь на линию команду сетевого уровня пропуск пзу 0x0СС
выводишь транпортную команду 0x44 преобразовать температуру
ждём 750мкс
выводим команду 0x0BE чтение озу
читаем сначала мл. затем старший байт
передачабайта по 1-WIRE осуществляется начинается с млядшего,
по умолчанию датчик выдаёт 9 разрядный код температуры
Настоящий кот всегда либо голоден,
либо невыспался ...
либо невыспался ...
Sailanser, про датчики всё подробно есть на http://woland.irk.ru/stm/
- Мышонок
- Друг Кота
- Сообщения: 3792
- Зарегистрирован: Чт сен 14, 2006 11:42:09
- Откуда: Обитаю на чердаке
- Контактная информация:
Была хорошая статья в "Компонентах и технологиях". №2,3-2001 о цифровых датчиках температуры Dallas Semiconductor, т.е. серии DS (не только о DS1820/1821).
DS1820 из-за ошибки в конструкции снят с производства. Вместо него DS18S20 и DS18B20.
DS1820 из-за ошибки в конструкции снят с производства. Вместо него DS18S20 и DS18B20.
Последний раз редактировалось Мышонок Чт янв 18, 2007 20:56:20, всего редактировалось 1 раз.
Память очень интересная штука: бывает так, что запомнишь одно, а вспомнишь другое...
-
Dmitro
- Открыл глаза
- Сообщения: 64
- Зарегистрирован: Пт дек 01, 2006 20:32:23
- Откуда: Запорожье
- Контактная информация:
два DS на один пин МК
Народ, может я ленивый и плохо искал, но вот не нашел, какой алгоритм если у меня два датчика на одной линии сидят, тут Skip ROM не покатит, как МК должен организовать запрос промежуточного ОЗУ, чтобы получить серийники каждго датчика, что-бы потом знать к кому конкретно обращаться, (так как возможно датчики будут меняться, то вариант с заранее известным номером устройства -не катит).
-
TechMike
- Прорезались зубы
- Сообщения: 247
- Зарегистрирован: Сб дек 15, 2007 23:00:54
- Откуда: Moscow
- Контактная информация:
Re: два DS на один пин МК
Доброго времени суток.
Не получается считать температуры на VB6 с более чем одного датчика
ds18b20. Использую команду 55H но датчики возвращают температуру
только одного из них, т.е. температура одного из дачиков
отображается на обоих.
Делал все по даташиту, подключен датчик паразитным питанием:
dmmy = TMTouchReset(MyHandle) 'сбрасываем шину
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
dmmy = TMTouchByte(MyHandle, &H55) 'даем команду для выбора датчика по
его уникальному номеру
For i = 0 To 8
dmmy = TMTouchByte(MyHandle, ROMid(g).ROMOrig(i)) 'передаем в шину
уникальный номер датчика, с которым хотим работать
Next i
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
dmmy = TMTouchByte(MyHandle, &H44) 'даем команду измерять температуру
Pause (1) ' пауза на время измерения температуры
dmmy = TMTouchReset(MyHandle) 'сбрасываем шину
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
dmmy = TMTouchByte(MyHandle, &H55) 'даем команду для выбора датчика по
его уникальному номеру
For i = 0 To 8
dmmy = TMTouchByte(MyHandle, ROMid(g).ROMOrig(i)) 'передаем в шину
уникальный номер датчика, с которым хотим работать
Next i
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
'Read the scratch of a DS18B20
dmmy = TMTouchByte(MyHandle, &HBE) ' даем команду для чтения
регистров(памяти) датчика
For i = 0 To 8
dmmy = TMTouchByte(MyHandle, &HFF)' читаем данные из регистров
датчика
TEMP_buffer(i) = dmmy
Next i
В ROMid(g).ROMOrig() хранится уникальный код девайса, передаю его полсе H55 в таком же виде как считал с попомщью команды TMRom.
Пробовал и посылать последний байт первым и если If ROM(i) <= &HF то обнулят байт серийного номера.
Все равно не получается, подскажите плс почему?
По даташиту DS18B20.pdf ("MEMORY FUNCTION EXAMPLE Table 5"):
TX Reset Reset pulse (480-960 ?s).
RX Presence Presence pulse.
TX 55h Issue “Match ROM” command.
TX <64> Issue address for DS18B20.
TX 44h Issue “ Convert T” command.
TX I/O line is held high for at least a period of time greater than tconv by bus master to allow conversion to complete.
TX Reset Reset pulse.
RX Presence Presence pulse.
TX 55h Issue “Match ROM” command.
TX <64> Issue address for DS18B20.
TX BEh Issue “Read Scratchpad” command.
RX <9> Read entire scratchpad plus CRC; the master now
recalculates the CRC of the eight data bytes received
from the scratchpad, compares the CRC calculated and
the CRC read. If they match, the master continues; if
not, this read operation is repeated.
TX Reset Reset pulse.
RX Presence Presence pulse, done.
Единственное что не делал, это Strong pull-up после команды начать
измерение температуры(H44). НО температуру датчик измеряет т.е.
ему хватает напруги на линии. Если на шине только один датчик, то
проблем нем, все читается на ура, бъюсь уже три недели - результат
нулевой. Готов уже купить Temp Keeper, так как он все замечательно
меряет =(((
P.S. Проблему победил, исходники тут: http://rn3aig.ru/phpBB3/viewtopic.php?f=3&t=5
Не получается считать температуры на VB6 с более чем одного датчика
ds18b20. Использую команду 55H но датчики возвращают температуру
только одного из них, т.е. температура одного из дачиков
отображается на обоих.
Делал все по даташиту, подключен датчик паразитным питанием:
dmmy = TMTouchReset(MyHandle) 'сбрасываем шину
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
dmmy = TMTouchByte(MyHandle, &H55) 'даем команду для выбора датчика по
его уникальному номеру
For i = 0 To 8
dmmy = TMTouchByte(MyHandle, ROMid(g).ROMOrig(i)) 'передаем в шину
уникальный номер датчика, с которым хотим работать
Next i
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
dmmy = TMTouchByte(MyHandle, &H44) 'даем команду измерять температуру
Pause (1) ' пауза на время измерения температуры
dmmy = TMTouchReset(MyHandle) 'сбрасываем шину
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
dmmy = TMTouchByte(MyHandle, &H55) 'даем команду для выбора датчика по
его уникальному номеру
For i = 0 To 8
dmmy = TMTouchByte(MyHandle, ROMid(g).ROMOrig(i)) 'передаем в шину
уникальный номер датчика, с которым хотим работать
Next i
If TMAccess(MyHandle, state_buffer(0)) <> 1 Then GoTo point1 'exit function
'Read the scratch of a DS18B20
dmmy = TMTouchByte(MyHandle, &HBE) ' даем команду для чтения
регистров(памяти) датчика
For i = 0 To 8
dmmy = TMTouchByte(MyHandle, &HFF)' читаем данные из регистров
датчика
TEMP_buffer(i) = dmmy
Next i
В ROMid(g).ROMOrig() хранится уникальный код девайса, передаю его полсе H55 в таком же виде как считал с попомщью команды TMRom.
Пробовал и посылать последний байт первым и если If ROM(i) <= &HF то обнулят байт серийного номера.
Все равно не получается, подскажите плс почему?
По даташиту DS18B20.pdf ("MEMORY FUNCTION EXAMPLE Table 5"):
TX Reset Reset pulse (480-960 ?s).
RX Presence Presence pulse.
TX 55h Issue “Match ROM” command.
TX <64> Issue address for DS18B20.
TX 44h Issue “ Convert T” command.
TX I/O line is held high for at least a period of time greater than tconv by bus master to allow conversion to complete.
TX Reset Reset pulse.
RX Presence Presence pulse.
TX 55h Issue “Match ROM” command.
TX <64> Issue address for DS18B20.
TX BEh Issue “Read Scratchpad” command.
RX <9> Read entire scratchpad plus CRC; the master now
recalculates the CRC of the eight data bytes received
from the scratchpad, compares the CRC calculated and
the CRC read. If they match, the master continues; if
not, this read operation is repeated.
TX Reset Reset pulse.
RX Presence Presence pulse, done.
Единственное что не делал, это Strong pull-up после команды начать
измерение температуры(H44). НО температуру датчик измеряет т.е.
ему хватает напруги на линии. Если на шине только один датчик, то
проблем нем, все читается на ура, бъюсь уже три недели - результат
нулевой. Готов уже купить Temp Keeper, так как он все замечательно
меряет =(((
P.S. Проблему победил, исходники тут: http://rn3aig.ru/phpBB3/viewtopic.php?f=3&t=5
Последний раз редактировалось TechMike Вс фев 27, 2011 12:32:56, всего редактировалось 1 раз.
Re: DS1821
здравствуйте! с 18b20 работал ,а вот каие команды посылать на ds1821 никак не пойму.
подскажите пожалуйсто как работать с ds1821 .В нашем городе вообще такая глухомань,можно только детали для телевизора найти,ито не факт
пишу на СИ зараннее спасибо
подскажите пожалуйсто как работать с ds1821 .В нашем городе вообще такая глухомань,можно только детали для телевизора найти,ито не факт
пишу на СИ зараннее спасибо
- ChipKiller
- Сверлит текстолит когтями
- Сообщения: 1163
- Зарегистрирован: Ср янв 05, 2011 16:25:15
Re: Подцепить датчик DS1821 к 2313
... то же самое, но чуть прощездравствуйте! с 18b20 работал ,а вот каие команды посылать на ds1821 никак не пойму.
Re: Подцепить датчик DS1821 к 2313
извените,немного непонял что должно быть после многоточияChipKiller писал(а):... то же самое, но чуть прощездравствуйте! с 18b20 работал ,а вот каие команды посылать на ds1821 никак не пойму.. После сброса шлете - 0x0C, 0x01 ... разрешение одиночного преобразования. Потом - сброс и 0xАА .. чтение температуры
reset();
iw_out(0x0C);
iw_out(0x01);
.........
reset();
//тут чтение


