Ультразвуковой дальномер HC-SR04 [Амперка / Вики]
Ультразвуковой дальномер рассчитан на определение расстояния до объектов в радиусе четырёх метров.
Работа модуля основана на принципе эхолокации. Модуль посылает ультразвуковой сигнал и принимает его отражение от объекта. Измерив время между отправкой и получением импульса, не сложно вычислить расстояние до препятствия.
Подключение УЗ дальномера
Модуль подключается четырьмя проводами. Контакты VCC
и GND
служат для подключения питания, а Trig
и Echo
— для отправки и приема сигналов дальномера. Подключим их к пинам 10
и 11
соответственно.
Напряжение питания дальномера 5 В. Модуль работает и с платами, напряжение которых 3,3 В — в этом случае подключайте его к пинам группы с P8 по P13. Установите джампер выбора питания V2 на Troyka Shield в положение V2+5V. Пин микроконтроллера, соединённый с пином Echo
должен быть толерантен к 5 В. Приведённая схема подходит для подключения дальномера к Iskra JS.
Пример работы
Рассмотрим как работает дальномер.
Для того чтобы инициализировать отправку сигнала дальномером, необходимо подать высокий сигнал длительностью 10 μs на пин
Trig
.После получения высокого сигнала длительностью 10 μs на пин
Trig
, модуль генерирует пучок из восьми сигналов частотой 40 кГц и устанавливает высокий уровень на пинеEcho
.После получения отраженного сигнала модуль устанавливает на пине
Echo
низкий уровень.
Зная продолжительность высокого сигнала на пине Echo
можем вычислить расстояние, умножив время, которое потратил звуковой импульс, прежде чем вернулся к модулю, на скорость распространения звука в воздухе (340 м/с).
Функция pulseIn
позволяет узнать длительность импульса в μs
. Запишем результат работы этой функции в переменную
duration.
Теперь вычислим расстояние переведя скорость из м/с в см/мкс:
distance = duration * 340 м/с = duration * 0.034 м/мкс
Преобразуем десятичную дробь в обыкновенную
distance = duration * 1/29 = duration / 29
Принимая во внимание то, что звук преодолел расстояние до объекта и обратно, поделим полученный результат на 2
distance = duration / 58
Оформим в код всё вышесказанное и выведем результат в Serial Monitor
- ultrasonic.ino
// Укажем, что к каким пинам подключено int trigPin = 10; int echoPin = 11; void setup() { Serial.begin (9600); pinMode(trigPin, OUTPUT); pinMode(echoPin, INPUT); } void loop() { int duration, distance; // для большей точности установим значение LOW на пине Trig digitalWrite(trigPin, LOW); delayMicroseconds(2); // Теперь установим высокий уровень на пине Trig digitalWrite(trigPin, HIGH); // Подождем 10 μs delayMicroseconds(10); digitalWrite(trigPin, LOW); // Узнаем длительность высокого сигнала на пине Echo duration = pulseIn(echoPin, HIGH); // Рассчитаем расстояние distance = duration / 58; // Выведем значение в Serial Monitor Serial.print(distance); Serial.println(" cm"); delay(100); }
Работа с библиотекой
Количество строк кода можно существенно уменьшить, используя библиотеку для работы с дальномером.
- ultrasonic_lib.ino
#include <NewPing.h> #define TRIGGER_PIN 10 #define ECHO_PIN 11 #define MAX_DISTANCE 400 NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); void setup() { Serial.begin(9600); } void loop() { delay(50); Serial.print("Ping: "); Serial.print(sonar.ping_cm()); Serial.println("cm"); }
Работа с Iskra JS
var sonic = require('@amperka/ultrasonic') .connect({trigPin: P10, echoPin: P11}); sonic.ping(function(err, value) { if (err) { console.log('An error occurred:', err); } else { console.log('The distance is:', value, 'millimeters'); } }, 'mm');
Характеристики
Напряжение питания: 5 В
Потребление в режиме тишины: 2 мА
Потребление при работе: 15 мА
Диапазон расстояний: 2–400 см
Эффективный угол наблюдения: 15°
Рабочий угол наблюдения: 30°
Ресурсы
wiki.amperka.ru
Ультразвуковой датчик HC-SR04
В этой статье я хотел бы поделится своим опытом работы с довольно дешевым ультразвуковым датчиком расстояния типа HC-SR04. Этот датчик представляет собой простой ультразвуковой сонар, тем не менее имеет хорошие характеристики.
О работе с ним расписано уже много информации. Вкратце работа с датчиком HC-SR04 заключается в следующем: посылаем с микроконтроллера на вывод Trig короткий импульс (10 микросекунд) и засекаем время, по нарастающему фронту (изменению состояния с 0 на 1), на выводе Echo, останавливаем таймер. Полученное значение, делим на 58 и получаем значение в сантиметрах.
Это краткий алгоритм. На самой плате датчика есть 3 микросхемы. Одна из них это контроллер, вторая — MAX232 — предназначена для раскачки импульса до амплитуды 10В (передатчик), и третья — TL082 или аналог, предназначена для усиления принятого сигнала(приемник). Кстати, во всех дешевых китайских модулях микросхема MAX232 — муляж и она не раскачивает напряжение. Если хотите более высоких характеристик (измерение до 4-х метров как в описании), ее нужно менять на настоящую.
Схема датчика HC-SR 04
При поступлении короткого импульса контроллер выдает 8 импульсов на MAX232, где они раскачиваются и поступают в излучатель. Излученный сигнал отражается и принимается вторым ультразвуковым излучателем усиливается до определенного уровня и подается в контроллер, который выдаст на выходе Echo логическую единицу.Из опыта использования могу сказать что эти датчики имеют довольно узкую диаграмму направленности. Это очень помогает при использовании их в узких пространствах, так как сигнал не распространяется на боковые стенки.
А что касается использования их в сырой среде тут я вас разочарую. Мои опыты показали что работает датчик HC-SR04 в такой среде не более месяца, после чего выходит из строя (излучатели полностью корродируют и не подлежат восстановлению, хотя электроника вся в порядке). В характеристиках дальномера HC-SR04 указан диапазон от 2 до 400 см. У меня стабильная работа получилась от 5 см, так что советую программно установить такие ограничения. Что касается второго предела, то мне не удавалось протестировать его на 4 м, но 2.8 м он измерял достаточно стабильно. Нижнее ограничение в 5 см у этого датчика возникает из-за того что при выстреле пачки импульсов излучателем, они моментально попадают и на приемник который имеет высокое усиление. Поэтому необходимо немного переждать и потом уже отслеживать сигнал приемника. Отсюда и ограничение.
На картинке выше наглядно видно как волна сразу после излучения попадает на приемник. Была попытка заменить родные излучатели на те, которые применяются в системах парктроника. Делалось это с целью применения датчика HC-SR04 во влажной среде. Но это не дало никакого результата. Дело в том что датчики парктроника раскачиваются намного большим напряжением, да и в усиление принятого сигнала должно быть на порядок больше. Если нужно работать во влажной среде советую воспользоваться датчиком JSN-SR04T.
Стоит он на порядок дороже, но он работает с датчиком парктроника который имеет отличную пыле и влагозащиту. Правда в датчике JSN-SR04T, нижний предел измерения — 30 см, это нужно учитывать (это из-за применения вместо двух — одного излучателя, и собственно после излучения нужно больше времени на затухание колебаний).
Алгоритм работы с ним такой же, как и с его собратом. Диаграмма направленности датчика парктроника довольно широкая, это не есть хорошо, выше я писал почему. Но есть выход: применить простейший рупор. Это сузит диаграмму направленности, а еще усилит сигнал.
elschemo.ru
HC-SR04 Ультразвуковой модуль измерения расстояния
Всех приветствую.В этом мини обзорчике, мы посамодельничаем с ультразвуковым модулем измерения расстояния…
Сразу извиняюсь, упаковок и распаковок не будет. Сам не люблю их в других обзорах, свои портить не буду. Разве что какой заказ прибудет в экстраординарной упаковке или супер непотребном виде…
Возникла идея автоматически включать свет при посещении сортира и так же выключать при покидании оного. Был заказан pir-выключатель для этих целей, а так же pir-датчик отдельно, на всякий…
Выключатель был установлен в однозначно посещаемом всеми членами семьи помещении и…
И оказалось, что плясать лезгинку, при выполнении процедур характерных для посещения сортира, никто не в состоянии, а замирание в привычной позе характерно для всех. Тут и подстерегала бяка. Только задумался о добром и вечном, свет хлоп и выключился, что довольно досадно.
Перепробованы все способы регулировок выключателя, но желаемого результата достичь не удалось.
Не удалось обмануть себя и физику, подменив необходимый датчик присутствия, на датчик обнаружения.
Так что выключатель и неиспользованный pir-датчик были отправлены на длительное хранение до лучших времен, а их место занял…
Комбинированный радар для воротных систем CONDOR, пока никуда не пристроенный.
Микроволновый блок естественно был отключен, зачем нам подставлять макушку под микроволны. Осталась только ИК матрица.
Штука довольна специфическая. Минимальная зона у него размером с помещение. Свет включает и выключает при посещении на ура. Но есть один недостаток. Датчик очень педантичен и любит, чтобы все стояло на своих местах. Передвинул рулончик бумажки или опустил/поднял стульчак, требуется перенастройка. Да и ценник у него не сортирный.
На просторах интернета набрел на сайт Электрик и форум с темой о простом автоматическом выключателе света на ультразвуковом датчике.
Тема показалась интересной, тем более изобретать велосипед с прошивкой не надо, автор постарался за нас, за что ему спасибо.
Схема есть, прошивки есть. Осталось сделать печатку и получить на выходе полноценный датчик присутствия. Или не получить… посмотрим…
Датчик был заказан на banggood’e. Нравится мне этот магазин стабильностью сроков доставки. Безтреком 28-30 дней и заказ у меня.
Приехал безтреком в срок. Упаковка для посылок без трека у banggood’а стандартная, мусорный мешок и все…
Датчик был упакован в антистатик, что подозреваю и спасло его от почтовых неприятностей. :0)
К сожалению мусорный мешок выбросил по пути домой, а антистатик уже дома, так что показать кроме датчика вам нечего, да и сам датчик уже потрепался (ножки выпрямил) в процессе изготовления устройства.
ТТХ датчика:
— 45*20*23 мм. ДхШхГ (Г — с выпрямленными ножками)
— вес — 8,28 грамм
— напряжение питания — DC 5V
— ток потребления — 15mA
— минимальное рабочее расстояние — 2 см.
— максимальное рабочее расстояние — 4 метра
— угол зоны обнаружения — 15 градусов
Кратко.
Датчик работает по принципу эха. Один пьезик датчика излучает пакет импульсов с частотой 40 кГц, сигнал отражается от поверхности перед датчиком, отраженный сигнал принимает другой пьезик, блок обработки обрабатывает полученные данные и на выходе выдает импульс длинной пропорциональной расстоянию прохождения УЗ сигнала.
Т.е. на выходе мы имеем импульс, длительность которого нам и важна.
В изготавливаемом нами автоматическом включателе/выключателе мы сравниваем длительность импульса занесенного в память микроконтроллера, с длительностью нового отраженного импульса. Если длительность нового импульса меньше того что в памяти, микроконтроллер решает, что в зоне обнаружение есть объект и нужно включить нагрузку… Если длинна импульса больше, то ничего не делаем или выключаем нагрузку, если она включена.
Далее:
Сам датчик.
Маркировка на микросхемах стерта.
Быстренько перерисовываем готовую схему в Diptrace, там же рисуем печатку, изготавливаем платку для опытов.
Процесс изготовления спрятал под спойлер, по тому как думаю многих уже притомил процессами.Один раз я уже показывал, как делаю платки. В этот же раз наделал фоток, жалко выкидывать.
Больше народ процессами мучить не буду, если есть вопросы по платам, пишите пожалуйста в личку.
Здесь ссылка на скачивание того, что я собрал по теме, плюс схема и печатка платки в Diptrace.
Несколько фоток.
Подготавливаем платку и шаблон. Фоторезист нанесен.
Засвечиваем, промываем, травим.
Травим, смываем фоторезист.
Наносим маску, засвечиваем шаблон.
Режем платку, сверлим.
Сама платка.
Собрана схема на ATtiny13.
Зачем для тестов такая красивая? Просто она делалась попутно с другой платой, под эл. нагрузку.
Почему так бестолково расположены радиоэлементы? По тому что тестовая. Чтобы проверить, рабочее ли устройство в сборе. Не было смысла разводить и компоновать.
Припаиваем датчик к платке.
Программируем.
В результате получаем готовый бескорпусной датчик присутствия с питанием пять вольт, кушающее 30mA, способное обнаруживать посторонние предметы в заранее запрограммированной зоне обнаружения с углом в 15 градусов и расстоянием от 2 сантиметров, до 3,5 метров. При обнаружении включать светодиод.
Принцип работы прост. Направляем датчик, куда нам нужно. Нажимаем кнопку.
Настроечный светодиод (у меня он красненький) начинает мигать.
Мигает он в 3-х режимах:
10% светодиод включен— объект вне зоны действия, нагрузка выключена.
90% светодиод включен— объект в зоне действия, нагрузка включена.
50% светодиод включен— зона обнаружения свободна, идет отсчет 60 или 10 секунд, или одна секунда, в зависимости от прошивки, до выключения, лампа включена.
Дальше у вас есть 10 секунд чтобы уйти из зоны обнаружения.
Можно ограничить зону. Для этого нужно в момент запоминания настроек встать на границе зоны, тем самым зона будет ограничена.
Паспортные минимальные 2 сантиметра я подтверждаю. Если ограничить зону как на фото, то при просовывании пальца между коробкой и датчиком светодиод загорается, убираем палец, гаснет.
Если подвинуть коробку на полсантиметра ближе, то свтодиод загорается, устройство настраиваться отказывается.
Максимальные 4 метра подтвердить не удалось. Максимальное расстояние которое удалось подтвердить, где устройство уверенно фиксирует человека равно 3.5 метра. На з-х метрах уверенно фиксирует мою руку с коробкой 15х15 сантиметров. Включает нагрузку и не отключает, пока коробку не уберешь.
Выводы.
— Получившийся датчик присутствия мне понравился.
— Простейшая и удобная настройка.
— Реально работает.
— Дешево и сердито.
В общем, вот такое получилось годное устройство на ультразвуковом модуле измерения расстояния HY-SRF05.
В недалеком будущем я приспособлю его по месту, только коробку подберу.
Теперь можно будет замирать в нужной позе не боясь отключения света.
Желающие думаю могут придумать еще множество способов его использования. Особенно ардуинщики, для кого этот датчик в принципе и разработан. А может и не для них…
mysku.ru
Ультразвуковой датчик измерения расстояний HC-SR04
Самым распространенным датчиком для измерения расстояния в диапазоне от 2 см до 400 см во всевозможных Arduino проектах является ультразвуковой локатор HC-SR04. Этот датчик был приобретен на Ru.aliexpress.com
ультразвуковой локатор HC-SR04 на АлиАвтор неоднократно приобретал у этого производителя, как датчики данного типа, так и другие устройства, при этом никаких проблем ни с доставкой, ни с комплектацией, ни с работоспособностью устройств не возникало.
Технические характеристики HC-SR04
- Напряжение: 5 В (DC)
- Рабочий ток: менее 2 mA.
- Выход сигнал: высокий уровень 5 В, низкий уровень 0 В.
- Угол: не более 15 градусов.
- Расстояние обнаружения: 2 — 450 см.
- Высокая точность: до 0.3 см
- Вход триггера сигнала: 10 мкс TTL импульс
Конструктивно датчик представляет собой печатную плату, на которой размещены все компоненты устройства, в первую очередь на плате хорошо заметны излучатель и приемник ультразвуковых волн. Размер датчика 20 х 40 х 15 мм, масса 8,3 г.
ультразвуковой датчик HC-SR04Устройство излучает серию ультразвуковых импульсов на частоте 40 кГц [1-3]. Угол зрения датчика составляет около 15 градусов. Для инициализации цикла измерения надо в течении 10 мкс на вход датчика Trig подать высокий логический уровень. После этого устройство излучит 8 пачек ультразвуковых импульсов. По длительности эха можно судить о расстоянии до препятствия, это расстояние кодируется длительностью импульса, поступающего на выход Echo. Если препятствие не обнаружено, то длительность импульса составляет 38 мс.
Подключение HC-SR04 к Arduino
Для использования датчика вместе с аппаратной платформой Arduino существует специальная библиотека Ultrasonic [4], которая берет на себя все рутинные операции по управлению датчиком и сразу возвращает расстояние в сантиметрах. Впрочем, логика работы датчика не очень сложна, так что программу, управляющую работой датчика можно реализовать самостоятельно. Тем более, что данная библиотека позволяет работать только с одним датчиком, а зачастую для нормальной ориентации роботу может потребоваться несколько датчиков [5].
ультразвуковой локатор с АрдуиноДатчику необходимо напряжение питания 5 В, ток потребления составляет 3 мА.
Испытания УЗ детектора
При использовании данного типа датчика были отмечены следующие особенности:
- Датчик не может адекватно измерить расстояние до ворсистой поверхности, видимо потому, что такая поверхность хорошо рассеивает и поглощает ультразвуковые импульсы и не дает нормального эха.
- Сетки закрывающие переднюю, часть ультразвукового излучателя и приемника механически не очень прочны и могут быть сравнительно легко продавлены, впрочем, это не сказалось на работоспособности датчика.
В целом, HC-SR04 отличный недорогой датчик, который может стать основным «зрением» робота в пределах небольшой комнаты, так же его можно применить для измерения уровня жидкости, в системах сигнализации и т.п. Специально для сайта «2 Схемы» — Denev.
- http://robocraft.ru/blog/electronics/772.html
- https://arduino-kit.ru/userfiles/image/HC-SR04%20_.pdf
- http://amperka.ru/product/hc-sr04-ultrasonic-sensor-distance-module
- https://code.google.com/archive/p/robocraft/
- Лекомцев Д.Г. Arduino. Подключение типовых внешних устройств. – Радио, 2016, №11, с. 51-54
Загрузка…
2shemi.ru
HC-SR04. Ультразвуковой датчик измерения расстояния
HC-SR04 — это ультразвуковой датчик, позволяющий измерять расстояние до преграды в диапазоне от 2 до 400 см. Он представляет собой плату, на которой размещены излучатель и приемник ультразвука и управляющая электронная схема. Датчик имеет небольшие габариты и простой интерфейс: два вывода питания, один вход и один выход. Может быть использован в качестве датчика присутствия в умном доме или охранной системе, а также для всяких роботизированных поделок. Также на нем можно сделать парктроник для машины, только в уличных условиях он быстро загрязнится.
Плата датчика имеет 4 вывода:
— плюсовой вывод питания (Vcc)
— вход TRIG
— выход ECHO
— ноль питания (GND)
На выводы питания подается постоянное напряжение 5 В. По даташиту датчик потребляет в рабочем режиме 15 мА. У меня на макете мультиметр показывал потребление ~6.5 мА, но я выполнял замеры расстояния с низкой частотой (единицы герц).
Вход TRIG подключается к любому выводу микроконтроллера. На этот вывод нужно подавать импульсный цифровой сигнал длительностью 10 мкс. По сигналу на входе TRIG датчик посылает пачку ультразвуковых импульсов.
После приема отраженного сигнала, датчик формирует на выводе ECHO импульсный сигнал, длительность которого пропорционально расстоянию до преграды. Вывод ECHO нужно подключить к выводу внешнего прерывания или входу схемы захвата таймера, в зависимости от метода измерения длительности сигнала микроконтроллером.
Временная диаграмма работы датчика HC-SR04 показана на рисунке ниже.
Расстояние можно посчитать по следующей формуле:
S = Tus/58, [см]
где Tus — длительность эхо импульса в микросекундах, а 58 — константа.
Неудобство использования датчика заключается в том, что для измерения длительности эхо сигнала приходится задействовать два узла микроконтроллера — внешнее прерывание и таймер. Это осложняет написание универсального программного модуля.
Я написал программный модуль для работы с датчиком HC-SR04 так, чтобы можно было использовать внешние прерывания INT0, INT1 или INT2 и любой из аппаратных таймеров. Используемый таймер просто непрерывно считает тактовые импульсы в режиме Normal (от 0 до максимума), вызывая прерывания после переполнения счетного регистра. Делитель для таймера может быть любым, главное указать его в программном модуле датчика. Значение предделителя таймера используется при расчете длительности эхо сигнала и, следовательно, влияет на расчет расстояния.
Измерение длительности эхо сигнала датчика производятся путем захвата значений таймера по срабатыванию внешнего прерывания. Настройка таймера не производится в программном модуле датчика, ее нужно выполнять отдельно. Так сделано, чтобы привязывать программный модуль к таймеру, а не наоборот.
Модуль представляет собой два файла usens.h и usens.c. Набор функций модуля такой:
void USENS_Init(void) — настройка используемых выводов, инициализация внутренних переменных. Эта функция вызывается в начале main функции.
void USENS_Handler(void) — запускает процесс измерения, формируя сигнал для входа TRIG, а по окончании измерения вычисляет расстояние до объекта. Эту функцию нужно запихнуть в бесконечный цикл.
uint16_t USENS_GetDistance(void) — возвращает расстояние до объекта, если оно было измерено. В противном случае возвращает 0. Может вызываться в любое время.
void USENS_CountingOvf(void) — эту функцию нужно запихнуть в прерывание используемого таймера. Она подсчитывает число переполнений таймера.
В заголовочном файле модуля есть настройки. Они все прокомментированы, здесь я их описывать не буду. Не думаю, что многие будут использовать мой код.
Тестовый проект измеряет расстояние до объекта и выводит результат на LCD дисплей. Схема моего макета была такой.
Я не разбирался в этом вопросе детально, потому что у меня не было такой задачи, но пару слов об этом стоит сказать.
По паспорту датчик измеряет расстояние с разрешением ~3 мм в диапазоне от 3 до 400 см.
На результат измерения влияет угол расположения отражающей поверхности. Если поверхность расположена перпендикулярно пути распространения ультразвукового сигнала датчика, результат измерения будет точнее.
Также оказывает влияние размер отражающей поверхности и ее структура. От мелких объектов ультразвуковой сигнал просто не будет отражаться.
Естественно стоит учитывать и точность измерения длительности эхо сигнала. Наилучший результат можно получить при высокой тактовой частоте микроконтроллера и таймера, но я не ставил себе такую задачу, когда писал тестовый проект.
И последний момент — скорость распространения звуковых волн в воздухе зависит от его температуры. В датчике этот момент, скорее всего, никак не учитывается, поэтому требовать от него высокой точности не стоит.
AVR-HC-SR02.rar проект для IAR`a
datasheet HC-SR04
chipenable.ru
Ультразвуковой дальномер HC-SR04 без микроконтроллера часть 1
Измерительная техника
Главная Радиолюбителю Измерительная техника
Часть 1. Сигнализаторы присутствия
В статье приводится описание принципа работы ультразвукового дальномера HC-SR04 и некоторых устройств на их основе: сигнализаторов присутствия, аналогового дальномера и выключателя освещения. Конструкции, описание которых приведены в статье, можно использовать в радиокружках для отработки навыков конструирования или в различных устройствах, в том числе и в домашней автоматике.
Ультразвуковой дальномер HC-SR04 (Ultrasonic Ranging Module HC-SR04. — https://lib.chipdip.ru/092/DOC00109 2302.pdf (29.01.18)), далее дальномер HC-SR04, широко известен, доступен и часто используется радиолюбителями для построения различных устройств. В отличие от других датчиков, дальномер HC-SR04 не реагирует на солнечный свет или цвет объекта, но его эффективность сильно зависит от отражательных свойств поверхности. Традиционно его применяют совместно с микроконтроллерами, а наиболее широко — с платами семейства Arduino, чему способствуют доступные библиотеки для управления дальномером. Описаний подобных конструкций много в Интернете. Но в некоторых случаях при построении отдельных устройств можно с успехом обойтись и без микроконтроллеров. Прежде всего, это относится к устройствам, где не требуется точного измерения расстояния, а сделать это позволяют некоторые особенности дальномера HC-SR04. Дело в том, что информация о расстоянии с его выхода формально выводится в цифровом виде, но её нетрудно простыми средствами обработать без микроконтроллера или преобразовать в аналоговую, а затем использовать для построения различных автоматов.
Но для начала надо подробнее познакомиться с конструкцией и параметрами дальномера HC-SR04 (рис. 1). Следует отметить, что топология печатной платы дальномера у разных производителей может отличаться.
Рис. 1. Дальномер HC-SR04
Основные технические характеристики
Напряжение питания, В ………….4,8…5,5
Максимальный потребляемый ток, мА……………….15
Угол обзора, град……………..15
Измеряемое расстояние, см …………2…400
Погрешность измерения, см………………………0,3
Интервал рабочих температур, оС ……………….0…+ 60
Габаритные размеры, мм . . . .45x20x15
Назначение выводов HC-SR04: Vcc — плюсовой вывод питания; Trig — вход запускающего сигнала; Echo — выход эхо-сигнала; GND — общий «земляной» вывод.
Принцип работы дальномера HC-SR04 основан на принципе эхолокации, т. е. использует точно такую же технологию, что и летучие мыши, дельфины и некоторые другие животные для ориентации в пространстве, а именно ультразвук (УЗ). На передней части платы дальномера расположено два УЗ-преобразователя, первый — это передатчик (Transmiter) УЗ-волн (TCT40-16T), он расположен на плате слева, иногда его отмечают надписью «T», а второй — приёмник (Receiver) отражённых УЗ-волн (TCT40-16R), он установлен справа, иногда маркируется надписью «R», а в центре расположен кварцевый резонатор.
Работу дальномера HC-SR04 поясняет рис. 2. Для запуска процесса измерения на вход Trig (UTR) надо подать импульс длительностью tTR= 10…15 мкс. По спаду этого импульса дальномер излучает пачку из восьми УЗ зондирующих импульсов UT на частоте 40 кГц. Через небольшой промежуток времени (около 1 мкс) после окончании пачки УЗ-импульсов на выходе Echo (UEC) появится высокий логический уровень. Он сменится на низкий, когда в приёмник попадёт отражённый УЗ-сигнал UR. Таким образом, длительность импульса tEC на выходе Echo зависит от расстояния до препятствия: L(см) = tEС(мкс)/58. Поэтому, измерив длительность импульса tEC и проведя несложные расчёты, можно определить это расстояние. Так обычно и происходит в устройствах, собранных на дальномере HC-SR04 и микроконтроллере (или плате семейства Arduino). По результатам измерения принимается какое-либо решение. Если отражённого УЗ-сигнала не будет или он будет ниже порога обнаружения, длительность импульса tEC — около 38 мс. Поэтому период следования запускающих импульсов TTR должен быть не менее 45…50 мс.
Рис. 2. Диаграмма, поясняющая работу дальномера HC-SR04
Сигнализатор присутствия-1
Самые распространённые датчики движения — это ИК-датчики, которые относятся к так называемым пассивным. Их основа — пироэлектрический датчик, который реагирует на изменение ИК-излучения, попадающего на него. Если это излучение будет мало, такой датчик на перемещение объекта не реагирует. Одним из главных недостатков большинства таких датчиков является то, что они реагируют только на движение человека. Если применить такой датчик в выключателе освещения, например, на лестничной площадке, где люди постоянно перемещаются, проблем не возникает. Но если человек будет неподвижен, такой ИК-датчик перестанет реагировать и свет погаснет.
Для таких случаев более подходящим будет активный датчик, который излучает зондирующий сигнал и принимает сигнал, отражённый от объекта. Сделать такой датчик можно на основе дальномера HC-SR04. В таком устройстве не требуется измерять точное расстояние до предмета, и вполне достаточно информации о том, что он расположен на расстоянии меньше заранее установленного. Принцип работы такого сигнализатора может быть основан на том, что в дежурном состоянии на выходе дальномера HC-SR04 присутствует сигнал, параметры которого обусловлены наличием удалённых предметов или препятствий. Впрочем, отражённого сигнала может и не быть совсем. Поэтому длительность импульса tЕСна выходе Echo должна быть сравнительно большой. При появлении в зоне действия дальномера НС-SR04 более близко расположенных предметов длительность импульса tEC существенно уменьшается. Это и можно использовать для построения сигнализатора присутствия. Но для этого надо каким-то образом измерить длительность импульса tEC. В устройствах с микроконтроллерами это реализуется напрямую. Более простое решение без процедуры измерения можно реализовать на логических микросхемах.
Схема датчика присутствия показана на рис. 3. На логических элементах DD1.1 и DD1.2 собран генератор запускающих импульсов. На выходе элемента DD1.2 формируются импульсы длительностью 10…15 мкс с периодом следования около 45 мс. Реализуется это за счёт того, что резисторы в цепи зарядки и разрядки конденсатора С2 отличаются примерно на четыре порядка. Элемент DD2.1 инвертирует сигнал с выхода Echo дальномера. На элементах DD2.2 и DD2.3 собран ждущий одновибратор образцовых импульсов, которые задают временное окно для сравнения с инвертированным сигналом с выхода Echo. Это сравнение осуществляет логический элемент DD2.4 (2И-НЕ). На элементах DD1.3 и DD1.4 собран буферный каскад, который подаёт питающее напряжение на элементы сигнализации — светодиод HL1 и акустический излучатель HA1 со встроенным генератором.
Рис. 3. Схема датчика присутствия
Диаграмма, поясняющая работу сигнализатора, показана на рис. 4. Осциллограммы в контрольных точках 1-6 в исходном состоянии показаны красным цветом. После поступления импульса запуска 1 через некоторое время на выходе Echo появляется импульс 2, длительность которого зависит от расстояния до объекта, от которого пришёл отражённый сигнал. Этот импульс инвертирует (импульс 3) элемент DD2.1. По спаду импульса 3 ждущий одновибратор формирует образцовый импульс 4, длительность которого можно изменять подстроечным резистором R3. Элемент DD2.4 сравнивает импульсы 3 и 4. В исходном (дежурном) состоянии устройства длительность импульса 3 превышает длительность импульса 4, поэтому на выходе этого элемента присутствует высокий логический уровень (сигнал 5). Конденсатор С4 через резистор R5 заряжается до того же уровня, и на выходе элементов DD1.3 и DD1.4 присутствует низкий уровень (сигнал 6), поэтому светодиод HL1 и звуковой излучатель HA1 обесточены.
Рис. 4. Диаграмма, поясняющая работу сигнализатора
При появлении в зоне контроля сигнализатора объекта, который отражает УЗ-сигналы, состояние устройства изменяется. Осциллограммы для этого случая показаны синим цветом. Во-первых, длительность импульса 2 на выходе Echo, а также импульса 3 уменьшается. Поэтому на выходе элемента DD2.4 кратковременно появится низкий уровень (импульс 5), что приведёт к быстрой разрядке через диод VD2 конденсатора С4 и появлению на выходе элементов DD1.3 и DD1.4 высокого уровня. В результате включится светодиод HL1 и начнёт работать звуковой излучатель HA1, которые и подадут сигнал о наличии какого-либо объекта в зоне контроля сигнализатора. После ухода объекта из этой зоны сигнализатор вернётся в исходное состояние. В дежурном режиме устройство потребляет ток 3,3 мА, при подаче сигнала — 7,5 мА. Для его питания надо применить стабилизированный источник.
Все элементы сигнализатора размещены на односторонней печатной плате из стеклотекстолита толщиной 1…1,5 мм, её чертёж показан на рис. 5, а смонтированная плата — на рис. 6. Применены постоянные резисторы С2-23, Р1-4, МЛТ (R1 в данном случае составлен из двух соединённых последовательно резисторов КВИ по 5,1 МОм), подстроечный — СП3-19, оксидные конденсаторы — К50-35 и импортные, остальные — плёночные или керамические (С2 должен быть с малым током утечки). Диоды — любые маломощные импульсные, светодиод — маломощный любого свечения, можно применить мигающий с напряжением питания 5 В, в этом случае резистор R6 заменяют проволочной перемычкой. Звуковой излучатель — со встроенным генератором, обеспечивающий достаточную громкость при напряжении 5 В. Дальномер HC-SR04 можно впаять в плату либо применить для его подключения гнёзда из серии PSB, например, отрезав четыре штуки от гнезда PSB-10 (DS1023-1×10). Второй вариант, конечно, предпочтительней, поскольку позволяет оперативно заменять дальномеры и тем самым проверять их работоспособность и сравнивать их между собой.
Рис. 5. Чертёж печатной платы сигнализатора
Рис. 6. Смонтированная плата устройства
Налаживание сводится к проверке надёжного запуска дальномера HC-SR04, при необходимости для этого следует подобрать конденсатор С2. Дальность обнаружения устанавливают подстроечным резистором R3.
Сигнализатор присутствия-2
В сигнализаторе, описание которого приведено выше, реализован метод контроля длительности импульса на выходе Echo дальномера. Но импульсы на этом выходе относительно просто преобразовать в постоянное напряжение и уже затем использовать его для проведения измерений или управления другими элементами. Дело в том, что дальномер работает постоянно, и на выходе Echo дальномера HC-SR04 присутствует не отдельный импульс, а их последовательность. Если такую последовательность подать на вход интегрирующей RC-цепи, на её выходе будет напряжение ивых, пропорциональное амплитуде Uп и скважности Q импульсов: Uвых = Uп/Q, где Q = TTR/tEC. На практике это означает, что с приближением объекта постоянное напряжение на выходе интегрирующей RC-цепи уменьшается.
Схема второго варианта датчика присутствия показана на рис. 7. Формирователь запускающих импульсов здесь реализован по несколько иному принципу, он собран на логических элементах микросхемы DD1. На элементах DD1.1 и DD1.2 собран RC-генератор импульсов с частотой следования около 60 мс. Эти импульсы напрямую поступают на первый вход (вывод 12) элемента DD1.3, а на второй — через дифференцирующую RC-цепь C3R4, в результате на его выходе формируются запускающие импульсы, которые инвертирует элемент DD1.4, после чего они поступают на вход Trig дальномера HC-SR04. Формирователь запускающих импульсов в этой конструкции собран на большем числе элементов, чем в предыдущем устройстве, но зато не содержит высокоомных резисторов.
Рис. 7. Схема второго варианта датчика присутствия
Выходные импульсы дальномера HC-SR04 поступают на интегрирующую RC-цепь R2C4, постоянное напряжение на выходе которой зависит от расстояния до объекта. Это напряжение подаётся на инвертирующий вход ОУ DA2, который работает как компаратор. На его неинвертирующий вход поступает образцовое напряжение с делителя напряжения R3R5. Если объект находится за пределами зоны контроля сигнализатора, напряжение на выходе интегрирующей цепи превышает образцовое и на выходе ОУ будет напряжение, близкое к нулю. Поэтому включён светодиод HL1 зелёного свечения, сигнализирующий о работе устройства. Светодиод HL2 красного свечения и акустический сигнализатор со встроенным генератором обесточены.
При появлении в зоне контроля объекта напряжение на инвертирующем входе ОУ уменьшается и на его выходе появляется напряжение примерно на 1,5 В меньше питающего. В результате светодиод HL1 гаснет, включаются светодиод HL2 и акустический излучатель HA1, которые и подадут сигнал.
Длительность запускающего импульса можно изменить подборкой конденсатора С3. Дальность срабатывания сигнализатора устанавливают подстроечным резистором R5. Чтобы ввести гистерезис и сделать переключение сигнализатора более чётким, следует ввести резистор R8, который обеспечивает положительную обратную связь. Этот резистор можно установить со стороны печатных проводников.
Чтобы сделать питание сигнализатора более универсальным, например, питать его от батареи «Крона» или блока питания с выходным напряжением 7…12 В, в устройство введён интегральный стабилизатор DA1, который стабилизирует напряжение питания дальномера HC-SR04 и цифровой микросхемы. В дежурном режиме потребляемый ток — 8 мА, при подаче сигнала — 13 мА.
Чертёж односторонней платы сигнализатора, изготовленной из стеклотекстолита толщиной 1…1,5 мм, показан на рис. 8, а смонтированная плата — на рис. 9. В этом сигнализаторе можно применить аналогичные детали.
Рис. 8. Чертёж односторонней платы сигнализатора
Рис. 9. Смонтрованная плата устройства
Эти сигнализаторы присутствия можно применить в моделях автомобилей или других подвижных объектах для исключения столкновения с препятствиями, а также в различных устройствах домашней автоматики.
Продолжение следует
Чертежи печатных плат в формате Sprint-Layout имеются здесь.
Автор: И. Нечаев, г. Москва
Дата публикации: 22.05.2018
Рекомендуем к данному материалу …
Мнения читателей
Нет комментариев. Ваш комментарий будет первый.
Вы можете оставить свой комментарий, мнение или вопрос по приведенному вышематериалу:
www.radioradar.net
Ультразвуковой датчик HC-SR04. Дальномер на микроконтроллере | RadioLaba.ru
#include <P16F628A.INC>
LIST p=16F628A
__CONFIG H’3F10′ ;Конфигурация микроконтроллера
Sec equ 20h ;регистры хранения временных данных для
Sec1 equ 21h ;подпрограмм паузы
shet equ 22h ;регистр счетчика времени
scetbit equ 23h ;регистр счета для передачи по протоколу spi
ctr equ 24h ;регистр хранения временных данных
bcd1 equ 25h ;регистры хранения двоично-десятичных значений
bcd2 equ 26h ;двоичного числа
bcd3 equ 27h ;
edin equ 28h ;регистры хранения десятичных значений
desiat equ 29h ;двоичного числа
sotni equ 2Ah ;
dat_ind equ 2Bh ;регистр данных для передачи по протоколу spi
adr_ind equ 2Ch ;регистр адреса для передачи по протоколу spi
varLL equ 2Dh ;промежуточные регистры хранения значения
varHH equ 2Eh ;времени задержки (эха) от ультразвукового модуля
rezLL equ 2Fh ;регистры хранения результата деления двоичных
rezHH equ 30h ;чисел
flag equ 7Dh ;регистр флагов
W_TEMP equ 7Eh ;регистр для хранения значения аккумулятора W
STATUS_TEMP equ 7Fh ;регистр для хранения значения STATUS
#DEFINE trig PORTB,3 ;линия trig ультразвукового модуля
#DEFINE echo PORTB,4 ;линия echo ультразвукового модуля
#DEFINE datai PORTB,5 ;линия входа данных драйвера MAX7219
#DEFINE cs PORTB,6 ;линия выбора драйвера MAX7219
#DEFINE clk PORTB,7 ;линия тактирования драйвера MAX7219
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0000h ;начать выполнение программы с адреса 0000h
goto Start ;переход на метку Start
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма обработки прерываний
org 0004h ;начать выполнение подпрограммы с адреса 0004h
movwf W_TEMP ;сохранение значений ключевых регистров
swapf STATUS,W ;
clrf STATUS ;
movwf STATUS_TEMP ;
btfsc PIR1,TMR1IF ;опрос флага прерывания по переп. таймера TMR1
goto prov_tmr1 ;флаг установлен: переход на метку prov_tmr1
btfss echo ;флаг прерывания по переп. таймера TMR1 сброшен:
;опрос состояния линии ввода\вывода echo
goto stop_tmr1 ;линия echo равна 0: переход на метку stop_tmr1
bsf T1CON,TMR1ON ;линия echo равна 1: запуск таймера TMR1
movf PORTB,W ;чтение регистра PORTB для устранения несоответствия
bcf INTCON,RBIF ;сброс флага прерывания по изменению уровня сигнала RB4:RB7
goto exxit ;переход на метку exxit
stop_tmr1 bcf T1CON,TMR1ON ;остановка таймера TMR1
s_t1 movf TMR1H,W ;копирование значений регистров таймера TMR1 в промежуточные
movwf varHH ;регистры хранения времени задержки (эха)
movf TMR1L,W ;от ультразвукового модуля
movwf varLL ;
bcf INTCON,RBIE ;запрещение прерываний по изменению уровня сигнала RB4:RB7
bsf flag,0 ;установить флаг получения длительности импульса (эха)
movlw .4 ;запись числа 4 в регистр счетчика времени
movwf shet ;
clrf TMR1L ;очистка регистров таймера TMR1
clrf TMR1H ;
bcf PIR1,TMR1IF ;сброс флага прерывания по переп. TMR1
bsf T1CON,TMR1ON ;запуск таймера TMR1
goto exxit ;переход на метку exxit
prov_tmr1 btfss INTCON,RBIE ;проверка разрешения прерываний по изменению
;уровня сигнала на входах RB4:RB7
goto p_t1 ;прерывания запрещены: переход на метку p_t1
bcf T1CON,TMR1ON ;прерывания разрешены: остановка таймера TMR1
movlw .156 ;запись числа 39936 в регистры таймера TMR1
movwf TMR1H ;
clrf TMR1L ;
goto s_t1 ;переход на метку s_t1
p_t1 decfsz shet,F ;декремент регистра shet (счетчик времени)
goto exx1 ;регистр shet не равен 0: переход на метку exx1
bcf T1CON,TMR1ON ;остановка таймера TMR1
clrf TMR1L ;очистка регистров таймера TMR1
clrf TMR1H
bsf flag,1 ;установить флаг готовности измерения
exx1 bcf PIR1,TMR1IF ;сброс флага прерывания по переполнению TMR1
exxit swapf STATUS_TEMP,W ;восстановление содержимого ключевых регистров
movwf STATUS ;
swapf W_TEMP,F ;
swapf W_TEMP,W ;
;
retfie ;выход из подпрограммы обработки прерывания
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Основная программа
Start movlw b’01000000′ ;сброс регистра PORTB
movwf PORTB
movlw b’00000111′ ;выключение компараторов
movwf CMCON
bsf STATUS,RP0 ;выбрать 1-й банк
movlw b’00010111′ ;настройка линий ввода\вывода порта B
movwf TRISB ;RB0-RB2, RB4 на вход, остальные на выход
bcf STATUS,RP0 ;выбрать 0-й банк
clrf flag ;очистка регистра флагов
movlw b’00000000′ ;настройка таймера TMR1: предделитель TMR1 1:1,
movwf T1CON ;внутренн источник тактового сигнала
clrf TMR1L ;очистка регистров таймера TMR1
clrf TMR1H
bsf INTCON,PEIE ;разрешение прерываний периферийных модулей
bcf PIR1,TMR1IF ;сброс флага прерывания по переполнению TMR1
bsf STATUS,RP0 ;выбрать 1-й банк
bsf PIE1,TMR1IE ;разрешение прерываний по переполнению TMR1
bcf STATUS,RP0 ;выбрать 0-й банк
call init_lcd ;вызов подпрограммы инициализации драйвера(MAX7219)
call signal_not ;вызоВ подпрограммы вывода знаков тире «- — -» на
;цифровое табло
call start_pul ;вызов подпрограммы запуска измерения start_pul
bsf INTCON,GIE ;глобальное разрешение прерываний
opros btfsc flag,0 ;опрос флага получения длительности импульса (эха)
call vivod ;вызов подпрограммы вывода измеренного значения
;задержки (эха) на цифровое табло
btfsc flag,1 ;опрос флага готовности измерения
call start_pul ;вызов подпрограммы запуска измерения start_pul
goto opros ;переход на метку opros
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
vivod bcf flag,0 ;сброс флага получения времени задержки (эха)
call del ;вызов подпрограммы деления двоичных чисел
movf rezHH,W ;проверка результата деления двоичных чисел
sublw .1 ;если результат меньше числа 400 вызываем
btfss STATUS,C ;подпрограмму (bin2bcd) преобразования двоичного числа
goto viv_1 ;в десятичное
btfss STATUS,Z ;
goto viv_2 ;
movf rezLL,W ;
sublw .144 ;
btfss STATUS,C ;
goto viv_1 ;
viv_2 call bin2bcd ;вызов подпрограммы преобразования двоичного числа
;в десятичное
call send_rast ;вызов подпрограммы вывода десятичного значения
;задержки (эха) на цифровое табло
return ;выход из подпрограммы
viv_1 call signal_not ;вызов подпрограммы вывода знаков тире «- — -» на
;цифровое табло
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
start_pul bcf flag,1 ;сброс флага готовности измерения
bsf trig ;установить в 1 линию ввода/вывода trig
movlw .3 ;пауза 10 мкс
movwf Sec ;
pul_1 decfsz Sec,F ;
goto pul_1 ;
bcf trig ;сбросить линию ввода/вывода trig
movf PORTB,W ;чтение регистра PORTB для устранения несоответствия
bcf INTCON,RBIF ;сброс флага прерывания по изменению уровня сигнала RB4:RB7
bsf INTCON,RBIE ;разрешение прерываний по изменению уровня сигнала RB4:RB7
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
del clrf rezLL ;Подпрограмма деления двухбайтного числа на число 58
clrf rezHH ;(varLH, varLL):58
d1 movlw .58 ;Двухбайтное число предварительно загружается
subwf varLL,F ;в регисты varHH, varLL
btfsc STATUS,C ;Результат деления в регистрах rezLH, rezLL
goto d2 ;деление целочисленное без дробной части
movlw .1 ;
subwf varHH,F ;
btfss STATUS,C ;
return ;выход из подпрограммы
d2 incfsz rezLL,F ;
goto d1 ;
incf rezHH,F ;
goto d1 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
bin2bcd movlw .16 ;Подпрограмма преобразования двоичного числа
movwf ctr ;в десятичное
clrf bcd1 ;Двухбайтное число предварительно загружается
clrf bcd2 ;в регисты rezHH, rezLL
clrf bcd3 ;Результат преобразования:
goto start_1 ;единицы в младшем полубайте bcd3
;десятки в старшем полубайте bcd3
adjdec movlw 0x33 ;сотни в младшем полубайте bcd2
addwf bcd1,F ;тысячи в старшем полубайте bcd2
addwf bcd2,F ;десятки тысяч в младшем полубайте bcd1
addwf bcd3,F ;
;
movlw 0x03 ;
btfss bcd1,3 ;
subwf bcd1,F ;
btfss bcd2,3 ;
subwf bcd2,F ;
btfss bcd3,3 ;
subwf bcd3,F ;
;
movlw 0x30 ;
btfss bcd1,7 ;
subwf bcd1,F ;
btfss bcd2,7 ;
subwf bcd2,F ;
btfss bcd3,7 ;
subwf bcd3,F ;
;
start_1 rlf rezLL,F ;
rlf rezHH,F ;
rlf bcd3,F ;
rlf bcd2,F ;
rlf bcd1,F ;
decfsz ctr,F ;
goto adjdec ;
;
movf bcd3,W ;копирование значения единиц из младшего
andlw b’00001111′ ;полубайта bcd3 в регистр edin
movwf edin ;
swapf bcd3,W ;копирование значения десятков из старшего
andlw b’00001111′ ;полубайта bcd3 в регистр desiat
movwf desiat ;
movf bcd2,W ;копирование значения сотен из младшего
andlw b’00001111′ ;полубайта bcd2 в регистр sotni
movwf sotni ;
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма вывода десятичного значения задержки (эха) на цифровое табло
send_rast movlw 0x01 ;Вывод значения регистра edin на 1-й индикатор
movwf adr_ind ;
movf edin,W ;
movwf dat_ind ;
call send ;
movlw 0x02 ;Вывод значения регистра desiat на 2-й индикатор
movwf adr_ind ;
movf desiat,W ;
movwf dat_ind ;
call send ;
movlw 0x03 ;Вывод значения регистра sotni на 3-й индикатор
movwf adr_ind ;
movf sotni,W ;
movwf dat_ind ;
call send ;
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма вывода символов тире «- — — » на цифровое табло
signal_not movlw 0x04 ;очистка 4-го индикатора
movwf adr_ind ;
movlw 0x0F ;
movwf dat_ind ;
call send ;
movlw 0x03 ;вывод тире на 3-й индикатор
movwf adr_ind ;
movlw 0x0A ;
movwf dat_ind ;
call send ;
movlw 0x02 ;вывод тире на 2-й индикатор
movwf adr_ind ;
movlw 0x0A ;
movwf dat_ind ;
call send ;
movlw 0x01 ;вывод тире на 1-й индикатор
movwf adr_ind ;
movlw 0x0A ;
movwf dat_ind ;
call send ;
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма инициализации драйвера(MAX7219) цифрового табло
init_lcd call pauslcd ;вызов подпрограммы паузы 2 мс
movlw 0x0F ;выключить тестовый режим
movwf adr_ind ;
movlw 0x00 ;
movwf dat_ind ;
call send ;
movlw 0x0C ;включение индикатора
movwf adr_ind ;
movlw 0x01 ;
movwf dat_ind ;
call send ;
movlw 0x0A ;интенсивность 31/32
movwf adr_ind ;
movlw 0x07 ;
movwf dat_ind ;
call send ;
movlw 0x09 ;использовать BCD Code B для всех индикаторов
movwf adr_ind ;
movlw 0xFF ;
movwf dat_ind ;
call send ;
movlw 0x0B ;использовать 4 индикатора
movwf adr_ind ;
movlw 0x03 ;
movwf dat_ind ;
call send ;
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Подпрограмма отправки 2-х байт на драйвер (MAX7219) цифрового табло по пртоколу SPI
send bcf cs ;Сбросить линию выбора драйвера CS
movlw .8 ;Отправка содержимого адресного байта adr_ind
movwf scetbit ;
povtor bcf clk ;
btfsc adr_ind,7 ;
bsf datai ;
btfss adr_ind,7 ;
bcf datai ;
bsf clk ;
rlf adr_ind,F ;
decfsz scetbit,F ;
goto povtor ;
movlw .8 ;Отправка содержимого байта данных dat_ind
movwf scetbit ;
povtr1 bcf clk ;
btfsc dat_ind,7 ;
bsf datai ;
btfss dat_ind,7 ;
bcf datai ;
bsf clk ;
rlf dat_ind,F ;
decfsz scetbit,F ;
goto povtr1 ;
bcf clk ;
bsf cs ;установить в 1 линию выбора драйвера CS
return ;выход из подпрограммы
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
pauslcd movlw .4 ;подпрограмма пауза 2 мс
movwf Sec1 ;
p3 movlw .166 ;
movwf Sec ;
p2 decfsz Sec,F ;
goto p2 ;
decfsz Sec1,F ;
goto p3 ;
return ;выход из подпрограммы
end ;конец всей программы
;
radiolaba.ru