Логический анализатор с подключением к планшету. Доработка логического анализатора из китая. Рекомендуемая периферия для создания логического анализатора на базе микроконтроллера Arduino

Если кто не в курсе - логический анализатор это как очень многоканальный осциллограф с очень большой памятью и очень маленькой чувствительностью (прошу тех кто понимает не пинаться). Служит для съема цифрового сигнала в лог для последующего его анализа.

Ссылка в обзоре на аналогичный анализатор у другого прода, я брал , но сейчас у прода этого товара нет. Выбирал прода по картинкам с внутренностями, это важно.

Итак - китайский клон 16 канального логического анализатора на 100МГц. Версия 2 поддерживает оригинальный софт Saleae Logic последней версии 1.1.15.

В комплекте идет длиннющий юсб шнур, 4 щупа-прищепки и пачка проводов на 16 сигналов и 4 массы (провода отдельные, каждый со своей клеммой, я сразу с одного конца клеммы поснимал и заделал в общую колодку для удобства). Софта в комплекте нет, нужно скачать .


Анализатор построен на МК Cypress CY7C68013A (юсб драйвер, на нем строят 10МГц анализаторы на 8 каналов), плис Xilinx Spartan3 (им видимо буферизируют на 100МГц) и логическом конвертере ALVC164245. Тут очень важно наличие последней МС, поскольку на али анализаторы со входом подключенным к Плиске через простой делитель, что при превышении допустимого напряжения наверняка ее убьет.

Я не очень хочу морочиться с проверкой всех каналов, ограничимся тремя, тем более, что больше щупов у меня нет:)

Первый тестовый стенд - моушн контроллер на 100кГц, анализируем сигналы enable\step\dir на частоте 500кГц и длинне 10млрд семплов.



В лог влезло включение контроллера, подача enable, переключение dir и импульсы step, всего около 20 секунд и еще куча времени оставалось (я даже затрудняюсь сказать сколько точно, полоска прогресса не заполнилась не на деление). Софт анализатора позволяет писать неограниченное кол-во времени, сколько хватит ОЗУ.

Отрезок ускорения.

Ход на полной скорости. Видно, что контроллер генерирует сигнал недостаточно качественно.

Второй стенд собран на ардуине дуе. К сожалению мне никак не удалось выжать с нее больше 10МГц, скетч получился вот такой:
void setup() { pinMode(23, OUTPUT); digitalWrite(23, LOW); } void loop() { /* 300kHz */ //digitalWrite(23, HIGH); //digitalWrite(23, LOW); /* 10MHz */ noInterrupts(); tst: REG_PIOA_ODSR = 0xFFFF; __asm__("nop\n\t"); REG_PIOA_ODSR = 0x0000; goto tst; }

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

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

UPD1!

Удалось захватить 2 канала на 50МГц и 1 на 100МГц



UPD2!

Для работы в сложных цифровых схемах китайский логический анализатор вещь крайне необходимая. Подкупает так же и его небольшая цена и удобное программное обеспечение. И он вполне меня устраивал пока не возникла необходимость одновременно просмотреть работу разных узлов схемы, питающихся от разных источников и не имеющих общей земли. Изначально анализатор имеет 8 не развязанных по питанию каналов с амплитудой импульсов на входе 5 вольт. Данная доработка позволяет сделать входы анализатора гальванически развязанными и работать с импульсами амплитудой от 3-х вольт до 25 вольт. Положение галетных переключателей выбирается в зависимости от размаха входных импульсов. Но расчетно схема сохранит работоспособность до 65 вольт.

В схеме используются высокоскоростные оптроны, рассчитанные для работы в оптоволоконных сетях. Частотные характеристики оптрона выше, чем может пропустить анализатор,так как минимальная длительность импульса которую может зарегистрировать анализатор составляет что то около 42 наносекунд. Ток светодиода оптрона выбран в районе 6-7,5mA. Оптрон допускает повышение тока до 15mA. А такой ток возникнет при входном напряжении 65 вольт при положении галетного переключателя "25v".

Конкретно моя плата содержит 4 гальванически развязанных канала и 4 не развязанных с 5-ти вольтовыми входами. Питание подается с платы анализатора. При этом надо провести некоторую доработку: достать из корпуса плату анализатора, перерезать дорожку идущую к выводу 9 разъема и подать на этот вывод через резистор 10 Ом напряжение с правого вывода LM1117.

Схема и конструкция получились достаточно простыми, а возможностей использования добавилось значительно.
При испытании гальванически развязанных входов, для чистоты эксперимента, входы подключались параллельно. Т.е взаимно соединялись 4 входа IN A,B,C,D и соответственно Gnd A,B,C,D . Переключатели устанавливались в одинаковое положение. Импульсы создавались искусственным дребезгом контактов и внешним источником питания на соответствующее напряжение.

При сборке использовались оптроны 6N137, переключатели МПН-1, в делителях стоят резисторы смд0805, но поместятся и 1206.При впаивании шлейфа для подключения к анализатору частично изменена последовательность, но на плате все подписано.

Вместо переключателей МПН-1 можно использовать любые другие, правда при этом придется корректировать печатную плату или использовать провода. Автор - Дубовицкий Николай.

Vassilis Serasidis

Логический анализатор - это инструмент, который позволит увидеть и проанализировать последовательность логических 0 и 1 в цифровом сигнале. К примеру, можно изучить цифровой сигнал с ИК приемника-демодулятора типа TSOP-1736 , выходные и входные сигналы микросхемы , а также шину I2C (линия тактирования и линия данных) во многих электронных устройствах.

В статье мы рассмотрим конструкцию миниатюрного 4-канального логического анализатора с ЖК дисплеем от мобильного телефона Nokia 5110/3110. Основой конструкции является микроконтроллер , помимо него используются еще несколько дискретных компонентов.

Основные характеристики прибора:

  • 4-канальный логический анализатор;
  • возможность исследования сигналов с частотой до 400 кГц;
  • входное напряжение до +5 В;
  • ЖК дисплей с разрешением 84 × 48 точек;
  • питание от 4 аккумуляторов 1.2 В, максимальное напряжение питания 4.8 В;
  • память: от 3.7 мс для высокоскоростных сигналов до 36 с для низкоскоростных сигналов;
  • кнопки управления;
  • простая конструкция.

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

На Рисунке 1 представлена принципиальная схема прибора. Сразу следует отметить, что прибор питается от 4 аккумуляторов с напряжением 1.2 В каждый.

Внимание!!!

Питание от 4 батареек с напряжением 1.5 В недопустимо, при данной схеме прибора, так как напряжение 6 В может вывести из строя микроконтроллер и ЖК дисплей.

Выключатель S1 предназначен для подачи питания. Подтягивающие резисторы R2-R5 установлены с целью исключения появления ложных данных на цифровых входах прибора из-за влияния электромагнитных полей или при касании пальцами сигнальных щупов. Светодиод LED1 предназначен для индикации наличия сигнала на цифровых входах прибора и, следовательно, начала записи сигналов в память.

В схеме используется ЖК индикатор от мобильного телефона Nokia 3310/5510, он рассчитан на работу при напряжении питания 3.3 В - 5.0 В, однако максимальное напряжение для подсветки дисплея - 3.3 В, поэтому в схеме установленo три последовательно включенных диода (D1-D3) по линии питания подсветки дисплея. Благодаря диодам напряжение снизится до 2.7 В и его вполне будет достаточно для питания подсветки.

Процесс захвата данных и программное обеспечение

Следует отметить, что автором подготовлены две версии прошивки микроконтроллера. Изначально, для версии 1.00 логического анализатора, использовалась интегрированная среда разработки AVR Studio 4.18, но затем автор перекомпилировал исходный код и для AVR Studio 5 - версия 1.01. После перекомпиляции под 5 версию среды разработки и дальнейшего тестирования прибора, было замечено улучшение стабильности захватываемых сигналов.

Запись сигналов ведется во внутренний буфер памяти ОЗУ, который рассчитан на 290 отсчетов. Буфер данных образован 870 байтами (для 1 версии программы микроконтроллера) из которых 2 байта используются для счетчика и 1 байт для информирования о входном канале. В версии 1.01 буфер данных был сокращен до 256×3=768 Байт с целью увеличения скорости захвата данных, т.к. переменная размера буфера является 8-битной, вместо 16-битной, которая использовалась в первой версии ПО.

После подачи питания, микроконтроллер переходит в режим ожидания импульса на любом из 4 входов прибора. По определению входного импульса микроконтроллер начинает подсчет времени до поступления следующего импульса на любом из 4 входов. Длительность выборки хранится в 16-битной переменной «counter». После переполнения этой переменной информация о состоянии 4 входов и значение счетчика сохраняются в буфере и значение его адреса увеличивается на три (2 байта для счетчика и 1 байт - информация о входной линии). Этот процесс повторяется пока микроконтроллер не заполнит весь буфер (870/3=290 выборок или импульсов). Процесс записи сигналов в память микроконтроллера изображен на рисунке 2.

После заполнения буфера, все накопленные данные отображаются на ЖК дисплее в виде осциллограммы. Пользователь может управлять осциллограммой - передвигать влево (кнопка S3) или вправо (кнопка S4), чтобы просмотреть всю сохраненную последовательность импульсов. Если были записаны низкоскоростные сигналы, то пользователь может изменить масштаб в пропорции 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 или 8192 нажатием на кнопку S2.

При программировании микроконтроллера необходимо установить Fuse-биты в соответствии с рисунком.

Вид печатной платы и расположение компонентов

Демонстрация работы прибора

Загрузки

Принципиальная схема, рисунок печатной платы, исходный код и файл для прошивки микроконтроллера (v1.0, AVR Studio 4.18) -

Исходный код и файл для прошивки микроконтроллера (v1.01, AVR Studio 5) -

  • Как я понял, ваш дисплей с "резинкой", установлен он на самодельную платку, т.е. токопроводящая резинка касается дорожек которые вы нарезали на платке. Если так, то учтите - это самое слабое место конструкции... Fuse-биты проверяли (считывали)? Правильно установлены? Я не исключаю и проблему в самом дисплее. Я еще исходники гляну, может там что-то можно настроить/изменить относительно дисплея...
  • Vadzz, да, я это понимаю, самое уязвимое место.. Я нашел какой-то мобильный, с шагом контактов как у моего экрана. Как будет время попробую сделать.. Вопрос еще в том, рабочий ли экран, не спалил ли я его контроллер (если это возможно). А пока заброшу эту идею. Очень сложно достать готовый экран этот и он стоит больше чем это устройство нужно.. Я лучше сделаю такое же устройство, только вывод данных на компьютер через usb. (по учебнику http://eldigi.ru/site/comp/18.php). Все равно мастерю за компьютером и всё через usb делаю.. Либо же друг делает диплом на тему миниатюрный осцилограф usb. Схема на единственном элементе AtTiny и кварц. +вывод данных в программу на компьютере в виде временной диаграммы\линии.. Возьму у него.. ПО я сделаю.. Я эту штуковину начал делать потому что она так красиво и пафосно выглядит со стороны;) А особенно работает.. ну ниче, начну работать с китайскими передатчиками придется ее сделать.. Там уже на импульсы нужно смотреть и анализировать.. А так спасибо за помощь)
  • Хлопцы, зацените) Всё таки не удержался.. Переднюю панельку еще думаю дооформлю.
  • Рад что все получилось и заработало, выглядит норм. Только расскажите по-подробнее в чем была проблема (наверное, все же дисплей не работал), для многих будет полезна ваша информация (если не секрет, конечно). Спасибо.
  • Ну проблема была в дисплее. И то я купил не красный, а синий, по этому еще контакты не сошлись по расположению, и немного в названии разнятся. Подключение (на схеме\синий дисплей): Vcc-Vcc GND-GND Rst-Rst SCE-CE D\C-DC DN-Din SKLK-CLK LED-BL Если будет желание- попробую вставить\запустить свой старый дисплей. Посмотрю, может он сгорел.. а то столько мучился с ним.
  • Небольшой тест прибора, пару багов. 1) При перемотке долго мотаем вперед, потом назад и в какой-то момент оно отказывается двигать назад и заклинивает на каком-то значении. Можно прокрутить еще вперед и опять назад и после этого клинит на другом значении.. Вот фото, хотя тут ничего не видно будет http://s017.radikal.ru/i433/1306/57/cf1dfbd2f106.jpg 2) При перематывании смазывается временная диаграмма http://s60.radikal.ru/i169/1306/33/1c23e0d9815c.jpg http://i066.radikal.ru/1306/9f/c894839ca1fd.jpg 3) При изменении зума перемотка сбрасывается в 0-ю позицию(но не всегда). Нужно пофиксить чтоле.. Думаю можно было бы добавить пару вкусняшек в проект: Сенсорные кнопки (реализуются элементарно, всего три МОМ-ных резистора) Вольтметр (GND постоянно подключен, по этому неплохо было бы на АЦПшнике сделать чтоле ибо каждый раз мультиметр подключать не то, а этот помог бы. Измеряет в пределах до 5в, как раз для цифровухи). Осцилограф (не знаю как, но было бы очень неплохо. Главная проблема думаю с отображением будет). Подключение через USB к ПК. Отображение рвеменной диаграммы в программе- святое. Если делать осцилограф, то в программе будет проще отображать всё.. Выглядеть будет примерно так (моя програма) http://s48.radikal.ru/i119/1306/eb/9c25ff0d3d7b.png Так же можно программой что-то изменять в настройках прибора..
  • К стати, в протеусе данная штуковина неплохо симулируется..
  • Собрал девайс. Включается, показывает. Если без резисторов 33к (и без источников сигнала), то при включении всякие гребенки увидеть можно. С резисторами и источником (TSOP ик и spi-девайс) - все линии ровненькие. Никакой реакции совершенно. Куда рыть-то?
  • Инпуты замыкаются на + а не на землю чтоб показывало. Мне пришлось инвертировать выход TSOP.
  • Индикатор от телефона тоже заработал. У меня сначала не показывал ничего, поставил резисторные делители на входы дисплея от мк и все заработало. 1ком от мк до дисплея и 3,3 ком от дисплея на землю
  • инвертирование не помогает
  • Прошивка с исправленными ошибками и с добавлениями(UART, Частотомер, Редактор пропусков перед измерением, а также ещё к нему программу для компьютера. Analizator.exe Описание: Analizator_PC V2.1 Analizator.exe 4_канальный логический анализатор.DSN Описание: Analizator_proteus http://www.fayloobmennik.net/4274643 Analizator.hex Описание: Analizator_Atmega8 http://www.fayloobmennik.net/4291611 4_канальный логический анализатор Описание: Analizator_shema http://www.fayloobmennik.net/4285824 2й вариант http://radikal.ru/fp/ИСХОДНИКИ ДЛЯ АНАЛИЗАТОРА КОМУ ИНТЕРЕСНО. AnalizatorKSA.zip Не сомневайтесь всё работает так как надо! У вас теперь появится возможность проверить это в симуляторе, а также покопаться в исходнике.Избавляю вас от рутинной работы. Не судите за мои там комментарии, у каждого они свои. К тому же это черновики, а не коммерческий продукт. Моя поставленная цель была достигнута, поэтому черновики так и остались черновиками. Вы можете делать с ними всё , даже вырвать у них сердце. А цель была одна - сделать его удобным, более точным, надёжным. Всё, что я проделал вы можете прочитать в моих 2х программах для РС в разделе "Справка" Для анализа и сравнения полученного результата я выкладываю исходный текст основной измерительной программы Vasilisa Serasidisa. Посмотрите, и сравните сколько тактов тратится на измерение у меня, и у него. И убедитесь, что лучшие программисты это р у с с к и е!!! Добавлю: С тех пор как сконструировал 2 версии анализаторов решил множество проблем связанных с цифровым обменом и по шине CAN и I2C пультов и пр. Вариант на ATmega48 даже предпочтительней со скоростными протоколами. Например, CAN в 140 Кбит анализировал просто на ура! в отличии от не без известного анализатора Digan. Да и сам он величиной с флешку. Всем удачи! Izmerenie.txt ВЫКЛАДЫВАЮ НОВУЮ ВЕРСИЮ (3йвариант) БОЛЕЕ МОЩНОГО АНАЛИЗАТОРА, А ТАКЖЕ ПРЕДЫДУЩУЮ ВЕРСИЮ С ДОБАВЛЕНИЯМИ И ФАЙЛОМ ПРОТЕУСА ССЫЛКА НА АРХИВ http://www.fayloobmennik.net/5569369
  • 1. Кто повторил оригинальный вариант - от Seradis, нет ли серьезных багов, делающих вообще неприменимость девайса - типа всегда пропускается первый байт и т.п.? Выше пишут об "отображение эпюр", но хотелось бы, что они именно были достоверные:). 2. Сергей7 не выкладывает исходник, что не дает оценить его функционал в полной мере. Если изготовить вначале оригинал, то потребуются ли изменения в апаратке для дальнейшего развития девайса по доработке Сергея7?
  • Отправлял вам сообщение и никакой реакции. Дошло ли?
  • наверное, нет. ... :(Спасибо за исходники! счас посмотрю.....
  • Рад помочь!:D
  • Прошивки с добавлениями(UART, Частотомер, Редактор пропусков перед измерением в AnalizatorKSA.zip нет
  • может печатка в lay есть у кого?
  • Посмотрите новый вариант, я выложил. И предыдущий доработанный тоже (с прошивкой, файлом протеуса и дороб.программой).
  • в чём писали и можно полную схему я так и не понял по чём собирать и сколько ины проц пишет в себя для передачи по уарт
15 января 2013 в 13:59

LogicDiscovery - простой логический анализатор

  • DIY или Сделай сам

Довольно часто в домашних электронных поделках возникает необходимость посмотреть тот или иной сигнал, причем достаточно его цифрового представления - что передает МК по I2C, правильно ли настроен ШИМ и т.п. Если на работе есть хороший осциллограф, то покупать его для дома - слишком дорогое удовольствие, особенно, когда необходимость возникает лишь от случая к случаю.
В последнее время появились недорогие (в пределах $50) логические анализаторы, однако меня от их покупки всегда останавливало одна мысль: штука то предельно простая, почему бы не сделать её своими руками из подручных материалов?
В данной статье я расскажу, как сделать простой логический анализатор с минимальными финансовыми затратами - все что нужно это отладочная плата Stm32F4Discovery .

Логический анализатор (далее ЛА) – устройство предназначенное, для записи, просмотра и анализа сигналов в цифровых схемах. Подобно осциллографу, ЛА подключается одним или несколькими щупами к анализируемой схеме, но в отличие от осциллографа фиксирует только два состояния сигнала «0» и «1». Важной функцией ЛА является способность автоматически расшифровывать записанные сигналы, например, разобрать обмен данными по шине I2C или SPI. Также ЛА отличаются бОльшим, по сравнению с осциллографами, количеством анализируемых линий: от 8 в простых анализаторах до сотен в промышленных образцах.
Описываемый здесь проект - LogicDiscovery - это SUMP -совместимый логический анализатор, выполненный в формате USB-приставки к ПК. Он обладает довольно скромными характеристиками: 20MHz, 16 каналов, 24кБ памяти. Однако, этого достаточно для весьма большого круга задач: анализ линий UART, I2C, SPI (в пределах нескольких мегагерц), параллельных шин, измерение временных характеристик сигналов и т.п.

Приступим

Итак, все, что нам понадобится это:
  • Отладочная плата Stm32F4Discovery . От 500 рублей в московской рознице, а может она уже лежит в ваших закромах? Подойдет и любая другая плата на STM32F4 или STM32F2, но тогда придется подправить исходники.
  • Несколько проводов, для подключения к анализируемой схеме.
  • Прошивка, готовая к употреблению лежит на Google.Code . Там же находятся исходники.
  • Кроме того нужен клиент для ПК, рекомендую OLS .
Клиент написан на Java, поэтому полученное решение не зависит от ОС. Теоретически вы можете использовать любой SUMP-совместимый клиент, однако ниже я буду описывать работу именно с этой программой.
Stm32F4Discovery питается от порта mini-USB, через который она и прошивается. Для использования функций ЛА плата подключается к ПК через порт micro-USB. Чтобы запитать плату от этого же порта соединяем перемычкой пины PA9 и 5V . PA9 подключен напрямую к Vbus порта micro-USB, а 5V это вход стабилизатора формирующего питание для платы. Для проверки работы соедините порты PA2 и PD0 . На PA2 формируется тестовый сигнал, а PD0 это первый вход ЛА.

Плата опознается ПК как COM-порт, для Linux драйвера стандартные и должны уже быть в ядре, для Win драйвера скачиваются с сайта ST. После того как плата опозналась можно запускать клиент и приступать к работе.
Но сначала ложка дёгтя.

Ограничения

В проекте используется открытый протокол SUMP . Данный протокол изначально разрабатывался для ЛА на базе ПЛИС, и поскольку в части записи входных сигналов и анализа потока данных микроконтроллеры по-прежнему им уступают, нам будут доступны не все функции реализованные в клиенте:
  • Максимальная частота записи – 20МГц, в оригинале до 200МГц
  • RLE-сжатие и фильтрация шумов не поддерживаются.
  • Нельзя выбрать произвольные группы каналов, только первую (8 каналов), либо первую + вторую (16 каналов).
  • Триггеры работают не по значению, а по фронту (впрочем, на мой взгляд, это уже достоинство).
  • Нет поддержки расширенных (Complex) триггеров.
Эти ограничения следует иметь ввиду при настройке клиента. Тот ничего не знает об этих ограничениях и позволит выбрать любые настройки. Полученный результат в этом случае будет некорректным.

Пользуемся

Запускаем клиент через файл run.bat или run.sh, в зависимости от используемой ОС. О функциях клиента можно почитать на его страничке, здесь я опишу процесс получения первых сэмплов и те настройки, которые попадают под ограничения.

В меню «Capture» , выбирая пункт «Begin capture» , открываем окно настроек записи. На первой странице в поле ««Analyzer port» выбираем порт, на котором сидит наш ЛА, больше ничего менять не нужно. Кнопкой ««Show device metadata» можно проверить наличие связи:

На второй странице указываем параметры захвата. Первые два пункта не трогаем,
«Sampling rate» не выше 20МГц (если указать больше – плата все равно использует 20МГц, но клиент будет думать, что используется указанное значение, в общем, ерунда получится).
«Channel groups» : 0 – используем одну группу каналов, это линии PD0-PD7, либо 0 и 1 – используем две группы каналов - линии PD0-PD15.
«Recording size» : для одной группы каналов – любое значение, для двух групп – не более 12kB (клиент предупредит, если в данном поле выбрано неверное значение).
Чекбоксы на данной странице не трогаем, они не поддерживаются:

Страница «Triggers» - самое интересное. Первый флажок ставим, чтобы просто включить триггеры.
«Before/After ratio» позволяет указать, в процентном соотношении, сколько данных сохранить до срабатывания буфера. После нажатия «Capture» ЛА сразу начинает запись данных, складывая их в циклический буфер, а по срабатыванию триггера отсчитывает указанный в поле After процент времени и отправляет данные на ПК.
«Type» - только «Simple», «Complex» - не поддерживается.
«Mode» - только «Parallel».
«Mask» - это те линии, на которых триггер будет ожидать перепад сигнала, поставте флаг в нулевой позиции для срабатывания по линии PD0
«Value» - фронт сигнала, по которому будет происходить срабатывание триггера. Флажок установлен – передний фронт. Флажок снят – задний:

Для проверки работы соедините порты PD0 и PA2 (на данном порту выводится тестовый сигнал UART) перемычкой.

Вот и все, нажимаем «Capture» и смотрим на полученный сигнал (Ctrl+F - обзорный масштаб):

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

Техника безопасности

Помните: вы подключаетесь напрямую к портам микроконтроллера! Никакой защиты, кроме встроенных в МК диодов на плате нет. Поэтому сначала удостоверьтесь что, изучаемый сигнал имеет максимальное напряжение 3.3В, в крайнем случае 5В, но тогда желательно добавить между источником сигнала и ЛА защитный резистор.

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

Ардуино – уникальный микроконтроллер, позволяющий вам создать любое устройство, ограниченное лишь фантазией инженера. Сегодня мы поговорим об одном из таких проектов и разберём антенный анализатор на Ардуино, а также все нюансы, с которыми вам придётся столкнуться при его пайке и программировании.

На самом деле анализатор спектра на Ардуино – достаточно простой проект, но идеально подойдёт новичкам и тем, кто хочет добавить данное устройство к себе в инструментарий. Давайте разберём, что такое логический анализатор на Аrduino, и какие подводные камни вас ожидают при его проектировке и пайке.

Схема логического анализатора на базе МК Arduino

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

Иными словами, каждые 5 вольт подаваемые на устройство – это единичка, отсутствие таковых – это ноль. Такой двоичный код используется при кодировке данных и во многих устройствах, в том числе на основе Ардуино. Читаться начинает, как правило, с единицы. А чтобы проверить свой проект с двоичной кодировкой, вам и пригодится логический анализатор.

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

  1. 4 канала для логического анализа поступающих сигналов.
  2. Вариативность частоты сигналов вплоть до 400 кГц, такой промежуток охватит большую часть современных приборов, кроме специализированных.
  3. Напряжение на входе должно составлять до +5 Вольт, как уже описывалось, это стандарт, принимаемый за единицу (наличие сигнала).
  4. LED дисплей для отображения информации. Особенно изощрённые программисты могут купить пару светодиодов и выстроить собственный дисплей нужной им диагонали, но для всех остальных – написание ПО под такое устройство будет слишком трудоёмким, и окажется лишним шагом. Поэтому здесь мы рассмотрим вариант устройства именно с ЖК дисплеем.
  5. 4 аккумулятора для питания, на 1.2 В при максимальном напряжении в 4.8 Вольт.
  6. Оперативная память. Желательно взять две разновидности – скоростную (3.6мс на сигнал) и низкоскоростную (36 с), такое решение позволит охватить весь диапазон сигналов.
  7. Панель управления или пара кнопок.
  8. Любая оболочка под крепление конструкции. Можно распечатать на 3-Д принтере, можно взять ненужный пластиковый коробок или обойтись вовсе без корпуса. Здесь мы не будем давать советов, устройство работает, что в оболочке, что без, выбор остаётся за вами.

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

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

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

Светодиод вы можете взять по своему желанию, он необходим для индикации наличия цифрового сигнала, и вполне заменяется ПО под ЖК дисплей. Такое решение удобно лишь в качестве показателя записи цифровых сигналов в память, но вы, в любом случае, будете активировать прибор вручную, так что подобная индикация, при необходимости, может быть убрана.

Рекомендуемая периферия для создания логического анализатора на базе микроконтроллера Arduino

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

  1. Сам микроконтроллер Ардуино. Не имеет разницы, какой вы подберёте, это лишь повлияет на конечный размер устройства. ПО под любую версию выглядит одинаково. На фото выше был использована плата .
  2. ЖК дисплей. Если у вас имеется старый кнопочный телефон, можете снять с него, и устроить «безотходное» производство.
  3. Резисторы различной ёмкости.
  4. Датчик тока.
  5. 4 аккумулятора.
  6. Светодиод или парочка.
  7. Карта памяти, но это опционально.

Помимо этого, вам, естественно, потребуется паяльник, припой и прочие принадлежности. Лучше заранее найти место, где вы будете всё это собирать. А если работаете с паяльником впервые, изучите правила пожарной безопасности и особенности его эксплуатации, чтобы по 10 раз не перепаивать каждую деталь.

Программирование МК Arduino при реализации проекта «логический анализатор»

Благодаря популярности Ардуино существуют уже готовые библиотеки и функции для логических анализаторов на этом МК. Вам остаётся лишь подобрать подходящую и переписать программный код под своё устройство. Ведь платы, датчики и прочие вводные у всех различаются, и чтобы ваше устройство работало без проблем, придётся подогнать чужой код под свои запросы. Если же вы не хотите лишний раз заморачиваться и у вас есть опыт программирования на С++, можете воспользоваться любой полюбившейся средой.

Код для схемы на фото выше может быть таким:

/*********************************** 128 by 64 LCD Logic Analyzer 6 channel and 3Mb/s By Bob Davis Uses Universal 8bit Graphics Library, http://code.google.com/p/u8glib/ Copyright (c) 2012, [email protected] All rights reserved. ********************************************/ #include "U8glib.h" // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16 //U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16); // **** NOTE **** I Moved the three control pins !!! U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 1, 2, 3); int Sample; int Input=0; int OldInput=0; int xpos=0; void u8g_prepare(void) { u8g.setFont(u8g_font_6x10); u8g.setFontRefHeightExtendedText(); u8g.setDefaultForegroundColor(); u8g.setFontPosTop(); } void DrawMarkers(void) { u8g.drawFrame (0,0,128,64); u8g.drawPixel (20,1); u8g.drawPixel (40,1); u8g.drawPixel (60,1); u8g.drawPixel (80,1); u8g.drawPixel (100,1); u8g.drawPixel (20,62); u8g.drawPixel (40,62); u8g.drawPixel (60,62); u8g.drawPixel (80,62); u8g.drawPixel (100,62); } void draw(void) { u8g_prepare(); DrawMarkers(); // wait for a trigger of a positive going input Input=digitalRead(A0); while (Input != 1){ Input=digitalRead(A0); } // collect the analog data into an array // No loop is about 50% faster! Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; Sample=PINC; // display the collected analog data from array for(int xpos=0; xpos<128; xpos++) { u8g.drawLine (xpos, ((Sample&B00000001)*4)+4, xpos, ((Sample&B00000001)*4)+4); u8g.drawLine (xpos, ((Sample&B00000010)*2)+14, xpos, ((Sample&B00000010)*2)+14); u8g.drawLine (xpos, ((Sample&B00000100)*1)+24, xpos, ((Sample&B00000100)*1)+24); u8g.drawLine (xpos, ((Sample&B00001000)/2)+34, xpos, ((Sample&B00001000)/2)+34); u8g.drawLine (xpos, ((Sample&B00010000)/4)+44, xpos, ((Sample&B00010000)/4)+44); u8g.drawLine (xpos, ((Sample&B00100000)/8)+54, xpos, ((Sample&B00100000)/8)+54); } } void setup(void) { pinMode(A0, INPUT); pinMode(A1, INPUT); pinMode(A2, INPUT); pinMode(A3, INPUT); pinMode(A4, INPUT); pinMode(A5, INPUT); // assign default color value if (u8g.getMode() == U8G_MODE_R3G3B2) u8g.setColorIndex(255); // RGB=white else if (u8g.getMode() == U8G_MODE_GRAY2BIT) u8g.setColorIndex(3); // max intensity else if (u8g.getMode() == U8G_MODE_BW) u8g.setColorIndex(1); // pixel on, black } void loop(void) { // picture loop // u8g.firstPage(); do { draw(); } while(u8g.nextPage()); // rebuild the picture after some delay delay(100); }

Не забудьте скачать библиотеки для работы с Ардуино. А также учитывать, что вывод идёт на ЖК экран. По окончанию написания софта просто подгрузите его на плату с помощью специального переходника под usb.

Может случиться так, что из-за особенностей отображения информации на ЖК дисплее, вам не хватит постоянной памяти устройства. В таком случае имеет смысл докупить флешку и прикрепить её к системе. Благо делается это достаточно просто, а всё, что вам потребуется – специальный переходник под ваш форм-фактор физического накопителя.