» » » Немного про шину 1-Wire и цифровой термометр DS18b20

 
 
 

Немного про шину 1-Wire и цифровой термометр DS18b20

Разместил teXnik 31 марта 2014. Просмотров: 20073

17
Немного про шину 1-Wire и цифровой термометр DS18b20
Фотка от www.150cc.ru

Здравствуйте, друзья. Хочу предложить вашему вниманию несколько простых функций для работы с шиной 1-Wire и термометром DS18b20 на микроконтроллерах от ATMEL.

1-Wire

Потребовалось мне узнать температуру радиатора в усилителе и как нельзя кстати в закромах была ATMega8 и DS18b20 – цифрой датчик температуры с протоколом 1-wire. Запустил CODEVISIONAVR, взял функции из стандартных библиотек, прошил, запустил и… датчик нагло врал на 3-5 градусов, я сравнивал с пирометром и комнатным термометром. В чем причина безобразия я не понял и решил сам написать все процедуры обмена данными, а заодно и изучить данную шину.

1-Wire — двунаправленная шина связи для устройств с низкоскоростной передачей данных подробнее можно почитать на Wikipedia
Немного про шину 1-Wire и цифровой термометр DS18b20

Что нужно запомнить

  1. Передача данных и сигналов синхронизации происходит по одному проводу.
  2. Передачу данных всегда инициализирует МК.
  3. Биты данных передаются тайм-слотами со строго ограниченными временными рамками.
  4. На одной шине может находиться несколько устройств.
  5. У каждого устройства есть свой уникальный ROM код.


Начинаем передачу

Для дальнейшей работы с шиной у нас должна быть подключена библиотека delay.h и определены три дефайна.
#include 
// В место 3-его вывода порта B можно использовать любой другой
#define w1_port PORTB.3
#define w1_pin PINB.3
#define w1_ddr DDRB.3

Прежде чем общаться с датчиком МК необходимо убедиться, что на проводе собственно присутствует устройство 1-wire. Для этого есть процедура инициализации. Взглянем на ее диаграмму 1 из даташита на датчик.
Диаграмма 1 — Инициализация.Диаграмма 1 — Инициализация.

Что должно происходить:
  1. МК генерирует сигнала reset, удерживая шину в 0 состоянии в течении 480 микросекунд.
  2. Ждем не менее 15, но не боле 60 микросекунд. За это время подтягивающий резистор должен поднять уровень на шине до логической единицы.
  3. Датчик удерживает шину в нулевом состоянии в течении не менее 60 микросекунд. Если за это время шина не смени свое состояние на 0 значит на шине ошибки или датчик не исправен (Долго не мог понять, в чем дело, когда отпаялся подтягивающий резистор и на шине всегда считывался 0).


И собственно функция:
Исключён фрагмент. Полный вариант статьи доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.

Данная функция возвращает 0 если все в порядке и 1 если нет.

Обмениваемся данными

Передача данных осуществляется побитно так называемыми тайм слотами. Тайм слот – последовательность действий по передачи одного бита. Тайм слот продолжается от 60 до 120 микросекунд.
Снова посмотрим на диаграмму, которою нам предлагают разработчики.
Диаграмма 2 — чтение, запись.Диаграмма 2 — чтение, запись.

Передаем «0». Что должно происходит:
  1. МК удерживает шину в 0 состоянии в течении 60 микросекунд.
  2. МК отпускает шину давая резистору подтяжки делать свое дело.


Передаем «1». Что должно происходить:
  1. МК удерживает шину в 0 состоянии в течении 15 микросекунд.
  2. МК отпускает шину.

Чтобы передать байт данных необходимо инициализировать 8 тайм слотов соответственно. Передача (и чтение тоже) начинается с младшего разряда.
Функция передачи байта данных:
void w1_send(char cmd)
{
unsigned char bitc=0;
#asm("cli"); // запрещаем прерывания, что бы не было сбоев при передачи
for (bitc=0; bitc < 8; bitc++)
{
if (cmd&0x01) // сравниваем младший бит
{
w1_ddr=1;
w1_port=0;
delay_us(15);
w1_port=1;
delay_us(50);
w1_ddr=0;
delay_us(5);
}
else
{
w1_ddr=1;
w1_port=0;
delay_us(65);
w1_ddr=0;
delay_us(5);
};
cmd=cmd>>1; //сдвигаем передаваемый байт данных на 1 в сторону младших разрядов
};
#asm("sei");
};


Чтение данных немного сложнее. Что должно происходит:
  1. МК удерживает шину в 0 состоянии в течении 1 микросекунд.
  2. МК отпускает шину.
  3. ждем завершения переходных процессов 14 микросекунд.
  4. МК считывает состояние шины.
  5. Ждем еще 45 микросекунд до конца тайм слота.


Как и при записи для чтения одного байта необходимо 8 тайм слотов.
Функция чтения:
char w1_readbyte(void)
{
unsigned char bitc=0;// счетчик принятых байт
unsigned char res=0; // принятый байт
#asm("cli");

for (bitc=0; bitc < 8; bitc++)
{
w1_ddr=1; // порт на вывод
w1_port=0; // начинаем тайм слот записью 0
delay_us(1);
w1_ddr=0; // порт на ввод
delay_us(14); // ждем завершения переходных процессов

if (w1_pin)
{
res|= (1 < < bitc); // если на ходе 1 то запишем ее в текущий бит
};
delay_us(45); // ждем до завершения тайм слота
};
delay_us(5);
#asm("sei");
return res;
};


Мы научились читать и передавать байты, но для работы этого еще мало.
В связи с тем, что шина однопроводная и на ней может быть несколько устройств, возможны ошибки при передаче данных. Что бы поверить целостность данных необходимо проверить контрольную сумму. Существует два метода подсчета контрольной суммы – алгоритмический и табличный. Алгоритм не самый тривиальный и я решил использовать табличный.
Нашел на просторах интернета уже вычисленные сигнатуры. Определим их в массив и заведем переменную:
Исключён фрагмент. Полный вариант статьи доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.


Что бы определить истинность принятых данных необходимо выполнить следующую процедуру для каждого принимаемого байта. При безошибочной передачи значение переменной будет нулевым.

char crc=0;
// строчка в обработчике принятых байт
crc=crckey[crc^received_byte];


Общение с датчиком

Существует ряд общих команд для всех 1-wire устройств. Среди них:
  • 0x33h – считать ромкод (уникальное имя каждого устройства). Применение возможно только, если на шине всего одно устройство.
  • 0x55h – обратиться по ром коду к конкретному устройству. После необходимо также передать 64 битный ром код. Только устройство у которого переданный код совпадет с записанным в него на заводе останется на шине, остальные отключаться.
  • 0xCCh — После приема данной команды все устройства останутся активными на шине. Удобно использовать если устройство одно или есть однотипные.


Несколько команд для DS’ ки:
  • 0x44h – Запуск преобразования температуры. Если датчик питает не от линии данных, то после можно прочитать состояние шины 0 – если преобразование не завершено и 1 – если преобразование завершено.
  • 0xBEh – Считать 8 байт данных. Первые два байта – вычисленная температура.
  • 0x4Eh – запись в память датчика. Необходимо передать три байта – верхнюю границу термостата, нижнюю границу термостата и значение контрольного регистра.


В контрольном регистре задается разрешение термометра от 9 до 12 бит. В зависимости от разрешения сильно меняется время преобразования.
  • 0x1Fh — 9 бит (±0,5 градуса Цельсия), преобразование примерно 94 миллисекунды;
  • 0x3Fh — 10 бит (±0,25 градуса Цельсия), преобразование примерно 188 миллисекунд;
  • 0x5Fh — 11 бит (±0,125 градуса Цельсия), преобразование примерно 375 миллисекунд;
  • 0x7Fh — 12 бит (±0,0625 градуса Цельсия), преобразование примерно 750 миллисекунд;


Подробнее о командах и структуре памяти можно почитать в даташите в конце статьи.
Мне высокая точность вычисления не нужна. Поэтому приведу свой вариант процедур настройки датчика и чтения результатов работы. В нем устанавливается самый быстрый режим работы датчика и чтение результатов с точность до градуса, без учета возможных отрицательных температур.

Настройка датчика:
void ds1820_init(void)
{
if (w1_reset()==0) // если на шине есть откликнувшееся устройство то продолжаем
{
w1_send(0xcc); // пропустить ром
w1_send(0x4e); // команда записи в датчик
w1_send(0x32); // верхняя граница термостата th
w1_send(0); // нижняя граница термостата tlow
w1_send(0x1f); // режим работы - 9 бит
}
else
{
// здесь должен быть обработчик ошибки на шине, у меня выводится сообщение на дисплей
lcd_fstrxy(0,0,"ds1820 error",12);
};
}


В комментария выше фигурирует слово «термостат». DS18B20 — имеет такую функцию. Если после преобразования температура окажется ниже Tlow или выше Th, установиться флаг alarm. Есть команда ALARM SEARCH [0xECh] на нее отзываться только устройства с установленным флагом аварии. Функция поиска — довольно медленная. Ее использование актуально, на мой взгляд, толь при большом количестве датчиков.

Считываем температуру. Если датчик у нас не один то обращаться придется по rom коду, который вначале необходимо считать
Исключён фрагмент. Полный вариант статьи доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.


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

Функция выдачи ром кода на шину:
void w1_writerom(char num)
{
char bytec=0;
for (bitc=0; bytec < 8; bytec++)
{
w1_send(dsrom[num][bytec]);
};
};

И наконец чтение температуры с датчика с номером DSnum:

char ds1820_readt(char DSnum)
{
int r=0;
#asm ("cli");
if (w1_reset()==0)
{
w1_send(0xcc); // пропустить ром
w1_send(0x44); // посылаем команду старта преобразования
};
delay_ms(95); // ждем пока идет преобразование;
if (w1_reset()==0) // если на шине есть откликнувшееся устройство то продолжаем
{
w1_send(0x55); // обратиться по ром коду
w1_writerom(DSnum); // выдаем ром код выбранного датчика на шину
w1_send(0xbe); // считать память
// температура хранится в двух байт и младший разряд целой составляющей
// расположен в 5ом бите первого байта
r=(w1_readbyte() > > 4); // поэтому сдвигаем в право на 4 бита
r=r+ (w1_readbyte() < < 4); // и добавляем 4 бита из второго байта
w1_reset(); // по правилам DS'ки прервать дальнейшее чтение стоит командой RESET
};
#asm ("sei");
return (char) r;
};

функция возвращает целое значение температуры, если она была положительная и 0 если были ошибки при чтении.

Файлы

Даташит на DS18B20:
Файловый сервис доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.


Многие моменты, например, использование команды «SEARCH ROM» — поиск устройств на шине, или чтение температуры с большей точностью я не осветил потому, что такой необходимости у меня не было. Надеюсь моя работа окажется для кого-то полезной.

Спасибо за внимание!

Об авторе

Алексей (teXnik)
Россия, Тула
Студент политехнического университета, увлекаюсь радиэлектроникой и модернизацией авто (подготовка для джип триала). Паять люблю. Переделал амфитоны 25 ас 27 и усилитель под них на тдашке.
Собрал уазик с мотором v8.

На сайт пришел для разватия своих навыков и умений
 

Понравилось? Палец вверх!

  • всего лайков: 56

Поделись с друзьями!


Связанные материалы:


Программная реализация протокола SPI на AVR в CodeVisionAVR

Всем коллегам и согражданам привет! Увлёкся я изучением протоколов. Про реализацию ...

Программная реализация протокола I2C на AVR в CodeVisionAVR

Пару лет назад, изучая Atmega8, я захотел программно реализовать работу с устройствами...

Трансивер 2,4 ГГц Nordic Semiconductor nRF24L01. Перевод таблиц даташита, пояснения

Привет, датагорцы! Выкладываю перевод таблиц из спецификации nRF24L01+, файл с пояснениями и...

Несколько функций для програмной реализации протокола I2C на AVR

Добрый день, дорогие друзья! Решил поделиться с вами несколькими функция для работы...

Термометр + термостат на микроконтроллере PIC16F876 и датчиках DS18B20

Термометр История этого термометра началась в далёком 2011 году. Мне понадобилось в подвале...

USB адаптер для чтения и программирования цифровых термостатов MAXIM/DALLAS DS1821

В статье описано, как за час сделать простой USB-адаптер для чтения/записи цифровых термометров...

Сделай сам универсальный контроллер управления 7-сегментными LED индикаторами по

Занялся я конструированием нового устройства и встал вопрос — на чем отображать данные....

Arduino shield своими руками: акселерометр на LIS302DL

Собрал недавно arduino на atmega8, поморгал диодом, захотелось большего Начал изучать различные...

Простой цифровой термометр на ATmega8535 + DS18B20

Доброго времени суток! Представляю простой, цифровой термометр на индикаторе ИЖЦ21-4/7,...

Грызем микроконтроллеры. Урок 4.

Мигалки – это хорошо, по новогоднему… Но ведь нельзя останавливаться на достигнутом! Пора сделать...

10 практических устройств на AVR-микроконтроллерах. Книга 1. А.В. Кравченко

10 практических устройств на AVR-микроконтроллерах. Книга 1. А.В. Кравченко Издательство:...

TDA7442D+ATmega8. Микропроцессорный регулятор громкости

Привет ВСЕМ!!! Интересно, кому бы не хотелось, чтобы его усь обладал сервисом промышленных...
<
  • Гражданин
31 марта 2014 04:08

Владимир / Spirit

  • Регистрация: 30.03.2014
  • Публикаций: 14
  • Комментариев: 5
 
  • 0
Отличная работа!
1Wire - не самый простой в освоении протокол, но работа проделана отлично!
Единственный недостаток - при работе с шиной невозможно выполнять другие операции, ведь функция delay_us() - прокрутка пустого цикла.

Большинство задержек в протоколе кратны 15 микросекундам. Можно настроить один из таймеров на прерывание каждые 15 мкс, а в нем отсчитывать нужное количество таких интервалов.

<
  • Гражданин
31 марта 2014 20:20

Александр / Alexverb

  • Регистрация: 15.04.2009
  • Публикаций: 1
  • Комментариев: 45
 
  • 0
Интересная статья, ждем еще!

<
  • Гражданин
31 марта 2014 21:32

Антон / 2UnLiMiTeDD

  • Регистрация: 5.01.2012
  • Публикаций: 1
  • Комментариев: 10
 
  • 0
Очень полезно!
Только не сказано помогло ли это преодолеть ошибки?

<
  • Гражданин
31 марта 2014 22:12

Алексей / teXnik

  • Регистрация: 1.11.2009
  • Публикаций: 5
  • Комментариев: 33
 
  • 0
Цитата: 2UnLiMiTeDD
Очень полезно!
Только не сказано помогло ли это преодолеть ошибки?

Да, помогло!

<
  • Гражданин
1 апреля 2014 02:07

Игорь / AudioKiller

  • Регистрация: 10.01.2012
  • Публикаций: 3
  • Комментариев: 293
 
  • 0
Интересно!
Не совсем понял про ромкод. Если устройство на шине всего одно - зачем его читать? Если их несколько - то как им пользоваться?

<
  • Гражданин
1 апреля 2014 03:12

Алексей / teXnik

  • Регистрация: 1.11.2009
  • Публикаций: 5
  • Комментариев: 33
 
  • 0
Цитата: AudioKiller
Не совсем понял про ромкод. Если устройство на шине всего одно - зачем его читать? Если их несколько - то как им пользоваться?

