Термометр DS18B20



   

      1. Описание и характеристики.




   


Термометр DS18B20 в герметичном корпусе

  Данная статья является частичным переводом оригинального даташита.

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

Оригинальный Datasheet на DS18B20.pdf

  
Особенности.

  1-проводной интерфейс требует только одного контакта для связи.

  Может питаться от линии данных, поддерживает напряжение 3 — 5 В

  Нулевое потребление в режиме ожидания.

  Диапазон измеряемых температур от -55°C до 125°C

  Точнсть в 0.5°C в диапазоне от -10°C до +85°C

  Разрешение термометра программируется от 9 до 12 бит

  Преобразует 12-битную температуру в цифровое слово за 750 мс (макс.)

  Определяемые пользователем энергонезависимые уставки сигнализации температуры.

   Команда поиска аварийной сигнализации идентифицирует и адресует устройства, температура которых выходит за запрограммированные пределы ( состояние аварийной сигнализации температуры)

  Описание

  Цифровой термометр DS18B20 обеспечивает 9-12-разрядные (настраиваемые) показания температуры. Информация передается в / из DS18B20 по 1-проводному интерфейсу, так что только один провод (и заземление) может быть подключен от центрального микропроцессора к DS18B20. Питание для чтения, записи и выполнения преобразования температуры может быть получено от самой линии передачи данных без необходимости во внешнем источнике питания.
  Поскольку каждый DS18B20 содержит уникальный серийный номер чипа, на одной и той же 1-проводной шине может существовать несколько DS18B20. Это позволяет размещать датчики температуры в самых разных местах.







  Структурная схема на рисунке показывает основные компоненты DS18B20. DS18B20 имеет четыре основных компонента данных:
 1) 64-разрядное лазерное ПЗУ,
 2) Датчик температуры,
 3) Энергонезависимые триггеры сигнализации температуры TH и TL
 4) Регистр конфигурации. Устройство получает питание от 1-проводной линии связи путем накопления энергии на внутреннем конденсаторе в периоды времени, когда сигнальная линия высока, и продолжает работать от этого источника питания в периоды низкого напряжения 1-проводной линии, пока не возвращает высокий уровень для пополнения запаса паразита (конденсатора). В качестве альтернативы DS18B20 также может питаться от внешнего источника питания напряжением 3 В - 5,5 В.

   Функции памяти и управления будут доступны, когда мастер предоставит одну из пяти функциональных команд ПЗУ:
 1. Чтение ПЗУ.
 2. Сопоставление ПЗУ.
 3. Поиск ПЗУ.
 4. Пропуск ПЗУ.
 5. Поиск по тревоге. Эти команды работают с 64-разрядной частью лазерного ПЗУ каждого устройства и могут выделить конкретное устройство, если их много на 1-проводной линии, а также указать ведущему шине, сколько и каких типов устройств присутствует.
  Одна из команда позволяет выполнить измерение температуры. Результат этого измерения помещается в память блокнота DS18B20 и может быть прочитан с помощью команды чтения блокнота
 Триггеры сигнализации температуры TH и TL состоят из 1 байта EEPROM каждый. Если команда поиска сигнала тревоги не применяется к DS18B20, эти регистры могут использоваться в качестве пользовательской памяти общего назначения. Блокнот также содержит конфигурационный байт для установки желаемого разрешения температуры в цифровом преобразовании. Запись TH, TL и конфигурационного байта выполняется с помощью команды функции памяти. Доступ на чтение к этим регистрам осуществляется через блокнот. Данные записываются и считываются начиная с младшего бита.






       Схемы подключения. Паразитное питание.




   


  Блок-схема показывает схему с питанием от паразита. Эта схема “крадет” питание всякий раз, когда контакты DQ или VDD находятся на высоком уровне. DQ будет обеспечивать достаточную мощность до тех пор, пока соблюдаются указанные требования ко времени и напряжению. Преимущества паразитного питания: 1. при отключении этого вывода не требуется локального источника питания для дистанционного измерения температуры. 2. ПЗУ может считываться при отсутствии нормального питания.
  Для того чтобы DS18B20 мог выполнять точные преобразования температуры, необходимо обеспечить достаточную мощность по линии DQ, когда происходит преобразование температуры. Поскольку рабочий ток DS18B20 составляет до 1,5 мА, линия DQ не будет иметь достаточного тока из-за подтягивающего резистора 5k. Эта проблема особенно остра, если несколько DS18B20 находятся на одном и том же DQ и пытаются конвертировать данные температуры одновременно.
  Существует два способа гарантировать, что DS18B20 имеет достаточный ток питания во время активного цикла преобразования. Первый заключается в обеспечении сильного подтягивания линии DQ всякий раз, когда происходит преобразование температуры или копирование в память EEPROM. Это может быть достигнуто с помощью МОП-транзистора для подключения линии DQ непосредственно к источнику питания, как показано на рисунке. Линия DQ должна быть переключена на сильное подтягивание максимум в течение 10 мкс после выдачи любого протокола, который включает копирование в память EEPROM или инициирует преобразования температуры. При использовании режима паразитного питания вывод VDD должен быть подключен к земле.
  Другой способ подачи тока на DS18B20 заключается в использовании внешнего источника питания, подключенного к выводу VDD, Преимущество этого заключается в том, что сильное подтягивание не требуется на линии DQ, и ведущему шине не нужно удерживать эту линию на высоком уровне во время преобразования температуры.
  Это позволяет осуществлять передачу данных данных по 1-проводной шине во время преобразования. Кроме того, любое количество DS18B20 может быть подключено к 1-проводной шине, и если все они используют внешнее питание, они могут все одновременно выполните преобразование температуры, выполнив команду Пропустить ROM, а затем выполнив команду "Конвертировать температуру". Обратите внимание, что до тех пор, пока внешний источник питания активен, вывод GND должен быть подключен.

  Не рекомендуется использовать паразитное питание при температуре выше 100 °C, поскольку оно может быть неспособно поддерживать связь из-за более высоких токов утечки, которые у DS18B20 проявляются при этих температурах. Для применений, в условиях, в которых возможны такие температуры, настоятельно рекомендуется применять внешнее питание к DS18B20.
  Для ситуаций, когда главный шинный контроллер не знает, имеют ли DS18B20 на шине паразитное питание или снабжены внешним VDD, в DS18B20 предусмотрено сигнализировать об используемой схеме питания. Мастер может определить, есть ли на шине какие-либо DS18B20, для которых требуется сильное подтягивание к питанию, отправив протокол "Пропустить ROM", а затем выдав команду "Чтение источника питания [B4h]". После того, как эта команда выдана, мастер выдает временные интервалы чтения. DS18B20 отправит обратно “0” по 1-проводной шине, если он питается от паразита; и отправит обратно “1”, если он питается от вывода VDD. Если мастер получает “0”, он знает, что он должен обеспечить сильное подтягивание на линии DQ во время преобразования температуры.


       Операция расчета температуры.




LSB
23 22 21 20 2-1 2-2 2-3 2-4
MSb LSb
Единицы измерения - градусы Цельсия (Со)

MSB
S S S S S 26 25 24
MSb LSb
Единицы измерения - градусы Цельсия (Со)
  
Для перевода в Фаренгейты используйте специальную таблицу или формулу.


Температура Вывод данных (двоичный) Вывод данных (HEX)
+125°C 0000 0111 1101 0000 0x07D0
+85°C 0000 0101 0101 0000 0x0550
+25.0625°C 0000 0001 1001 0001 0x0191
+10.125°C 0000 0000 1010 0010 0x00A2
+0.5°C 0000 0000 0000 1000 0x0008
0°C 0000 0000 0000 0000 0x0000
-0.5°C 1111 1111 1111 1000 0xFFF8
-10.125°C 1111 1111 0101 1110 0xFF5E
-25.0625°C 1111 1110 0110 1111 0xFF6F
-55°C 1111 1100 1001 0000 0xFC90

  Основной функциональностью DS18B20 является его цифровой датчик температуры. Разрешение DS18B20 настраивается на (9, 10, 11 или 12 бит), при этом 12-битные показания являются заводским значением по умолчанию. Это соответствует температурному разрешению 0,5°C, 0,25°C, 0,125°C или 0,0625°C.
  После выдачи команды "Конвертация температуры"[0x44] выполняется преобразование температуры, и температурные данные сохраняются в памяти "Блокнота" в 16-битном формате с расширенным знаком.
  Информацию о температуре можно получить по 1-проводному интерфейсу, выполнив команду "Прочесть блокнот"[0xBE] как только преобразование будет выполнено. Данные передаются по 1-проводной шине, сначала LSB. MSB регистра температуры содержит "знаковый бит", обозначающий, является ли температура положительной или отрицательной.
   В таблице описано точное соотношение выходных данных с измеренной температурой. Таблица предполагает 12-битное разрешение. Если DS18B20 настроен на более низкое разрешение, не значимые биты будут содержать нули. Для Использование по Фаренгейту, необходимо использовать таблицу поиска или процедуру преобразования.



      Сигнализация тревоги


  После того, как DS18B20 выполнил преобразование температуры, значение температуры сравнивается со значениями регистра, сохраненными в TH и TL. Поскольку эти регистры являются только 8-разрядными, биты 9-12 игнорируются для сравнения. Самый значимый бит TL непосредственно соответствует знаковому биту 16-разрядного регистра температуры. Если результат измерения температуры выше TH или ниже TL, внутри устройства устанавливается флаг тревоги. Этот флаг обновляется при каждом измерении температуры.
   Пока установлен флаг аварийной сигнализации, DS18B20 будет реагировать на команду поиска аварийной сигнализации. Это позволяет множеству DS18B20 быть подключены параллельно для одновременного измерения температуры. Если где-то температура превышает допустимые пределы, тревожное устройство(-ва) может быть индентифицировано и считано немедленно без необходимости считывать все устройства.



      64 битный ROM


  Каждый DS18B20 содержит уникальный код ПЗУ длиной 64 бита. Первые 8 битов представляют собой код семейства 1-Wire (код DS18B20 равен 0х28). Следующие 48 бит - это уникальный серийный номер. Последние 8 битов представляют собой CRC первых 56 битов. 64-разрядное ПЗУ и секция управления функциями ПЗУ позволяют DS18B20 работать как 1-проводное устройство и следовать 1-проводному протоколу. Функции, необходимые для управления разделами DS18B20, недоступны до тех пор, пока ПЗУ функциональный протокол был удовлетворен. Этот протокол описан в блок-схеме протокола функции ПЗУ. Мастер 1-проводной шины должен сначала предоставить одну из пяти функциональных команд ПЗУ:
 1) Считывание ПЗУ,
 2) Сопоставление ПЗУ,
 3) Выполните поиск ПЗУ,
 4) Пропустите ПЗУ
 5) Выполнение поиска по тревоге.
 После успешного выполнения последовательности функций ПЗУ становятся доступными функции, специфичные для DS18B20, и мастер шины может затем предоставить одну из шести команд функции памяти и управления.



      Генерация CRC


  DS18B20 имеет 8-разрядный CRC, хранящийся в самом значащем байте 64-разрядного ПЗУ. Ведущее устройство шины может вычислить значение CRC из первых 56 бит 64-разрядного ПЗУ и сравнить его со значением, хранящимся в DS18B20, чтобы определить, были ли данные ПЗУ получены ведущим устройством шины без ошибок. Эквивалентная полиномиальная функция этого CRC равна: CRC = X8 + X5 + X4 + 1 DS18B20 также генерирует 8-битное значение CRC, используя ту же полиномиальную функцию, показанную выше, и предоставляет это значение ведущему устройству шины для проверки передачи байтов данных. Во всех случаях, мастер шины должен вычислить значение CRC с использованием полиномиальной функции, приведенной выше, и сравнить вычисленное значение либо с 8-разрядным значением CRC, сохраненным в 64-разрядной части ПЗУ DS18B20 (для чтения из ПЗУ) или 8-битное значение CRC, вычисленное в DS18B20 (который считывается как девятый байт при считывании блокнота).
   Сравнение значений CRC и решение о продолжении операции полностью определяются ведущим устройством шины. DS18B20 не имеет схем которые предотвращают выполнение последовательности команд, если CRC, сохраненный в DS18B20 или вычисленный им, не соответствует значению, сгенерированному ведущим устройством шины. CRC может быть сгенерирован с использованием генератора полиномов, состоящего из сдвигового регистра и элементов XOR.   После получения 8-го бита кода семейства идет серийный номер. После ввода 48-го бита серийного номера идет 8 битное значение CRC.

 Более подробно о программном методе расчета CRC можно прочесть:
 Циклический_избыточный_код



      Память

   Память состоит из оперативной памяти "Блокнот" и энергонезависимой, электрически стираемой EEPROM оперативной памяти, в которой хранятся триггеры высокой и низкой температуры TH и TL, а также регистр конфигурации. Блокнот помогает обеспечить целостность данных при обмене по 1-проводной шине. Данные сначала записываются в блокнот с помощью команды "Записать блокнот" [0x4E]. Затем это можно проверить с помощью команды "Прочесть блокнот" [0хBE]. После того, как данные были проверены, Команда Копировать блокнот [0х48] перенесет данные в энергонезависимую оперативную память EEPROM. Этот процесс обеспечивает целостность данных при изменении памяти. EEPROM DS18B20 рассчитан минимум на 50000 записей и хранение в течение 10 лет при T = +55°C.
  Блокнот организован в виде восьми байт памяти. Первые 2 байта содержат LSB и MSB информации об измеренной температуре соответственно. Третий и четвертый байты являются энергозависимыми копиями TH и TL и обновляются при каждом сбросе питания. Пятый байт - это энергозависимая копия конфигурации регистрируется и обновляется при каждом сбросе питания. Регистр конфигурации будет объяснен более подробно позже в этом разделе спецификации. Шестой, седьмой и восьмой байты зарезервированы. Крайне важно, чтобы запись TH, TL и конфигурационного регистра происходила за один раз, т.е. запись недопустима, если, например, выполняется запись только в TH и TL, а затем выполняется сброс. Если какой-либо из этих байтов должен быть записан, то все три байта должны быть записаны до сброса.
  Девятый байт, который может быть прочитан с помощью команды "Прочесть блокнот" [0xBE] это байт циклической проверки избыточности (CRC), который является CRC по всем восьми предыдущим байтам.




       Конфигурационный регистр


  Пятый байт памяти блокнота - это регистр конфигурации. Он содержит информацию, которая будет использоваться устройством для определения разрешения преобразования температуры в цифровой формат.
 Биты организованы так, как показано на в таблице
 Биты 0-4 не влияют на запись, но всегда “1”.
 Бит 7 - всегда “0”.


Конфигурационный регистр
0 R1 R0 1 1 1 1 1
MSb LSb


Разрешение данных термометра
R1 R0 Разрешение данных Максимальное время ожидания конвертации данных.
0 0 9 бит 93,75 мсек (t конвер. / 8)
0 1 10 бит 187,5 мсек (t конвер. / 4)
1 0 11 бит 375 мсек (t конвер. / 2)
1 1 12 бит 750 мсек (t конвер.)




       Последовательность транзакций.


  Протокол для доступа к DS18B20 через 1-проводной порт следующий:

 1.Инициализация
 2.Функциональная команда ПЗУ
 3.Функциональная команда памяти.
 4.Транзакция/Данные


       1.Инициализация.


  Все транзакции на 1-проводной шине начинаются с последовательности инициализации. Последовательность инициализации состоит из импульса сброса, передаваемого ведущим устройством шины, за которым следует импульсы присутствия, передаваемые подчиненными устройствами.
 Импульс присутствия сообщает ведущему шине, что DS18B20 подключен к шине и готов к работе.


       2.Функциональные команды ПЗУ.


  Как только мастер шины обнаружит присутствие, он может выдать одну из пяти функциональных команд ПЗУ. Длина всех функциональных команд ПЗУ составляет 8 бит.

  

Прочесть содержимое ПЗУ [0х33]

  Эта команда позволяет ведущему устройству шины считывать 8-разрядный код семейства DS18B20, уникальный 48-разрядный серийный номер и 8-разрядный CRC. Эта команда может быть использована только в том случае, если на шине есть только один DS18B20.
 Если на шине присутствует более одного ведомого устройства, произойдет столкновение данных, когда все ведомые устройства попытаются передать данные одновременно.

  

Совпадение ПЗУ [0х55]

  Команда "Совпадение ПЗУ", за которой следует 64-разрядная последовательность ROM, позволяет ведущему устройству шины обращаться к определенному датчику DS18B20 на многоточечной шине. Только DS18B20, который точно соответствует 64-разрядной последовательности ПЗУ, будет отвечать на следующую команду функции памяти. Все подчиненные устройства, которые не соответствуют 64-разрядной последовательности ПЗУ, будут ждать импульса сброса.
   Эта команда может использоваться с одним или несколькими устройствами на шине.

  

Пропустить ПЗУ [0хCC]

  Эта команда может сэкономить время, когда подключен всего один датчик, позволяя мастеру шины получать доступ к функциям памяти без предоставления 64-разрядного кода ПЗУ.
 Если на шине присутствует более одного устройства и после команды "Пропустить ПЗУ" выдается команда чтения, на шине произойдет коллизия данных при одновременной передаче нескольких ведомых устройств.

  

Поиск ПЗУ [0хF0]

  При первоначальном запуске системы мастер шины может не знать количество устройств на 1-проводной шине или их 64-разрядные коды ПЗУ. Команда поиска ПЗУ позволяет ведущему устройству шины использовать процесс исключения для идентификации 64-разрядных кодов ПЗУ всех подчиненных устройств на шине.

  

Поиск сигнала тревоги [0хEС]

  Блок-схема этой команды идентична команде "Поиск ПЗУ". Однако DS18B20 ответит на эту команду только в том случае, если при последнем измерении температуры возникло аварийное состояние. Аварийное состояние определяется как температура выше TH или ниже TL. Состояние тревоги остается установленным до тех пор, пока DS18B20 включен или пока другое измерение температуры не покажет значение, не вызывающее тревоги. Для сигнализации берутся во внимание значения триггера, сохраненные в EEPROM. Если существует аварийное состояние или настройки TH и TL изменены, следует выполнить другое преобразование температуры для подтверждения любых аварийных условий.


       3.Функциональные команды памяти.


  

Запись в блокнот. [0х4E]

  Эта команда записывает данные в блокнот DS18B20, начиная с регистра TH. Следующие 3 байта будут сохранены в памяти блокнота по адресам со 2 по 4.
  Это байты TH, TL и Конфигурационный регистр.
 Все 3 байта должны быть записаны до того, как будет произведен сброс.

  

Прочесть блокнот. [0хBE]

  Эта команда считывает содержимое блокнота. Чтение начнется с байта 0 и будет продолжаться до тех пор, пока не будет считан девятый байт, CRC. Если не требуется чтения всех данных, мастер может выполнить команду сброс, чтобы прекратить чтение в любое время.

  

Скопировать блокнот. [0х48]

  Эта команда копирует блокнот в память EEPROM DS18B20, сохраняя байты температурного триггера. Если мастер выдает временные интервалы чтения после этой команды, DS18B20 будет выводить 0 на шину, пока он занят копированием блокнота в E2; он вернет 1, когда процесс копирования будет завершен.
  Если включено паразитное питание, мастер шины должен включить сильное подтягивание в течение как минимум 10 мс сразу после выдачи этой команды. EEPROM DS18B20 рассчитан минимум на 50 000 операций записи и 10 лет хранения данных при T=+55°C

  

Конвертирование температуры. [0х44]

  Эта команда запускает преобразование температуры. Никаких дополнительных данных не требуется.
  Будет выполнено преобразование температуры, после чего DS18B20 останется в режиме ожидания. Если мастер шины выдает временные интервалы чтения после этой команды, DS18B20 будет выводить 0 на шину, пока она занята преобразованием температуры; он вернет 1, когда преобразование температуры будет завершено. Если используется паразитное питание, мастер должен включить сильное подтягивание на период, превышающий tконвер., сразу после выдачи этой команды.

  

Отзыв EEPROM. [0хB8]

  Эта команда вызывает значения триггера температуры и регистр конфигурации, хранящиеся в E2, в блокнот. Эта операция отзыва также происходит автоматически при включении питания DS18B20, поэтому действительные данные будут доступны в блокноте, как только устройство подаст питание. При каждом временном интервале считывания данных, выданном после отправки этой команды, устройство будет выводить флаг занятости преобразователя температуры: 0 = занято, 1 = готово.

  

Определение источника питания. [0хB4]

  С каждым временным интервалом считывания данных, выданным после отправки этой команды на DS18B20, устройство будет сигнализировать о своем режиме питания: 0 = паразитное питание, 1 = предусмотрен внешний источник питания.


    Примечания:
 1. Преобразование температуры занимает до 750 мс. После получения команды "Конвертировать температуру", если датчик не получает питание от вывода VDD, линия DQ для DS18B20 должна оставаться подтянутой к питанию, по крайней мере, в течение периода, превышающего tконвер., для обеспечения питания во время всего процесса преобразования. Таким образом, никакие другие действия не могут выполняться на 1-проводной шине, по крайней мере, в течение этого периода после того, как была выдана команда "Конвертирование температуры".
 2. После получения команды "Скопировать блокнот", если датчик не получает внешнего питания, линия DQ термометра DS18B20 должна поддерживаться на высоком уровне не менее 10 мс для обеспечения питания во время процесса копирования.
 Таким образом, никакие другие действия не могут выполняться на 1-проводной шине по крайней мере в течение этого периода после Была выдана команда копировать блокнот.
 3. Все 3 байта должны быть записаны до того, как будет произведен сброс.



       4.Временные интервалы чтения/записи (тайминги)


   
     Интервалы записи.

  Временной интервал записи инициируется, когда хост переводит линию данных с высокого логического уровня на низкий логический уровень. Существует два типа временных интервалов записи: запись 1 и запись 0. Продолжительность всех временных интервалов записи должна составлять не менее 60 мкс с минимальным временем восстановления 1 мкс между отдельными циклами записи. DS18B20 производит выборку линии DQ в интервале от 15 до 60 мкс после падения линии DQ. Если линия данных подтянута к питанию, происходит запись 1. Если линия подтянута к земле, происходит запись 0.
  Чтобы хост сгенерировал временной интервал записи 1, линия передачи данных должна быть выведена на логически низкий уровень, а затем отпущена, что позволяет линии передачи данных подняться до высокого уровня в течение 15 мкс после начала временного интервала записи.
  Чтобы хост сгенерировал временной интервал записи 0, линия передачи данных должна быть выведена на логически низкий уровень и оставаться низкой в течение 60 мкс

  Интервалы чтения

 Хост генерирует временные интервалы чтения, когда данные должны быть считаны с DS18B20. Временной интервал чтения инициируется, когда хост переводит линию данных с логического высокого уровня на логический низкий уровень. Линия передачи данных должна оставаться на низком логическом уровне минимум в течение 1 мкс; выходные данные из DS18B20 действительны в течение 15 мкс после окончания временного интервала считывания. Следовательно, хост должен прекратить держать DQ на низком уровне, чтобы прочесть его состояние в течении 15 мкс от начала считывающего интервала. К концу временного интервала считывания вывод DQ подтянется обратно на высокий уровень с помощью внешнего подтягивающего резистора. Продолжительность всех временных интервалов чтения должна составлять не менее 60 мкс с минимальным временем восстановления 1 мкс между отдельными интервалами чтения.



Электрические характеристики.
Параметр Состояние MIN TYP MAX Еденица изм.
Погрешность термометра -10°C +85°C +/- 0.5 °C
-55°C +125°C +/- 2 °C
Логическая единица Внешнее питание
Паразитное питание
2.2
3.0
5.5 V
V
Логический ноль -0.3 +0.8 V
Потребление в режиме ожидания 0.00075 0.001 mA
Потребление в активном режиме 1 1.5 mA


       Дополнение.



   Статья-описание: Библиотека Ардуино для термометра DS18B20.




   Библиотека Ардуино для термометра DS18B20, в классическом виде.
  Все функции библиотеки термометра DS18B20 в одном файле Arduino IDE.
  Библиотека DS18B20 в связке и зависимостью с Network Connection Tools.
  Библиотеку Network_connections_tools_v1.2 (zip)








       Функции


   1. Графические.

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT, iarduino_RTC


  2. Отдельные графические элементы.

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

     Зависимость: UTFT

      Схемы подключения


   Счетчик 2-х разрядных чисел (4 х 7 px)
    Зависимость: UTFT

   Cчетчик, один разряд (10 x 15 px )
    Зависимость: UTFT

      Другие библиотеки и функции


    

      Проекты и программы


  Система жизнеобеспечения "Сорока"
    

      Статьи

  
    
    









   Изготовление рекламы Изготовление мебели  Общестроительные работы 3D моделирование       Статьи
  Благоустройство тер.
   Общее портфолио    Мебель для мастерской   Установка бордюров   Портфолио   Контакты
   Наружняя реклама       Фасадные работы   Модели   Образец договора
   Внутреняя реклама       Утепление гаража   Инфо
   Таблички, наклейки       Косметический ремонт   Фото г.Надым
  Бетонные работы   Фото пригороды г.Надым