Схема универсального генератора частот

DevBoy: делаем генератор сигналов

В прошлых статьях я рассказывал про свой проект и про его программную часть. В этой статье я расскажу как сделать простенький генератор сигналов на 4 канала — два аналоговых канала и два PWM канала.

Аналоговые каналы

Микроконтроллер STM32F415RG имеет в своем составе 12-тибитный DAC (digital-to-analog) преобразователь на два независимых канала, что позволяет генерировать разные сигналы. Можно напрямую загружать данные в регистры преобразователя, но для генерации сигналов это не очень подходит. Лучшее решение — использовать массив, в который генерировать одну волну сигнала, а затем запускать DAC с триггером от таймера и DMA. Изменяя частоту таймера можно изменять частоту генерируемого сигнала.

«Классические» формы волны включают: синусоидальная, меандр, треугольная и пилообразная волны.

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

DAC в данном микроконтроллере имеет ограничение: типичное settling time (время от загрузки нового значения в DAC и появлением его на выходе) составляет 3 ms. Но не все так однозначно — данное время является максимальным, т.е. изменение от минимума до максимума и наоборот. При попытке вывести меандр эти заваленные фронты очень хорошо видно:

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

Генерация на 1 KHz (90% амплитуда):

Генерация на 10 KHz (90% амплитуда):

Генерация на 100 KHz (90% амплитуда):

Уже видны ступеньки — потому что загрузку новых данных в DAC осуществляется с частотой в 4 МГц.

Кроме того, задний фронт пилообразного сигнала завален и снизу сигнал не доходит до того значения до которого должен. Это происходит потому, что сигнал не успевает достич заданного низкого уровня, а ПО загружает уже новые значения

Генерация на 200 KHz (90% амплитуда):

Тут уже видно как все волны превратились в треугольник.

Цифровые каналы

С цифровыми каналами все намного проще — практически в любом микроконтроллере есть таймеры позволяющие вывести PWM сигнал на выводы микроконтроллера. Использовать лучше всего 32-х битный таймер — в таком случае не нужно пересчитывать преддетилель таймера, достаточно в один регистр загружать период, а в другой регистр загружать требуемую скважность.

User Interface

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

Управление было решено делать на энкодерах: левый отвечает за частоту и текущий выбранный канал (изменяется при нажатии на кнопку), правый отвечает за амплитуду/скважность и форму волны (изменяется при нажатии на кнопку).

Кроме того, реализована поддержка сенсорного экрана — при нажатии на неактивный канал он становится активным, при нажатии на активный канал меняется форма волны.

Конечно же используется DevCore для осуществления всего этого. Код инициализации пользовательского интерфейса и обновления данных на экране выглядит так:

Интересно реализована обработка нажатия кнопки (представляет собой прямоугольник поверх которого рисуются остальные элементы). Если вы смотрели код, то должны были заметить такую штуку: ch_dsc[i].box.SetCallback (&Callback, this, nullptr, i); вызываемую в цикле. Это задание функции обратного вызова, которая будет вызываться при нажатии на кнопку. В функцию передаются: адрес статической функции статической функции класса, указатель this, и два пользовательских параметра, которые будут переданы в функцию обратного вызова — указатель (не используется в данном случае — передается nullptr) и число (передается номер канала).

Еще с университетской скамьи я помню постулат: «Статические функции не имеют доступа к не статическим членам класса«. Так вот это не соответствует действительности. Поскольку статическая функция является членом класса, то она имеет доступ ко всем членам класса, если имеет ссылку/указатель на этот класс. Теперь взглянем на функцию обратного вызова:

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

Кстати, вызов этой функции происходит в другой задаче (отрисовки экрана), так что внутри этой функции надо позаботится о синхронизации. В этом простеньком проекте «пары вечеров» я этого не сделал, потому что в данном конкретном случае это не существенно.

Исходный код генератора загружен на GitHub: https://github.com/nickshl/WaveformGenerator
DevCore теперь выделена в отдельный репозиторий и включена как субмодуль.

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

Универсальный генератор на TL494 (прямоугольник и пила)

Генератор предназначен для лабораторных исследований при разработке и наладке самых различных электронных устройств и устройств автоматики.

Универсальным генератор делают его способность работы в широком диапазоне питающих напряжений (7. 41В), высокая нагрузочная способность (максимальный выходной ток 250. 500мА), стабильная работа на частотах от десятых долей герца до нескольких десятков килогерц, обусловленные свойствами микросхемы TL494, на которой, собственно, и построен генератор.


А вот и действующий макет генератора

Кроме того, амплитуда выходных импульсов может быть практически равна значению питающего напряжения микросхемы, т.е., вплоть до предельного значения напряжения питания этой микросхемы +41В (не рекомендуется, однако, в практических конструкциях использование граничного значения напряжения питания, некоторые экземпляры микросхем не работают нормально с напряжением свыше 35В).
Диапазон регулировки длительности импульса / скважности: 0-50% / 0-100%.
Уход частоты в диапазоне питающих напряжений практически незаметен, т.к. задающий генератор TL494 и ее аналогов запитан от встроенного источника образцового напряжения.

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

Представленная здесь схема генератора имеет два «грубо» регулируемых выхода для подключения не развязанного гальванически испытуемого устройства или компонента (реле, затворы мощных полевых и IGBT транзисторов, входов устройств логики с различными входными уровнями, ламп, светодиодов, трансформаторов); аттенюатор с плавной регулировкой выходных уровней для каких угодно малосигнальных устройств.

Регулировка выходных уровней по всем выходам — раздельная, что расширяет возможности генератора. Так, например, возможна одновременная проверка какого-либо устройства с различными входными уровнями (ТТЛ/КМОП и т.п.).
«Грубая» регулировка производится регуляторами напряжения на микросхемах DA1, DA2 (от 8В и выше в зависимости от напряжения питания), плавная — переменными резисторами R12, 17.

Регулировка частоты осуществляется переключателем S1 (грубо) и резистором R1 (плавно), скважности — резистором R5.
Переключатель SA1 изменяет режимы работы генератора с синфазного (однотактный) на противофазный (двухтактный).

Читайте также  Вся схема трансмиссии ваз 2107

Резистором R4 подбирается перекрываемый диапазон частот. При необходимости, если требуется более точное перекрытие ко каждому из поддиапазонов, следует применить в качестве S1 двунаправленный переключатель с набором подобранных резисторов (R4a-R4e) для каждого из поддиапазонов.
Т.к. регулировочные параметры экземпляров микросхем TL494 и их многих аналогов могут быть различными, то диапазон регулировки скважности при необходимости можно подобрать резисторами R2, R7.
То же касается и регуляторов напряжения. Они могут быть собраны на произвольной элементной базе по схеме простейшего последовательного регулируемого параметрического стабилизатора, способного обеспечить ток в нагрузке от 300мА от источника напряжения 15-35В.

Что же касается регуляторов, собранных на интегральных стабилизаторах: резисторы R3, R6, R8, R9 так же подбираются в зависимости от необходимого диапазона регулировки выходных уровней и имеющегося источника напряжения.
Конденсаторы С1-С5 времязадающей цепи выбираются под необходимый частотный диапазон и емкость их может быть от 10 микрофарад для инфранизкого поддиапазона до 1000 пикофарад — для наиболее высокочастотного.

Схема аттенюатора так же непринципиальна: выбирается и рассчитывается под конкретные нужды, а может и вовсе отсутствовать, если необходимость в аттенюаторе не испытывается.
Для упрощения можно объединить выводы 8, 11, 12 микросхемы DA3 и грубую регулировку выходных уровней производить изменением общего питающего напряжения, либо отказаться от грубой регулировки вовсе, ограничившись переменными резисторами на выходе генератора (при этом нагрузочная способность генератора снизится).
В случае отсутствия нужды в мощных выходах, повторители на транзисторах VT1, 2 можно исключить.

TL494 является ШИМ-контроллером и применяется уже в течении долгого времени в различных моделях компьютерных БП. Ее аналогами являются микросхемы KA7500 и отечественный клон КР1114ЕУ4.

Самодельный ВЧ генератор с одной шкалой

Схема ВЧ генератора 0,4 - 30 MHzПредставленная ниже, схема компактного ВЧ генератора покрывает весь диапазон частот от 0,4 до 30 MHz в одну шкалу.

Выход 50 Ом, напряжение 300mV по всему диапазону частот.

Большинство генераторов сигналов используют несколько диапазонов для того, чтобы покрыть весь спектр частот. Схема этого генератора немного отличается, он настраивает весь ВЧ диапазон от 400 кГц до более 30 МГц в одном диапазоне. Он был сконструирован для того, чтобы испытать входные части приемника и фильтры HF, должен быть компактен.

Уровень выхода генератора около 300mV 50 Ом также позволяет ему быть использованным как временный генератор для испытания смесительного диода.

Описание схемы генератора

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

Это показано на схеме, ниже:

Схема ВЧ генератора 0,4 - 30 MHz

Генератор, контролируемый напряжением тока (VCO) работает от 48 MHz до 85 MHz. Выход VCO (100-150mVpp 50 Ом) смешан с выходом кварцевого генератора 48 MHz в смесителе диода для того, чтобы дать необходимый выход частоты.

С помощью варикапа (varicap) происходит перестройка частоты по всему диапазон. Устройство, которое я использовал взято из старого тюнера видеомагнитофона. Другие варикапы широкого диапазона, такие как Motorola MV104 или Philips BB911, также будут хорошо работать.

48 МГц кварцевый генератор является типичным, его можно найти в старом принтере, видеокарте и т.п. Они генерируют сигнал прямоугольных TTL-уровня (5 В). Я нашел два пластиковых осциллятора 48 МГц в старом принтере Epson.

Выход кварцевого генератора, который я использовал, не мог напрямую управлять диодным смесителем, но комбинация серии C5 и R3, керамический конденсатор 1000pF и резистор 100 Ом, работала хорошо. Выход прямоугольной волны также идеален для смесителей диода.

Использование генератора 48 МГц, в результате чего ГУН диапазона, во многом зависит от наличия соответствующей части. Если Вы хотите заменить детали и изменить конструкцию в соответствии с требованиями, частота выхода должна быть достаточно высокой, чтобы обеспечить требуемый диапазон 30 МГц в пределах одного диапазона. Маловероятно, что какой-либо более низкий частотный диапазон будет успешным.

Кроме того, кварцевый генератор, который устанавливает нижнюю частотную границу диапазона должен быть достаточно далеко от верхней выходной частоты 30 МГц, чтобы простой 3-х полюсный фильтр нижних частот мог фильтровать любой остаточный сигнал генератора 48 МГц, а также суммарный компонент выхода смесителя. Данная схема генератора выдает до 35 МГц с выходом около 3 дБ.

SRA-1 двойной сбалансированный микшер (дБм) M1. Здесь отлично будут работать различные варианты диодного типа, в том числе из диодов 1N4148 и пары ферритовых колец.

Желаемый (разностный) выход фильтруется с помощью 3-полюсного эллиптического фильтра.

Отфильтрованный выходной сигнал усиливается на 20 дБ ERA-5 — монолитный интегральный усилитель, чтобы дать выходе уровень сигнала 300 – 400 мВ на 50 Ом. Я использовал версию усилителя ERA-5 для поверхностного монтажа.

Питание схемы 12В 100mA.

Вид внутри

Детали припаяны навесным монтажом.

Корпус спаян из жестяной банки, используемой для формирования стенок коробки.

Схема ВЧ генератора 0,4 - 30 MHz

Настройка генератора

Ручная настройка в широком диапазоне спектра частот требует многовиткового прецизионного переменного проволочного резистора.

Чтобы добавить ручку управления, я использовал части потенциометра регулировки громкости AM/FM-радио. Большинство из этих потенциометров громкости, похожи, имеют тонкую ручку с регулировкой по краю, которая навинчивается крошечным винтом на латунный стержень.

Монтаж

Собирается схема непосредственно на небольшом куске фольгированного текстолита всего за несколько часов. Генератор 48 MHz (от Epson SG-615) был установлен на плате вверх ногами. Ферритовые кольца используются в качестве высокочастотных дросселей для питания на каждом этапе схемы.

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

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

Моточные данные катушек

L1 — 8 витков провода 24SWG намотанной на 5 мм каркасе с ферритовым стержнем для подсторйки..
L2 — 8 витков провода 28SWG намотанном на тороиде T25-10
L3 — 7 витков провода 28SWG намотанном на тороиде T25-10
T1 — 10 витков в два провода 28SWG намотанном на тороиде T25-10

Заключение

Генератор не сложен и быстр для построения. Схема использует не большое количество доступных деталей. Многие компоненты могут быть заменены. Чтобы проверить это, я построил другую версию, используя LM375 IC в качестве VCO (это устаревший чип, похожий на MC1648 Motorola). Самодельный смеситель, сделанный с диодами 1N4148 и дискретный широкополосный усилитель 20 dB. Всё это дало аналогичные результаты.

Схема ВЧ генератора 0,4 - 30 MHz

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

Автор: ZL2PD — Single Span HF Test Oscillator

ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ

П О П У Л Я Р Н О Е:

  • Три схемы индикаторов бортовой сети автомобиля
Читайте также  Схемы генераторов автомобилей тойота

Три схемы индикаторов бортовой сети автомобиляДалеко не во всех автомобилях установлен контроль за напряжением бортовой сети. Раньше в отечественных автомобилях стояла обычная лампочка в щитке, которая сигнализировала о зарядке АКБ. Это, конечно мало информации. Было бы не лишним установить дополнительный цифровой вольтметр или хотя бы индикатор из нескольких разноцветных светодиодов, показывающий основные пороги допустимых напряжений. Ниже приведены три простые схемы светодиодных индикаторов напряжения авто.

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

Точечная сварка своими руками из . микроволновки!Ранее мы писали: что можно сделать из старой микроволновой печи. Сегодня давайте подробно рассмотрим, как сделать аппарат для точечной сварки своими руками из высоковольтного трансформатора или МОТ (Microwave Oven Tranformer – трансформатор микроволновой печи) от старой не годной микроволновки. Конечно, при условии, что ВВ трансформатор исправен (хотя бы его первичная обмотка), а неисправно что-то другое: магнетрон, шлейф, плата управления и т.д.

Для мастера бывает необходимость в точечной сварке. Данная точечная сварка даёт ток до 800 Ампер, чего вполне достаточно для сварки листового металла до 1,5мм.

Функциональный Генератор Сигналов

После сборки цифрового осциллографа пришел к выводу, что теперь не мешало бы обзавестись функциональным генератором. Изучил множество различных проектов, в основном на интегральных микросхемах: ICL8038, MAX038, XR2206. Но захотелось создать что-то другое, сочетающее в себе несколько функций, хотя каждый проект выглядел чем-то полезным на практике. Случайно наткнулся на старый зарубежный проект и решил сделать этот простой генератор на двух двойных операционных усилителях и других радиоэлементах.

Схема функционального генератора частот

Функциональный Генератор Сигналов

Представленное устройство генерирует частоты в диапазоне 0,2 — 20000 Гц. В будущем планируется расширить диапазон примерно до 50 кГц применив лучшие операционные усилители. Частоты переключаются в 6 диапазонах, в каждом из которых есть возможность плавного регулирования частоты. Можно генерировать сигналы в форме синусоиды, прямоугольника, треугольника или пилы. Импульсное заполнение (скважность) может иметь фиксированное значение 50% или плавно регулироваться в диапазоне 5-95%. Кроме того, на выходе генератора можно настроить постоянную составляющую, что позволяет генерировать положительные и отрицательные импульсы. Выходная амплитуда находится в диапазоне 0-5 В для прямоугольника и треугольника и 0-3,5 В для синуса. Кроме того, делитель x0.1 размещен на выходе генератора.

Функциональный Генератор Сигналов

Схема была помещен в пластиковый корпус. Лицевая панель напечатана на мелованной бумаге, наклеенной на двухстороннюю ленту, а сверху покрыта самоклейкой. Трансформатор 2×12 В дополнительно имеет обмотку 3,5 В, от которой питается светодиод на передней панели.

Функциональный Генератор Сигналов

Общие расходы на сборку незначительны и составляют около 1000 рублей. Пришлось купить только корпус, 6-позиционный переключатель, ручки и разъемы BNC.

Функциональный Генератор Сигналов

Большим преимуществом этого функционального генератора является его простота и низкая стоимость сборки, а также относительно низкий уровень искажений — 0,6%.

Функциональный Генератор Сигналов

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

Амплитуда постоянна во всем диапазоне частот. Выходное сопротивление генератора составляет около 600 Ом, поэтому он может быть нагружен практически любым сопротивлением от почти нуля до бесконечности. Это типичное значение для большинства устройств такого типа. В настоящий момент там работают дешевые ОУ TL072, параметры OPA2604 лучше, а поставить AD817 — просто идеально.

НАЖМИТЕ ТУТ И ОТКРОЙТЕ КОММЕНТАРИИ

Если автор ставил своей целью повторение конструкции другими людьми, то неплохо было бы приложить к статье чертёж платы (хотя бы в JPG) и схему расположения элементов с обозначениями оных. А так — не очень увлекательное разгадывание кроссворда и пляски с бубном вокруг фото печатной платы.

Ну да, если бережешь права, зачем вообще выкладывал? Сам себе порадовался, и ладно. Пока!

Генератор сигналов: функциональный генератор своими руками

Собираем генератор сигналов – функциональный генератор. Часть 1.

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

Почему данный прибор называется функциональный генератор, а не просто генератор (генератор низкой частоты, генератор высокой частоты). Прибор, который мы изготовим, генерирует на своих выходах сразу три различных сигнала: синусоидальный, прямоугольный и пилообразный. За основу конструкции мы возьмем схему С. Андреева, которая опубликована на сайте в разделе: Схемы – Генераторы.

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

Если у вас возникнут проблемы с покупкой данной микросхемы в обычных радиомагазинах, то придется воспользоваться интернет-магазинами. Для поиска нужной радиодетали на страницах интернет-магазинов, я рекомендую вам воспользоваться специальным сайтом, предназначенным для поиска нужных радиокомпонентов – efind.ru. При этом, прежде чем заказать деталь, надо внимательно изучить цены, порядок оплаты и доставки, срок доставки, почитать отзывы на данный магазин. Вот как например разнятся цены в разных интернет-магазинах:

Конечно, цена изделия зависит и от производителя, и от возможностей магазина, и от многих других факторов, но в данном случае мы преследуем одну цель: найти необходимую радиодеталь, которая была бы приемлемого качества и главное – по карману. Вы наверное заметили, что цена микросхемы сильно зависит от ее маркировки (АС, ВС и СС). Чем дешевле микросхема, тем хуже ее характеристики. Я бы порекомендовал остановить свой выбор на микросхеме “ВС”. У нее характеристики не очень сильно отличаются от “АС”, но намного лучше чем у “СС”. Но в принципе, конечно, пойдет и эта микросхема.

Собираем простой функциональный генератор для лаборатории начинающего радиолюбителя

Доброго вам дня уважаемые радиолюбители! Сегодня мы продолжим собирать наш функциональный генератор. Чтобы вам не скакать по страницам сайта, еще раз выкладываю принципиальную схему функционального генератора, сборкой которого мы и занимаемся:

А так же выкладываю даташит (техническое описание) микросхем ICL8038 и КР140УД806:

Даташит ICL8038 (151.5 KiB, 6,813 hits)

Даташит КР140УД608 (130.7 KiB, 3,981 hits)

Я уже собрал необходимые детали для сборки генератора (часть у меня была – постоянные сопротивления и полярные конденсаторы, остальные куплены в магазине радиодеталей):

Читайте также  Кинематическая схема трансмиссии зил 131

Самыми дорогими деталями оказались микросхема ICL8038 – 145 рублей и переключатели на 5 и 3 положения – 150 рублей. В общей сложности на эту схему придется потратить около 500 рублей. Как видно на фотографии, переключатель на пять положений – двухсекционный (односекционного не было), но это не страшно, лучше больше, чем меньше, тем более, что вторая секция нам возможно пригодится. Кстати, эти переключатели абсолютно одинаковые, а количество положений определяется специальным стопором, который можно установить на нужное число положений самому. На фотографии у меня два выходных разъема, хотя по идее их должно быть три: общий, 1:1 и 1:10 . Но можно поставить небольшой переключатель (один выход, два входа) и коммутировать нужный выход на один разъем. Кроме того хочу обратить внимание на постоянный резистор R6. Номинала в 7,72 МОм в линейке мегаомных сопротивлений нет, ближайший номинал – 7,5 МОм. Для того, чтобы получить нужный номинал придется использовать второй резистор на 220 кОм, соединив их последовательно.

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

Во второй части занятия мы с вами изучим очередной способ изготовления печатных плат – методом ЛУТ (лазерно-утюжный). Саму плату мы будем создавать в популярной радиолюбительской программе для создания печатных платSPRINT LAYOUT.

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: