|
|
  |
eZ430-F2013, впечатления |
|
|
|
Dec 14 2009, 13:08
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Просьба откликнуться тем, кто пользовался конроллером-конструктором eZ430-F2013. 1) На плате установлен МК MSP430x20x1. Правда ли, что его ток потребления всего лишь 220 мкА? 2) По какой технологии выполнен этот чип (мои версии - ABT, BTL, CMOS, TTL)? В даташите на него указано " 16-Bit RISC Architecture, 62.5 ", но архитектура и технология - различные понятия или я не прав?
Думаем покупать этот набор, прошу знатоков посоветуйте, пожалуйста, на что обратить внимание?
|
|
|
|
|
Dec 14 2009, 14:03
|

Знающий
   
Группа: Свой
Сообщений: 723
Регистрация: 29-08-05
Из: Березовский
Пользователь №: 8 065

|
Цитата(VVlad @ Dec 14 2009, 18:08)  Просьба откликнуться тем, кто пользовался конроллером-конструктором eZ430-F2013. 1) На плате установлен МК MSP430x20x1. Правда ли, что его ток потребления всего лишь 220 мкА? 2) По какой технологии выполнен этот чип (мои версии - ABT, BTL, CMOS, TTL)? В даташите на него указано " 16-Bit RISC Architecture, 62.5 ", но архитектура и технология - различные понятия или я не прав?
Думаем покупать этот набор, прошу знатоков посоветуйте, пожалуйста, на что обратить внимание? 1. Вопрос задан не совсем корректно. Например, я использую в своих изделиях (пожарные извещатели) именно F2001. У меня микроконтроллер просыпается примерно 1000-1300 раз в секунду, делает свою работу и вновь засыпает. При этом он хавает примерно 30-40 мкА. Кроме того, следует заметить, что напряжение питания тоже очень сильно влияет на энергопотребление. 2.  методом исключения -- остается только CMOS. Сдается мне, что Вас интересует не этот вопрос, а какой-то другой. Уровни входных сигналов, входные токи? Задавайте вопрос прямо, а технология... -- Вам ехать надо, а Вы шашечками интересуетесь? 3. Я не понял, что Вы собираетесь покупать -- eZ430-F2013 или MSP430x20x1? Если первое ("свисток"), то для радиолюбительства сойдет, но не для промышленных применений. Не надежен, прошивка слетает, бит защиты жечь не может... в общем букет. Я убил несколько штук, потом купил MSP430-UIF и все заморочки закончились. Если второе -- MSP430F20x1, то это нормальный МК. Правда, памяти у него -- кот наплакал, но ведь и задачи разные: смотря что МК должен, может под Вашу задачу он будет вокурат. Как знать!
--------------------
Хочешь рассмешить Бога -- расскажи ему о своих планах!
|
|
|
|
|
Dec 14 2009, 14:32
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Цитата(zhevak @ Dec 14 2009, 17:03)  Если первое ("свисток"), то для радиолюбительства сойдет, но не для промышленных применений. Не надежен, прошивка слетает, бит защиты жечь не может... в общем букет. Я убил несколько штук, потом купил MSP430-UIF и все заморочки закончились. Если второе -- MSP430F20x1, то это нормальный МК. Правда, памяти у него -- кот наплакал, но ведь и задачи разные: смотря что МК должен, может под Вашу задачу он будет вокурат. Как знать! Jorikdime - ну просто интересно. to Zhevak- 1) если он так часто у вас просыпается, то сколько же времени он работает от проспался до заснул (один цикл)? Если 220 мкА при непрерывной работе, в 5 раз меньше за счёт скважности , неужто  за 166 мксек можно успеть 2500 команд? 2) ну просто интересно, пусть будет CMOS. Первым делом мы испортим самолёты, ну а девушек... и шашечки - потом. 3) Покупать собираемся комплект, вот поэтому и обращаюсь к добрым профессионалам за консультацией. Если так легко сломать "свисток", то на что обращать внимание в первую очередь? Статика? Или питание? Спасибо за сочувствие, но MSP430-UIF дороговат пока. Задача - измерение напряжения от электродных датчиков - они крайне чувствительны к входному сопротивлению схемы (например, для измерения рН входной импеданс должен быть порядка 10^15 Ом). АЦП хотели сначала MAX1301, но цена 2700 руб за штуку отпугнула. Не посоветуете ли недорогой АЦП 16-разрядный, с униполярным питанием 5 Вольт и приёмом сигналов +-12 (15 Вольт)?
Сообщение отредактировал rezident - Dec 16 2009, 01:00
Причина редактирования: Излишнее цитирование.
|
|
|
|
|
Dec 28 2009, 08:20
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Цитата(mdmitry @ Dec 14 2009, 18:57)  Это как??? У Вас опорный источник должен быть не менее чем размах сигнала. Обычно диапазон существенно меньше +-12 (15) В. Так как Вам требуется ОЧЕНЬ большое входное сопротивление, то напрашивается нормирующий усилитель с необходимым входным сопротивлением и скорректированным под возможности АЦП диапазоном выходного сигнала. Верно, в MSP430F2012 есть встроенный АЦП. Можно ли его использовать при размахе от -2 до +2 Вольт? Относительно MAX1301 - вот поэтому его цена и зашкаливает 2700-3100 руб. за корпус. В качестве нормирующего усилителя решили ставить AD797 ( с входным шумом в 1.2 nV/sqrt(Hz)) или 795-й с входным импедансом 10^14 Ом. Если нормирующий будет работать с коэффициентом усиления меньше 1 , то из размаха в 4 Вольта можно ужать до 3 Вольт. Но как быть с отрицательными напряжениями?
|
|
|
|
|
Dec 28 2009, 14:31
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Да, на плате исходно стоял МК MSP430F2013 c 16-разрядным АЦП, и его ценность навела на мысль заменить более дешевым MK MSP430F2012 c 10-разрядным АЦП. Встал вопрос, как его проверить. Поиск на форуме привёл к монографии Chrisa Nagy http://upload.caxapa.ru/mcu/msp430/Using%20MSP430.rar , где на странице 90 приведён пример программного кода для работы с АЦП от встроенного температурящего диода. Попытка компиляции его в IAR Embedded Workbench IDE ощенилась 5 ошибками и тремя предупреждениями. Ниже приведён так и недокомпилированный исправленный вариант. CODE #include "io430.h"
int main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; cout << Determine_Temp(0); cout << Determine_Temp(1); return 0; } signed long Determine_Temp (unsigned char BooleanFlag) // This function returns device temperature, based on an ADC conversion // The passed parameter acts as a flag. If it is zero, the temperature is // returned in degrees Fahrenheit. If it is non-zero, it is returned in // degrees Celsius. { signed long Temperature=25; //Define and initialize working variable ADC12CTL0 = SHT0_6 + SHT1_6 + REFON + ADC12ON; // Initialize control register 0. Sets up conversion clock, internal reference ADC12CTL1 = SHP; //Conversion sample timer signal is //sourced from the sampling timer ADC12MCTL0 = INCH_10 + SREF_1; //Use internal reference with //respect to ground, Temp sensor //is on input channel 10. ADC12CTL0 |= ADC12SC + ENC; //Enable and start conversion while (ADC12CTL1 & 0x01); //Hang in loop until conversion //completes. Temperature = ADC12MEM0 & 0x00000FFF; Temperature *= 845; //These steps convert the ADC reading //to degrees Celsius Temperature = Temperature >> 13; Temperature -= 278; if (BooleanFlag) return Temperature; //Return temperature in degrees //Celsius, if required Temperature *=461; Temperature = Temperature >> 8; //Otherwise, convert to Fahrenheit and //return Temperature +=32; return Temperature; }//End Determine Temperature Function
1) Верна ли догадка о том, что в пакете IAR нет функции вывода текстовой строки по формату (cout не работает)? 2) Как правильно сформулировать вопрос, что следует изменить в тексте, чтобы он откомпилировался?
Сообщение отредактировал rezident - Dec 28 2009, 18:20
Причина редактирования: Оформление цитаты исходника.
|
|
|
|
|
Dec 29 2009, 07:41
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Спасибо за подробный и ясный ответ, Jorikdima.
Первое сомнение. В приведённом со страницы коде исходно была строка " Temperature >> = 13;" Смысл её - путем сдвига вправо на 13 бит отсечь неинформативные значащие цифры и шумы, уменьшив также результат в 2^13 раз. Компилятор не принял такой орфографии и строка была заменена на "Temperature = Temperature >> 13";
Извините заранее за неумный вопрос, но зачем присваивается начальное значение 25? (Среднея комнатная температура в градусах Цельсия?).
Строка "Temperature = ADC12MEM0 & 0x00000FFF;" обнуляет старшие пятьполубайт, сохраняя три младших (12 бит). Умножение на 845 (1101001101) для конверсии в градусы Цельсия добавляет 10 бит, а после сдвига на 13 имеем 9 значащих двоичных цифр, соответствующих трёхзначному десятичному числу в градусах Кельвина. Прав ли я, что строку "Temperature -= 278;" следует исправить на "Temperature -= 273;"?
Относительно загадошной фразы на стр. 89 "This code is written assuming 3.35 mV/°C, as is the case with the ’149 device. If you are using a different device, check your datasheet for the correct value." думаю, что 149 - это номер серии термочувствительных диодов, встроенных в МК, а значение 3.35 должно влиять на коэффициент 845. Но смысл формулы мне найти пока не удалось (845\3.35 = 252). Поделитесь идеями, пожалуйста.
По существу, на странице 28 "IAR C LIBRARY FUNCTIONS Reference Guide" есть описание функции printf (stdio.h), так что COUT не понадобилось.
И на стр. 25 "MSP430 IAR Embedded Workbench® IDE User Guide" показано как создать рабочее место (workspace window), потом файл проэкта и в нем файл с кодом программы.
Сообщение отредактировал VVlad - Dec 29 2009, 08:40
|
|
|
|
|
Dec 30 2009, 01:02
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(VVlad @ Dec 29 2009, 12:41)  Компилятор не принял такой орфографии и строка была заменена на "Temperature = Temperature >> 13"; А какую ошибку выдал? Вполне возможно, что достаточно было привести константу к типу переменной Код Temperature >>= 13L; Цитата(VVlad @ Dec 29 2009, 12:41)  Строка "Temperature = ADC12MEM0 & 0x00000FFF;" обнуляет старшие пятьполубайт, сохраняя три младших (12 бит). Умножение на 845 (1101001101) для конверсии в градусы Цельсия добавляет 10 бит, а после сдвига на 13 имеем 9 значащих двоичных цифр, соответствующих трёхзначному десятичному числу в градусах Кельвина. Прав ли я, что строку "Temperature -= 278;" следует исправить на "Temperature -= 273;"? В данном примере используются "магические числа" для того, чтобы делать вычисления с дробными величинами, не используя арифметику "плавающих" чисел, для которой потребуется соответствующая библиотека. Библиотека обычной "плавучки" порядка 600 байт кода добавит. Умножение на 845 и затем арифметический сдвиг на 13 бит вправо эквивалентно умножению на дробь 845/8192=0,103149. Цитата(VVlad @ Dec 29 2009, 12:41)  Относительно загадошной фразы на стр. 89 "This code is written assuming 3.35 mV/°C, as is the case with the ’149 device. If you are using a different device, check your datasheet for the correct value." думаю, что 149 - это номер серии термочувствительных диодов, встроенных в МК, Под " ’149 device" имеется в виду тип микроконтроллера - MSP430F149. Цитата(VVlad @ Dec 29 2009, 12:41)  а значение 3.35 должно влиять на коэффициент 845. Но смысл формулы мне найти пока не удалось (845\3.35 = 252). Поделитесь идеями, пожалуйста. 3,35мВ/°C это наклон линейной части характеристики встроенного диода, который является термочувствительным элементом в MSP430F149. Формула для расчета по этой характеристике имеется в User's Guide в разделе ADC12 operation -> Using the Integrated Temperature Sensor. VTEMP=0.00355В/°C*(TEMPC)+0.986В Из нее выводится формула для температуры T[°C]=V TEMP / 0.00355В/°C - 0.986В / 0.00355В/°C С учетом, что АЦП 12-битный, а величина опорного напряжения VREF=1,5В получается V TEMP=V REF/4096*ADC12code откуда T[°C]=ADC12code * 1,5В / 4096 / 0,00355В/°C - 0,986В / 0,00355В/°C или T[°C]=ADC12code*0,103158°C-277,7°CЗдесь мы получаем те самые коэффициенты, фигурирующие в программе 845 / 2^13=0,103149 и -278. Умножение на дробный коэффициент в программе заменено на умножение на "магическое" число 845 с последующим делением путем арифметического сдвига. Дробь 845/8192 дает весьма хорошее приближение к искомому коэффициенту, достаточное для вычисления температуры с точностью до целых градусов. Для перевода в градусы Фаренгейта в программе соответственно используются другие коэффициенты.
Сообщение отредактировал rezident - Dec 30 2009, 21:54
Эскизы прикрепленных изображений
|
|
|
|
|
Dec 30 2009, 22:03
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(SSerge @ Dec 31 2009, 01:56)  А на строку "Temperature >> = 13L;" ругается потому что там лишний пробел затесался, между >> и = Точно! Пробел лишний. А я и не обратил внимания, скопипастив строку у VVlad. Исправил в своем сообщении. Цитата(VVlad @ Dec 30 2009, 20:26)  Вероятно, есть ещё третий ЮзерГайд, мне пока незнакомый. Ну вообще-то этих User's Guide как минимум пять, по одному на каждое семейство MSP430.  А выведенная мной формула основана всего лишь на внимательном чтении одного из них и минимальных знаниях физики и математики в объеме, преподаваемом при обучении в средней школе. Не вижу в этом какой-то доблести. Цитата(VVlad @ Dec 30 2009, 20:26)  Искренне поздравляю с Наступающим Новым Годом. Всего наилучшего. И вас с Наступающим!
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|