Если устройство одно - то ром код читать ненужно.
Если несколько то подключить сначала одно, считать его ром; Подключить следующее и тд.
При подачи питания на устройство ванвайр, оно генерирует сигнал present на шине. Можно, например организовать цикл и ждать пока не появиться сигнал present, считать код, а затем ждать следующий датчик.
Намного логичнее было бы использовать команду поиска, но реализация ее алгоритма займет прилично памяти. Я в своем проекте организовал процедуру начальной инициализации: если при запуске МК на одной ножке 0 значит это первый запуск, МК считывает ром, затем ждет пока не будет 1 на ножке, потом снова считает ром. Устанавливаю перемычку - на ножке ноль, МК записывает считанные коды в EEPROM и при последующем старте читает их оттуда.

<
  • Гражданин
2 апреля 2014 03:19

Алексей / teXnik

  • Регистрация: 1.11.2009
  • Публикаций: 5
  • Комментариев: 33
 
  • 0
Цитата: Spirit
Большинство задержек в протоколе кратны 15 микросекундам. Можно настроить один из таймеров на прерывание каждые 15 мкс, а в нем отсчитывать нужное количество таких интервалов.

Во первых 15 микросекунд это 120 тактов на частоте 8 МГц - не так уж и много.
Во вторых отводить на это таймер не слишком разумно, по скольку их например в меге8 всего три и они могут понадобиться для чего поважнее.
В третьих обратите внимание что на время работы с шиной отключаются прерывания. Ванвайр очень чувствителен к соблюдению временных интервалов. С включенными прерываниями у меня были ошибки при чтении (таймер при переполнении опрашивал порт энкодера).

<
  • Гражданин
2 апреля 2014 04:17

Владимир / Spirit

  • Регистрация: 30.03.2014
  • Публикаций: 14
  • Комментариев: 5
 
  • 0
Цитата: teXnik
Во первых 15 микросекунд это 120 тактов на частоте 8 МГц - не так уж и много.
Во вторых отводить на это таймер не слишком разумно, по скольку их например в меге8 всего три и они могут понадобиться для чего поважнее.
В третьих обратите внимание что на время работы с шиной отключаются прерывания. Ванвайр очень чувствителен к соблюдению временных интервалов. С включенными прерываниями у меня были ошибки при чтении (таймер при переполнении опрашивал порт энкодера).

С одной стороны, полностью согласен, но с другой - при чтении одного байта с шины задержка получается примерно 560 микросекунд, а это уже 67200 тактов.
Ошибки при включенных прерываниях - прямое следствие задержек типа delay(). Эти функции компилятор составляет так, чтобы они выполнялись фиксированное время. А если при этом возникает прерывание, то такая задержка становится больше ровно на время исполнения кода прерывания + переход туда-обратно, помноженное на количество таких прерываний за время работы функции.
Если использовать таймер, то максимальное время задержки становится намного меньше. В худшем случае - 15 микросекунд + отработка одного/двух прерываний из очереди. При этом можно отключить только прерывания с бОльшим приоритетом, чем у таймера, тогда задержка будет еще меньше.
По поводу экономии таймера - во многих программах требуется отсчет определенных интервалов и, чаще всего, все эти интервалы можно повесить на один таймер, используя оставшиеся для чего угодно. Или же повесить дополнительное прерывание на таймер, который используется другим куском программы. А "более важные цели" для которых Вы предлагаете использовать таймеры, мы все рано игнорируем, отключив прерывания.
И еще момент. Функции 1Wire из стандартных библиотек работают очень даже неплохо. Самая распространенная ошибка в их использовании - постоянный опрос датчика. Если не делать довольно больших интервалов между опросами, датчик имеет свойство нагреваться, отсюда и погрешность в бОльшую сторону. Если нужно отслеживать только критические температуры, то лучший вариант - настроить датчик как "термостат" и читать данные только по его сигналу.
Это, разумеется, мое личное мнение. На истину не претендую smile

<
  • Гражданин
2 апреля 2014 11:57

Алексей / teXnik

  • Регистрация: 1.11.2009
  • Публикаций: 5
  • Комментариев: 33
 
  • 0
Цитата: Spirit
настроить датчик как "термостат" и читать данные только по его сигналу.

