А зачем прерывания запрещать на 600 мкс? Длительность импульса сброса сверху ничем не ограничена. От прерываний нужно защищать только интервал, где мы читаем presence, а это порядка 60 мкс.
О-о. Пасибочки. Я чет не догадался так зделать. А действительно 500 мкс сброса то, пусть хоть 1000 мкс длятся, т.е. тут прерывания можно не запрещать..... А вот перед тем как отпустить линию, да дождаться пресенс, можно запретить прерывания, но это уже сравнительно не много 15-60 мкс.
в CVAVR. В параметре р ей передается указатель на заранее выделенный массив в раме для кодов устройств.
Цитата:
this function returns the number of devices connected to the 1 Wire bus. If no devices were detected then it returns 0. The byte cmd represents the Search ROM (F0h), Alarm Search (ECh) for the DS1820, DS18S20, or other similar commands, sent to the 1 Wire device. The pointer p points to an area of SRAM where are stored the 8 bytes ROM codes returned by the device.
Такой вопрос, что будет, если массив будет на 2 устройства, а физически будет подключено три устройства? Я так понимаю, в таком случае произойдет переполнение выделенного массива и эта функция "перепишет" данные в раме, которые не были выделены для массива кодов, а это очень плохо, т.к. может полностью "поломать" устройство А в хелпе об этом ни слова...
Есть ли какие-нибудь альтернативные проверенные библиотеки, где этот вопрос учтен?
такая беда. подключаю 18б20 к контроллеру, температура -999. Т.е. контроллер не видит датчик. Поставил кварц на 12мгц. без результатов. Датчик подключал к другому устройству - там все работает - датчик исправен. Както нагреваю этот датчик паяльником и опа- показал контроллер температуру 104 градуса. Перестал греть, температура начала падать и примерно на 50 градусах датчик опять пропал (-999). подтяжка 4.7к, полярность верна, кварц внешний на 12мгц, фузы 1111 (атмега8)
так в этом проблема Есть термометр на 2313. Я взял из него прогу для термометра, это 3 или 4 строки, вывод на индикатор (немножко побольше). На индикатор всё исправно выводит, в смысле подставляю в tepm число - число на индикаторе.
Потом я проставил метки в программе, программа всё делает что ей положенно, но дойдя до опроса датчика, датчик не находится. deviсe=0
Была похожая проблема, там оказалось косяк с подтяжкой был.
Друзья, есть у меня библиотека для Winavr по работе с датчиком ds18b20. прикладываю ее и описание по настройке. Много где видел ее использование, все говорят, что работает идеально, а у меня датчик при опросе температуры выдает 0xFF. Такой вопрос у меня датчик глючит или я балбес
Цитата:
Процесс интеграции 1-Wire библиотеки с проектом заключается в следующем:
- переписываем файлы библиотеки в папку проекта
- подключаем сишные файлы к проекту OWIHighFunction.c OWISWBitFunction.c OWIUARTBitFunction.c OWIcrc.c
- задаем порт, к которому подключена OneWire шина #define OWI_PORT PORTD //!< 1-Wire PORT Data register. #define OWI_PIN PIND //!< 1-Wire Input pin register. #define OWI_DDR DDRD //!< 1-Wire Data direction register.
- в main.c задаем вывод, к которому подключена OneWire шина #define BUS OWI_PIN_7
Для GCC проектов в makefile нужно будет добавить все сишные файлы. Например, так:
Друзья, есть у меня библиотека для Winavr по работе с датчиком ds18b20.
В общем все беды от незнания. Отличная библиотека, все работает на ура. Надо было учесть, что отладку необходимо проводить в режиме оптимизации по времени, при другой временные задержки не обрабатываются и датчик врет.
Карма: 67
Рейтинг сообщений: 1060
Зарегистрирован: Чт сен 18, 2008 12:27:21 Сообщений: 19760 Откуда: Столица Мира Санкт-Петербург
Рейтинг сообщения:0 Медали: 1
28h
_________________ [ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ] Измерить нннада?
Добрый вечер уважаемые коты. Пытаюсь собрать термометр на DS18b20, написал программку под LCD- все нормально работает. Но возникла необходимость выводить температуру на семисигментник и тут началось......... Вообщем ничего не показывает. Ребята гляньте пожалуйста код и тыкните меня носом куда надо . я думаю ошибка где-то здесь sot=(temp/100); des =(temp%100)/10; edi=(temp %100)%10; заранее благодарен.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения