Точный частотомер на MSP-EXP430G2 с выводом значений в UART


Спасибо TI за наше счастливое детство! Точнее, за LaunchPad Rev1.5. Наконец-то в наборе появился контроллер MSP430G2553 с HW-UART, а не тупые огрызки, как раньше.
Понадобилось тут частотомер на скорую руку сваять. Беглый поиск по яндексу дает отсылки на atmega/pic-частотомеры. Да еще со всякими заморочками, типа точного вычисления промежутков, да с индикацией, да со всякими счетчиками-делителями частоты.
Чего городить огород, если достаточно дать сигнал на счетный вход MSP430, и он сам все посчитает. А мы посмотрим, что он там насчитал за 1 секунду :)
А полученный результат кидается в UART (9600/N/1). И любой терминалкой его принимаем, а потом можем и в экселе результаты посчитать-посравнивать (особенно если нужно выяснить, с какой точностью сигнал у нас меряется-генерируется).
В этой программе используется прерывание WDT, происходящее раз в 1 секунду, при использовании внешнего часового кварца на 32768 гц. В результате оптимизаций удалось достичь погрешности измерений (практической) не более +-0.0003% (!) на 12мгц входящей частоты. В качестве генератора использовалась Atmega48 (с выведенным 12мгц тактом на ногу CLKO), в исходнике подстроено аккурат на нее.
Печально, но используя MSP430 в качестве генератора, получил расхождения еще больше от среднего измеренного значения (порядка +-0.04%). DCO такой DCO :(
Впрочем, как оказалось, и DCO не смертелен — главное учитывать, что он врет в абсолютном значении. У меня при питании 3.6В (лаунчпад) он выдает среднюю частоту 1039453 гц (из «калиброванного» 1mhz). Видимо, сказывается питание — калиброван-то он при 3.3В.
Прикрепляю исходники проекта для CCS5 (с использованием Grace). Тупо, дешево и сердито.
Определение ADDTCK — для использования «поправленного» значения пересчета переполнения таймера. Откалибровал по 12мгц кварцу (нет другого честного источника сигнала). В частности, для учета дополнительных команд на обслуживание математики/прерываний. Поправьте меня, если не прав.
Ноги:
P1.0 — вход для сигнала
P1.2 — Tx HW-UART (не забываем поставить джамперы в нужное положение!)
Пользуйтесь!
- 0
- 24 января 2012, 14:07
- hexus
- 1
Файлы в топике:
FreqCounter32768.zip
Просто заказать LaunchPad. У них старые запасы иссякли (у меня были производства 03/2011), сейчас высылают новые наборы Rev1.5(производство 09/2011).
Если не забуду — опишу разницу в наборах.
Если не забуду — опишу разницу в наборах.
Недавно(меньше месяца назад) заказывал Ланчпад — получил ревизию 1.4 с этими огрызками G2231. Пичаль(( А просто в Украине MSP430G2553, да еще и в DIP, малореально достать.
- Lugamodder
- 24 января 2012, 16:14
- ↑
- ↓
Хм. Вроде начали рассылать где-то с конца декабря новую ревизию. Собственно, первую версию я получил в начале декабря, рассказал друзьям. Друзьям перед НГ уже приехала новая ревизия. В январе сам заказал — приехало 4 комплекта с новыми контроллерами.
Печально, но используя MSP430 в качестве генератора, получил расхождения +-3% от среднего измеренного значения. DCO такой DCO :(Чтот много как то. А DCO калибровался с помощью часового кварца перед измерением?
- Lugamodder
- 24 января 2012, 16:22
- ↑
- ↓
На вид ее крайне мало. Во первых, хедеры теперь впаяны плату из коробки, во вторых — в комплекте MSP430G2553 и MSP430G2452 вместо 2211 и 2231. Менее заметное — изменилась распиновка «разъема» с пятью джамперами между FET и MCU частями платы. И еще убрали пару смд-деталек — кондер и резюк, подключенные к кнопке на P1.3.
Также, возможно, изменения коснулись прошивки FET'а.
Также, возможно, изменения коснулись прошивки FET'а.
Да. Насколько помню, их предлагалось выпаивать самостоятельно для работы с 430BOOST-SENSE1. Учли пожелания трудящихся. Сейчас для использования кнопки надо задать P1OUT |= BIT3; (внутренняя подтяжка к Vcc).
Изменился вкладыш-документация (упомянуты новые контроллеры, еще кое-что по-мелочи), на коробке стикер MSP-EXP430G2 Rev1.5. Шелкография на плате тоже изменилась (TXD/RXD -> UART/UART).
Обновление прошивки, скорее всего, изменилось на то же, что давало последнее обновление прошивки специальной прошивкой (старые можно обновить).
Хедеры скорее всего для домохозяек с бустер-паками :)
www.youtube.com/watch?v=YxYyWz6w9VA&feature=related
Изменился вкладыш-документация (упомянуты новые контроллеры, еще кое-что по-мелочи), на коробке стикер MSP-EXP430G2 Rev1.5. Шелкография на плате тоже изменилась (TXD/RXD -> UART/UART).
Обновление прошивки, скорее всего, изменилось на то же, что давало последнее обновление прошивки специальной прошивкой (старые можно обновить).
Хедеры скорее всего для домохозяек с бустер-паками :)
www.youtube.com/watch?v=YxYyWz6w9VA&feature=related
Вот как раз поискал :)
processors.wiki.ti.com/index.php/MSP430_LaunchPad_Firmware_Update
processors.wiki.ti.com/index.php/MSP430_LaunchPad_Firmware_Update
Да, при использовании WDT как интервального таймера, с тактированием от часового кварца точность катастрофично повышается, вплоть до +-0.0006% на 12мгц. Но пока что «не докладывает» герц при измерении (на 0.5-1%). Разберусь — выложу.
А DCO явно все-равно занижает (порядка 2-3%). Т.е. по факту ниже калиброванных величин (вероятно, из-за того, что котроллер калиброван по 3.3В, а питаем от 3.6В).
А DCO явно все-равно занижает (порядка 2-3%). Т.е. по факту ниже калиброванных величин (вероятно, из-за того, что котроллер калиброван по 3.3В, а питаем от 3.6В).
Обновил тему. Переосмыслил. Стало лучше и точнее. И команд даже поубавилось :D
Если у кого есть высокоточный генератор сигнала — проверьте. Особенно множитель дополнительного счетчика ;)
Еще бы понять, как использовать второй таймер в качестве дополнительного счетчика при переполнении первого (правда, по слухам, в этом случае все-равно используется как минимум один дополнительный такт — на сравнение и сброс счетчика).
Если у кого есть высокоточный генератор сигнала — проверьте. Особенно множитель дополнительного счетчика ;)
Еще бы понять, как использовать второй таймер в качестве дополнительного счетчика при переполнении первого (правда, по слухам, в этом случае все-равно используется как минимум один дополнительный такт — на сравнение и сброс счетчика).
У меня LaunchPad Rev 1.4 плохо работает с MSP430G2553. Прошивает. Программа в МК работает, но отладчик выводит бред.
Заказал себе платку. $4.30, доставка бесплатно. Мне начинает нравится TI. Оплатил визой, можно PayPal.
В четверг заказал, в понедельник курьер привез)
В комплекте M430G2452, M430G2553 уже установлен. Все распаяно. В качестве приложения кварц и ответные части разъемов.
Конечно цена в $4.30 (сняли 127 рублей) просто символическая. В «Каталог Электронщик» и Терраэлектронике (фактически представляют Farnell в России) такая штука обойдется в 260 рублей, доставка, посчитал FeedEx, получилось $256. Мне аж прям как то неловко)
В комплекте M430G2452, M430G2553 уже установлен. Все распаяно. В качестве приложения кварц и ответные части разъемов.
Конечно цена в $4.30 (сняли 127 рублей) просто символическая. В «Каталог Электронщик» и Терраэлектронике (фактически представляют Farnell в России) такая штука обойдется в 260 рублей, доставка, посчитал FeedEx, получилось $256. Мне аж прям как то неловко)
Да не, федексом доставка и дешевле бывает. Тем более на такие мелкие стандартные грузы. Я бы прикидывал, что техасу обошлось 15-30 баксов за отправку (с учетом их объемов).
Ну это International Priority. Я вбил на сайт фидэкса все сведения, точь-в-точь что были на документах, тип коробки, вес, индексы. Я понимаю что у них там договор и цена пониже, но, все равно, впечатляет)
Возможность начать разработку на 16 битах за такие копейки прости прельщает, хотя раньше с опаской относился к MSP430, сейчас начинаю поглядывать в их сторону.
Возможность начать разработку на 16 битах за такие копейки прости прельщает, хотя раньше с опаской относился к MSP430, сейчас начинаю поглядывать в их сторону.
главное знать, что мсп не работает с HF-кварцами (нужен хотя бы генератор), и нет еепром в G-серии (только флеш с постраничным стиранием и ограниченным ресурсом)…
Я пока не вникал особо, но так, на вскидку, нашел встроенный DCO, который может давать 8/12/16 МГц тактовой, но, наверное, по температуре плавает и нужно калибровать. Количество перезаписей флеша минимум 10 000, типичное — 100 000, что не хуже чем у EEPROM в AVR. Да и вообще, хорошая идея избавиться от лишнего элемента.
Надеюсь доживу до того момента, когда объединят и Flash, и RAM, и EEPROM. Уже есть FRAM память достаточного для МК объема, остается только ждать)
Надеюсь доживу до того момента, когда объединят и Flash, и RAM, и EEPROM. Уже есть FRAM память достаточного для МК объема, остается только ждать)
DCO и калибровать/учитывать надо, и плавает оно порядочно (около +-0.03% намерял). Флеш в мсп заявлено на 1000 циклов. Неудобно работать в том, что записав ячейку, ты не можешь сделать «кольцо» — ибо потом надо стирать всю страницу сразу перед новой записью поверх.
Тем, что в произвольный момент будем иметь не последние н-результатов, а от 1(0) до максимума. Причем независимо от реального количества измерений.
Я выкрутился в проекте тем, что меряло до максимума, дальше честно выводило ошибку переполнения. Стирание оставлял на волю пользователя. Может ему еще нужны «те» результаты.
Я выкрутился в проекте тем, что меряло до максимума, дальше честно выводило ошибку переполнения. Стирание оставлял на волю пользователя. Может ему еще нужны «те» результаты.
Комментарии (38)
RSS свернуть / развернуть