Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Часы с термометром и таймером на PIC-микроконтроллере PIC16F873A

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

В продаже имеются различные устройства отображающие время, температуру в помещении и на улице Но практически все они выполнены на ЖКИ, которые необходимо освещать в темное время суток.

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

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

Описания подобных конструкций можно найти, например. в [1.2]. Но они либо содержат слишком много деталей, либо выполнены на микроконтроллерах фирмы Atmel, а я предпочитаю работать с микроконтроллерами фирмы Microchip.

Принципиальная схема

Схема разработанного устройства на микроконтроллере PIC16F873A-I SP изображена на рис. 1. Тактовую частоту задает кварцевый резонатор ZQ1 с частотой 8.192 МГц Отсчет базовых интервалов времени ведет встроенный в микроконтроллер восьмиразрядный таймер-счетчик TMR0.

Рис. 1. Принципиальная схема часов с таймером и термометром на микроконтроллере PIC16F873A.

Резисторы R1-R4 поддерживают высокий логический уровень ча входах RA1. RA3. RC1.

RC3 микроконтроллера, когда кнопки SB1-SB4 не нажаты Пятиразрядный семиэлементный светодиодный индикатор зеленого цвета свечения собран из двух: четырехразрядного HG1 и одноразрядного HG2.

Рис. 2. Вывод значений температуры на индикатор.

Рис. 3. Варианты вывода значений на цифровой индикатор.

Температуру измеряют широко известные датчики DS18B20, не требующие калибровки и с погрешностью измерения не более ±0,5 С в интервале температуры от -10 С до +85 С. Каждый из этих приборов имеет индивидуальным 64-разрядный двоичный код. Перед считыванием измеренных значений температуры микроконтроллер считывает коды датчиков и тем самым проверяет их наличие.

Если датчик отсутствует, неправильно подключен или неисправен, то вместо числового значения температуры на индикатор будут выведены два “минуса” (рис. 2). Таким же останется изображение на индикаторе некоторое время после включения устройства до получения первых отсчетов температуры Это не является признаком неисправности.

Детали и печатная плата

Датчик ВК1 располагается внутри устройства и измеряет температуру от + 10 С до +40 °С. Датчик ВК2 вынесен на улицу, он измеряет температуру от -40 °С до +40 °С. Длина проводов, соединяющих его с микроконтроллером, – до 12 м. Если в корпусе устройства нет достаточного числа вентиляционных отверстий. то датчик ВК1 рекомендуется также вынести за его пределы.

Информация отображается на индикаторе циклически: 10с – время (рис. З. а), 5 с – температура, измеренная в помещении датчиком ВК1 (рис. 3,6), 5 с – температура, измеренная на улице датчиком ВК2 (рис. З.в).

Каждую секунду микроконтроллер проверяет состояние входов RA1, RA3, RC1, RC3. Когда какая-либо из кнопок SB1-SB4 нажата, уровень на соответствующем входе становится низким.

Рис. 4. Печатная плата для схемы часов на микроконтроллере.

На рис. 4 показана печатная плата устройства. Все установленные на ней конденсаторы керамические: С1, С2 – с диэлектриком NP0, а C3 и С4 – с диэлектриком Y5V. Резисторы – МЯТ, С1-4 и их аналоги.

Транзистор КТ503А можно заменить другим кремниевым структуры n-p-n с максимальным постоянным током коллектора не менее 100 мА. Вместо светодиодов L-53SGD и L-53SRD/D подойдут и другие соответственно зеленого и красного цветов свечения. Реле К1 – WJ105-1А 5V 5А, его контакты рассчитаны на ток до 5 А, а обмотка при напряжении 5 В потребляет ток 90 мА.

Плата помещена в корпус G413 фирмы GAINTA С его лицевой стороны сделано окно для индикатора. В верхней панели просверлены отверстия для толкателей кнопок SB1-SB4 и для светодиодов. С тыльной стороны корпуса установлены гнезда, соединенные с контактами реле К1, а также предназначенные для подключения источника питания и датчика температуры ВК1.