На мой взгляд это не самое оптимальное решение, так как никакого сигнала он не видает, а лишь, устанавливает флаг ALARM в своих внутренностях и как следствие будет отвечать на SEARCH ALARM, а это в свою очередь: 2 байта на старт преобразования, 25 байт на поиск каждого датчика с флагом + 3 байта для чтения температуры.

Цитата: Spirit
при чтении одного байта с шины задержка получается примерно 560 микросекунд, а это уже 67200 тактов.

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

<
  • Гражданин
2 апреля 2014 14:12

Владимир / Spirit

  • Регистрация: 30.03.2014
  • Публикаций: 14
  • Комментариев: 5
 
  • 0
Цитата: teXnik
На мой взгляд это не самое оптимальное решение, так как никакого сигнала он не видает, а лишь, устанавливает флаг ALARM в своих внутренностях и как следствие будет отвечать на SEARCH ALARM, а это в свою очередь: 2 байта на старт преобразования, 25 байт на поиск каждого датчика с флагом + 3 байта для чтения температуры.

Я немного непонятно объяснил.
Если датчик всего один, то искать его не нужно.
Если датчиков несколько, поиск "сработавшего" займет меньше времени, чем опрос каждого и сравнение. Преобразование можно запустить на всех одновременно и "спокойно заняться своими делами", т.к. не обязательно считывать датчики сразу. Потом делаем SEARCH ALARM, и, если тревога есть, то можно даже не читая датчиков отрабатывать нештатную ситуацию (например, отключение усилителя по перегреву), ну а в случае, когда (и только когда) для принятия решения нужны конкретные данные, читаем все датчики. В любом случае, нештатные ситуации намного реже, а значит мы прилично экономим время, не читая все датчики по кругу. В общем, это позволит чаще опрашивать датчики, при тех же накладных расходах, а для вывода на дисплей температуру можно считывать раз в несколько секунд.

И еще немного конкретики. Основная разница между delay() и прерываниями в том, что в первом случае у нас накапливается систематическая ошибка. Например, во время чтения/записи каждого бита из/в шину, из-за прерываний возникает ошибка +500 нсек, значит на 16-ом бите ошибка уже составляет +8 мксек. Во втором случае может возникнуть задержка +500 нсек между установкой флага прерывания и его выполнением (из-за прерываний с более высоким приоритетом), но следующее прерывание все равно возникнет в строго определенное время и скорректирует эту ошибку.

Алексей, я очень уважаю ваш труд! Просто по натуре идеалист+максималист и всегда пытаюсь найти наиболее оптимальное решение. Как вы смотрите на то, чтобы вместе попробовать написать библиотеку 1Wire на прерываниях. Было бы очень удобно и многим бы пригодилось, а я бы в одной из своих обучающих статей подробно описал ее работу и применение на разных архитектурах? drinks

<
  • Гражданин
2 апреля 2014 14:24

Алексей / teXnik

  • Регистрация: 1.11.2009
  • Публикаций: 5
  • Комментариев: 33
 
  • 0
Цитата: Spirit
Как вы смотрите на то, чтобы вместе попробовать написать библиотеку 1Wire на прерываниях.

Можно попробовать.
Цитата: Spirit
значит на 16-ом бите ошибка уже составляет +8 мксек.
А вот с эти я не согласен. Чтение каждого бита инициализурует МК и такое понятие как накопленная ошибка не должна существовать. По большому счету важно проконтролировать точность только первых 15 микросекунд на чтении и записи 1 (при записи 0 лишь удерживать шину в 0 от 60 до 120 мкс), а следующую операцию на шине проводить не раньше чем через 45 мкс.
П.С. кстати, у меня иногда были ошибки при чтении и исчезли только после добавления еще 5 мкс паузы между операциями на шине

<
  • Гражданин
2 апреля 2014 15:12

Владимир / Spirit

  • Регистрация: 30.03.2014
  • Публикаций: 14
  • Комментариев: 5
 
  • 0
Цитата: teXnik
А вот с эти я не согласен. Чтение каждого бита инициализурует МК и такое понятие как накопленная ошибка не должна существовать.

Я имел в виду общий принцип. 1Wire к этому не так критичен, а, например, программная реализация USART вам такой ошибки не простит.

PS: Давайте перенесем обсуждение в ПС, чтобы не засорять комментарии wink

<
  • Гражданин
2 апреля 2014 21:37

Сергей / Chugunov

  • Регистрация: 30.09.2009
  • Публикаций: 30
  • Комментариев: 304
 
  • 0
Тонкости программирования - это прекрасно, но мне, как человеку далекому от программирования, но имеющему желание пользоваться схемами на микроконтроллерах, хотелось бы видеть гарантированно рабочую конструкцию, полностью готовую для повторения.
Рассуждения по поводу того, что "таких схем везде много" и "это элементарно" не принимаются.
Хочется видеть именно на этом сайте, чтобы была гарантированная возможность получить грамотную авторскую консультацию.

<
  • Гражданин
2 апреля 2014 21:47

Владимир / Spirit

  • Регистрация: 30.03.2014
  • Публикаций: 14
  • Комментариев: 5
 
  • 0
Цитата: Chugunov
Хотелось бы видеть гарантированно рабочую конструкцию, полностью готовую для повторения...
Хочется видеть именно на этом сайте, чтобы была гарантированная возможность получить грамотную авторскую консультацию.

Сергей, уточните, пожалуйста, какую конструкцию Вы хотели бы увидеть, а мы постараемся что-нибудь придумать wink

<
  • Гражданин
2 апреля 2014 23:13

Алексей / teXnik

  • Регистрация: 1.11.2009
  • Публикаций: 5
  • Комментариев: 33
 
  • 0
Цитата: Spirit
Сергей, уточните, пожалуйста, какую конструкцию Вы хотели бы увидеть, а мы постараемся что-нибудь придумать

Поддерживаю.
P.S. Данная статья была написана мной в качестве учебно теоретического материала и призвана показать как можно использовать данный интерфейс.

<
  • Гражданин
3 апреля 2014 01:12

Сергей / Chugunov

  • Регистрация: 30.09.2009
  • Публикаций: 30
  • Комментариев: 304
 
  • 0
уточните, какую конструкцию Вы хотели бы увидеть, а мы постараемся что-нибудь придумать wink

Простую конструкцию на микроконтроллере к которой можно было бы подключать от одного до четырех датчиков температуры.
Точности в 1 град. хватит.
Хотелось бы возможно более простую для повторения индикацию, может быть, на трехцифровом светодиодном индикаторе. ЖК с его шлейфами и надписями не хочется, кроме того, светодиоды лучше видны. Желательны не слишком малогабаритные детали, чтобы можно было паять обычным паяльником и делать плату с помощью ЛУТ.
Может быть организовать переключение между датчиками кнопкой.
У меня нет точного техзадания, но тема интересная.

<
  • Гражданин
3 апреля 2014 01:17

Алексей / teXnik

  • Регистрация: 1.11.2009
  • Публикаций: 5
  • Комментариев: 33
 
  • 0
Цитата: Chugunov
уточните, какую конструкцию Вы хотели бы увидеть, а мы постараемся что-нибудь придумать wink

Простую конструкцию на микроконтроллере к которой можно было бы подключать от одного до четырех датчиков температуры.
Точности в 1 град. хватит.
Хотелось бы возможно более простую для повторения индикацию, может быть, на трехцифровом светодиодном индикаторе. ЖК с его шлейфами и надписями не хочется, кроме того, светодиоды лучше видны. Желательны не слишком малогабаритные детали, чтобы можно было паять обычным паяльником и делать плату с помощью ЛУТ.
Может быть организовать переключение между датчиками кнопкой.
У меня нет точного техзадания, но тема интересная.

В целом понятно, думаю, попробую сделать что-то подобное.

Информация
Вы не можете участвовать в комментировании. Вероятные причины:
— Администратор остановил комментирование этой статьи.
— Вы не авторизовались на сайте. Войдите с паролем.
— Вы не зарегистрированы у нас. Зарегистрируйтесь.
— Вы зарегистрированы, но имеете низкий уровень доступа. Получите полный доступ.