Всё по DS18(B/S)20.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Хатуль_мадан
Электрический кот
Сообщения: 1007
Зарегистрирован: Ср мар 03, 2010 11:48:00
Откуда: Уфа

Re: Всё по DS18(B/S)20.

Сообщение Хатуль_мадан »

Пожалуйста!
Хотя обвинения не по адресу. Изначально, прочитав осбуждение, вспомнил про адаптер для 1-w, предложил ссылку, где есть отработанная схема, которая применима как для компа, или согласуется с TTL через MAX232, так и подключаема напрямую к ножкам МК. Chip115 писал:
Разбираюсь с Ds1820.
В ручную поднял 1-wire. Всё работает. Захотелось натянуть 1-wire "поверх" UART.
схема узла

Тут ни слова про согласование с МК, поэтому и предложил вариант адаптера. Но затем Gudd-Head отнес это в разряд "высера" по непонятным причинам. Поэтому и простите что вмешался, просто хотел помочь.
HHIMERA, BOB51 спасибо за интересную информацию, ранее мне не встречалась.
Реклама
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Chip115 »

Хатуль_мадан писал(а): Хотя обвинения не по адресу. Изначально, прочитав осбуждение, вспомнил про адаптер для 1-w, предложил ссылку, где есть отработанная схема, которая применима как для компа, или согласуется с TTL через MAX232, так и подключаема напрямую к ножкам МК.
Верно. Я не всё написал, вы своё додумали, потом другие присоединились и понеслась моча по трубам. Предлагаю остановиться, пока такой пустяк не привёл к ссоре.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Реклама
Аватара пользователя
Chip115
Сверлит текстолит когтями
Сообщения: 1132
Зарегистрирован: Пт фев 16, 2007 14:18:20
Откуда: Новосибирск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Chip115 »

HHIMERA писал(а):
Chip115 писал(а):Просто конфигурируем порты как альтернативная ф-ция OD и RX/TX на провод данных вешаем?
Ну да!!! Неважно... UART или TIM...
Ну, резистор подтяжки как бы по дефолту 1-wire стоит.
Резистор - святое!!!
Спасибо! Жаль что сам не додумался так сделать ))) Никогда не юзал входы/выходы в режиме OD.
Теория — это когда все известно, но ничего не работает. Практика — это когда все работает, но никто не знает почему. Мы же объединяем теорию и практику: ничего не работает… и никто не знает почему!
© Альберт Эйнштейн
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Всё по DS18(B/S)20.

Сообщение BOB51 »

И всё же не рекомендую забывать о внешнем драйвере.
Проведите простой тест - метров 25 телефонной проводины и датчик.
На "микроконтроллерном" порте без "заморочек" и на спецдрайвере из апнотиков - результат покажет что лучше.
(По старым данным МК - уверенно до 10 метров, на буфер-формирователе http://img.radiokot.ru/files/20529/kc1ezblxl.JPG даже простая " хамская бухта" (http://img.radiokot.ru/files/20529/kjmicvkxi.jpg) проблем не вызвала).
:roll:
Реклама
Эиком - электронные компоненты и радиодетали
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Всё по DS18(B/S)20.

Сообщение HHIMERA »

на буфер-формирователе
Ну... если уж быть честным... данная схема тоже не блещет... Рассказывать... или сам знаешь???
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Всё по DS18(B/S)20.

Сообщение BOB51 »

Меня вполне устраивает на данный момент.
Кроме прочего - развязка внешних цепей и внутриМКшных токов.
:)
Есть чего предложить - выкладывай, посмотрим. 8)
Реклама
Аватара пользователя
flusher
Встал на лапы
Сообщения: 130
Зарегистрирован: Вт дек 08, 2009 00:53:56
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение flusher »

а есть у кого-то простой пример на С покурить под avrstudio чтения температуры из DS1621/LM75/TMP75?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

flusher писал(а):DS1621/LM75/TMP75?
Темой не ошиблись? Это всё I²C.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Всё по DS18(B/S)20.

Сообщение BOB51 »

LM75 - есть I2C... 8)
Причем еще и с режимом термостата...
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

BOB51, к чему был Ваш пост ? Если из вышесказанного итак понятно, что у этих микросхем интерфейс I²C. Человек запостил не в той теме, а Вы продолжаете флудом посты набивать.
Не первый раз уже такое замечаю за Вами.
djrec
Прорезались зубы
Сообщения: 216
Зарегистрирован: Вс окт 23, 2011 22:18:40

Подскажите по 18В20

Сообщение djrec »

Подскажите как изменить код что бы возможно было использовать два датчика. Например второй к порту С5, ну или паралельно первому.

PORTВ=T1;

Спойлер

Код: Выделить всё

****************************************************
/#define F_CPU 1000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
 
#define SKIP_ROM 0xCC // Пропустить индентификацию
#define CONVERT_T 0x44 // Измерить температуру
#define READ_SCRATCHPAD 0xBE // Прочитать измеренное
 
//определяем порт и бит к которому подключено устройство
#define OWI_PORT PORTC
#define OWI_DDR DDRC
#define OWI_PIN PINC
#define OWI_BIT 4
 
#define OWI_LOW OWI_DDR |= 1<<OWI_BIT//притягиваем шину к 0
#define OWI_HIGH OWI_DDR &= ~(1<<OWI_BIT)//отпускаем шину
 
//функция определяет есть ли устройство на шине
char OWI_find(void)
{
char SR0=SREG;//сохраняем значение регистра
cli(); //запрещаем прерывания
char device;
OWI_LOW; //притягиваем шину к 0
_delay_us(485);//ждем минимум 480мкс
OWI_HIGH;//отпускаем шину
_delay_us(65);//ждем минимум 60мкс и смотрим что на шине
 
if((OWI_PIN & (1<<OWI_BIT)) ==0x00)//смотрим есть ли ответ
device = 1; //на шине есть устройство
else
device = 0; //на шине нет устройства
SREG=SR0;//возвращаем первонач знач регистра
_delay_us(420);//ждем оставшееся время до 480мкс
return device;
}
 
// функция отправляет бит на устройство
void OWI_write_bit (char bit)
{
char SR1=SREG;//сохраняем значение регистра
cli(); //запрещаем прерывания
OWI_LOW;//логический "0"
_delay_us(2);
if(bit) OWI_HIGH; //отпускаем шину
_delay_us(65);
OWI_HIGH; //отпускаем шину
SREG=SR1;//возвращаем первонач знач регистра
}
 
//функция посылает байт на устройство
void OWI_write_byte(unsigned char c)
{
char i;
for(i = 0; i < 8; i++)//в цикле посылаем побитно
{
if((c & (1<<i)) == 1<<i)//если бит=1 посылаем 1
OWI_write_bit(1);
else//иначе посылаем 0
OWI_write_bit(0);
}
}
 
//функция чтения одного бита
char OWI_read_bit (void)
{
char SR2=SREG;//сохраняем значение регистра
cli(); //запрещаем прерывания
char OWI_rbit; //переменная хранения бита
OWI_LOW;//логический "0"
_delay_us(2);
OWI_HIGH; //отпускаем шину
_delay_us(13);
OWI_rbit=(OWI_PIN & (1<<OWI_BIT))>>OWI_BIT;//строчка исправлена 05.2014 (исправлена ошибка)
_delay_us(45);//задержка до окончания тайм-слота
SREG=SR2;//возвращаем первонач знач регистра
return OWI_rbit;
}
 
//функция читает один байт с устройства 1-wire
unsigned char OWI_read_byte()
{
char data=0,i;
for(i = 0; i < 8; i++) //в цикле смотрим что на шине и сохраняем значение
data|= OWI_read_bit()<<i;//читаем очередной бит
return data;
}
 
//функция преобразует полученные с датчика 18b20 данные в температуру
int  temp_18b20()
{
unsigned char B;
unsigned int ds18_temp=0;
if(OWI_find()==1)//если есть устройство на шине
{
OWI_write_byte(SKIP_ROM);//пропустить ROM код, мы знаем, что у нас одно устройство или передаем всем
OWI_write_byte(CONVERT_T);//преобразовать температуру
_delay_ms(750);//преобразование в 12 битном режиме занимает 750ms
OWI_find();//снова посылаем Presence и Reset
OWI_write_byte(SKIP_ROM);
OWI_write_byte(READ_SCRATCHPAD);//передать байты ведущему(у 18b20 в первых двух содержится температура)
 
B = OWI_read_byte(); //читаем бит LS
ds18_temp = OWI_read_byte(); //читаем бит MS
ds18_temp = (ds18_temp<<8)|B;//уладываем биты в последовательности MS потом LS
}
// else return можно сделать возврат числа что датчика нет
return ds18_temp;//возвращаем int (MS,LS)
}
 
//перевод инф от temp_18b20() в удобный вид
char convert (unsigned int td)
{
char dat=td>>4;//сдвиг и отсечение старшего байта
return dat;// (знак,2в6,2в5,2в4,2в3,2в2,2в1,2в0)
}
 
int main (void)
{
DDRC=0x00;
PORTC=0x00;
char T=0;
 
DDRD=0xFF;
while(1)
{ T=convert(temp_18b20());
PORTD=T;
}
}
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

djrec, а в чём затык ? :dont_know:
С одним же датчиком разобрались. Так и работайте с другим точно также, как и с первым, только на другом ПИНе.
-=Vovka=-
Опытный кот
Сообщения: 844
Зарегистрирован: Пн апр 11, 2011 10:08:52

Re: Всё по DS18(B/S)20.

Сообщение -=Vovka=- »

Для работы с двумя датчиками нужно работать с битами порта не напрямую, а через переменную-маску.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18673
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Если у меня 2 датчика и 2 свободных ноги, я бы тоже повесил по одному на порт.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

датчики DS18x20 рассчитаны на работу "параллельно"
С параллельным подключением существуют некторые неудобства (именно неудобства, а не отсутствие возможности), такие как привязка конкретного датчика к конкретному объекту.
С подключением на разные порты таких неудобств не будет. Заменил датчик на объекте и не паришься со всякими номерами и забиваниями их в девайс.
В остальном с Вами согласен. Интернет просто завален ответами на подобные вопросы, главное не лениться и искать информацию...
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Плюс ко всему когда датчики разнесены по портам, они однозначно идентифицируются, и код короче.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18673
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение ARV »

задавший последний вопрос был готов использовать второй датчик
djrec писал(а):паралельно первому.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Не надо отдельные фразы вырывать.
второй к порту С5, ну или паралельно первому
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18673
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение ARV »

что значит - вырывать? я избрал для своего возмущенного высказывания ВТОРУЮ часть фразы, ее и процитировал. автор вопроса соединил части союзом ИЛИ - значит, ему одинаково подходят любые варианты. в чем я не прав?!
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

Вернуться в «Периферия»