Какие особенности имеют вольтметры на базе микроконтроллера STM8. Как можно модифицировать и улучшить готовые модули вольтметров. Какие преимущества дает использование STM8 в схемах измерительных приборов. Как реализовать интерфейс I2C для подключения к Arduino.
Анализ схемы типового вольтметра на STM8
Многие недорогие цифровые вольтметры построены на базе 8-битного микроконтроллера STM8S003F3P6 от STMicroelectronics. Давайте рассмотрим типовую схему такого вольтметра:
- Микроконтроллер STM8S003F3P6 с тактовой частотой 16 МГц и 8 КБ флеш-памяти
- Встроенный 10-битный АЦП для измерения входного напряжения
- 4-разрядный светодиодный дисплей для отображения результатов
- Опорное напряжение 2.5В на базе TL431
- Делитель входного напряжения для расширения диапазона измерений
Ключевые особенности такой схемы:
- Использование напряжения питания в качестве опорного для АЦП, что может снижать точность
- Возможность программной калибровки с помощью измерения опорного напряжения 2.5В
- Ограниченная разрядность АЦП (10 бит) для 4-значного дисплея
- Простота схемы и низкая стоимость компонентов
Возможности модификации готового модуля вольтметра
Готовый модуль вольтметра на STM8 можно улучшить и расширить его функционал. Рассмотрим некоторые варианты модификаций:
- Перепрограммирование микроконтроллера для реализации дополнительных функций
- Добавление интерфейса I2C для подключения к Arduino и другим устройствам
- Эмуляция популярных модулей, например 4-разрядного светодиодного дисплея Adafruit
- Реализация дополнительных режимов отображения (аналоговая шкала, гистограмма)
- Добавление функций логгера данных или регистратора
Какие преимущества дает модификация готового модуля:
- Экономия на аппаратной части — используется готовая плата и компоненты
- Возможность быстрого прототипирования новых функций
- Совместимость с существующими библиотеками и кодом
- Низкая стоимость по сравнению с покупкой отдельных модулей
Преимущества использования STM8 в измерительных приборах
Микроконтроллеры семейства STM8 обладают рядом преимуществ для применения в измерительных приборах:
- Низкая стоимость при достаточной производительности
- Наличие встроенного АЦП с разрешением до 12 бит
- Широкий выбор периферийных модулей (таймеры, UART, SPI, I2C)
- Малое энергопотребление, особенно в режимах сна
- Простота программирования на C с использованием бесплатных сред разработки
Какие задачи можно решать с помощью STM8 в измерительных приборах:
- Оцифровка аналоговых сигналов и базовая обработка
- Управление дисплеем и пользовательским интерфейсом
- Реализация различных протоколов связи
- Хранение калибровочных данных в EEPROM
- Реализация цифровых фильтров и алгоритмов усреднения
Реализация интерфейса I2C для подключения к Arduino
Одной из полезных модификаций вольтметра на STM8 является добавление интерфейса I2C для подключения к Arduino и другим устройствам. Рассмотрим основные шаги по реализации:
- Программная эмуляция ведомого устройства I2C на GPIO-выводах STM8
- Реализация протокола обмена данными, совместимого с популярными модулями
- Добавление буфера команд и данных для обмена по I2C
- Реализация основных команд: установка яркости, вывод символов, очистка дисплея
- Тестирование совместимости с библиотеками Arduino
На что следует обратить внимание при реализации I2C:
- Выбор оптимальной тактовой частоты шины (обычно до 100 кГц)
- Обработка колизий и арбитража на шине
- Реализация timeout для защиты от зависаний
- Оптимизация кода для снижения загрузки процессора
Особенности программирования STM8 для измерительных задач
При разработке программного обеспечения для измерительных приборов на базе STM8 следует учитывать некоторые особенности:
- Использование прерываний для обработки событий АЦП и таймеров
- Применение техники oversampling для повышения разрешения АЦП
- Реализация цифровых фильтров для подавления шумов
- Калибровка измерений с использованием EEPROM для хранения коэффициентов
- Оптимизация энергопотребления с помощью режимов сна
Какие инструменты можно использовать для разработки:
- IAR Embedded Workbench for STM8 (бесплатная версия KickStart)
- STVD (ST Visual Develop) + STVP (ST Visual Programmer)
- Cosmic STM8 Development Tools
- SDCC (Small Device C Compiler) — открытый компилятор C
Сравнение STM8 с другими микроконтроллерами для измерительных приборов
STM8 vs AVR (Arduino)
Преимущества STM8:
- Более низкая стоимость
- Наличие аппаратного умножителя
- Больший объем флеш-памяти в младших моделях
Недостатки STM8:
- Меньшая экосистема и количество готовых библиотек
- Менее удобная среда разработки для начинающих
STM8 vs PIC
Преимущества STM8:
- Более современная архитектура
- Лучшая производительность на МГц тактовой частоты
- Наличие бесплатных инструментов разработки
Недостатки STM8:
- Меньший выбор корпусов и периферии в линейке
- Отсутствие совместимости по выводам между моделями
Перспективы развития измерительных приборов на базе STM8
Несмотря на появление более мощных 32-битных микроконтроллеров, STM8 остается привлекательной платформой для создания недорогих измерительных приборов. Рассмотрим возможные направления развития:
- Интеграция беспроводных интерфейсов (BLE, LoRa) для создания IoT-устройств
- Применение внешних прецизионных АЦП для повышения точности измерений
- Разработка специализированных библиотек для типовых измерительных задач
- Создание модульных систем на базе нескольких STM8 с распределенными функциями
- Интеграция с облачными сервисами для удаленного мониторинга и анализа данных
Какие факторы будут влиять на развитие измерительных приборов на STM8:
- Появление новых моделей STM8 с улучшенными характеристиками
- Развитие инструментов разработки и отладки
- Требования рынка к функциональности и стоимости приборов
- Тенденции в области IoT и промышленной автоматизации
Заключение
Микроконтроллеры семейства STM8 предоставляют широкие возможности для создания недорогих и функциональных измерительных приборов. Ключевые преимущества STM8 включают низкую стоимость, достаточную производительность и наличие встроенной периферии для измерительных задач. Модификация готовых модулей на базе STM8 позволяет быстро создавать прототипы и расширять функциональность устройств.
При разработке измерительных приборов на STM8 следует уделять внимание повышению точности измерений, оптимизации энергопотребления и реализации современных интерфейсов для подключения к другим устройствам. Перспективными направлениями являются интеграция беспроводных технологий и создание распределенных измерительных систем.
В целом, STM8 остается привлекательной платформой для разработки широкого спектра измерительных приборов — от простых вольтметров до сложных многофункциональных устройств. Грамотное применение возможностей этих микроконтроллеров позволяет создавать конкурентоспособные решения при сохранении низкой стоимости конечных изделий.
Вольтамперметр с OLED экраном
Давно хотел получить себе точный вольтамперметр для моего лабораторного блока питания, но получив, мы с ним так и не подружились.
Доставка и упаковка
Добиралась посылка до меня очень долго. На 39ый день я уже перестал надеяться, что получу сей девайс. Трек все так же показывал сортировку до таможни. Был это косяк сервиса почты России, или просто почтальоны ленились ставить отметки по треку, но свершилось чудо, и на следующий день посылка была у меня на руках.
Коробка выполнена в максимально минималистическом стиле, на верхней грани красуется только входные характеристики устройства.
В комплекте кинули инструкцию с подключением и перечислением возможностей вольтамперметра. Здесь только по картинкам можно понять, что из себя представляет устройство
Внешний вид
Измеритель выполнен в типоисполнении для щитового монтажа.
Тот момент, когда не нужно разбирать устройство, чтобы увидеть, что у него находится внутри. Слева расположились две клемные колодки, на верхней части, справа, находится предположительно термопара (сомневаюсь, что это терморезистор), снизу — контактные площадки, ведущие к микроконтроллеру STM8 (полная маркировка BS003f3p6 8S003F3P6) и предназначающиеся для его программирования.
В моем старом вольтамперметре было 3 провода с большим сечением, и еще два — с меньшим. Здесь же все наоборот и это меня слегка смутило, я думал, что должно быть наоборот.
Тестирование
Перейдем от фотосессии к практики. страница продавца сообщает о таких характеристиках вольтамперметра:
Диапазон измеряемых напряжений: 0 — 33,00В
Диапазон измеряемых токов: 0 – 3. 00 А
Погрешность измерения напряжения: ±0,3%
Погрешность измерения тока: ±0,8%
Напряжение питания: 4 – 20В
Первое включение. На экране отображаются следующие параметры:
1. Время включения
2. Мощность на выходных клеммах
3. Номер ячейки памяти
4. Температура внутри корпуса
5. Характеристика емкости (батареи)
6. Напряжение
7. Ток
8. Потребленная энергия
Для удобства тестирования точности, я решил сначала встроить индикатор вместо старого. Как оказалось, корпуса их одинаковые и взаимозаменяемые. И одинаково неудобные, ибо перед встраиванием приходится вытаскивать содержимое. Все это из-за непродуманного крепления, которое задевает сам экран и отогнуть их не получается. Размеры отверстия, кстати, 45х29мм
Единственной сложностью оказалось, что для измерения напряжение выше 20В, питать вольтамперметр нужно через отдельный источник питания. А мой блок питания выдавал 24В. Долго думать не пришлось, закромах нашлись транзисторы КТ816. С помощью них, конденсатора, парочки резисторов и навесного монтажа, я собрал примитивный понижающий преобразователь. Потребление устройства минимально, потому транзистор даже не греется.
Как говорится, найдите разницу
Перейдя к тестированию точности, я обнаружил большую погрешность при измерении тока. Подстроечных резисторов на корпусе обнаружено не было. Долго я печалился, пока снова не взял в руки инструкцию. Там говорилось, что прибор калибруется при удержании единственной кнопки и включения измерителя. После появления трех букв «А», кнопку можно отпустить. К слову, делаются эти манипуляции при отключенной нагрузки, потому как весь текущий ток в режиме калибровки приравнивается к нулю
Снова собираем тестировочный стенд, состоящий из мультиметра, нагрузки и лабораторного блока питания.
Дабы не перебарщивать количеством картинок, все свел небольшую таблицу
Погрешность соответствует той, что указано в паспорте. Для этого пришлось перерезать тонкий черный провод питания. Из-за него погрешность доходила до 8%. Учитывайте это
Ток больше 3,288А прибор измерять отказывается, появляются знаки «-«. В моем случае, для регулировки тока в ЛБП служит многооборотный потенциометр на 10 кОм. Дабы ограничить выходной ток, параллельно ему был припаян резистор.
Итоги
Минусы:
— Цена;
— Мелкие цифры;
Плюсы:
— Достаточно точное измерения напряжения и тока;
— Большое количество дополнительных вычисляемых величин;
— Наличие термодатчика (можно выпаять и установить возле самых горячих деталей)
UPD. Обзор был поправлен. Точность соответствует заявленной продавцом.
Товар для написания обзора предоставлен магазином. Обзор опубликован в соответствии с п.18 Правил сайта.
Вольтметр – амперметр с аналоговой шкалой на STM8S103F
- Просмотров: 3495
Собираю себе домой мини-лабораторный блок питания для питания всяческих поделок. Надобность в устройстве назрела давно. Хоть и собирается и отлаживается в железе все на работе (а там есть где разгуляться), все же иногда нужно пару разных напряжений и дома. Останавливаться подробно на самом БП не вижу особого смысла, это компиляция импульсных стабилизаторов собранных по даташитам (регулируемый 0…25в на TL494, импульсные «качественные» 5в на ноутбучном MAX798 и отрицательные слаботочные -5в на MC34063). А вот вольтметр-амперметр, как устройство довольно востребованное в радиолюбительском «блокопитаниестроении», пожалуй заслуживает отдельной статьи.
Повторять свое же собственное устройство во-первых скучно, во-вторых места было мало. Габаритно мне очень подходил двухстрочный дисплей 2×8 символов на базе HD44780, как легко доставаемый, относительно недорогой и довольно удобный в эксплуатации. Сначала хотел переделать свой же проект на другой индикатор, но немного подумав решил пойти другим путем… Как известно среди русскоговорящего (и не только) радиолюбительского населения бывшего СССР самыми популярными являются микроконтроллеры производства Microchip (семейство PIC) и Atmel (ATtiny, ATmega). И хотя в мире существует еще масса производителей МК (TI, Maxim, ST и т.д.), тем не менее именно Microchip и Atmel составляют 99% радиолюбительских (некоммерческих) проектов. Всегда считал это не совсем справедливым. Есть масса новых МК (и не только) о которых мы может быть и слышали, и даже в некоторых случаях интересовались и более того любим пообсуждать на любимых форумах. Но до конкретной реализации, готовых конструкций дело практически никогда не доходит. Вот и решено было собирать на чем-то отличном от вышеприведенных грандов.
К семейству STM8 от ST Microelectronics приглядываюсь уже давненько, как и многие раздобыл комплект STM8-discovery для «моргания светодиодом», почитал много чего интересного по форумам. Так как имею специальность (согласно диплома) кроме физики и информатики еще и педагогическую, то соответственно замечательно понимаю некоторые аспекты обучения которые могли бы способствовать лучшему усвоению нового материала. Потому и решил не допускать распространенных ошибок – взял контроллер попроще и в качестве задачи поставил – изготовление законченного устройства. Как показала практика так научиться чему-либо проще. Сесть и бесцельно изучать работу, к примеру, АЦП тот еще подвиг… Ну и конечно же значительно упрощало дело наличие некоторых познаний в AVR – все ж таки не с нуля изучать.
Итак, что же понравилось, а что нет в новых МК. Не расценивайте это как обзор архитектуры STM8, а просто как вступление-размышление-сравнение программиста с подобными МК AVR. Применительно к ASM, естественно.
ЗА |
ПРОТИВ |
РАВЕНСТВО |
Удобный по подключению и использованию программатор / отладчик. При покупке в составе плат Discovery весьма умерен в стоимости. |
Хоть и протокол SWIM является открытым, STLink придется только покупать. Собрать самостоятельно не получится. В этом плане Atmel c великим множеством самодельных программаторов выглядит привлекательнее. А еще показательнее в этом плане Microchip с полностью открытым Pickit2. |
Среда разработки ST Visual Develop примерно равна по «удобству», дизайну и структуре AVR Studio 4.1x. |
Соотношение цена / навороты (периферия, килобайты и т. д.) явно не в пользу Atmel. Да и в целом ценоформирование гуманнее. Один только STM8S003 за 0.5$ чего стоит. Примерный аналог популярной mega8, а при этом в полтора раза дешевле. |
Практически отсутствует выбор корпусов DIP и с малым количеством выводов (tiny13, tiny24). Половина контроллеров с мелким шагом в 0.5мм, что очень неудобно для начинающих. |
Многие ругают ST Assembler за кривой синтаксис и т. д. И т. п. Я был бы более честен — он просто другой, не такой, как тот, к которому вы привыкли в AVR (или PIC). |
Пожалуй одно из основных достоинств: одно семейство — один мануал. т. е. Регистр отвечающий за настройки, к примеру, АЦП во всем семействе STM8S имеет одно и то же название и биты расположены в нем одинаково. Atmel тут просто без комментариев… |
Порты бывают разных типов: High Sink (до 20ма), обычные (низкоточные), и с открытым коллектором. И все бы ничего, если бы не такой нюанс. Например на 48-ногом STM8S105 я не обнаружил ни одного ПОЛНОГО порта с HS выводами. Т.е. Затея с подключением семисегментного индикатора связана с довольно неприятным нагромождением в программе. Вывести значение в один порт было бы гораздо проще… К слову в STM8S003K3 которому, я практически уверен, суждено стать бестселлером и прямым конкурентом mega8 такой полный порт есть. |
В целом можно было бы сказать что грандиозного преимущества по производительности STM8 по отношению к AVR не предлагает. Потому они находятся в одной нише как по применению, так и по многим параметрам. |
Обращение к памяти, eeprom, регистрам происходит одними и теми же командами, т. е. они все лежат в едином адресном пространстве. В случае AVR я делал так: inc r16. В случае с STM8, я просто могу «обозвать» ячейку памяти r16 и проводить с ней те же фокусы. Весьма и весьма впечатляет. Немножко дико после AVR – ячейка из eeprom читается или пишется одной строчкой на ASM. |
На простых версиях STM8S семейства образцовое напряжение наглухо соединено с напряжением питания, что налагает определенные требования на источник питания и, возможно поставит острее вопрос об использовании ОУ c rail-to-rail выходом. У AVR тут все несколько гибче и богатство выбора больше. |
Не решился писать этот пункт в «+»… Славноизвестные фуз-биты в AVR есть конечно и у STM8, но практически все изменения доступны программисту изнутри программы, а потому повторяющему проект, об этих AVR-ужасах в 99% случаев можно забыть. |
Очень большая часть комманд является 16-бит ориентированными. т. е. МK то конечно восьмибитный, но, например сложение, двух 16-битных слов производится одной строчкой. |
|
Количество команд и примерный синтаксис во многом сходен с AVR, потому привыкание дается легко. |
Аппаратное деление. Ну я «оттянулся» от души, скажу вам. Не то, чтобы нельзя было в AVR в столбик поделить. Но тут уж больно все шикарно происходит. |
|
|
Настраивается все, что только можно. Такого обилия настроек я себе даже представить не мог. Например предделитель для таймера может быть любым числом от 1 до 32768. Слабо?! А сканирование и буферизация в АЦП чего стоит?!! |
|
|
Продуманные инструкции. Есть много такого, чего в AVR откровенно хотелось бы. Например: BCPL перевернет битик в указанном месте на противоположный. Так просто светодиодом еще нигде не мигалось. Или BTJT (Bit Test Jump True) проверит бит в указанном месте и пошлет программу по указанному адресу если он true. У Atmel конечно это все реализуемо skip’ами… Но осадок все равно, как говорится, остался. |
|
|
Есть еще множество моментов которые и хотелось бы осветить, но для вступления, я думаю, более чем достаточно.
Итак собственно о проекте. Амперметр-вольтметр на базе STM8S103F (STM8S103F3P6 в моем конкретном случае) и индикаторе WH0802A. Измеряемое напряжение 0…100в, разбито на два диапазона 0…10в и 10…100в. Измеряемый ток – 0…9.99A. Отличительной особенностью данного устройства является возможность отображения измеряемого тока не только в цифровом виде, но и в виде аналоговой шкалы с максимальным значением 1, 2, 5 и 10А. Опытные радиолюбители не дадут мне соврать и подтвердят, что в некоторых случаях стрелочный прибор значительно информативнее и полезнее, чем цифровой. И если значение напряжения в блоке питания – величина абсолютная, точнее постоянная то потребляемый ток иногда полезно наблюдать «в динамике». Чтобы было понятнее вот фото в интерьере:
Шкала имеет 35 делений, цена деления для каждого диапазона соответственно разная. Формат отображения «цифровой», «шкала 1A», «шкала 2A», «шкала 5A», «шкала 10A» переключаются циклически единственной кнопкой. Включение устройства с зажатой кнопкой – запустит процесс калибровки. Текущее отображение сохраняется в eeprom, нажатия озвучиваются динамиком. Вот в общем-то и все. Конструктивно все собрано на плате размером в сам индикатор. В моем случае входной усилитель был расположен на основной плате блока питания, но возможный «полный» вариант платы также присутствует внизу в файлах. Для программирования МК используются четыре провода интерфейса SWIM. И если землю и питание можно припаять в произвольных местах, то для SWIM и RST предусмотрены «пятачки». Хотел бы заметить что подключение VCC из разъема SWIM является обязательным и не является при этом источником питания для целевого устройства. Это скорее вход. Также отдельно бы хотелось отметить о подключении устройства к целевому блоку питания. Участки цепей которые выделены на схеме жирным – должны быть выполнены максимально толстыми и короткими проводами. Динамик ставить вовсе не обязательно, на нормальную работу устройства он никак не влияет. ОУ AD8542 можно заменить на любой (в том числе одиночный) с входами и выходами (!!!) Rail-to-rail. Как вариант подошел бы MCP6022.
Налаживание устройства сводится к запуску калибровки для отсечения постоянной составляющей смещения ОУ (установка нуля) и подборе резисторов R10 для амперметра, R4 для нижнего диапазона и R6 для верхнего диапазона вольтметра. Хотелось бы обратить внимание на возможные «грабли» с фактическим номиналом стабилитронов VD1, VD2. Поставив по привычке на 5,1в – я получил фактическое ограничение в районе 4,9…4,95в, т.е. меньше чем напряжение питание, а значит и меньше чем образцовое напряжение АЦП, что конечно же исказило измерения. Потому стабилитроны указаны как 6.2в. Можно поставить и 5,6 но нужно обязательно проверить какой это окажется экземпляр.
Ну и как всегда на закуску фузов не будет… Все уже учел программист в прошивке. А будет возможный рисунок печатной платы (отличается от моего «железного» экземпляра):
Архив для статьи «Вольтметр – амперметр с аналоговой шкалой на STM8S103F» | |
Описание: Файл прошивки микроконтроллера, макет печатной платы SprintLayout5 | |
Размер файла: 23. 85 KB Количество загрузок: 252 | Скачать |
Понравилась статья? Поделиться с друзьями:
- Автор: Гальченко Андрей Викторович
Взлом дешевого светодиодного вольтметра
Опубликовано 26 июля 2013 г.
Я планирую построить фиктивную нагрузку постоянной нагрузки в стиле EEVblog для тестирования батареи и блока питания. Дэйв в своей сборке использовал ЖК-вольтметр для дисплея. В бессмысленной погоне за различиями я пробовал другие решения для отображения, включая символьный ЖК-дисплей, графический ЖК-дисплей, OLED, TFT, AMOLED, IPS, что привело к нескольким предыдущим блогам, но ни одно из них не было удовлетворительным. Наряду с тем, что сложность растет в геометрической прогрессии от одного решения к другому, я постепенно начинаю чувствовать важность концепции KISS, сохраняйте ее простой и глупой. Все, что мне нужно, это просто цифровой дисплей, ничего необычного, ничего дорогого, ничто не отвлекает мое внимание от аналоговой схемы. Я решил вернуться к основному 7-сегментному светодиодному дисплею. «Простота — высшая степень изысканности», как это элегантно!
Я заказал несколько светодиодных вольтметров у продавца на таобао. Это стоит 16 юаней каждый, около 2,6 долларов США без учета доставки. Первоначальный дизайн предназначался для измерения заряда батареи на скутерах. Заявленная точность составляет 0,2%, что сразу же включает мой детектор чуши. Так что первое, что я сделал после его получения, было «не включать, разорвать на части». Производитель не стер маркировку, поэтому схему можно легко проследить.
Схема вольтметраСердцем вольтметра является «STM8S003F3P6», 8-битный MCU с тактовой частотой 16 МГц и флэш-памятью 8K от STMicroelectronics. Даташит показывает, что этот микроконтроллер имеет встроенный 10-битный АЦП. Управление 4 цифрами 10000 отсчетов с 10-битным АЦП определенно переоценено. Хотя кто-то может утверждать, что разрешение АЦП может быть увеличено с помощью передискретизации, без надлежащей схемы ввода шума я не могу подтвердить, что это действительно работает. Кроме того, MCU не имеет специального опорного входа АЦП. Напряжение питания используется в качестве опорного. Поскольку дисплей должен непрерывно сканировать каждую цифру, колебания подачи неизбежны. Как сохранить точность АЦП при изменении опорного значения? Первоначальный проектировщик, возможно, изначально рассматривал эту проблему. Он/она добавил D9(опорный TL431 2,5 В) и подключил его выход к аналоговому входу AIN6. Таким образом, перед измерением входного напряжения на AIN5 можно измерить 2,5 В на AIN6, а затем относительно AIN5 рассчитать. Однако D9 не был заполнен на плате, которую я получил.
Я уже собирался выпаивать светодиод и вдруг меня осенила идея: а почему бы не перепрограммировать этот модуль и не использовать его как единственный дисплей? Таким образом, я могу переложить задачу управления светодиодами на STM8. Первоначальный разработчик зарезервировал место для 6-контактного разъема с интерфейсом программирования/отладки SWIM и последовательным портом TX/RX, перепрограммировать не должно быть слишком сложно. Во-вторых, было бы еще лучше, если бы я мог эмулировать популярный серийный светодиодный модуль, чтобы можно было использовать все существующие коды. Вскоре был идентифицирован «4-значный 7-сегментный светодиодный рюкзак Adafruit». Ladyada проделала замечательную работу по разработке библиотеки Arduino и написала для нее учебник. Сделать что-то совместимое с ее работой — моя честь.
Однако светодиодный рюкзак Adafruit использует интерфейс I2C. Аппаратные контакты I2C на вольтметре уже заняты для управления светодиодом, а это означает, что мне нужно побитно настроить ведомый протокол I2C на контактах GPIO. Существует много онлайн-ресурсов об эмуляции ведущего I2C, но эмуляция ведомого I2C очень ограничена. Лучшее, что я нашел, — это статья, опубликованная TI «Software I2C Slave Using the MSP430». Он изображает весь управляемый состоянием процесс интерпретации сигналов I2C вместе с некоторым ассемблерным кодом для MSP430. Чтобы помочь понять, я сделал блок-схему и переписал библиотеку, используя код C. Поскольку я не собираюсь объяснять здесь детали процесса, все коды и документацию можно найти по адресу https://github.com/baoshi/I2C-LED 9.0003
Некоторые примечания для потенциальных пользователей:
- Код скомпилирован с использованием «IAR Embedded Workbench для STMicroelectronics STM8». Версия «KickStarter» бесплатна (но требует регистрации) и ограничена размером кода 8K, что очень удобно для STM8S003F3.
- Библиотека написана на C. Эффективность уступает коду на ассемблере. В результате при полной тактовой частоте 16 МГц и лучшей оптимизации я могу заархивировать только максимальную тактовую частоту I2C 63 кГц, консервативно я использую тактовую частоту 50 кГц во время тестирования.
- Пробовал компилятор COSMIC, но эффективность хуже.
- Чтобы изменить часы I2C в среде Arduino, отредактируйте переменную TWI_FREQ в
librariesWireutilitytwi.h или следуйте отличной статье Ника Гэммона. - STM8 не поддерживает конфигурацию прерывания для каждого контакта, что действительно доставляет неудобства. Имитация режима прерывания требует много процессорного времени и, следовательно, напрямую отвечает за поддержку медленных часов I2C. Переход на лучшую платформу MCU должен дать лучший результат. Но если вы можете изменить MCU, почему бы не использовать аппаратный I2C напрямую?
- Чтение I2C не реализовано. Светодиодный дисплей доступен только для записи. Светодиодный рюкзак Adafruit
- использует Holtek HT16K33. Эмулируются все режимы отображения HT16K33, но не функции сканирования клавиатуры. В любом случае светодиодный рюкзак Adafruit также не имеет интерфейса клавиатуры.
- Среднее потребление тока (при 3,3 В) составляет около 2,6 мА, что больше, чем 1-2 мА у HT16K33.
- Разработка и отладка этой библиотеки невозможны без режима 2Wire Bus Pirate. Используя режим 2Wire, я могу синхронизировать каждый бит отдельно, чтобы отслеживать состояние I2C.
- Помимо более низкой стоимости, нет ничего лучше светодиодного рюкзака Adafruit. Я сделал это, потому что могу.
- Аппаратная модификация показана на рисунке ниже. Нужны только микроконтроллер, два резистора и несколько шунтирующих конденсаторов.
Весь исходный код, схема (в формате KiCad), документы доступны по ссылке https://github.com/baoshi/I2C-LED
Обзор HT-USBee AxPro |
Я нашел дешевый осциллограф смешанных сигналов: HT-USBee AxPro. Этот HT-USBee AxPro является 8-канальным логическим анализатором, совместимым с осциллографом, USBee AX Pro I2C IIC SPI CAN Debugger. Он имеет вход осциллографа (один канал, 16 Мбит/с, полоса пропускания 3 МГц) и 8-канальный логический анализатор. С подходящим программным обеспечением его можно использовать в качестве регистратора данных, вольтметра, осциллографа смешанных сигналов и логического анализатора, измерителя частоты, пульта дистанционного управления, ШИМ-контроллера, генератора частоты, контроллера I2C и счетчика импульсов/фронтов.
HT-USBee AxPro выглядит хорошо собранным. Изделие поставляется с адаптером, позволяющим легко подключить щуп осциллографа. Вход осциллографа предназначен для сигналов +-10 В, а каналы логических пробников подходят для нормальных уровней сигналов TTL (5 В) / LVTTL (3,3 В). Распиновка адаптера для цифрового, по-видимому, такая же, как и в другом подобном продукте: цифровые сигналы подключаются напрямую, а другие сигналы опускаются.
Продукт не поставляется с программным обеспечением или документацией. В комментарии на странице HT-USBee AxPro говорится, что для того, чтобы он заработал, вам необходимо перейти на страницу загрузки usbee.com и получить там программное обеспечение + драйверы USBee AX (Standard, Plus и Pro) перед подключением устройства к компьютеру. У меня уже были установлены драйверы на моем ПК из предыдущего теста. В дополнение к драйверам у меня также был установлен пакет USB.
Я обнаружил, что пакет программного обеспечения USBEE Suite и USBEE AX работает хорошо. Для индивидуального тестирования различных функций хорошо работали программы USBEE AX. Для работы со смешанным сигналом, когда вы записываете данные, а затем просматриваете их, USBEE Suite — лучший выбор. Он позволяет просматривать осциллографические и логические сигналы в одной и той же временной шкале, что отлично подходит для отладки встроенных систем, в которых присутствуют как цифровые, так и аналоговые сигналы.
Для просмотра с помощью осциллографа в реальном времени лучше всего подходит осциллограф USBee AX. Он обеспечивает традиционный вид сигналов с помощью осциллографа в реальном времени.
Были также инструменты генерации сигналов, и все они работали хорошо…
При проведении аналоговых измерений (осциллограф, вольтметр) я заметил одну вещь: погрешность измерения в моих измерениях составляла 10 %: компьютер показывал значения примерно на 10 % выше, чем реальное напряжение. Это можно исправить, выполнив довольно простую процедуру калибровки, как описано на http://dreamland227.blogspot.fi/2011_10_01_archive.html.
Обзор продукта был бы неполным, если бы вы не увидели, что внутри.