Для работы с устройствами, поддерживающими 1-Wire протокол уже давным-давно написаны библиотеки. Поэтому нет смысла изобретать велосипед (лично я это уже делал, когда программировал на ассемблере) и писать что-то свое. На сайте фирмы ATMEL есть замечательный application note AVR318: Dallas 1-Wire, в котором рассмотрены два варианта реализации 1-Wire протокола на микроконтроллерах AVR – программная и аппаратная. Программная реализация позволяет использовать однопроводный протокол на любых микроконтроллерах. Аппаратная – только на тех, на которых есть модуль UART. Аппаратной поддержки 1-Wire протокола «в чистом виде» микроконтроллеры AVR не имеют, однако, используя модуль UART неким хитрым образом, эту поддержку можно организовать. К application note идет проект. Я взял из этого проекта исходные файлы библиотеки, добавил, изменил несколько функций и написал файл compilers.h, чтобы можно было использовать эту либу с любым из трех компиляторов – IAR AVR, GNU GCC (WINAVR), CodeVision.
Библиотека состоит из следующих файлов
OWISWBitFunction.h
OWISWBitFunction.c
OWIUARTBitFunction.c
OWIHighLevelFunction.h
OWIHighLevelFunction.c
OWIPolled.h
compilers.h
OWIdefs.h
OWIdevicespecific.h
OWIcrc.h
OWIcrc.c
Как подключить библиотеку к проекту
Процесс интеграции 1-Wire библиотеки с проектом заключается в следующем:
- переписываем файлы библиотеки в папку проекта
- подключаем сишные файлы к проекту
OWIHighFunction.c
OWISWBitFunction.c
OWIUARTBitFunction.c
OWIcrc.c
- добавляем заголовочные файлы в main.c
#include "OWIPolled.h"
#include "OWIHighLevelFunctions.h"
#include "OWIBitFunctions.h"
#include "common_files\OWIcrc.h"
- настраиваем файл OWIPolled.h
- выбираем реализацию OneWire интерфейса – программную
#define OWI_SOFTWARE_DRIVER
//#define OWI_UART_DRIVER
- задаем тактовую частоту микроконтроллера
#define CPU_FREQUENCY 16.000
- задаем порт, к которому подключена 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 нужно будет добавить все сишные файлы.
Например, так:
SRC = $(TARGET).c bcd.c lcd_lib.c OWISWBitFunctions.c OWIHighLevelFunctions.c OWIUARTBitFunctions.c common_files/OWIcrc.c
Файлы
Application note AVR318: Dallas 1-Wire
Проекты проверялись в железе и никаких нареканий не вызывали. В Proteus`е я их тоже запустил, но не сразу. Оказывается по умолчанию датчикам DS18B20 присваиваются одинаковые адреса. При использовании нескольких датчиков адреса нужно подправить ручками.
Подробное описание проектов будет уже в новом году...
Проекты проверялись в железе и никаких нареканий не вызывали. В Proteus`е я их тоже запустил, но не сразу. Оказывается по умолчанию датчикам DS18B20 присваиваются одинаковые адреса. При использовании нескольких датчиков адреса нужно подправить ручками.
Подробное описание проектов будет уже в новом году...


[code] [/code]