реклама на сайте
подробности

 
 
> Atmega328P и DS18B20 в фоновом режиме
iiv
сообщение Nov 28 2011, 03:53
Сообщение #1


вопрошающий
*****

Группа: Свой
Сообщений: 1 726
Регистрация: 24-01-11
Пользователь №: 62 436



Всем привет,

имеется атмега328п, хочется к ней прикрутить несколько, от одного до четырех, датчиков температуры DS18B20 по 1-wire. Незадачка в том, что эта атмега должна в реальном времени выполнять кучу другой работы, которую нельзя прерывать 100мкс-750мс ожиданиями протокола 1-wire.

В то же время, как я понимаю из прочтения исходников протокола общения с этими датчиками, большую часть времени микроконтроллер должен ждать.

Возникает идея, что этот протокол может быть реализован на прерываниях таймера и int0 (я могу повесить 1-wire на эту ножку) и практически не занимать время процессора, но программировать это может быть довольно не тривиально.

Скажите, пожалуйста, может кто-то уже такое запрограммировал, и такие исходники существуют в сети? Если да, тыкните, пожалуйста, пальцем где скачать. Если нет, может я в чем-то ошибаюсь и это не так просто, как мне кажется?

Знаю, что есть еще решение - поставить на плату тиньку или еще одну ардуину, которая будет 100% занята опросами этой температуры, но очень не хотелось бы это делать.

Спасибо

ИИВ
Go to the top of the page
 
+Quote Post
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 24)
ARV
сообщение Nov 30 2011, 08:57
Сообщение #16


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



Цитата(ILYAUL @ Nov 30 2011, 09:56) *
Почему параллель? До начала чтения данных с датчиков , Вы работаете со всеми сразу игнорируя ID микросхем, а вот чтение для каждого своё.
я делал небольшую модификацию библиотеки 1-wire и получил возможность работать на самом деле в параллель с 8-ю датчиками (а при высокой тактовой частоте и с бОльшим количеством), подключеным к 8 линиям одного порта AVR. при известном желании можно на самом деле одновременно получить результаты с 8 штук sm.gif правда зачем - не понятно sm.gif


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Nov 30 2011, 18:26
Сообщение #17


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



На 8 портов и еще с питанием на датчик все будет быстро, а при паразитном питании не уложитесь в одну секунду на 2 датчика ну никак.
Ресет, ответ, проверка, посылка серийника критичны ко времени, что-то обрЭзать там не получится ...

Сообщение отредактировал Павлик - Nov 30 2011, 18:28
Go to the top of the page
 
+Quote Post
Shaeto
сообщение Dec 1 2011, 20:30
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 27-11-11
Из: Россия, Великий Новгород
Пользователь №: 68 546



1-wire вообще интересные устройства у них, особенно dac/adc, ключи и прочее. я предпочел к атмеге через I2C подключить драйвер DS2482-800 (или -100), недорого и удобно ну и данные по прерыванию валятся.
Go to the top of the page
 
+Quote Post
xemul
сообщение Dec 1 2011, 21:24
Сообщение #19



*****

Группа: Свой
Сообщений: 1 928
Регистрация: 11-07-06
Пользователь №: 18 731



Цитата(Павлик @ Nov 30 2011, 22:26) *
а при паразитном питании не уложитесь в одну секунду на 2 датчика ну никак.

При девяти битах на выходе - в секунду 4 паразита с запасом.
Go to the top of the page
 
+Quote Post
Br.Misha
сообщение Dec 4 2011, 01:01
Сообщение #20


Местный
***

Группа: Validating
Сообщений: 253
Регистрация: 21-12-08
Пользователь №: 42 646



http://kibermaster.net/rabota-s-shinoy-1-w...-ds18b20-k-avr/
Go to the top of the page
 
+Quote Post
usav
сообщение Dec 8 2011, 19:46
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 22-01-10
Из: Kiev
Пользователь №: 55 001



А у кого опыт паразитного питания? Какие основные моменты?
Вот, думаю, что лучше уменьшить разрядность? Или при единственном
датчике на линии это не имеет значения?
Кто-то утверждал, что на паразитном питании получает лучшие результаты
по длине кабеля, чем при постоянном питании. Как это может быть?
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Dec 12 2011, 06:10
Сообщение #22


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Нормально все работает на паразитном питании -50 ... + 127. Время заряда давать не менее 800-900мс, если длинна провода большая, подтяжку уменьшить нужно.
После чтения дать 0, чтоб не было разогрева датчика.
Go to the top of the page
 
+Quote Post
usav
сообщение Dec 13 2011, 17:06
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 22-01-10
Из: Kiev
Пользователь №: 55 001



"Время заряда давать не менее 800-900мс"
----------------------------------------------------
Вы имеете в виду выдержку в "1 = +5В" после команды СТАРТ?
Go to the top of the page
 
+Quote Post
pavel-pervomaysk
сообщение Dec 13 2011, 17:36
Сообщение #24


Местный
***

Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716



Так будет понятнее

CODE
ds_start: //
andi flags,0xFC // чистим флаги
rcall ds_reset // сброс
cli // выключаем прерывания
ldi tmp, 0x55 // соответствие ROM
rcall ds_write //
push zl // сохраняем адрес серийника
push zh //
rcall send_serial // посылаем 8 байт 1 код устройства 6 серийный номер 1 црц
pop zh // восстанавливаем адрес серийника
pop zl //
ldi tmp, 0x44 // Посылаем команду конвертировать температуру
rcall ds_write //
sbi dal_port,ds_p
sbi dal_ddr,ds_p
sei //
cbi portb,load // Load -> 0
rcall wait_075s // даем еденицу для конвертирования температуры минимум 800-900 мс ( о чем я говорил )
rcall ds_reset //
cli //
ldi tmp, 0x55 // соответствие ROM
rcall ds_write //
rcall send_serial //
ldi tmp, 0xBE // Посылаем команду что сейчас будем читать датчик
rcall ds_write //
sei
ldi xl,65 // Ждем 50 мкс
rcall wait //
cli
rcall ds_read // читаем 12 бит
cbi dal_port,ds_p
sbi dal_ddr,ds_p // RESET Dallas ставим 0 чтоб избежать саморазогрев датчика
rcall ds_bcd //
ds_ok: //
sei //
ret // Выход из подпрограммы

send_serial: // Посылаем 8 байт серийного номера в датчик DS18B20
// Адрес строки предварительно загружаем в Z
ldi loop2,8 //
send_c: //
lpm tmp,Z+ //
rcall ds_write //
dec loop2 //
brne send_c //
ret //

Go to the top of the page
 
+Quote Post
usav
сообщение Dec 13 2011, 22:52
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 22-01-10
Из: Kiev
Пользователь №: 55 001



Понятно, спасибо, Павлик!

Сообщение отредактировал usav - Dec 13 2011, 22:52
Go to the top of the page
 
+Quote Post

2 страниц V  < 1 2
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 18:28
Рейтинг@Mail.ru


Страница сгенерированна за 0.01459 секунд с 7
ELECTRONIX ©2004-2016