Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
30.04.2010, 07:02
|
|
Частый гость
Регистрация: 11.07.2007
Сообщений: 28
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 1 сообщении
|
Реализация 1-Wire на ассемблере
Предлагаю свой вариант реализации опроса DS18s20 с помощью Atmega8.
Сделано на ассемблере в AVR Studio. Кварц 14.745 . Для синхронизации
1-Wire использую Timer2, если использовать другой кварц используемые
значения надо пересчитывать. задействованы две ножки PIND,3 (кнопка)
и PINC,4(шина 1-Wire). PINC,4 подтянута к питанию резистором 5к1 и
подключена к DS18s20. Если PIND,3 занулить и подать питание на схему,
то в EEPROM начиная с адрес 0x0000 можно увидеть адрес DS18s20
(7 байтов) плюс байт CRC. Записав эти 8 байтов в адрес 0x0010, подав
логическую 1 на PIND,3, после в EEPROM начиная с адреса 0x0070 можно
увидеть содержимое Scratchpad-а (8 байтов+1 байт CRC и ASCII десятки
и единицы температуры)
Есть некоторая диагностика: в ячейке памяти ONE_WIRE_STAT код завершения
операции на шине 1Wire успешно 0xf0
0xe1 - превышено время ожидания импульса присутствия
0xe2 - импульс присутствия пришел слишком рано
0xe3 - импульс присутствия длиннее требуемого
0xe4 - импульс присутствия короче требуемого
0xe5 - при чтении нуля слишком долго удерживалась в нуле шина
0xe6 - не совпала CRC
На столе работают 4 датчика их адреса в EEPROM 0x0010, 0x0020, 0x0030, 0x0040 ,
буду измерять температуру в 4 точках помещения.
Знак температуры не анализирую. Есть косяк, при включении выдается
85, так как у меня такого быть не может, то значение 85(десятичное)
игнорируется.
fuse CKSEL0,CKSEL1,CKSEL2,CKSEL3,SUT1,BODEN
BOOTRST,CKOPT,WDTON,RSTDISBL
Последний раз редактировалось zelvans; 30.04.2010 в 09:28.
|
|
|
Эти 3 пользователя(ей) сказали Спасибо zelvans за это сообщение:
|
|
|
30.04.2010, 10:09
|
|
Временная регистрация
Регистрация: 19.04.2010
Сообщений: 92
Сказал спасибо: 30
Сказали Спасибо 83 раз(а) в 37 сообщении(ях)
|
Re: Реализация 1-Wire на ассемблере
Сообщение от zelvans
|
Есть косяк, при включении выдается
85, так как у меня такого быть не может, то значение 85(десятичное)
игнорируется.
|
Нет, это не косяк, это норма . Цитата из даташита, стр.4: "The power-on reset value of the temperature register is +85°C." Кстати, по этому "косяку" удобно проверять правильность преобразования данных датчика в десятичный код.
|
|
|
|
30.04.2010, 11:59
|
|
Прописка
Регистрация: 09.10.2007
Сообщений: 235
Сказал спасибо: 27
Сказали Спасибо 24 раз(а) в 24 сообщении(ях)
|
Re: Реализация 1-Wire на ассемблере
Сообщение от SHIM1
|
Нет, это не косяк, это норма. Цитата из даташита, стр.4: "The power-on reset value of the temperature register is +85°C." Кстати, по этому "косяку" удобно проверять правильность преобразования данных датчика в десятичный код.
|
Добавлю: это происходит по причине первого считывания данных до первого преобразования.
|
|
|
|
30.04.2010, 13:20
|
|
Временная регистрация
Регистрация: 19.04.2010
Сообщений: 92
Сказал спасибо: 30
Сказали Спасибо 83 раз(а) в 37 сообщении(ях)
|
Re: Реализация 1-Wire на ассемблере
Сообщение от ilya_sh
|
Добавлю: это происходит по причине первого считывания данных до первого преобразования.
|
Однозначно !
|
|
|
|
30.04.2010, 14:06
|
|
Временная регистрация
Регистрация: 19.04.2010
Сообщений: 92
Сказал спасибо: 30
Сказали Спасибо 83 раз(а) в 37 сообщении(ях)
|
Re: Реализация 1-Wire на ассемблере
zelvans,
Понравилось преобразование hex в dec . Взял на вооружение!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:12.
|
|