Преамбула
Решил я перенести проект, который делал несколько лет назад на новую плату. Дело в том, что плата для этого термометра была возможно первой платой, которую я делал и как полагается первый блин вышел комом. Основой для платы послужил гетинакс, который в магазине мне продали под видом стеклотекстолита, а для разводки платы я использовал ЛУТ. Сейчас для изготовления плат я использую текстолит и ЧПУ фрезер, вот так выглядит разница в несколько лет:
Вот так работал термометр на старой плате:
Описание устройства
Итак, что же собой представляет простейший термометр? Это микроконтроллер attiny2313 (документация на русском), который общается с датчиком температуры ds18b20 (документация на русском) по протоколу 1-wire, дело в том, что датчик ds18b20 имеет всего 3 ноги, 2 из которых предназначены для питания и только одна для передачи данных. В схеме также используется подтягивающий резистор на 4.7КОм подключенный к шине 1-wire и плюсу источника питания.
Полученные от датчика данные микроконтроллер выводит на 7-сегментный 4-х разрядный индикатор. Для вывода данных на индикатор используется сдвиговый регистр 74hc595.
Что интересного можно сказать про датчик температуры ds18b20?
- Для предоставления данных о температуре используется от 9 до 12 бит. Чем больше бит, тем точнее информация о температуре, но тем больше нужно ждать, пока температура будет подготовлена для передачи от датчика получателю (микроконтроллеру). Вот табличка, в которой указано, сколько бит используется для представления температуры, какая при этом будет точность и сколько времени на это понадобится.
- Этот датчик может питаться непосредственно от линии данных, т.е. для подключения можно использовать только одну ногу. Минусом данного способа является не возможность опрашивать датчик, пока тот готовит температуру, т.к. при подготовке температуры энергопотребление датчика может существенно возрасти (до 1,5мА), и требуется, что бы на шине денных все это время был высокий логический уровень.
- У каждого датчика есть свой 64 битный адрес, таким образом можно на одной шине разместить несколько датчиков и опрашивать их используя адрес каждого конкретного датчика.
- Есть возможность установить верхний и нижний придел температуры, при котором датчик температуры передаст управляющему устройству сигнал тревоги. Так же есть возможность передать по шине команду "ПОИСК ТРЕВОЖНОГО СИГНАЛА [ECh]" при котором все датчики проверят свое состояние, и датчики с данным признаком ответят.
Что интересного можно сказать про сдвиговый регистр?
Данная микросхема содержит внутри себя два регистра. Первый регистр - сдвиговый: 8-StageShiftRegister. Второй регистр - регистр хранения данных: 8-BitStorageRegister.
Для записи в сдвиговый регистр используется два входа: DS и SHCP. Сначала устанавливаем на входе DS логический ноль или логическую единицу, затем подаем на вход SHCP тактовый сигнал и бит данных записан. При повторной записи информация, записанная ранее, сдвинется на один бит вперед. Если записанные данные выходят за предел регистра - они безвозвратно теряются. Вход MS используется для очистки сдвигового регистра. Обратите внимание, что данный вход относиться только к сдвиговому регистру, а не ко всей микросхеме.
Вход STCP используется для записи данных из сдвигового регистра в регистр хранения.
Вход OE разрешает выводить данные.
Более подробную информацию о том, как сигналы на выводах микросхем влияют на ее работу можно найти в таблице ниже:
В последней строке описано, что будет, если подать тактовый сигнал сразу на выходы SHCP и STCP: Сначала все содержимое сдвигового регистра будет скопировано в регистр хранения, а потом произойдет запись данных в регистре сдвига. На сайте tinkerkcad можно поиграться с 4-х битным сдвиговым регистром, собранным на основе D-триггеров. Левый переключатель соответствует входу DS, правый - SHCP.
Решил я перенести проект, который делал несколько лет назад на новую плату. Дело в том, что плата для этого термометра была возможно первой платой, которую я делал и как полагается первый блин вышел комом. Основой для платы послужил гетинакс, который в магазине мне продали под видом стеклотекстолита, а для разводки платы я использовал ЛУТ. Сейчас для изготовления плат я использую текстолит и ЧПУ фрезер, вот так выглядит разница в несколько лет:
Вот так работал термометр на старой плате:
Описание устройства
Итак, что же собой представляет простейший термометр? Это микроконтроллер attiny2313 (документация на русском), который общается с датчиком температуры ds18b20 (документация на русском) по протоколу 1-wire, дело в том, что датчик ds18b20 имеет всего 3 ноги, 2 из которых предназначены для питания и только одна для передачи данных. В схеме также используется подтягивающий резистор на 4.7КОм подключенный к шине 1-wire и плюсу источника питания.
Полученные от датчика данные микроконтроллер выводит на 7-сегментный 4-х разрядный индикатор. Для вывода данных на индикатор используется сдвиговый регистр 74hc595.
Что интересного можно сказать про датчик температуры ds18b20?
- Для предоставления данных о температуре используется от 9 до 12 бит. Чем больше бит, тем точнее информация о температуре, но тем больше нужно ждать, пока температура будет подготовлена для передачи от датчика получателю (микроконтроллеру). Вот табличка, в которой указано, сколько бит используется для представления температуры, какая при этом будет точность и сколько времени на это понадобится.
Кол-во. бит | Точность данных | Сколько времени потребуется для подготовки данных |
9 | 0,5 (1/2) °C | ~100мс |
10 | 0,25 (1/4) °C | ~200мс |
11 | 0,125 (1/8) °C | ~400мс |
12 | 0,0625 (1/16) °C | ~800мс |
- Этот датчик может питаться непосредственно от линии данных, т.е. для подключения можно использовать только одну ногу. Минусом данного способа является не возможность опрашивать датчик, пока тот готовит температуру, т.к. при подготовке температуры энергопотребление датчика может существенно возрасти (до 1,5мА), и требуется, что бы на шине денных все это время был высокий логический уровень.
Есть способы обойти это ограничение, но об этом, может быть, поговорим в другой раз.If the DS18B20 is powered with parasite power, this notification technique cannot be used since the bus must be pulled high by a strong pullup during the entire temperature conversion.
- У каждого датчика есть свой 64 битный адрес, таким образом можно на одной шине разместить несколько датчиков и опрашивать их используя адрес каждого конкретного датчика.
- Есть возможность установить верхний и нижний придел температуры, при котором датчик температуры передаст управляющему устройству сигнал тревоги. Так же есть возможность передать по шине команду "ПОИСК ТРЕВОЖНОГО СИГНАЛА [ECh]" при котором все датчики проверят свое состояние, и датчики с данным признаком ответят.
Что интересного можно сказать про сдвиговый регистр?
Данная микросхема содержит внутри себя два регистра. Первый регистр - сдвиговый: 8-StageShiftRegister. Второй регистр - регистр хранения данных: 8-BitStorageRegister.
Для записи в сдвиговый регистр используется два входа: DS и SHCP. Сначала устанавливаем на входе DS логический ноль или логическую единицу, затем подаем на вход SHCP тактовый сигнал и бит данных записан. При повторной записи информация, записанная ранее, сдвинется на один бит вперед. Если записанные данные выходят за предел регистра - они безвозвратно теряются. Вход MS используется для очистки сдвигового регистра. Обратите внимание, что данный вход относиться только к сдвиговому регистру, а не ко всей микросхеме.
Вход STCP используется для записи данных из сдвигового регистра в регистр хранения.
Вход OE разрешает выводить данные.
Более подробную информацию о том, как сигналы на выводах микросхем влияют на ее работу можно найти в таблице ниже:
В последней строке описано, что будет, если подать тактовый сигнал сразу на выходы SHCP и STCP: Сначала все содержимое сдвигового регистра будет скопировано в регистр хранения, а потом произойдет запись данных в регистре сдвига. На сайте tinkerkcad можно поиграться с 4-х битным сдвиговым регистром, собранным на основе D-триггеров. Левый переключатель соответствует входу DS, правый - SHCP.
Изменено: