I2C 1-Wire RTC

  • Автор
Собрал RTC и 1-Wire. 
Схема:
137138065551bd9baf77d4e.jpg

То что получилось
137138080851bd9c488697f.jpg
Настройка RTC

Добавляем в систему I2C если ранее это не сделано.
Редактируем файл /etc/modprobe.d/raspi-blacklist.confsudo
nano /etc/modprobe.d/raspi-blacklist.conf

вставляем # перед строкой blacklist i2c-bcm2708
редактируем файл modulessudo
nano /etc/modules

вставляем в конец строку i2c-dev
ставим I2C тулс
sudo apt-get install i2c-tools

смотрим какие I2C устройства есть на шине
pi@raspberrypi ~ $ i2cdetect -y 1   
 0  1  2  3  4  5  6  7  8  9  a  b  c  d  e
f00:-- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- --
18 -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- --
68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

18 - это адрес 1-wire
68 - это RTC DS1307

набираем 
sudo modprobe rtc-ds1307

потом меняем пользователя на root: sudo -s и вводим
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device (для rev 1 Pi)

echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device (для rev 2 Pi)


теперь выведем в консоль время с RTC:
pi@raspberrypi ~ $ sudo hwclock -r Set 01 Jan 2000 00:01:20 EEST  -0.814742 seconds
pi@raspberrypi ~ $ dateSun Jun 16 13:40:36 EEST 2013

для того чтобы записать время из системы в RTC
sudo hwclock -w


Tеперь настроим чтобы часы находились после перезагрузки. Для этого отредактируем  файл modules командой
sudo nano /etc/modules

и добавим туда rtc-ds1307

потом отредактируем файл /etc/rc.localsudo
nano /etc/rc.local


и добавим в него 
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device (для v1 raspberry pi)
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device (для v2 raspberry pi)sudo hwclock -s


эти строчки нужно вставить перед строкой exit 0

Все теперь в системе есть RTC.OWFS настраивал по инструкции с этого сайта
http://wiki.temperatur.nu/index.php/OWFS_with_i2c_support_on_Raspberry_Pi_(English_version)

Комментарии:

MaksMS10
Как-то не оправдано использование DS2482s ,т.к. в ядре имеется поддержка устройств 1-wire на 4 выводе GPIO
Мне нужно подключить 6 температурных датчиков самый дальний 20 метров от raspberry.
Судя по вики http://ru.wikipedia.org/wiki/1-Wire 1-Wire тянет до 300 метров :)
У меня у самого квартира окутана этой шиной и все работает..
Работает просто с ножки GPIO?
Ну на raspberry сантиметров 20 пару датчиков ds18b20 подключал - работает. Не думаю что при 20 метрах что-то изменится..
А так используется arduino...
оправдано, т.к. ядро для 4 GPIO реализует программный 1-wire
artyr_n0
Поставил на тесты. Температура считывается каждые 30 секунд. Каждый датчик опрашивается в цыкле, если вернул температуру цыкл заканчивается если нет то повторяется 100 раз. Даже с DS2482s за сутки от 2 до 6 раз с датчика за 100 опросов или ничего не считывается или считывается ерунда в виде -2000 градусов.
Причем наблюдал подобное используя DS9490R (USB - 1-Wire).
artyr_n0
Добавил блокирующие конденсаторы на 0,1 мкФ по питанию перед датчиками.
И программно проверяю, что бы выдаваемая температура не выходила за возможности датчика, если выходит то считываю температуру еще раз.
Сталкивался ли кто то с подобными проблемами? Кажется мне, что тут проблема OWFS и производительности системы. Около года мониторил температуру дома на котле и радиаторах. Расстояния до датчиков было раза в два больше использовал стационарный компьютер под Ubuntu и USB - 1 Wire переходник DS9490R. И с проблемой что бы датчик вернул -2000 градусов ни разу не столкнулся.

Для написания комментариев необходимо зарегистрироваться