Jump to content

    
Sign in to follow this  
Daria

MSP430 - вопросы от чайника

Recommended Posts

Спасибо. Общепринятого протокола нет - контора большая, кто обменивается, тот между собой обычно и договаривается:) А пока как-нибудь. А имеет смысл писать такой протокол ради того, чтобы просто постоянно отправлять число от 0 до 360 на COM- и больше ничего?
Для вывода одного числа будет удобно, если преобразовать его в строку символов ASCII. Тогда это число можно будет наблюдать в обычной терминальной программе без доп. ухищрений. например, для вывода числа 360, нужно вывести последовательно 0x33, 0x36, 0x30, 0x0D, 0x0A. Можно даже значок градусов ° (0xB0) в конце строки перед символами CR, LF добавлять :)

Да, rezident, бог с ним. с усреднением - все равно особенно не поможет, нужно делать норамльный цифровой фильтр. А я до него еще не доросла :) Чутка попозже.
Начал править ваш проект из предыдущего сообщения, но чувствую, что сегодня уже не доделаю. Спать хочется. Вы еще раз уточните какие входы/выходы у вас используются? А то немного непонятно. Сначала разговор про одни шел, а в проекте вроде другие выводы MSP430 используются.

5 аналоговых входов или только 2?

Управляющие сигналы на P1.5 и P1.6 изменяются синхронно? 60сек - лог.1. и 400мс - лог.0, так?

Допустимо выводить на UART строку символов вместо бинарного числа?

Пока вот вопрос - записываю число во flash, использую режим записи по словам. т.е. int число пишется легко и без проблем. А как записать float - надо уже режим поблоковой записи? Или нет?
Блочный режим используется, если управляющая программа записи в ОЗУ расположена. Если же у вас программа записи исполняется прямо из Flash, то можно писать побайтово или пословно.

Share this post


Link to post
Share on other sites
5 аналоговых входов или только 2?

Управляющие сигналы на P1.5 и P1.6 изменяются синхронно? 60сек - лог.1. и 400мс - лог.0, так?

Пока два, потом будет пять. Аналоговые входы P6.3, P6.4. Управляющий только один - P1.5, 60сек - лог.1. и 400мс - лог.0

Допустимо выводить на UART строку символов вместо бинарного числа?

Да все равно как, главное, видеть, что приходит :)

 

Блочный режим используется, если управляющая программа записи в ОЗУ расположена. Если же у вас программа записи исполняется прямо из Flash, то можно писать побайтово или пословно.

Но слово - это же два байта вроде?.. То есть писать функцию, которая пословно записывает число, и функцию, которая будет пословно считывать?

Share this post


Link to post
Share on other sites
Спасибо. Общепринятого протокола нет - контора большая, кто обменивается, тот между собой обычно и договаривается:) А пока как-нибудь. А имеет смысл писать такой протокол ради того, чтобы просто постоянно отправлять число от 0 до 360 на COM- и больше ничего?

Да, rezident, бог с ним. с усреднением - все равно особенно не поможет, нужно делать норамльный цифровой фильтр. А я до него еще не доросла :) Чутка попозже. Пока вот вопрос - записываю число во flash, использую режим записи по словам. т.е. int число пишется легко и без проблем. А как записать float - надо уже режим поблоковой записи? Или нет?

 

Daria пишите побайтово - последовательно записывая 2 байта (short), когда пишете флоат - пишите 4 байта, будет работать также хорошо ( данные пишете во flash MSP что ли?? )

---------------------------------

CR, LF - '\r'.'\n' )) вариант с выводом в терминал конешно хорош.

но это только на этапе проверки фукционирования устройства.

 

используюя протокол Вы можете использовать различные режимы настройки без перепрошики

в общем я за написания протокола + внешней программы в которой можете уже смотреть и настраивать как Вам будет угодно. )

Share this post


Link to post
Share on other sites
Daria пишите побайтово - последовательно записывая 2 байта (short), когда пишете флоат - пишите 4 байта, будет работать также хорошо ( данные пишете во flash MSP что ли?? )

Да, пишу во flash MSP - после калибровки датчика нужно сохранять калибровочные константы в памяти.

в общем я за написания протокола + внешней программы в которой можете уже смотреть и настраивать как Вам будет угодно. )

Спасибо, попробую.

Share this post


Link to post
Share on other sites
Спасибо. Общепринятого протокола нет - контора большая, кто обменивается, тот между собой обычно и договаривается:) А пока как-нибудь. А имеет смысл писать такой протокол ради того, чтобы просто постоянно отправлять число от 0 до 360 на COM- и больше ничего?

Имеет - не имеет? Придется!

Информация в один байт не помещается, значит их будет больше. Тогда на приемной стороне нужно распознавать, какой байт первый а какой второй (приемник ведь может включиться в любой момент).

Можно сделать просто - например, выделить старший разряд для передачи флага первый/второй, а во всех остальных передавать данные. Тогда в двух байтах можно передать 14 значащих разрядов. Запишите на бумажке правила, как именно Вы будете передавать данные - это и будет называться гордым словом ПРОТОКОЛ - правила, однозначно устанавливающие порядок приема и передачи информации. :)

Share this post


Link to post
Share on other sites
Запишите на бумажке правила, как именно Вы будете передавать данные - это и будет называться гордым словом ПРОТОКОЛ - правила, однозначно устанавливающие порядок приема и передачи информации. :)

Да вообщем-то сейчас так и делаю, функция send_int, описанная в теме выше. :) Но вся эта процедура занимает много времени, по-моему - после отправки каждого байта(старшего, младшего и флага, означающего конец посылки) жду очистки флагов. Может, можно как-то проще и быстрее? Как-нибудь так настроить USART, чтобы передача трех байтов занимала как можно меньше времени. Вот, в чем был вопрос. все равно спасибо. :)

Share this post


Link to post
Share on other sites
...Как-нибудь так настроить USART, чтобы передача трех байтов занимала как можно меньше времени. Вот, в чем был вопрос...

USART настроить то можно. Надо передавать первый байт 9ю битами. Это однозначно будет начало. Но UART РС такого помоему не понимает. А вообще, как раз для этого и придумали ASCII. Если передавать в ASCII, то служебные символы и цифирки никогда не перепутаются. Ну например так, как это сделано в HEX файле.

Share this post


Link to post
Share on other sites

Ау, rezident! Вы там вроде обещали... забыли или некогда? очень жду :)

Share this post


Link to post
Share on other sites

Снова я, здравствуйте :)

Такой вопрос - контроллер, напоминаю - MSP430F149, гружу программу с помощью IAR, boot memory - 1КВ, а прога уже значительно больше. Как быть? Надо как-то писать основную прогу во flash, в code memory? А в boot - маленький модуль, вызывающий основную? Как это сделать? :)

И rezident, если будете в наших краях, все же расскажите, как бы Вы написали работу таймера:biggrin: Очень жду. Вышла вот из отпуска и жду :biggrin:

Share this post


Link to post
Share on other sites
Снова я, здравствуйте :)

Такой вопрос - контроллер, напоминаю - MSP430F149, гружу программу с помощью IAR, boot memory - 1КВ, а прога уже значительно больше. Как быть? Надо как-то писать основную прогу во flash, в code memory?

 

вопрос не понятен, если используете разбивку по умолчанию то подлючается

файл X:\....\IAR Systems\Embed.....\config\lnk430F149.xcl

 

если желаете исправить данный файл, то копируете к своему проекту и подлючаете

Options >> Linker >> Config >> Linker command file -> my_lnk430F149.xcl ( пример )

 

в оригинальном файле сегмент для кода -Z(CODE)CODE=1100-FFDF явно больше 1кБ ))

после выхода из __low_level_init выполняется main, если не переоприделяли (обьявлений типа main () @ "boot_memory" не нашел в Вашем коде ) то он должен находится в сегменте CODE

 

ИАР при компиляции ругается на выход за пределы сегмента?

Share this post


Link to post
Share on other sites
вопрос не понятен, если используете разбивку по умолчанию то подлючается

файл X:\....\IAR Systems\Embed.....\config\lnk430F149.xcl

 

если желаете исправить данный файл, то копируете к своему проекту и подлючаете

Options >> Linker >> Config >> Linker command file -> my_lnk430F149.xcl ( пример )

 

в оригинальном файле сегмент для кода -Z(CODE)CODE=1100-FFDF явно больше 1кБ ))

после выхода из __low_level_init выполняется main, если не переоприделяли (обьявлений типа main () @ "boot_memory" не нашел в Вашем коде ) то он должен находится в сегменте CODE

 

ИАР при компиляции ругается на выход за пределы сегмента?

Да, ругается. :) Использую по умолчанию. Попробую Options >> Linker >> Config >> Linker command file -> :) Спасибо.

Завтра напишу, получилось или нет :biggrin:

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this