Для установки точного времени нажимают на кнопку SB1. На индикатор выводятся цифры, соответствующие числу часов. Удерживая нажатой кнопку SB4. устанавливают нужное значение. Второй раз нажимают на кнопку SB1 На индикатор выводятся цифры, соответствующие числу минут Удерживая нажатой кнопку SB4, устанавливают нужное значение.

Третий раз нажимают на кнопку SB1. На индикатор выводятся цифры, соответствующие текущему числу секунд. Нажатием на кнопку SB4 это значение обнуляют. Четвертое нажатие на кнопку SB1 возвращает устройство в рабочий режим.

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

После этого нажимают на кнопку SB2 На индикаторе появляется надпись. показанная на рис. 5,а. Если часы отставали, то, нажав и удерживая кнопку SB4, вводят число секунд отставания. В противном случае (часы спешили) еще раз нажимают на кнопку SB2 Когда на индикаторе появится надпись, показанная на рис. 5,6 с помощью кнопки SB4 вводят число секунд, на которое часы ушли вперед Нажатием на кнопку SB2 возвращают устройство в рабочий режим. Введенное для корректировки число секунд сохраняется в EEPROM микроконтроллера.

Рис. 5. Надписи на индикаторе.

Рис. 6. Программирование таймера.

Таймер можно запрограммировать на выдержку максимум 900 мин. Чтобы задать ее продолжительность, нажимают на кнопку SB3. На индикаторе появляется надпись, показанная на рис.

6. После этого, нажав и удерживая кнопку SB1, вводят число сотен минут Затем кнопкой SB2 вводят число десятков, а кнопкой SB4 – число единиц минут выдержки. Еще одним нажатием на кнопку SB3 возвращают устройство в рабочий режим. Заданная продолжительность выдержки сохраняется в EEPROM микроконтроллера.

Запускают таймер в любой момент нажатием на кнопку SB4. При этом уровень на выходе RA5 микроконтроллера становится высоким, реле К1 срабатывает По истечении выдержки уровень вновь станет низким, а контакты реле К1 разомкнутся. Если необходимо разомкнуть их ранее запланированного времени, следует еще раз нажать на кнопку SB4.

Прошивка для микроконтроллера PIC16F873A – Скачать (14кБ).

П. Кожухин, г. Курган. Р-2010-05.

Литература:

  1. Ревич Ю. Часы с термометром и барометром. Р-2003-04, 05, 07.
  2. Суворов В. Часы-термометр. Р-2003-10.

Схема. Барометр и термометр на ATmega8

      
      Пределы измерения и погрешность прибора определяются в основном примененными в нем датчиками: температура -55…+125 °С, атмосферное давление 225.

825 мм ртутного столба. Прибор питается напряжением 9 В от гальванической батареи типа «Крона» или сетевого адаптера Потребляемый ток — 30 мА (при выключенной подсветке ЖКИ). Размеры корпуса -118×72-28 мм. Работа прибора была проверена при температуре от -5 до +25 °С Погрешность измерения давления не превысила 4 мм ртутного столба.

      Схема барометра и термометра изображена на рис. 1, причем собранный на отдельной плате модуль измерения давления выделен штрихпунктирной линией.
      Необходимые для работы датчика тактовые импульсы частотой 32768 Гц вырабатывает кварцевый генератор на элементах микросхемы DD1. В принципе, эти импульсы мог бы формировать и микроконтроллер DD2 с помощью одного из имеющихся в нем таймеров. Но это потребовало бы усложнения программы.
      Напряжение 3,6 В для питания датчика В1 и микросхемы DD1 получено с помощью стабилитрона VD1. Резисторы R1—R3 — нагрузочные для линий связывающего датчике микроконтроллером интерфейса I2С и сигнала XCLR Печатная плата модуля измерения давления показана на рис.

2.

      Хотя датчик HP03SB содержит и встроенный измеритель температуры, его показания используются программой микроконтроллера DD2 только для уточнения результатов измерения давления. На ЖКИ HG1 вместе со значением давления выводятся показания другого датчика температуры — DS1624 (В2) Причина этого проста — он точнее.
      При необходимости датчик В2 можно сделать выносным и расположить там, где температура представляет наибольший интерес. При установке в корпусе прибора этот датчик следует вынести на боковую стенку, сделав в ней окно по его размерам. Иначе неизбежна ошибка на 1,5… 1,8 °С, в чем я убедился на практике.

      Напряжение питания +5 В стабилизировано микросхемой DA1. Подстроечным резистором R8 устанавливают наилучшую контрастность изображения на ЖКИ. Кнопкой SB1 включают подсветку его табло. Остальные элементы необходимы для работы микроконтроллера. Элементы R7, R9 С10 VD2 — цепь установки микроконтроллера в исходное состояние Кварцевый резонатор ZQ2 с конденсаторами С11.
С12 — частотозадающая цепь тактового генератора микроконтроллера.

      На рис. 3 представлен чертеж основной печатной платы прибора а на рис. 4 — расположения деталей на ней. В переходное отверстие показанное залитыми (плата на рис. 2), необходимо вставить и пропаять с двух сторон проволочную перемычку. Для микроконтроллера DD1 должна быть предусмотрена панель, так как в процессе налаживания прибора эту микросхему придется извлекать и вновь устанавливать.
      Остановимся на некоторых особенностях датчика HP03SB, общий вид и габаритные размеры показаны на рис. 5. Для определения давления необходимо предварительно прочитать из памяти установленного в приборе экземпляра этого датчика двухбайтные значения коэффициентов С1—С1 и однобайтные значения параметров А—D. Все они индивидуальны для данного экземпляра.

      Результаты измерения представляют собой два двухбайтных числа: D1 —давление. D2 — температура. Прочитав их из памяти датчика, программа должна вычислить вспомогательные значения:

А затем — давление воздуха в гектопаскалях:
PhP = X·10/32+C7;
и в миллиметрах ртутного столба:
PHg = PhP·1000/13332.

      Более подробные сведения о датчике HP03SB имеются в [1]. Однако необходимо отметить что там указаны неверно адреса внутренней памяти датчика, по которым хранятся его индивидуальные константы. Следует пользоваться теми адресами что приведены в [2]. В приборе можно применить и другие датчики серии НР03. Некоторые из них имеют меньшую точность, другие отличаются конструктивным оформлением.

      Работа программы начинается с инициализации портов микроконтроллера и ЖКИ. Успешную инициализацию подтверждает вывод на табло надписи TERMOBAR» (буква Н пропущена). Затем инициализируется датчик давления, считываются его показания, выполняются расчеты, результаты которых преобразуются в двоично-десятичный формат и выводятся на индикатор, занимая три десятичных разряда. Аналогично происходят обработка и вывод на ЖКИ значения температуры. Его целая часть — три разряда, дробная — два разряда. Продолжительность показа значений давления и температуры по 3,5 с.

      Подпрограмма Timer_int каждые 70 мин проверяет в каком направлении за это время изменилось давление, и выводит на ЖКИ знаки «↑», «↓», «=». В подпрограммах инициализации и чтения показаний датчиков HP03SB и DS1624 состояние регистра статуса модуля TW1 микроконтроллера не проверяется.


      Для чтения коэффициентов и параметров датчика предназначена специальная программа ReadCC, которую необходимо загрузить в программную память микроконтроллера полностью собранного прибора (с подключенным модулем измерения давления), включить его и через несколько секунд выключить. После этого нужно извлечь микроконтроллер и с помощью программатора прочитать содержимое его EEPROM. В нем по адресам, указанным в табл. 1, находятся значения индивидуальных коэффициентов и параметров датчика. Далее необходимо открыть файл рабочей программы барометра-термометра BARO-2 asm, найти в нем фрагмент, приведенный в табл. 2, и исправить значения объявленных там констант в соответствии с прочитанными из EEPROM. Параметр D в программе не используется.

      Теперь программа готова к работе с установленным в прибор экземпляром датчика. Остается оттранслировать ее с помощью AVR Studio и загрузить полученный НЕХ-файл в микроконтроллер.
Учтите, что аналогичный файл, приложенный к статье, рассчитан на работу с датчиком, имевшимся у автора Если загрузить его в микроконтроллер, прибор с другим экземпляром датчика давления будет работать но давать неточные показания.

      В разработке использованы фрагменты программ из [3] и [4]. Подпрограммы преобразования чисел из шестнадцатеричного формата в двоично-десятичный переработаны с учетом разрядности чисел. Подпрограммы перемножения и деления двухбайтных чисел, предназначенные для микроконтроллеров семейства MCS-51, переведены на язык ассемблера AVRASM Меньше всего подверглась изменениям подпрограмма управления ЖКИ, учтены лишь особенности индикатора MT-10S1 а для ввода и вывода сигналов использованы другие порты микроконтроллера.

Прилагаемые файлы:    baro-2.zip   

ЛИТЕРАТУРА
1. НР03 Series of calibrated sensor module HP03SB —    www.hoperf.com/pdf/HP03SB.pdf    .
2. HP03 programming guide —    www.hoperf.com/pdf/hp03_code.pdf   
3. Трамперт В. AVR-RISC микроконтроллеры.— К.. МК-Пресс, 2006
4. Фрунзе А. Микроконтроллеры? Это же просто! Том. 1. — М . Додэка-ХХI 2007.

Н. САЛИМОВ, г. Ревда Свердловской обл.
«Радио» №6 2010г.

Похожие статьи:
Барометрический высотомер
Цифровой термометр

Post Views: 2 224

Микроконтроллер

– Почему форма сигнала тактового сигнала MCU синусоидальная, а не прямоугольная

\$\начало группы\$

У меня новый осциллограф 🙂 (гордость дилетанта)

Пытаюсь визуализировать внутренние часы микроконтроллера STM32G431RBT6. Поэтому я создал пример программы, предоставленной поставщиком, которая обеспечивает вывод часов MCU на вывод GPIO. Я подключил свой осциллограф Rigol DS2202A (200 МГц, 2 Гвыб/с и 58 Мвыб) к контакту, и вот какие выходные сигналы я получил.

Выход HSE (24 МГц)

Выход PLL в форсированном режиме диапазона 1 (170 МГц)

Я использую пассивный пробник PVP92350. 1 : 1 | 10 : 1

  • Входное сопротивление | 1 МОм ± 1% | 10 МОм ± 1%
  • Полоса пропускания | постоянный ток ~ 35 МГц | постоянный ток ~ 350 МГц
  • Диапазон компенсации | 6 пФ ~ 24 пФ | 6 пФ ~ 24 пФ
  • Макс. Входное напряжение | CAT II 300 В переменного тока | CAT II 300 В переменного тока
  • По мере увеличения скорости MCU форма сигнала изменяется от почти прямоугольной до синусоидальной. Связано ли это с ограничениями моего осциллографа, или это та форма волны, которую можно ожидать от вывода тактового сигнала MCU? Также Vpp показан отрицательным, и я пытаюсь понять, почему все эти данные.

    • микроконтроллер
    • stm32
    • осциллограф
    • часы
    • pll

    \$\конечная группа\$

    7

    \$\начало группы\$

    Трудно увидеть (или даже сгенерировать) идеальную прямоугольную волну 170 МГц.

    1. Используйте режим ослабления 10:1.

    В случае 24 МГц у вас, вероятно, нет хорошего заземления на щупе осциллографа — вам нужен заземляющий провод, укороченный спиралью вокруг наконечника щупа и подсоединенный как можно ближе (несколько мм) к щупу. заземление драйвера MCU для этого контакта. Ваше чрезмерное заземление создает звон из-за LC-резонанса заземляющего провода и емкости пробника.

    В случае 170 МГц драйвер вывода, скорее всего, не может управлять общей емкостью вывода — вот почему вы видите такой сигнал.

    Совет. Лучший способ увидеть эти сигналы — приобрести коаксиальный кабель сопротивлением 50 Ом; подключите один конец к осциллографу (если у осциллографа есть режим 50 Ом, используйте его; в противном случае вставьте в соединение терминатор 50 Ом). Оголите провода на дальнем конце; припаяйте резистор 470 Ом (в идеале 451 Ом) к центральному проводнику и сформируйте провода (даже припаяйте их) так, чтобы они касались платы в точках щупа. Это обеспечит соединение с высокой пропускной способностью и низкой индуктивностью между выводом вашего MCU и прицелом.

    Вот так:

    \$\конечная группа\$

    6

    Зарегистрируйтесь или войдите в систему

    Зарегистрируйтесь с помощью Google

    Зарегистрироваться через Facebook

    Зарегистрируйтесь, используя электронную почту и пароль

    Опубликовать как гость

    Электронная почта

    Требуется, но никогда не отображается

    Опубликовать как гость

    Электронная почта

    Требуется, но не отображается

    Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания, политикой конфиденциальности и политикой использования файлов cookie

    .

    микроконтроллер – Измерение частоты кристалла внутри схемы

    спросил

    Изменено 2 года, 3 месяца назад

    Просмотрено 618 раз

    \$\начало группы\$

    Я разрабатываю небольшой блок тестирования для автоматизации производственного тестирования основных плат моей компании. Один из тестов, который необходимо выполнить, заключается в проверке работы внешнего кварцевого генератора с частотой 8 МГц для микроконтроллера PIC. Есть ли рекомендуемый способ сделать это дешевым и надежным способом?

    На данный момент я думаю о том, чтобы производить выборку со скоростью выше 16 Мбит/с (частота Найквиста = 8 МГц x 2 = 16 МГц). Это дало бы мне достаточно информации, чтобы реконструировать волну и определить частоту. Проблема, которую я вижу в этом, заключается в том, что АЦП, который я сейчас использую, имеет скорость всего 500 кс/с. Мне потребуется много дополнительных затрат на АЦП с более высокой производительностью, а также место на плате для фильтра сглаживания, чтобы избавиться от любых более высоких гармоник, которые могут быть обнаружены. Это решение кажется громоздким только для проверки наличия синусоидальной волны. Любое предложение приветствуется.

    • микроконтроллер
    • аналоговый
    • генератор
    • встроенный
    • обработка сигналов

    \$\конечная группа\$

    12

    \$\начало группы\$

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

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

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

    \$\конечная группа\$

    \$\начало группы\$

    Если вы хотите увидеть, работает ли генератор PIC с кристаллом, включите его и посмотрите, работает ли он.

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

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

    Если частота критична для приложения, то стоит проверить частоту. Два основных способа сделать это — использовать настольный счетчик или использовать тестовую прошивку в PIC для считывания внешней стандартной частоты с помощью внутренних периферийных устройств счетчика

    . \$\конечная группа\$

    1

    \$\начало группы\$

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

    Обычно для этого можно использовать достаточно чувствительную входную цепь, чтобы она не оказывала чрезмерного влияния на выходной узел генератора, и схему частотомера. Это может быть Keysight или любое другое устройство для монтажа в стойку с коммуникациями LXI или GPIB, или вы можете создать что-то с PIC, Arduino или чем-то еще и передать измерение частоты по последовательному каналу тому, что вы используете для автоматизации тестирования. При частоте 8 МГц вам не нужно очень большое время срабатывания, чтобы получить большее разрешение, чем вам может понадобиться.

    Существуют различные проекты с открытым исходным кодом, которые можно использовать в качестве основы, а не начинать с нуля. Замена (как правило, грубой) входной схемы дешевым быстрым компаратором CMOS с самосмещающимся RC на одном входе минимизирует нагрузку.

    \$\конечная группа\$

    \$\начало группы\$

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

    Однако, скорее всего, проблема заключается в величине колебаний. Она определяется качеством кристалла, паразитными элементами и компонентами вокруг него. Подключение пробника непосредственно к нему БУДЕТ влиять на частоту (при измерении, возможно, на 0,1%), а также будет влиять на амплитуду. Однако подключение пробника через небольшой конденсатор (например, 1 пФ) позволит вам (после калибровки) определить или, по крайней мере, сравнить амплитуды между разными блоками и обнаружить аномальные.

    Обратите внимание, что если вы пытаетесь измерить амплитуду 8 МГц, вы можете использовать АЦП с более низкой частотой дискретизации, если его входной фильтр пропускает 8 МГц, а его апертура пропускает 8 МГц. быть опробованным. По сути, вы можете псевдонимов частоты дискретизации и осцилляции. Выберите частоту дискретизации 90 165, а не 90 166, кратную 8 МГц, и вы получите на выходе субдискретизированную версию исходного сигнала, только на другой частоте.

    напр.

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *