Самодельный 2х канальный логический анализатор. Доработка логического анализатора из китая

22.02.2024

0

Vassilis Serasidis Логический анализатор - это инструмент, который позволит увидеть и проанализировать последовательность логических 0 и 1 в цифровом сигнале. К примеру, можно изучить цифровой сигнал с ИК приемника-демодулятора типа TSOP-1736, выходные и входные сигналы микросхемы MAX232, а также шину I2C (линия тактирования и линия данных) во многих электронных устройствах. В статье мы рассмотрим конструкцию миниатюрного 4-канального логического анализатора с ЖК дисплеем от мобильного телефона Nokia 5110/3110. Основой конструкции является микроконтроллер Atmel ATmega8, помимо него используются еще несколько дискретных компонентов. Основные характеристики прибора: 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 три последовательно включенных диода 1N4007 (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-биты в соответствии с рисунком. Вид печатной платы и расположение компонентов

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В, но тогда желательно добавить между источником сигнала и ЛА защитный резистор.

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

В этой статье пойдет речь о логическом анализаторе — незаменимом инструменте для реверс-инжиниринга, да и вообще полезном в хозяйстве приборе. Для тех кто ни разу с подобным прибором не сталкивался скажу, что логический анализатор это что-то типа осциллографа, но у него много каналов и он может различать только два состояния сигнала: логический ноль и единицу. Используется оно в основном чтоб присосаться к какой-нибудь шине данных и считывать с неё то, что по ней передается, в компьютер. Ну а на компьютере работает специальный софт который эти данные отображает в дружественном для пользователя виде. Если бы программа просто показывала нам набор единиц и нулей растянутых во времени, то толку от этого было бы мало ибо анализ таких данных очень сложен и может взорвать моск даже опытному инженеру. Поэтому, все нормальные программы умеют декодировать протоколы типа 1-Wire, i2c, SPI, UART и так далее. Собранный мной анализатор поддерживает две популярные программы Saleae Logic и USBee Suite .

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

Шаг выводов у контроллера очень мелкий, и если у вас не возникает желания «подковать блоху», то можно оставить контроллер на своем месте просто подпаяв к этой плате буфер. Но тут есть один момент об который я ломал голову почти целый день — этой на плате стоит не совсем та микросхема памяти. В первых нескольких байтах этой микросхемы должен быть записан идентификатор устройства и производителя (PID и VID). Как потом оказалось эта EEPROM память, может быть использована программой контроллера для каких-то своих целей. Прошивка предполагает, что к контроллеру подключена память 24lc02 ну а фактически китайцы туда присобачили 24lc128. Из-за разницы в адресации к ячейкам, прошивка не может записать (или прочитать?) что-то в какую-то ячейку памяти и девайс не стартует. Однако те самые первые байты с PID и VID пишутся/читаются правильно даже с микросхемой памяти большего объёма. Микросхема достаточно редкая (потому что старая) и я не нашел её не местном радиобазаре и втыкал всякие по очереди из тех что были в наличии. Успешно заработала 24lc04, а 24lc16 и всё что больше — работать правильно отказались. Эта проблема была только с софтом от Saleae, что же касается USBee, то там все работало без замены микросхемы. Кстати у контроллера CY7C68013A есть одна примечательная особенность: Он не имеет ни какой энергонезависимой памяти в которой хранится его прошивка. Она записывается в контроллер драйвером и остается в нем пока есть питание. Таким образом меняя VID и PID в микросхеме памяти, мы можем превратить девайс во что угодно 🙂 Теперь посмотрим из чего же сделан наш девайс:

А собственно ничего почти в нем и нет:

  • Сам контроллер CY7C68013A
  • Микросхема памяти
  • Буфер
  • Стабилизатор на 3.3 в

Ну и всякая типовая обвязка. Кстати на конденсаторах народ народ на форумах экономить не рекомендует, иначе самопроизвольные сбросы и прочие сюрпризы вам гарантированы. Отдельно стоит рассказать о назначении перемычек. Нафига нужна JP3 я пока не понял, но на всякий случай поставил, так как во многих подобных девайсах она есть. Без неё всё пока работает нормально. Перемычка JP1 управляет защитой от записи, её наличие разрешает запись чего-либо в микросхему. JP2 нужна для того чтоб временно отсоединять память от контроллера для её дальнейшей прошивки. Как это сделать сейчас разберемся. Кстати, прошить её можно обычным программатором для подобных микросхем, но для удобства лучше воспользоваться моим способом. Первым делом нужно скачать (и установить!) Cypress SuiteUSB 3.4, сделать это можно на официальном сайте или у меня . Затем необходимо снять перемычку JP2, а перемычку JP1 установить. После этого подключаем девайс и видим появилось новое устройство. После установки драйверов оно должно отображаться так:

Понятно, что контроллер не обнаружил микросхемы памяти и не понимает кто он из-за невозможности прочитать VID и PID. Когда контроллер находится в таком режиме, мы можем записать что-то в EEPROM память при помощи специальной утилиты которую мы установили ранее. Возвращаем перемычку JP2 на место при этом не отключая устройство! Теперь нужно запустить программу Usb control center и выбрать в списке слева наше устройство «Cypress EZ-USB FX2LP EEPROM missing «. Потом нужно в меню выбрать пункт Program FX2 -> Small EEPROM и в открывшемся окне выбрать тот файл содержимое которого нужно прошить в EEPROM. Если вы желаете использовать софт Saleae Logic , то нужно прошить туда вот . А если хочется юзать USBee Suite, то . Когда все успешно прошьётся, то внизу окна появится соответствующая надпись:

Если там ошибка, то не установлены перемычки JP1 и JP2. Теперь можно устанавливать софт и пробовать запустить анализатор. Софт Saleae Logic скачать можно на официальном сайте или , а USBee Suite или у меня . Установка ни каких проблем вызвать не должна, везде нажимаем «далее» и со всем соглашаемся 🙂 Особо активно я пока этот анализатор не использовал, поэтому о софте подробнейшего рассказа не будет, расскажу только базовые возможности этих двух софтин. Ну а начну с чего попроще: Saleae Logic. Софт умеет декодировать следующие протоколы:

  • DMX-512
  • I2S / PCM
  • Manchester
  • 1-Wire
  • Async Serial
  • Simple Parallel
  • UNI/O

Данные после декодирования можно выгрузить в текстовый файл или сохранить в сыром виде а потом анализировать. Например вот так выглядит обмен данными между термометром DS18B20 и контроллером:


А вот тут я шлю привет через :

Захват данных может начаться как в ручном режиме так и по триггеру. Достоинство этой программы в простоте и интуитивно понятном интерфейсе. А еще она не очень требовательна к ресурсам по сравнению со следующей программой USBee Suite . Сразу после запуска у нас появятся 8 цифровых каналов и один аналоговый, которого в нашей конструкции физически нет. Поэтому его можно отключив нажатием крестика около него. Ну или можно припаять АЦП и немного обвязки и он начнет работать. Но мне с моим нормальным осциллографом это нафиг не нужно и я не стал заморачиваться. Программа умеет понимать следующие протоколы

  • Sync Serial
  • Parallel bus
  • Async Serial
  • SMBus
  • 1-Wire

Самый главный плюс — оно понимает USB, пока он мне не нужен, но скоро буду раскуривать и вот тогда анализатор будет как раз кстати. Я попробовал снять те же самые данные что и выше, при помощи этой программы. Опять тот же самый 1-Wire термометр от Dallas semiconductor:

и опять те же данные отправляемые через :

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

Называются они «Test Hook Clip Probes» если кто будет искать в магазинах заморских. Продаются они сразу по 20 штук на DealExtreme. Предвидя вопросы на счёт платы, скажу сразу что она сделана обычным ЛУТом. Ничего ни где не отвалилось. Контроллер был припаян при помощи паяльника, матов и фена. Главное не торопиться. Ну а все остальные детальки очень большие и паяются феном или паяльником легко и непринужденно. Кстати, моя первая плата в Eagle, так что прошу не судить строго 🙂

Саму печатку можно скачать . Предложения и комментарии принимаются.

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

На самом деле анализатор спектра на Ардуино – достаточно простой проект, но идеально подойдёт новичкам и тем, кто хочет добавить данное устройство к себе в инструментарий. Давайте разберём, что такое логический анализатор на А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.

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

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

  • до 32 входных каналов;
  • память 128 КБайт на каждый канал;
  • частота дискретизации до 100 МГц;
  • вход внешнего тактирования;
  • все входы совместимы с 3.3 В и 5 В логикой;
  • настраиваемый размер буфера предвыборки/поствыборки кратный 8 КБайт;
  • 16 битный генератор внутренней синхронизации;
  • несколько режимов внутренней синхронизации;
  • программируемая задержка синхронизации;
  • программируемый счетчик событий синхронизации;
  • вход внешней синхронизации;
  • коммуникация с ПК по LPT (EPP режим) или USB интерфейсу;
  • несколько версий приложений для ПК под различные операционные системы.

Основным элементом логического анализатора является ПЛИС , производства компании , которая и выполняет все основные функции. Принципиальная схема прибора изображена на Рисунке 1.

В качестве источника тактовой частоты для ПЛИС используется осциллятор IC4 (IC6), позаимствованный со старой материнской платы компьютера. Несмотря на то, что осциллятор рассчитан на работу при напряжении 5 В, проблем в работе прибора при питании его напряжением 3.3 В выявлено не было.

Для хранения выборок используется внешнее быстродействующее ОЗУ - микросхема .

Для питания прибора используется внешний источник с выходным напряжением до 15 В. ПЛИС и ОЗУ имеют напряжение питания 3.3 В, поэтому установлен регулятор напряжения 3.3 В серии LD1117DT33 .

Коннектор параллельного порта K7 размещен на плате логического анализатора и подключен непосредственно к ПЛИС. Печатная плата логического анализатора двухсторонняя, используются компоненты для поверхностного монтажа и обычные компоненты с выводами. Вид печатной платы показан на Рисунке 2.

Замечание. Вместо вывода 40 (Vss) микросхемы SRAM к «земле» подключен вывод 39 этой микросхемы. Решение: соединить на печатной плате вывод 39 и 40 вместе (вывод 39 не используется в микросхеме SRAM).

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

Адаптер USB интерфейса для логического анализатора собран на микросхеме серии FT2232C производства компании FTDI. Данная микросхема объединяет в себе функциональность двух отдельных микросхем FT232BM и FT245BM. Она имеет два канала ввода/вывода, которые конфигурируются отдельно. Основные моменты конфигурации FT2232C для применения в составе прибора - это питание от USB интерфейса и режим эмуляции шины микроконтроллера (MCU Host Bus Emulation mode). Этот режим конвертируется в протокол EPP посредством мультиплексора IC3 74HCT4053D. Так как непосредственное декодирование сигналов /DST, /AST и RD/WR может вызывать конфликты таймингов, используется дополнительный сигнал A8, который используется в качестве сигнала RD/WR (чтение/запись) в периоды передачи данных по EPP протоколу.

Коннектор JTAG (CON2) используется для конфигурирования ПЛИС - это для будущих разработок, на текущий момент данный интерфейс не используется.

Микросхема EEPROM серии 93LC56 (IC2) хранит конфигурационные данные для микросхемы FT2232C и является обязательным элементом для правильного функционирования программируемого интерфейса. Для программирования данной микросхемы используется утилита FT_Prog (ранее она имела название MProg). Данная утилита и драйвера FT2232C доступны для скачивания на сайте компании FTDI.

Печатная плата адаптера разработана односторонней, что упрощает ее изготовление.

Существует также версия B 1.0 адаптера USB интерфейса (Рисунок 5). Данная версия отличается отсутствием коннектора JTAG и печатной платой, которая выполнена с учетом встраивания ее в корпус коннктора CANNON 25. Внешний вид собранных адаптеров а Рисунке 6.

a) b)
Рисунок 6. Внешний вид адаптера USB интерфейса версия A 1.1 (а) и версия B 1.0 (b)

Также имеется еще одна версия схемы логического анализатора (Рисунок 7), в которую уже интегрированы интерфейсы USB и LPT. Автором этого варианта является Bob Grieb и при разработке схемы использовалась среда TinyCAD, печатная плата для него разрабатывалась в редакторе FreePCB.