Зеркало сайта: vivacious-stockings-frog.cyclic.app

MSP-EXP430G2 Launchpad: быстрый старт в Linux

разделы: MSP430, дата: 17 августа 2017г.

Я все-таки не удержался, и приобрел MSP430 LaunchPad. Это может показаться довольно странным решением, учитывая, что для прошивки чипов я активно использовал BSL, и вроде как LaunchPad был не очень-то необходим.

Кроме того, LaunchPad уже лет пять стоит в несколько раз больше чем 4.3USD да и цена за доставку может неприятно удивить.

Ok, мои аргументы:

  • SBW(spy-bi-wire). На плате распаян программатор MSP430UIF использующий протокол SBW. В первую очередь, я брал LaunchPad ради него. Прошивка через SBW - поддерживается всеми чипами серии MSP430x2xxx, чего не скажешь о BSL.
  • Работать с программатором MSP430UIF можно из Linux(ну наконец-то!).
  • Через SBW можно, не только прошивать, но и отлаживать прошивку. Как можно было убедиться, в Proteus почти ничего не работает, здесь же можно разобраться в работе того или иного алгоритма на конкретном чипе, а не на абстрактной симуляции. Да, и естественно, что отладка работает в том числе и в Linux.

Несмотря на то, что далее речь пойдет преимущественно о работе в среде Linux, к Windows все описанное тоже будет применимо, при условии использования Energia в версии для Windows и чего-то вроде CYGWIN. Для программирования MSP430 в Windows имеются следующие IDE: 1) Code Composer Studio aka CCStudio; 2) IAR Workbench for MSP430. На первый я даже смотреть не стал, т.к. это Eclipse который все ненавидят, а второй отказался работать с LaunchPad'ом. Нет там поддержки MSP430UIF оказывается.

    Так же в двух словах хочется пробежаться по преимуществам платформы MSP430 перед AVR:
  • Единая карта регистров. Не нужно каждый раз лезть в datasheet переписывая программу c ATtiny13 на ATtiny45 к примеру. Адреса и наименования для регистров всех моделей одной линейки одинаковы.
  • Цена. Обычно в розницу "младший" MSP430F2001, в корпусе DIP-14, стоит раза в два дешевле ATtiny13.
  • 3.3-вольтовая логика. Разрабатываемую схему легко можно будет адаптировать для stm32 при необходимости, если схема "разрастётся".
  • Простота. Для написания программы под MSP430 не требуется SPL, написанный на Си алгоритм легко перенести как на AVR, так и на STM8/STM32.
  • 16-битность. Арифметические операции с двухбайтовыми целыми числами выполняются одной инструкцией, что экономит место на flash-памяти и делает алгоритм быстрее.
  • Отсутствие фьюзов.
    Что касается самого LaunchPad, здесь нужно отметить:
  • Т.к. на плате распаян программатор MSP430UIF, то для прошивки чипам не нужен загрузчик Arduino. Можно купить чип в магазине, вставить его в панельку, запустить Energia(версия Arduino для MSP430) и сразу начать программировать. Это как если бы USBASP был распаян на плате Arduino.
  • На плате два светодиода: зеленый и красный, вместо одного красного в Arduino.
  • Светодиоды можно отключить от микроконтроллера сняв расположенные рядом джампики.
  • Кроме кнопки RESET, имеется еще одна кнопка на P1.3.
  • На плате имеется датчик температуры.
  • Кроме программатора, на плате распаян чип USB-TTL конвертера.
  • Часть программатора соединяется с частью чипа через джампики. Их можно вообще снять, и подключить шлейф для прошивки или отладки микроконтроллера распаяного на другой плате. Вообще же, это называется eZ430 разъем.
  • На оборотной стороне платы имеются резиночки, предотвращающие соприкосновение контактов платы с поверхностью стола.

Часто можно встретить комментарии, что MSP430 чипы бедны на периферию. Мощные чипы конечно у TI конечно же есть, но здесь в цене начинает сильно выигрывать продукция фирмы STM. Однако STM не делает чипы в DIP корпусе, и STM8 не имеет поддержки в Linux, поэтому "младшие" MPS430 для замены ATtiny13/ATtiny2313 мне кажутся наиболее интересными. Кроме того они более "прокачены" чем ATtiny. Например MSP430F2002 имеет на борту аппаратный SPI и I2C, а MSP430F2003 имеет 16-битный сигма-дельта АЦП(!). Такого вообще нет ни у AVR ни у STM.

Ок, пора за дело.

Содержание:

  1. Energia (Arduino для MSP430)
  2. MSP430F2001
  3. MSPDEBUG
  4. Отладка с помощью GDB

Читать дальше

Proteus8.x + MSP430x2xx: программная реализация I2C интерфейса, подключение устройств: RTC DS1307/DS3231, EEPROM AT24C512/AT24C32

разделы: MSP430, Proteus, I2C, RTC, дата: 5 апреля 2017г.

Полтора года назад я уже бегло рассматривал протокол I2C, теперь же настало время изучить его более подробно.

Попробуем написать программную реализацию протокола, рассмотрим "подводные камни" такой реализации, а также способы отладки шины I2C. Для обкатки алгоритма попробуем подключить следующие устройства на шине I2C: RTC DS1307/DS3231 и EEPROM AT24C512/AT24C32.

Для проектирования будет использована CAD Proteus_8.5. Для проверки на реальном железе будет использован чип MSP430G2453.

Часы реального времени на микросхеме DS1307

Итак, тренироваться будем на RTC DS1307, но здесь должен заметить, что данный чип относиться к 5-вольтовой логике поэтому с 3.3-вольтовым MSP430 он работать не будет. Заставить работать данную связку можно только в Proteus. Для тестирования на реальном железе я буду использовать DS3231 модуль. Однако для того чтобы понять I2C не нужен готовый модуль, он будет только мешать.

Суть проблемы

Когда не очень опытный радиолюбитель берет устройство на I2C, ему надо его как-то проверить, убедиться что оно хотя бы в принципе работает. Как это сделать? Обычно делается это на Arduino (я по крайней мере так делаю). Находится какой-нибудь скетч для проверки, и на нем проверяется.

Однако, при наличии проблем, как узнать в чем кроется загвоздка: в "косячной" библиотеке или в железке? Например, если мы загрузим этот скетч для работы с DS1307, и запустим его БЕЗ всякого модуля, то получим такую картинку:

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

И здесь проблема здесь не в низком качестве кода скетча. Если посмотрим API References:

Читать дальше

Proteus8.x + MSP430x2xx. Базовый курс: GPIO, прерывания, таймеры, ШИМ, аппаратный и программный UART, 10-битный модуль АЦП

разделы: MSP430, Proteus, дата: 6 февраля 2017г.

Немного максималистическая попытка сделать статью в стиле "все-в-одном", а именно: разобрать базовую периферию MSP430 и заодно использовать эту тему как ознакомительную для Proteus.

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

Я начинал статью с Proteus_8.3, а заканчивал ее под Proteus_8.5. И там и там имеются неточности если сравнивать с работой реального чипа, не следует забывать, что это всего лишь модель. И все-таки я бы посоветовал использовать версию 8.5 по той причине что там более-менее корректно работает таймер. У меня были сложности большими частотами, но возможно сказалось ограничение по производительности виртуальной машины.

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

В качестве примера рассматривается чип MSP430G2453 в 28-пиновом корпусе. Но весь материал можно экстраполировать на всю линейку MSP430x2xx.

Создание и настройка проекта в Proteus на основе микроконтроллера MSP430

Читать дальше

STM8+SPL+COSMIC+STVD: Быстрый старт

разделы: STM8, среда разработки, дата: 6 ноября 2016г.

Как всем известно, с марта этого года компилятор COSMIC for STM8 стал полностью бесплатен и без ограничений на размер генерируемого кода. Он имеет полную поддержку SPL(Standard Peripheral Library) и фирменой среды разработки - STVD(ST Visual develop IDE).

К сожалению, Cosmic работает только под операционными системами Windows, и для активации требует лецензионный ключ который можно прождать несколько дней. С другой стороны, stm8flash в Linux не умеет прошивать STM8L151C8, а с COSMIC через виртуалку вполне можно работать, да из под Wine он тоже запускается.

Ок, для начала нам потребуется скачать SPL и STVD c сайта https://my.st.com, а с сайта http://www.cosmic-software.com/download.php сам компилятор COSMIC. Как скачать SPL я рассматривал год назад в Введение в STM8: программирование и прошивка с помощью клона ST-Link v2, версия для Linux, а связку STVP+STVD весной в STM8 + IAR + ST-LINK2: программирование, прошивка и отладка из под Windows. Однако с тех многие ссылки побились, поэтому предлагаю пройти квест заново. Потому что поиск чего-то на st.com, действительно напоминает дурной квест.

В качестве целевого чипа я буду использовать STM8S103F3P6, изредка переключаясь на STM8L051/STM8L151 там, где есть необходимость.

Читать дальше

MSP430: быстрый старт с бюджетом в 150р.

разделы: MSP430, дата: 20 апреля 2016г.


Чип MSP430g2453IPW28 распаяный на адаптере TSSOP28-DIP28

Чипы AVR заслужили хорошую репутацию отчасти тем, что содержат АЦП даже в самых младших моделях микроконтроллеров. Аббревиатура MSP430 не случайно ассоциируется с DSP, данные чипы при вполне разумной стоимости могут нести в себе 16-битные или даже 24-битные сигма-дельта АЦП, а также есть целая линейка CC430 микроконтроллеров c радиомодулем(!) на борту. MSP430 (расшифровывается как Mixed Signal Processor) имеет 16-битную архитектуру что позволяет обрабатывать данные с АЦП за один прием, не обрезая их до 8-бит как на AVR. Данные микроконтроллеры изначально разрабатывались как малопотребляющие. Причем настолько малопотребляющие, что ввелась новая концепция устройств с одной батарей для всего жизненного цикла устройства. Семейства MSP430x5xx и MSP430x6xx включают в себя модуль DMA. Одним словом, это еще одна достойная замена устаревающим AVR.

Читать дальше

ATtiny13A: режимы энергосбережения, фьюзы и программный UART

разделы: AVR, ATtiny13A, дата: 10 апреля 2016г.

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

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

Справедливости ради стоит заметить, что ATtiny13 с пониженным энергопотреблением имеют индекс V. А чипы с технологией picoPower, снабжаются индексом P. Что же до ATtiny13A, согласно документации, его потребление в обычном режиме, при питании 1.8V и частоте 1МГц - 160 микро ампер. В Idle режиме при тех же условиях - 24 микро ампер. Питание 1.8В я не собираюсь использовать, меня больше интересует потребление при 3.3В.

Мой мультиметр фирмы Mastech, модель: M830BZ. Это не весть что, но если измерять потребление различных чипов одним прибором, выводы сделать можно будет.

Для работы с режимами энергосбережения в avr-gcc есть библиотека avr/sleep.h. Переводной мануал по данной библиотеке можно почитать здесь. Я же пойду по традиционному пути ковыряния регистров.

В качестве исходного примера возьмем blink из старого поста:

Читать дальше

V-REP симулятор роботов

разделы: myRobot, дата: 24 марта 2016г.

    Разработку робота можно разделить на несколько этапов:
  • разработка математической модели;
  • составление алгоритма;
  • написание программы;
  • разработка проекта;
  • изготовление;
  • испытание.

Симулятор роботов позволит проверить математическую модель и алгоритм перед тем как приступать к изготовлению робота. V-REP компании Coppelia Robotics - один из самых совершенных симуляторов в настоящее время. Программный комплекс является кроссплатформенным и бесплатным для использования в образовательных целях. Симулятор состоит из физического и графического движка, что позволяет достаточно комфортно работать с программой.

На скорую руку я отметил важнейшие элементы в интерфейсе V-REP:

Читать дальше

Отладка прошивки в Linux с помощью эмулятора SimulAVR и отладчика AVR-GDB. Чтение из Flash памяти AVR

разделы: AVR, дата: 20 марта 2016г.

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

В Linux в качестве эмулятора может выступить SimulAVR, а отладчиком avr-gdb. Собственно, работе с этим отладчиком и посвящен этот пост, потому-что им же производится отладка по JTAG. Но, пока я JTAG не разжился, придется пользоваться эмулятором. SimulAVR поддерживает небольшой набор микроконтроллеров и к том уже не всю периферию он эмулирует, но таймеры и порты преимущественно работают.

При запуске SimulAVR без параметров отобразится справка по ключам и список поддерживаемых микроконтроллеров:
Supported devices: at90can128 at90can32 at90can64 at90s4433 at90s8515 atmega128 atmega1284 atmega1284a atmega16 atmega164 atmega164a atmega168 atmega32 atmega324 atmega324a atmega328 atmega48 atmega644 atmega644a atmega8 atmega88 attiny2313 attiny25 attiny45 attiny85

К сожалению XMega не поддерживается ;) поэтому тренироваться будем на ATmega8. Для работы с отладчиком нужно будет скомпилировать прошивку с опцией -ggdb и убрать оптимизацию кода опцией -O0.

SimulAVR и AVR-GDB работают по клиент-серверной архитектуре. Первый выступает в роли сервера, второй в роли клиента.

Для отладки возьмем такой пример:

Читать дальше

ATmega168: колесный энкодер на дополнительном внешнем прерывании

разделы: AVR, myRobot, дата: 11 марта 2016г.


колесо в сборе с двигателем постоянного тока, редуктором и диском энкодера

Дополнительные внешние прерывания, относительно новая штука в периферии AVR. В микроконтроллерах ATmega8/ATmega16 их нет, зато они есть в ATmega88/ATmega168. В официальной документации они описаны в главе 13 "Внешние прерывания". В отличии от обычных внешних прерываний, в дополнительных, одно прерывание отведено на один порт (т.е. на восемь пинов), и в них нельзя выставить условия срабатывания. Прерывание будет генерироваться при любом изменении сигнала, даже если он был изменен программно, самим микроконтроллером.

    Т.о. задача состоит в следующем. Дано одно прерывание, и на него подключено два энкодера. Нужно:
  • определить какой именно энкодер вызвал прерывание;
  • определить время прошедшее с предыдущего срабатывания энкодера, т.е. интервал;
  • обеспечить защиту от "дребезга"
    Рассмотрим матчасть:
  • Диск энкодера имеет двадцать прорезей. Следовательно, поворот на одно деление примерно равно ~0.1π
  • Диаметр колеса около 66мм. Окружность 20.5 см, т.е. поворот на одно деление диска, равно примерно 1см пройденного пути.

Читать дальше

ATmega168: подключение нескольких ультразвуковых сенсоров HC-SR04 используя аналоговый компаратор

разделы: AVR, HC-SR04, myRobot, дата: 6 марта 2016г.

Компаратор это единственная периферия в AVR которая включена по умолчанию. Поэтому, если он не используется, его следует выключать. Допустимая ошибка (напряжение смещения) не более 40мВ, время отклика не более 0,5 мкс. Рабочие пины: прямой AIN0 и инверсный AIN1. Так же AIN0 называют положительным, а AIN1 отрицательным. Результат заносится в ACO бит регистра ACSR.

Официальный datasheet на ATmega168: http://www.atmel.com/images/doc2545.pdf работа компаратора описана в главе 23.2 на странице 246

    Хорошие справочные обзоры по работе компаратора в AVR можно найти здесь:
  1. Учебный курс AVR. Аналоговый компаратор
  2. AVR. Учебный курс. Использование аналогового компаратора

Я потратил немного времени на перевод официального руководства, с которым и предлагаю далее ознакомится.

Описание регистра ACSR

Компаратор управляется через регистр "Analog comparator control and status register" т.е. ACSR:

Читать дальше