1. Введение:

Данный логический анализатор предназначен для записи, выдачи и анализа различных последовательностей импульсов и последовательных протоколов с заданным периодом. За аппаратную часть взят мультипрограмматор на FT232

2. Краткое описание

Анализатор имеет 7 каналов ввода/вывода, которые подключаются к различным исследуемым устройствам по усмотрению пользователя.

Каналы 1-5 отвечают вход/выход. Эти каналы могут выходными или входными в зависимости от настройки канала. Канал 5 не разведён ни на один разъём, но имеет контактную площадку на плате.

Канал 6 – только вход. Этот канал используется совместно с каналом 1 и служит для имитации двунаправленного входа/выхода, например, как в шине I2C, то есть направление передачи канала меняется походу работы протокола. Выходные данные подаются на выход 3, а входные данные идут по каналу 6. Более подробно смотрите «реализация протокола I2C».

Канал 7 – только выход. Этот канал на программаторе реализован как мощный выход 12В. Например, он был использован в качестве питания подсветки при работе с дисплеем от нокии 6100 (смотрите примеры использования)

В левой части рабочего окна программы находятся настройки портов анализатора – это:

  • скорость передачи (BoudRate)
  • инверсия каналов (галочка “ NEG ”)
  • направление порта (IN / OUT )
  • размер выдаваемого массива (допускается размер до 65кбит)

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

В правой части поля программы расположены элементы управления имитируемых протоколов. Имеется:

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

3. Управление и ввод данных.

Нажатие левой кнопки мыши на панель осциллограммы устанавливает курсор в это место без изменения состояния данного бита.

Нажатие правой кнопки мыши на панель осциллограммы устанавливает курсор в это место и меняет состояние бита в этом месте.

Помимо ввода данных мышкой можно вводить их с клавиатуры . После нажатия клавиши «0» или «1» происходит ввод на место курсора соответственно 0 или 1. Также для удобства продублирована функция кнопки «0» на кнопку «2», то есть при нажатии на клавишу «2» происходит ввод 0.

Ввод данных массивом (только для протокола). Последовательность для протокола можно вводить в десятичной(1 34 987), двоичной (0b100 0b101010 0b1111111111111) и шестнадцатеричной форме (0xFA 0x 12C 0x 1a 2cb ). Данные водятся через пробел. Также допускаетсясмешивать форматы данных (123 0b1010 0x12aB).

Данные вводятся с последующим инкрементом адреса. При достижении границы массива его размер будет увеличиваться. Максимальный размер массива данных – 65 кбит

Ввод данных файлом. Для ввода данных файлом необходимо создать файл с любым расширением, например, txt. Формат свободный.

Разделять числа в файле можно точкой, запятой или пробелом. Пояснения в файле делаются через точку с запятой «;».

Пример содержимого файла:

123 343, 234 ;тут пояснения после точки с запятой

0x12F, 0b10101010 ; и т.п.

Драйвер для анализатора.

В анализаторе используются специальные функции FT232R, для использования которых необходимо установить специальный драйвер FTD 2XX . Установка обычного COM порта не подходит. Драйвер желательно брать у производителя – , например.

4. Подключение анализатора:

Внешний вид анализатора показан на рисунке 2.

J 1 – джампер питания (Vcc). Имеет 4 состояния: 1.8В, 3В, 5В и внешнее питание

XT1 – miniUSB. Подключение к ПК.

XT 2 – интерфейсный разъём для подключения анализатора к испытуемому. Имеет 10 контактов:

1 канал 1 (вход/выход)
2 питание выходных портов (Vcc) (в зависимости от состояния джампера питания будут входом или выходом)
3 Cbus 4 не используется. Но можно вывести частоту 6,12,24 или 48 МГц (более подробно смотри «использование Cbus»)
5 канал 2 (вход/выход)
7 канал 3 (вход/выход)
9 канал 4 (вход/выход)
4,6,8,10 общ.

ХТ3 – интерфейсный разъём для подключения анализатора к испытуемому. Имеет 10 контактов

1 питание выходных портов (Vcc ) (в зависимости от состояния джампера питания будут входом или выходом).
3 канал 3 (вход/выход)
5 канал 4 (вход/выход)
7 канал 6 (только вход)
9 канал 7 выход сигнал 12В!!!
2,4,6,8,10 общ.

J 2 – джампер на 2 положения. Меняет функцию канала 6.

положение 1-2 изменение канала 6 от Vcc до 12В
положение 2-3 изменение канала 6 от 0В до 12В
положение 1-2 используется в программаторе для формирования сигнала MCLR при прошивании PIC контроллеров.

Каналы 1-5 – по умолчанию являются входами и находятся в третьем состоянии (состояние Z). При установке канала в состояние выход, он будет выходом только в момент передачи.

Каждый канал имеет токоограничивающие резисторы 300ом.

Канал 6 является выходом всегда. По умолчанию имеет состояние «0».

5. Использование сигнала Cbus (разъём ХТ2 контакт 3)

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

На этот контакт можно вывести частоту 6,12,24 и 48 МГц. Это делается с помощью специальной утилиты MProg, взять можно

6. Краткое описание, что сделать, чтоб подать на Cbus частоту:

  1. устанавливаем утилиту Mprog.
  2. выбираем поиск устройств, нажав на лупу, или в меню Device->Scan, после чего утилита находит устройство и отображает его PID и т.п.
  3. выбираем в закладке Tool функцию Read and Parse, то есть считываем текущие установки и выводим это дело на дисплей.
  4. открываем закладку FT 232 R (если она сама не открылась), после чего открываются 2 поля. Invert rs 232 signzl (нас это не касается, т.к. программа анализатора управляет этими сигналами по-своему) и поле I / O Controls .
    Поле I/O Controls имеет 4 подменю C1-C4.
  5. выбираем меню C4. Это и есть дополнительные функции сигнала Cbus4. Из всех предложенных функций нас интересуют CLK6, CLK12, CLK24 и CLK48. По названию функций должно быть всё понятно J . Остальные функции не влияют (точнее, при их выборе предсказать состояние этого пина не представляется возможным), так как они предназначены для работы в режиме COM порта.
  6. для того, чтоб FT232R задействовала выбранную функцию, надо обязательно сохранить проект (без этого не получится), так уж написана эта утилита.
  7. после сохранения проекта на диске, можно перепрограммировать нашу FT232R. Активизируется кнопочка с молнией. После её нажатия M prog пропишет наши настройки в чип.

7. Как описать и использовать собственный протокол

Для создания описания протокола потребуется написать собственный INI файл. Рекомендую копировать какой-нибудь из имеющихся файлов и изменять его. В пример возьмём файл SPI_9BIT . Пояснения в этих файлах необходимо указывать в отдельных строчках!!!

;заголовок настройка в этом разделе файла указываются специфические настройки протокола:


;количество линий в протоколе. В этом их 4
num_lin = 4
;ниже расписаны линии по номерам и указаны их имена
lin1 = MOSI
lin2 = MISO
lin3 = SCK
lin4 = SS
;количество передаваемых бит
bits = 18
;доп. информация, она будет выводиться в окне дополнительной информации.
waring = канал 6 завязан с каналом 1 аппаратно. Бодрейт делится на 2, так как тактовая передаётся за 2 такта
;заголовок протокол. Ниже будет расписаны последовательности, используемые в протоколе.


SS = N N N N N N N N N N N N N N N N N N
SCK = N O N O N O N O N O N O N O N O N O
MOSI = 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8
MISO = N N N N N N N N N N N N N N N N N N

В этом разделе в качестве передаваемых бит указывается номер бита 0 1 2 14 34 и т.д. В качестве передаваемой 1 пишется O (от английского One), в качестве передаваемого 0 пишется N (т.е Null).

ВАЖНО: При описании протокола допускается расхождение в количестве бит, заданных в num _lin и описанных в разделе protocol .

После того как поправили или написали INI файл, необходимо добавить запись в файл protocol.lst. для того чтоб программа могла найти и использовать новый протокол.

8. Пример использования анализатора для анализа шины I2C

Для начала подключаем анализатор к шине I2C (испытуемое устройство – джойстик нунчак от приставки Wii), внешних элементов не требуется. Схема подключения приведена на рисунке 3.Описывать протокол не вижу смысла. Про это подробно написано в инете.

Как видно из схемы, для реализации используется 3 канала (каналы 1,4,5), а протокол I2C является двухпроводным. Суть в том, что анализатор не имеет возможности менять направление шины по ходу передачи сигналов, поэтому разделение входного сигнала и выходного происходит на транзисторе (см. схему). Таким образом, канал 1 является выходным: он выдаёт данные в I2C. А канал 5 является входным: он принимает данные по I2C.

Для настройки выбираем в меню выбора интерфейса «I2C» и устанавливаем следующие галочки и кнопочки:

Канал 1 NEG (инверсный выход) OUTSDA _OUT данные на выход

Канал 4 OUTSCL тактовый сигнал

Канал 5 IN SDA _IN входные данные

9. Пример использования анализатора для анализа шины SPI (9 bit )

В этом примере рассмотрена имитация последовательного протокола для управления дисплеем от nokia6100. Схема подключения дисплея к анализатору приведена на рисунке 4. Из внешних элементов необходим только токоограничивающий резистор для подсветки дисплея. Особенностью является передача по SPI не 8 бит, как обычно, а 9.

Для работы этого протокола в анализаторе создан отдельно 9битный SPI .

Настройка анализатора и сигналов протокола.

Для настройки выбираем в меню выбора интерфейса «SPI _9BIT » и устанавливаем следующие галочки и кнопочки:

Канал 1 OUT ;этот сигнал пропишем вручную. Его нет в протоколе

Канал 2 OUT SS ;сигнал выбора чипа

Канал 3 OUT SCK ;тактовый сигнал протокола

Канал 4 OUT MOSI ;сигнал данных

Поскольку у нас нет принимаемых данных, все сигналы настроены как выход и не используется сигнал протокола MISO.

Также необходимо установить джампер питания в положение 3.3В, так как питание устройства пойдёт от анализатора.

В этой статье пойдет речь о логическом анализаторе - незаменимом инструменте для реверс-инжиниринга, да и вообще полезном в хозяйстве приборе. Для тех кто ни разу с подобным прибором не сталкивался скажу, что логический анализатор это что-то типа осциллографа, но у него много каналов и он может различать только два состояния сигнала: логический ноль и единицу. Используется оно в основном чтоб присосаться к какой-нибудь шине данных и считывать с неё то, что по ней передается, в компьютер. Ну а на компьютере работает специальный софт который эти данные отображает в дружественном для пользователя виде. Если бы программа просто показывала нам набор единиц и нулей растянутых во времени, то толку от этого было бы мало ибо анализ таких данных очень сложен и может взорвать моск даже опытному инженеру. Поэтому, все нормальные программы умеют декодировать протоколы типа 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 и контроллером:

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

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

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

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

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

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

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

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

В данной статье представлен простой логический анализатор работающий с оболочками USBee v1.1.57 и Logic v1.1.15. Собран на микросхеме распространенной микросхеме CY7C68013A фирмы Cypress. У меня имелась готовая плата с этой микросхемой заказанная с сайта Aliexpress. Вот такой у нее вид:

Хотел на ней сделать LPT порт, но потом надобность в нем пропала и так она валялась не востребованная. Понадобился мне простой логический анализатор. Решено было сделать на этой плате. На просторах интернета много схем на этой микросхеме. Требовалось добавить буфер для передачи данных, сделать защиту по входу и возможность выбора с какой оболочкой работать. Плата расширения одевается сверху основной платы. Скажу сразу, что схема, плата, прошивки и все необходимое для работы с данным логическим анализатором находится внизу статьи. В качестве буфера использовалась микросхема 74LVC4245 , можно применить 74LVC8T245A они полностью идентичны. Защитную функцию по входу выполняют диодные сборки BAV99. И так родилась такая схема:


Джампером J1 выбираем направление передачи данных. В замкнутом состоянии на прием данных, в разомкнутом на передачу. Есть такая оболочка как USBee AX Test Pod . Она содержит много тестовых утилит при помощи нее можно протестировать работу собранного устройства. Одна из возможностей это генерировать на выводах XP3 разные частоты. Правда самому задавать их нельзя. Выводится сразу 8 разных частот. Также можно устанавливать в 0 или 1 выходы и много других тестов. Джампером XP5 выбираем с какой оболочкой будем работать USBee v1.1.57 или Logic v1.1.15 . В U2 и U3 соответственно загружается прошивка для разных оболочек. Джампер XP4 это защита от записи. Нужен будет при старте оболочки от Logic. Джампером J2 задаем напряжение входных уровней. Если он замкнут то входной уровень сигнала должен быть 3.3 V. Так же предусмотрена возможность установить уровень сигнала такой каким напряжение питается диагностируемое устройство но не больше 5V. Для этого размыкаем J2 и напряжение питания диагностируемой платы подаем на 10 вывод XP3. Так же не забываем соединить между собой общий провод анализатора с диагностируемой платой. Для начала нам нужно доработать основную плату т.е удалить микросхему памяти 24C128.

У моей платы также не было соединения GND USB разъема и GND CY7C68013A пришлось соединить проводком.


Больше никаких изменений делать не нужно.

Теперь изготавливаем нашу платку размером 41мм х 58мм. В итоге получаем такой результат:



Соединяем две платы:



Для начала работы нам нужно прошить микросхемы памяти. Для этого устанавливаем утилиту от Cypress CySuiteUSB_3_4_7_B204 . Убираем с платы джампер XP5 и подключаем плату к ПК, в диспетчере устройств появится неизвестное устройство.


Устанавливаем драйвера из файла Driver_Cypress_win7 win8. Указываем диспетчеру, что искать драйвера в этой папке. Система сама установит необходимый драйвер. Появится новое устройство в контроллерах USB:


Запускаем установленную программку Control Center . Перед нами откроется окно, где в верху должно быть наше устройство.

Выбираем вкладку Option затем EZ-USB Interface:

Откроется следующее окно:


Ничего здесь не меняем. Нам нужна только кнопка S EEPROM. Джампером XP5 выбираем одну их микросхем памяти. Нажимаем S EEPROM и указываем где хранится наша прошивка. Выбираем прошивку в зависимости от типа памяти и нажимаем "Открыть". Цифры в конце названия прошивки указывают для какого типа памяти прошивка. Для 24C01 нужно выбирать USBeeAX_01, а для 24C02 USBeeAX_01.


Пойдет процесс заливки информации. При удачной прошивке должно быть сообщение как на скриншоте. Кол-во байт может отличаться в зависимости от выбранной прошивке.


Нажимаем кнопку сброс на плате и видим в диспетчере устройств новое неопознанное устройство. Устанавливаем драйвера. В автоматическом режиме драйвера не установятся. В ручном режиме указываем, что установить с диска и выбираем драйвер из папки Driver Cypress win7_win8. У меня на Windows 8.1 заработало с драйвером EZ-USB FX1 No EEPROM (3.4.5.000).

Купил анализатор логических сигналов. Думаю пригодится. Хорошая вещь, может помочь при исследовании сигналов и поиске неисправностей в логических схемах. Устройство является клоном Saleae logic, оригинал которого стоит не одну сотню долларов.

Характеристики:

  • Каналов: 8
  • Частота выборки: до 24 млн/с
  • Входное сопротивление: 100 кОм

Устройство представляет из себя небольшую коробочку, размером примерно со спичечный коробок. С одной стороны разъём miniUSB для подключения к компьютеру. С другой — гребёнка из 10 контактов (8 каналов + две земли). Посмотрим, что внутри.


Микроконтроллер Cypress CY7C68013A, EEPROM Atmel 24C028N и буфер 74HC245.


С другой стороны:


Для работы с устройством качаем программу Logic .

В центре находятся 8 полос-каналов, на которых будет выводиться график сигнала. Слева находится кнопка Start и кнопки настроек каналов. Справа — окна измерений и анализа. Рассмотрим настройки:


Здесь можно выбрать частоту выборки (24 млн/с) и длительность:


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

Для одного из каналов можно настроить триггер: по фронту сигнала, по спаду, по ширине высокого или низкого импульса. Тогда при нажатии кнопки Start отсчёт времени записи начнётся только после срабатывания триггера.


Теперь для интереса рассмотрим различные сигналы с ардуинки.
Поморгаем светодиодом с паузой в 100 мс. Такой код:

1 2 3 4 5 6 void loop() { digitalWrite(13 , HIGH) ; delay(100 ) ; digitalWrite(13 , LOW) ; delay(100 ) ; }

void loop() { digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); delay(100); }

Сигнал:


Видим, что период получился 0.2 с, и частота 5 Гц. Всё верно.
Теперь уменьшим задержки до 1 мс:

1 2 3 4 5 6 void loop() { digitalWrite(13 , HIGH) ; delay(1 ) ; digitalWrite(13 , LOW) ; delay(1 ) ; }

void loop() { digitalWrite(13, HIGH); delay(1); digitalWrite(13, LOW); delay(1); }

Увеличим:

Пока всё как мы и ожидали. Период чуть больше 2 мс, частота около 500 Гц.
Теперь совсем уберём задержку:

1 2 3 4 void loop() { digitalWrite(13 , HIGH) ; digitalWrite(13 , LOW) ; }

void loop() { digitalWrite(13, HIGH); digitalWrite(13, LOW); }

1 2 3 4 void loop() { PORTB = B11111111; PORTB = B00000000; }

void loop() { PORTB = B11111111; PORTB = B00000000; }


Ого, частота возросла больше, чем в 10 раз и теперь составляет примерно 1 МГц!
Но что с шириной импульсов? Почему ширина высокого уровня значительно короче, чем низкого? Ведь запись в регистр должна производиться с одинаковой скоростью независимо от содержимого. Есть что-то ещё, что выполняется после функции loop()?
Попробуем избавиться от стандартного перехода по функции loop и вставим бесконечный цикл:

1 2 3 4 5 6 7 void loop() { while (1 ) { PORTB = B11111111; PORTB = B00000000; } }

void loop() { while (1) { PORTB = B11111111; PORTB = B00000000; } }

Уже лучше. И частота возросла до 4 МГц! Часть тактов теряется на прохождение сравнения в цикле (1 — истина?). Ну и теперь попробуем чередовать несколько одинаковых команд друг за другом:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 void loop() { while (1 ) { PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; } }

void loop() { while (1) { PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; PORTB = B11111111; PORTB = B00000000; } }

Вот этой аномалии я немного не понял. Частота возросла до 8 МГц! То есть по одной операции на такт. Но при этом почему-то уменьшилась в два раза (с 83 нс до 41 нс) ширина положительного импульса. Что на это повлияло я объяснить не готов. Надо пробовать ковырять HEX-файл в дизассемблере.
Работа с регистрами напрямую очень необходима при работе с устройствами, которые критичны к синхронности импульсов на разных выводах. Посмотрим для примера, как различается импульс на двух контактах. Когда мы ставим друг за другом две команды digitalWrite для разных контактов, то мы считаем, что сигнал появится одновременно и там и там. Но конечно же это не так:

1 2 3 4 5 6 7 8 void loop() { while (1 ) { digitalWrite(12 , HIGH) ; digitalWrite(11 , HIGH) ; digitalWrite(12 , LOW) ; digitalWrite(11 , LOW) ; } }

void loop() { while (1) { digitalWrite(12, HIGH); digitalWrite(11, HIGH); digitalWrite(12, LOW); digitalWrite(11, LOW); } }

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

Тема сегодняшней статьи — использование дешевого китайского логического анализатора купленного на Алиэкспресс .

Что такое логический анализатор? Это такой прибор… для логического анализа))) Сразу приходит на ум фильм с Робертом Де Ниро

Зачем он нужен? Ну конечно же занимать логическим анализом))). А точнее анализом логических уровней разных микроконтроллеров и периферии к ним. То что принято называть реверс инжинирингом.

Характеристики

  • Совместимость по софту с Saleae Logic 8
  • Число цифровых входов - 8
  • Два индикатора - питания и состояние логических входов
  • Входное сопротивление 100КОм, входная емкость 5пФ
  • Питание через USB
  • Поддерживаемые частоты дискретизации:
  • 24МГц,16МГц, 12МГц, 8МГц, 4МГц, 2МГц, 1МГц, 500КГц, 250КГц, 200КГц, 100КГц, 50КГц, 25КГц;
  • Количество сохраняемых значений одного измерения - 10000

С одной стороны разъем на 10 штырьков и распиновкой на корпусе

С другой Mini USB для питания и подключения к компьютеру

Внутренности

Внутри корпуса плата, на ней микропроцессор с высокоскоростным USB интерфейсом CY7C68013A от компании CYPRESS , EEPROM ATMLH432 и шинный формирователь LVC245A от NXP .

На входе анализатора стоят токоограничивающие резисторы 100 Ом, подтягивающие к земле резисторы 100 КОм и конденсаторы 5 пФ. Все честно, как в описании.

Подключение

Для подключения анализатора в комплекте идут 10 соединительных проводков на штырьковые контакты. Сразу прикупил таких вот клипс-зажимов .

Качество зажимов очень посредственное, но хорошие зажимы обойдутся дороже самого анализатора

Софт

Это, пожалуй, самое интересное в данном анализаторе. К нему подходит родной софт от Saleae Logic .

Доступны версии для OSX, Linux и Windows на 32 и 64 бита.
Saleae Logic 1.2.3 под Windows 7 заработал с пол пинка, софт запустился, железо опозналось, не смотря на надпись версии «Beta».

Интересные плюшки в софте от Saleae Logic

Триггер срабатывания записи логической последовательности на каждый канал

  • На изменения логического уровня в «0»
  • На изменение логического уровня в «1»
  • На положительный импульс заданной длительности
  • На отрицательный импульс заданной длительности

Подсчет статистических показаний по текущему измерению

Декодирования протоколов: Async Serial, I2C, SPI, Hide, 1-Wire, Atmel SWI, BISS C, CAN, DMX-512, HD44780, HDLC, HGMI CEC, I2S/ PCM, JTAC, LIN, MDIO, Manchester, Midi, Modbus, PS/2 Keyboard/Mouse, SMBus, SWD, Simple Parallel, UNI/O, USB LS и FS

Ведение журнала по декодируемому протоколу

Кроме того, данный анализатор можно прошить под софт от USBee

Позанимаемся анализом

Как раз разбирался с подключением ультразвуковых датчиков DYP-ME007Y, на вид абсолютно одинаковыми, но работающими совершенно по разному .

Если один работает точно по даташиту: короткий импульс на «триггер» запускает ультразвуковой импульс и по длительности эхо измеряется расстояние. То второй и третий (с мигающим светодиодом) примерно раз в 100мс без каких либо внешних пинков сам мерит расстояние и посылает его на скорости 9600 в виде четырех байт (включая контрольную сумму). Программа Saleae Logic позволяет включить декодирование сигнала последовательной шины в последовательность байт. Датчики второго типа отлично работают с отключенным выводом «TRIG», хотя может и ждут какой нибудь команды на этом входе, но сие даже волшебный приборчик не покажет.

Далее захотелось посмотреть ШИМ сигнал Aтмеги 168? Включил все шесть каналов поддерживающих PWM на разный уровень и с удивлением обнаружил, что частота двух каналов ШИМ отличается от 4-х других. Задействованы разные таймеры?

А что там на шине данных у моих ?

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

С анализом шины I2C тоже никаких проблем. Софт нормально справился с декодированием.Можно видеть пакеты записи в регистры при работе драйвера дисплея TM1637

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

Интересно, а как с точностью измерения временных интервалов? Точного генератора импульсов у меня под рукой не оказалось, но Ардуиновская tone(1000) на 1000Гц

и tone(20000) на 20КГц дают довольно точный результат.

Для проверке высокой частоты на скорую руку собрал генератор на NE555. Удалось выжать из него 8МГц. Анализатор проглотил эту частоту нормально. На 20МГц проверить не удалось, но 8 для такой дешевой железки тоже очень хороший результат.

Небольшой итог

Логический анализатор очень нужная и полезная вещь для тех, кто занимается раскапыванием китайской периферии к микроконтроллерам (Назовем красиво - реверс инжинирингом)
Из достоинств данной железки хочу отметить:

  • Привлекательную цену
  • Совместимость с довольно удобным софтом Saleae Logic
  • Защита на входе в виде шинного формирователя LVC245A
  • Малые габариты

Явных недостатков у этой железки для себя не нашел. Жаль, что я не приобрел логический анализатор раньше — сколько времени бы я сэкономил во многих проектах. Несомненно, кому то возможностей данной железки окажется мало. Есть масса более навороченных моделей, но по цена $100-200 делает эти приборы гораздо менее доступными для радиолюбителей.

Поанализируем что-нибудь еще?