Msp430 подключение к компьютеру
Здравствуйте! Я хочу поделиться с хабрасообществом одним необычным применением отладочной платы MSP430-Launchpad.
Руководство предназначено тем, кто уже имеет MSP430-Launchpad, освоил микроконтроллеры MSP430-ValueLine и задумывается о том, чтобы перейти на более продвинутые МК MSP430, но пока не решился на то, чтобы приобрести профессиональный программатор MSP430-JTAG или MSP430-UIF. Но это не страшно. В качестве программатора можно пока будет использовать Launchpad. Под катом я расскажу как это сделать.
Оказывается, что программатор, входящий в состав платы Launchpad может прошить любой микроконтроллер (МК) MSP430, имеющий интерфейс SpyByWire (SBW). Каких-либо ограничений на модель МК по-видимому нет. Баг ли это Launchpad'а или так и задумала Texas Instrunmets неизвестно. По интерфейсу SBW программируется в том числе МК MSP430G2553 и MSP430G2452, которые идут в комплекте с платой. Убедиться, что в микроконтроллере есть интерфейс SBW можно посмотрев его даташит. Мы в качестве подопытной платы будем использовать самодельную отладочную плату с микроконтроллером MSP430F5438A. Интерфейс SBW в этом МК есть. Плата выглядит вот так:
Теперь нужно снять перемычки, которые соединяют верхнюю часть платы Launchpad с нижней и вывести провода с контактов RST,TEST,VCC,VSS. Эти провода нужно связать самодельным кабелем с ножками МК в следующем порядке (в скобках дана нумерация выводов для МК MSP430F5438A):
На следующей картинке ножки MSP430F5438, к которым нужно подключится отмечены крестиком:
Теперь делаем самодельный кабель, подключаем его к MSP430F5438 и к Launchpad. Должно получиться примерно так:
МК из розетки DIP-20 нужно извлечь. При этом МК на подопытной отладочной плате будет запитан от Launchpad, который в свою очередь питается от USB. Теперь можно подключить USB кабель в Launchad и подключить его к компьютеру. Если всё сделано правильно, то на Launchpad должен гореть зелёный светодиод PWR. Если перепутаны VSS и VDD, то светодиод не горит.
Теперь можно проверить опознаётся ли микроконтроллер. Далее я буду использовать ОС Linux и утилиту mspdebug. Если у вас другой toolchain для MSP430 то смотрите документацию к нему.Теперь проверим опознаётся ли наш МК. В консоли наберём:
Плата должна дать такой ответ:
В результате мы должны попасть в консоль mspdebug. Чтобы выйти оттуда, введите exit. Если МК не ответил, то проверяйте кабель.
Если получили такой ответ, то МК распознался и можно его программировать командой:
Через Launchpad программирование идёт очень медленно. 8кБ прошивается несколько минут. В остальном каких-либо ограничений нет.
В общем, приведённый способ профессиональный программатор не заменит, но со «взрослыми» МК серии MSP430 тем не менее можно не только ознакомиться но и полноценно работать, если не обращать внимание на низкую скорость прошивки.
Целью данной статьи является помощь в начале освоения микроконтроллеров MSP430 фирмы Texas Instruments.
Была сделана попытка систематизировать действия, которые позволят минимальными усилиями сделать первые шаги в освоении данного типа микроконтроллеров, не перегружая при этом специфичными и иногда трудными (если не сказать отталкивающими) сведениями. Статья не претендует на полноту обзора указанных микроконтроллеров, а лишь позволяет сделать первые шаги на пути их освоения.
Преимущества MSP430:
1. Очень широкая линейка для практически любых задач.
2. Очень широкий ряд корпусов, от DIP до очень мелких типа pqfp.
Весь доступный ряд можно посмотреть с помощью удобной странички от TI:
Перейдя по ссылкам слева и выбирая нужную серию попадаем в каталог:
Где можно выбрать нужный себе кристалл по объему Flash-памяти, ОЗУ, наличию USART, АЦП, корпуса и т.д. Сразу скажу, что я не использовал корпуса типа DIP. Корпус типа SOIC легко распаивается на самодельную плату изготовленную по технологии ЛУТ. Достаточно стабильно у меня получаются платы и для корпусов типа PW (расстояние между ногами 0,65мм).
3. Сверхнизкое потребление питания (бывает ну крайне важно). На этом остановимся поподробнее ниже с примерами и цифрами.
4. Мне также например нравиться то, что для одного и того же типа корпуса расположение ног для разных серий и типов в пределах серии одинаково. Это дает возможность легко заменить один тип на другой без изменения печатной платы.
5. Немаловажно, что все типы микроконтроллеров можно бесплатно заказать у TI для освоения.
В качестве примера два разных MSP430 в одинаковом корпусе, MSP430f2619 и MSP430f149:
Для начала освоения выберем msp430f1232 или msp430f1222, они отличаются только объемом flash памяти и абсолютно идентичны по расположению ног. Я считаю этот микроконтроллер самым ходовым в радиолюбительской практике. Его плюсом можно также назвать наличие модели его младшего брата msp430f1121 (без usart) в Proteus.
На этой странице есть даташит, а по этой ссылке прочие документы.
Документация от TI имеет особенность (для тех кто уже знаком с микроконтроллерами от, например AVR ATMEL). В даташите указываются специфичные именно для этого камня особенности (количество памяти, наличие USART, электрические характеристики и т.д.). А описание регистров находятся в документе MSP430x1xx Family User's Guide (Rev. F) для серии msp430f1xx. Этот документ общий для всей серии.
Есть также настольные книги "руководство пользователя" и "рекомендации по применению".
А также примеры исходных кодов для семейства msp430f1x по ссылке.
Минимальная обвязка для включения микроконтроллера:
Сперва нам понадобятся макетка и программатор.
Пример моей макетки в файле к статье.
Теперь небольшое отступление на предмет программатора.
Микроконтроллеры msp430 могут быть запрограммированы следующим образом:
4-х проводной JTAG (прошивка и отладка (очень удобно)) бывает LPT и USB.
2-х проводной JTAG, так называемый Spyi-Bi-wire (прошивка и отладка) только USB.
BSL - последовательный интерфейс (только прошивка). COM или USB-COM.
Не все микроконтроллеры могут быть зашиты всеми указанными программаторами. Смотреть надо в даташите на каждый камень. (Так рекомендуемые для начала работы MSP430F1232 можно шить только по 4-х проводному JTAGу или по BSL) .
Где взять программатор? Естественно можно купить. Есть дорого фирменные от TI или от Olimex, а также море китайских клонов.
Например BSL (хотя bsl можно сделать из любого шнурка от сотового в котором есть линии RTS и DTR) можно найти на AliExpress.
JTAG через USB
JTAG через LPT
Также на сайте TI можно почти за даром заказать LaunchPad:
Который в своем составе имеет 2-х проводной JTAG Spy-Bi-Ware USB, но к сожаленью этот Spy-Bi-Wire есть не во всех камнях. Я поигрался. Мне не пригодилось (у меня практически не было камней с поддержкой spy-bi-wire) и я его отдал другу для освоения.
Также программатор можно сделать и самостоятельно. Где взять детали, смотрите в конце статьи.
В архиве программатор bsl.rar схема BSL программатора на переходнике USB-COM
В архиве программатор JTAG LPT-FET.rar схема и печатка для программатора LPT-FET. Необходимо отметить, что это упрощенная мной схема LPT-FET от Olimex
И ей требуется внешнее питание 3.3В от платы микроконтроллера. Плата получилась компактная и умещается в корпус DB-25.
Для BSL программатора корпуса еще нет, но скорее всего это будет кусок кабель-канала нужного сечения.
Выходные сигналы BSL программатора выведены на разъемы типа PLS. И отдельно выведено питание 3.3В (бонусом так сказать)
Оба типа мной собраны и работают.
Программировать через JTAG можно из среды разработки. А для программирования через BSL используется бесплатная и удобная программа от Kurt-а MSPFET. (Приложена в архиве или может быть скачана по ссылке)
Разработка кода может вестись в различных средах
Итак, допустим макетка сделана (нам в первую очередь нужно запаять стабилизатор на 3.3Вольта, светодиод на ножку P1.0 и разъем для LPT-FET. Кварц и прочее можно допаять позже). Программатор LPT-FET тоже.
Устанавливаем и запускаем IAR. Нажимаем create new project:
Даем свое название и вот окно проекта с типовым шаблоном.
Перво наперво правой кнопкой мыши кликаем по: название - debug -> option
Выбираем наш микроконтроллер
Меняем тип отладчика
Задаем, что у нас программатор lpt от olimex на lpt1
В окне сишного кода меняем весь на код из файла demo led.c, нажимаем F7 и видим:
Нажимаем зеленый треугольник и происходит заливка кода в микроконтроллер:
В открывшемся окне нажимаем "GO" старт программы:
В итоге, видим мигающий светодиод на плате.
Если у вас программатор типа BSL, то порядок действий следующий: в IAR выбираем нужный контроллер. Пишем код (например demo led.с).
Правой кнопкой по debug, option и ставим настройки в пункте linker как на рисунке:
Жмем F7. Запускаем MSPFET от Kurta. Открывается окно. Нажимаем Setup. Выбираем программатор BSL.
Ставим настройки для выходных ног, патча бутлодера (есть фишка, но нам сейчас не надо), скорости (тоже пока не надо) и т.д.
Для программатора сделанного из TUSB3410 настройки выглядят так.
В выпадающем списке выбираем нужный микроконтроллер.
Меню, открыть, и идем в каталог где лежит наш тестовый проект. В нем ищем каталог Debug. В нем ищем каталог EXE:
И там выбираем файл прошивки с расширением .a43:
Открываем. Нажимаем кнопку auto. Все процесс пошел. В случае удачных действий получаем картинку
И мигающий светодиод. (Если в настройках msp-fet от Kurta поставить галочку перегружать файл, то в дальнейшем нет необходимости повторять все действия. Изменил прошивку в IAR. Нажал F7. Зашел в MSPFET. Нажал auto.)
Теперь вкратце об особенностях микрконтроллеров msp430.
Супер гибкая система тактирования. В примере мы использовали внутренний генератор на 750кГц. Можно изменять его частоту регистрами настройки DCO (смотри руководство пользователя). Можно на ноги XIN XOUT повесить кварц часовой или высокочастотный (причем для часового кварца конденсаторы уже есть внутри камня и их номинал можно выбирать). В программе можно легко переключаться с одного источника тактирования на другой. В купе с разными режимами спячки можно обеспечить беспрецедентное снижение энергопотребления. Например, затактировать таймер от ACKL настроенный на 32768Гц от часового кварца. Разрешить прерывание от таймера. В прерывании разбудить ядро и настроить тактирование ядра на максимальную частоту, быстро сделать необходимые вычисления и уйти опять в глубокий сон. Подробное описание систем тактирования и режимов питания смотрите в руководстве пользователя.
Вот простой пример для повторения.
Зашьем код из файла norma.c
Включаем через миллиамперметр и видим, что в моменты когда светодиод не горит ток потребления 230мкА.
Зашьем код из файла LPM0.c
Включаем через миллиамперметр и видим, что ток потребления 50мкА. (Данные замеры проводились тестером на пределе 20мА, но в качестве иллюстрации сойдет). Особенно целесообразно применение данных микроконтроллеров в паре с ЖК экранами, где столь малое энергопотребление проявляется в полной мере.
Кстати такое низкое потребление порождает и соответствующие проблемы, связанные с паразитным питанием. Особенно если учесть, что для питания достаточно 1.8В. При довольно насыщенной схеме, контроллер стартует от всего подряд, вплоть до usart. Поэтому будьте внимательны. Часто, микроконтроллер не выходит на связь с JTAG, пока не отключишь внешние схемы (если не приняты меры по исключению паразитного питания и согласования уровней).
Что не очень понравилось в MSP430 0- так это неудобно реализованная работа с Flash памятью для хранения каких либо переменных пользователя. Так называемая память info разбита на сегменты по 128 байт и беда в том, что записать можно в каждую ячейку отдельно, но только один раз. Для изменения ранее записанной ячейки необходимо стереть весь сегмент и заново записать в нужную ячейку. Это приводит к тому, что перед изменением любой ячейки необходимо сначала прочитать в ОЗУ все используемые ячейки, изменить необходимую, стереть весь сегмент и записать из ОЗУ все во info flash.
Итак, первый проект Вы удачно сделали и зашили в контроллер. Что дальше?
Для освоения периферии мне очень помогли примеры использования MSP430 от TI, ранее упомянутые в статье. Много примеров и проектов есть в книге "рекомендации по применению" от КОМПЭЛ.
Если вы решили сами собрать программатор для MSP430, то я рекомендую зарегистрироваться на сайте TI с указанием своего реального номера телефона и может быть даже выдуманным местом работы.
Заказать в качестве бесплатных образцов следующие компоненты:
- MSP430F1222IDW корпус soic
- MSP430F1232IDW корпус soic
- преобразователь COM-usb tusb3410 (для bsl программатора)
- стабилизатор reg104-3.3 в корпусе SOT223-5
Привезут в течении недели, возможно перед этим позвонят и спросят на русском языке зачем Вам это необходимо. Тут уж каждый сам за себя. Придумывайте что хотите. Как привезут, позвонят еще раз из службы доставки. Именно поэтому должен быть правильный телефон и адрес.
Сегодня, уважаемый хабрапользователь, я постараюсь заполнить некоторый пробел, образовавшийся в статьях об MSP430, а именно азы и подход к программированию устройств на данном микроконтроллере.
Эта статья прежде всего направлена на новичков, поскольку я буду рассматривать ряд достаточно простых задач, таких как работа с SPI, мигание лампочкой и отладка в proteus.
Введение
В данной статье будет рассмотрено устройство, в основу которого легла отладочная плата eZ430-RF2500. На плате находится микроконтроллер MSP430F2274 и беспроводной модуль CC2500, который, надо заметить, не будет рассмотрен далее.
Моим коллегой, Соколовым С. А., была изготовлена небольшая надстройка для этого отладочного комплекта, она присоединена ко всем выводам. На надстройке расположен акселерометр LIS331DLH, с которым мы и будем взаимодействовать по SPI.
Должен заметить, что устройства STMicroelectronics, работающие по SPI, очень похожи и, соответственно, работа с ними будет выглядеть примерно также.
Что нам потребуется
Среда разработки
Для начала нужно скачать и установить среду разработки и компилятор. На сегодняшний день существует три варианта — Code Composer Studio, IAR Embedded Workbench for TI MSP430 и mspgcc.
Я буду использовать Workbench KickStart Edition. KickStart бесплатный, он имеет ограничение по количеству кода, но для изучения этого более чем достаточно.
Средство отладки
Если у вас нет под рукой осциллографа или логического анализатора, то часто возникают сложности, связанные с непониманием того, что же на самом деле происходит в вашем устройстве. Понять причины того, почему же устройство отказывается работать часто помогает Proteus.
В нём можно найти очень многие микроконтроллеры MSP430. К сожалению MSP430F2274 в Proteus не оказалось, но имеется аналог — MSP430F2272, его и будем использовать.
Приступим к написанию кода
Создание проекта
Работа с портами
Первое, что стоит освоить в микроконтроллере — это работа с портами. Давайте рассмотрим небольшой пример.
void main ( void )
<
WDTCTL = WDTPW + WDTHOLD ;
P1DIR & = ~BIT2 ;
P1REN | = BIT2 ;
P1DIR | = BIT1 + BIT0 ;
PxDIR отвечает за направление порта 1. Когда конкретный бит данного регистра установлен в 0, соответствующий пин работает на вход. И наоборот, если соответствующий бит установлена в 1, то пин работает на выход. В примере фигурируют 3 пина: P1.2 — кнопка, P1.0 — красный светодиод, P1.1 — зеленый светодиод.
PxREN включает внутренний резистор подтяжки. Кнопка замыкает пин на землю, и, соответственно, переводит его в состояние нуля. Когда кнопка не нажата пин ни к чему не подключен и для обеспечения логической единицы на нём требуется подключить его через резистор к питанию, что и делает регистр P1REN.
PxIN и PxOUT содержат в себе состояние пинов порта. Устанавливая ноль или единицу в регистр PxOUT мы меняем напряжение на лапке микроконтроллера, тем самым включая и выключая светодиод. Читая конкретный бит из регистра PxIN мы получаем логический сигнал, который сейчас подан на пин.
PxSEL выбирает функцию пина. В datasheet на изображении микроконтроллера функции обычно указывают через знак «/».
Например на рисунке P2.7 работает как обычный пин в случае, если P2SEL имеет 0 в соответствующем разряде. По умолчанию, в данном случае, там установлена единица, что означает, что эта лапка предназначена для подключения внешнего часового кварцевого резонатора.
Константы BIT0..BITF содержатся в файле msp430f2274.h и представляют собой 16-ти разрядные слова в заданном разряде которых содержится 1, все остальные разряды содержат 0.
Надо заметить, что файл msp430f2274.h содержит много полезной информации. Там находятся все константы контроллера с комментариями на английском.
В примере используются побитовые операции Си, «|=» установит соответствующий значению справа бит в регистре слева в единицу, а «&= ~» напротив установит его в 0.
Работа с SPI
unsigned char spi ( unsigned char data, unsigned char dataEx = 0x00 ) ;
void main ( void )
<
WDTCTL = WDTPW + WDTHOLD ;
P1DIR | = BIT0 + BIT1 ;
P1OUT & = ~BIT0 ;
P1OUT & = ~BIT1 ;
P3SEL = BIT1 + BIT2 + BIT3 ;
P3DIR | = BIT0 ;
P3OUT | = BIT0 ; // Отключаем CC2500 (устанавливаем 1 на CS)
P2SEL & = ~BIT6 ;
P2SEL & = ~BIT7 ;
P2DIR | = BIT6 + BIT7 ;
P2OUT | = BIT6 ; // Отключаем датчик температуры (тоже подключен к SPI)
P2OUT | = BIT7 ; // Отключаем акселерометр
// Конфигурируем SPI
UCB0CTL0 | = UCMSB + UCMST + UCSYNC ;
UCB0CTL1 | = UCSSEL_2 ;
UCB0BR0 = 0x02 ;
UCB0BR1 = 0 ;
UCB0CTL1 & = ~UCSWRST ;
if ( spi ( 0x8F ) == 0x32 )
<
P1OUT | = BIT1 ; // Красный светодиод
>
P1OUT | = BIT0 ; // Зеленый светодиод
>
unsigned char spi ( unsigned char data, unsigned char dataEx )
<
unsigned char RX ;
P2OUT & = ~BIT7 ; // Включаем акселерометр
while ( ! ( IFG2 & UCB0TXIFG ) ) ; // Ожидаем готовность буфера отправки
UCB0TXBUF = data ;
while ( ! ( IFG2 & UCB0RXIFG ) ) ; // Ожидаем готовность буфера приёма
RX = UCB0RXBUF ;
while ( ! ( IFG2 & UCB0TXIFG ) ) ;
UCB0TXBUF = dataEx ;
while ( ! ( IFG2 & UCB0RXIFG ) ) ;
RX = UCB0RXBUF ;
В примере запрашивается значение регистра по адресу 0x8F, там содержится код, который идентифицирует устройство. Этот код указан в datasheet. Это позволяет убедиться в том, что обмен данными произошел. В случае успеха включаем красный светодиод.
Соответственно все остальные устройства подключенные к SPI необходимо отключить от интерфейса. Для этого CS на них устанавливается в единицу.
Заключение
В следующий раз постараюсь рассказать подробнее про работу с LIS331DLH, добраться до прерываний, поработать со встроенным в программатор мостом USB-UART и рассказать немного про watchdog.
Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.
Последние посетители 0 пользователей онлайн
Какой именно УВ выбран для повторения? Если с "охлаждением" входного сопротивления, то частоту резонанса выбирать не нужно, но необходимо тестовым меандром 1кГц прогнать линейную часть УВ, накрутив подстроечник "охлаждения" так, чтобы прошедший через входной контур и ОУ сигнал был бы наиболее похож на подаваемый прямоугольник, т.е. задавить резонанс, но при этом и не перестараться. Дальнейшая коррекция как обычно.
А для чего нам глубина ООС на единицах герц прочие измышления Сухова, которые кроме него никто не наблюдал, судя по списку литературы? Сдается мне что все это чушь. А задача у интегратора одна - убирать постоянку на выходе, которой тут взяться неоткуда, так как усилитель не УПТ - имеет разделительный конденсатор на входе.
Два одновибратора, с выходами, развязанными диодами и нагруженными на реле. Если действительно нужен контакт 2 типо "кнопка", и не обойтись логическим уровнем.
Надо перестать мыслить неправильно. Я же объяснил - надо рассматривать свойства усилителя с ОС целиком. Невозможно выделить из целого ни сопротивление обмотки трансформатора, ни внутреннее сопротивление какой бы то ни было лампы. Только выходное сопротивление целого устройства. Без ПОС по току выходное сопротивление равно выходному сопротивлению выходного каскада, а вовсе не сопротивлению вторичной обмотки. При увеличении глубины ПОС уменьшается выходное сопротивление усилителя.
Как сказывается на крутизне характеристики интегратора изменение емкости конденсатора в цепи обратной связи.
Здравствуй, уважаемый хабрапользователь.
В предыдущей статье мы начали рассматривать программирование под MSP430.
Материал, описанный в данной статье, позволит в общих чертах ознакомиться с прерываниями и понять некоторые тонкости MSP430.
Введение
Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.
Механизм прерываний создан для обеспечения максимально оперативной реакции программы на определенные события. Это очень важная часть знакомства с любым микроконтроллером.
Прерывания
В данном примере по нажатию на кнопку (P1.2) происходит прерывание, которое меняет состояние двух светодиодов (P1.0 и P1.1). Давайте разберёмся как же это происходит.
PxIE разрешает прерывания для пинов порта Px. Значение «1», записанное в определенный разряд позволяет получать прерывания от определенного пина.
PxIES определяет по какому уровню сигнала будет происходить прерывание. В нашем случае это означает, что единица, помещенная в конкретный разряд данного регистра, позволит получать событие нажатия кнопки. И наоборот, ноль позволит получать событие отпускания кнопки.
Напомню, что кнопка в данном примере «подтянута» до единицы, это означает что нажатая кнопка имеет значение ноль.
На схеме подключения резистор R1 нарисован показательно, на самом деле он находится внутри микроконтроллера и включается регистром P1REN.
PxIFG и есть флаг прерывания. В случае возникновения события нажатия кнопки он будет установлен в единицу, что и вызовет обработчик прерывания (__interrupt void P1INT()). Соответственно, сразу после обработки события флаг необходимо сбросить.
Попробуйте убрать из примера строчку 32 в конце обработчика, и тогда, сразу после первого нажатия кнопки, лампочки будут переключаться так, как будто вы постоянно нажимаете на кнопку.
__bis_SR_register(GIE) устанавливает флаг глобального разрешения прерываний (Global Interrupt Enable) в status register. Фактически это эквивалентно записи SR |= GIE, но мы можем обращаться к регистру SR только по средствам функций __bis_SR_register и __get_SR_register.
Ниже приведена схема битов в SR регистре.
0, 1, 2 и 8 биты — это биты математических операций.
4, 5, 6, 7 — биты управления уровнями энергопотребления, за счёт уменьшения частоты или отключения АЛУ.
Ну и собственно бит 3 — это глобальное разрешение прерываний. Пока этот бит не установлен в единицу, никакие прерывания обрабатываться не будут.
Дребезг контактов
- Сразу после вызова обработчика устанавливается запрет прерываний (строка 25);
- после переключения состояний светодиодов делается задержка (строка 30);
- снова устанавливается разрешение прерываний (строка 31).
Заключение
Читайте также: