реклама на сайте
подробности

 
 
> MSP430 - снова вопросы от чайника, Вопросы от чайника про MSP и магнитный компас
Daria
сообщение Jul 23 2008, 19:17
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



smile.gif Здравствуйте. Кто читал предыдущую мою тему "MSP430 - вопросы от чайника", тот поймет - это снова я biggrin.gif Тему закрыли, слишком долго висела. А вопрсов все больше. smile.gif
Если кому-то вдруг окажется не влом разбираться, то
Вот кусок проги:
int flag;//глобальные переменные
int cindex;
испульзуемые функции(write_flash - пишет число во flash, read_flash - считывает)
void write_flash(float* value, float *addr)
{ while(FCTL1 & BUSY);
_BIC_SR(GIE);
FCTL1 = FWKEY + ERASE;
FCTL3 = FWKEY;
*addr = 0;

while(FCTL1 & BUSY);
FCTL1 = FWKEY + WRT; for (int i=0;i<=3;i++)
{ *addr = value[i];
addr++;
}

_BIS_SR(GIE);
while(FCTL1 & BUSY);
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
}

void read_flash(float* addr, float* pfO)
{
for (int i=0;i<=3;i++)
{ pfO[i]=*addr;
addr++;
}
}
Чего хочу сделать - Если присылаю 0, то должны считаться два показания с выводов P6.3 и P6.4, присылается 0хАА - т.е. "считалось", записываются первые элементы двух массивоы данных.
Когда набирается по четыре элемента, индекс сбрасывается
Если присылаю 0xFF, то должна выполнится функция calibrovka_hmc, если она выполняется неверно, то присылается 0хСС, иначе из flash считывается и присылается вычисленная с помощью этой функции константа.
Внутри функции main
ADC12CTL0 = ADC12ON + REFON + SHT0_8; //настройка АЦП
ADC12CTL1 = CSTARTADD0 + CSTARTADD1 + ADC12SSEL_1+ CONSEQ_1;
ADC12MCTL3 = INCH_3;
ADC12MCTL4 = INCH_4 + EOS;

float temp[4];
flag=0;
cindex=0;
for(;;)
{
for(delay = 0; delay <20000; delay++);
if( flag==0 )
{send_int(0x0);
}
if( flag==1 )
{

if (calibrovka_hmc(CVx, CVy, temp)==0)//calibrovka_hmc - имеет параметрами два массива и вычисляет четыре константы(нужные для калибровки устройства)

{
send_int(0xCC);
flag=0;
}
else
{
float pfO[4];
read_flash((float*)0x1000,pfO);
r=(int)(pfO[0]+0.5);
send_int®;
flag=0;
}

flag=4;
}

if (flag==2)
{
ADC12CTL0 |=ADC12SC + ENC; CVx[cindex] = ADC12MEM3; CVy[cindex] = ADC12MEM4;
ADC12CTL0 &= ENC;
cindex++;
send_int(0xAA);
flag=0;
}

if (cindex>3)
cindex=0;
}
}
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx ( void)
{
if( RXBUF0==0xFF)
flag = 1;
if (RXBUF0==0x0)
flag = 2;
}
В ЧЕМ ПРОБЛЕМА:
Перед выполнением калибровки присылаю элементы массива, полученного при считывании показаний с выводов, - оказывается, что в массив записываются по два-три раза одно значение, хотя этого не может быть. Соответственно, из-за этого не работает и все остальное crying.gif
Может, неправильно настроен АЦП? Или в чем может быть дело?
И, если кому-то вдруг не влом разбираться - функции записи во flash и чтения flash - можно ли сделать как-то поумнее?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Sep 24 2008, 18:12
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Я не вижу функции инициализации UART, но попробуйте перед тем как разрешать прерывание от приемника UART (по)чистить его флаги.
В строках
Цитата
IE1 |= UTXIE0;
IFG1 |= UTXIFG0;

следует поменять их очередность.
Кроме того, функции работы с буфером у вас не полностью реентерабельные. Они не обеспечивают атомарности доступа к переменным индекса и счетчика.
Go to the top of the page
 
+Quote Post
Daria
сообщение Sep 25 2008, 18:43
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(rezident @ Sep 24 2008, 22:12) *
Я не вижу функции инициализации UART, но попробуйте перед тем как разрешать прерывание от приемника UART (по)чистить его флаги.
В строках

следует поменять их очередность.
Кроме того, функции работы с буфером у вас не полностью реентерабельные. Они не обеспечивают атомарности доступа к переменным индекса и счетчика.

Ну, теряться байты перестали, спасибо. Но нули все равно приходят при включении питания. Не могу понять, откуда они берутся 05.gif а функции, значит, не очень? smile.gif


Цитата(LCD @ Sep 24 2008, 23:14) *
А не лучше ли использовать DCO с внешним резистором, если толщина схемы важнее стабильности частоты?

Не, не лучше. Во-первых, хочется все же высокой частоты, от DCO - это 800кГц, а, во-вторых, не важнее, конечно, просто уменьшение размеров желательно

Цитата(VAI @ Sep 25 2008, 10:57) *
Мы используем Муратовские керамические трёхногие SMD-шные резонаторы с установлеными в них емкостями.
CSTCE8M00G55A-R0 - на 8МГц
CSTCR6M00G53-R0 - на 6МГц
И довольны

Спасибо! Я так и думала, что это хорошие smile.gif Надеюсь, мы тоже будем довольны smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Sep 25 2008, 19:30
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Daria @ Sep 26 2008, 00:43) *
Ну, теряться байты перестали, спасибо. Но нули все равно приходят при включении питания. Не могу понять, откуда они берутся 05.gif
Покажите функцию инициализации UART.
Цитата(Daria @ Sep 26 2008, 00:43) *
Не, не лучше. Во-первых, хочется все же высокой частоты, от DCO - это 800кГц, а, во-вторых, не важнее, конечно, просто уменьшение размеров желательно
Вы опять что-то недочитали в User's Guide wink.gif Частоту DCO можно изменить программно вплоть до 6,5МГц. А если использовать внешний резистор ROSC, то DCO можно легко разогнать МГц эдак до 50 одной левой. biggrin.gif На такой частоте работать кристалл конечно же не сможет, но DCO такую частоту генерировать будет. Самолично проверял smile.gif Проблема с DCO в том, что частота его зависит от температуры и напряжения питания. Для связи требуется стабильность битовой частоты не хуже 1-2%, 0,5% это вообще для любого случая подойдет. Если напряжения питания стабильно, используется внешний резистор ROSC с хорошим ТКС (не хуже скажем 50ppm/°C), DCO при старте калибруется по часовому кварцу (а при возникновении ошибок по связи происходит перекалибровка), то вполне можно обойтись и без внешнего высокочастотного кварца, одним лишь часовым.
Go to the top of the page
 
+Quote Post
Daria
сообщение Sep 26 2008, 15:21
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(rezident @ Sep 25 2008, 23:30) *
Покажите функцию инициализации UART.

Код
               U0CTL |= CHAR;                    // 8-bit character
    U0TCTL = SSEL0;                    // UCLK = ACLK
    U0BR0 = 0xA0;                    // 8.00Mhz 19200 bps (416)
    U0BR1 = 0x01;
    U0MCTL = 0x00;                    // no modulation
    U0CTL &= ~SWRST;
    ME1 |= UTXE0 + URXE0;            // Enable USART0 TXD/RXD
    IE1 |= URXIE0;

Флаги не сбрасываю, потому что не помогло smile.gif

Цитата(rezident @ Sep 25 2008, 23:30) *
Вы опять что-то недочитали в User's Guide wink.gif

Видимо, да biggrin.gif
Цитата(rezident @ Sep 25 2008, 23:30) *
Частоту DCO можно изменить программно вплоть до 6,5МГц. А если использовать внешний резистор ROSC, то DCO можно легко разогнать МГц эдак до 50 одной левой. biggrin.gif На такой частоте работать кристалл конечно же не сможет, но DCO такую частоту генерировать будет. Самолично проверял smile.gif Проблема с DCO в том, что частота его зависит от температуры и напряжения питания. Для связи требуется стабильность битовой частоты не хуже 1-2%, 0,5% это вообще для любого случая подойдет. Если напряжения питания стабильно, используется внешний резистор ROSC с хорошим ТКС (не хуже скажем 50ppm/°C), DCO при старте калибруется по часовому кварцу (а при возникновении ошибок по связи происходит перекалибровка), то вполне можно обойтись и без внешнего высокочастотного кварца, одним лишь часовым.

Спасибо, буду иметь ввиду
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Daria   MSP430 - снова вопросы от чайника   Jul 23 2008, 19:17
- - rezident   Некоторое (продолжительное) время не заглядывал в ...   Jul 23 2008, 22:03
|- - Daria   Ага, все же заглянули спасибо за комментарии и кр...   Jul 24 2008, 19:29
|- - =DS=   Цитата(Daria @ Jul 24 2008, 23:29) А по п...   Jul 25 2008, 03:03
|- - Daria   Цитата(=DS= @ Jul 25 2008, 07:03) *addr ...   Jul 25 2008, 18:27
|- - rezident   Цитата(Daria @ Jul 26 2008, 00:27) а к...   Jul 25 2008, 19:47
|- - Daria   И версии, и настройки. А кикстарт - потому что сн...   Jul 25 2008, 21:05
|- - rezident   Цитата(Daria @ Jul 26 2008, 03:05) И верс...   Jul 25 2008, 21:38
||- - Daria   Цитата(rezident @ Jul 26 2008, 01:38) Ну ...   Jul 26 2008, 12:38
||- - rezident   Цитата(Daria @ Jul 26 2008, 18:38) rezide...   Jul 26 2008, 12:58
||- - Daria   Так вот. Галочка стоит. А состояние переменных все...   Jul 28 2008, 20:14
||- - rezident   Цитата(Daria @ Jul 29 2008, 02:14) Так во...   Jul 28 2008, 23:05
||- - Daria   Цитата(rezident @ Jul 29 2008, 03:05) Ну ...   Jul 30 2008, 19:31
||- - Daria   Здравствуйте, снова я Цитата(rezident @ Jul...   Aug 7 2008, 20:43
||- - rezident   Цитата(Daria @ Aug 8 2008, 02:43) ЗКак бы...   Aug 8 2008, 01:29
||- - Daria   Цитата(rezident @ Aug 8 2008, 05:29) Можн...   Aug 8 2008, 20:28
||- - rezident   Цитата(Daria @ Aug 9 2008, 02:28) а вот п...   Aug 9 2008, 01:10
||- - Daria   Цитата(rezident @ Aug 9 2008, 05:10) Коли...   Aug 9 2008, 20:42
||- - rezident   Цитата(Daria @ Aug 10 2008, 02:42) Ну и п...   Aug 9 2008, 22:10
||- - Daria   Так. Ну вот, как-то не выходит ничего Если в пре...   Aug 11 2008, 20:19
||- - Dog Pawlowa   Цитата(Daria @ Aug 11 2008, 23:19) Как бы...   Aug 12 2008, 06:14
||- - Daria   Цитата(Dog Pawlowa @ Aug 12 2008, 10:14) ...   Aug 12 2008, 19:55
|- - =DS=   Цитата(Daria @ Jul 26 2008, 01:05) Дебагг...   Jul 25 2008, 21:40
- - Т.Достоевский   Может так? Код#pragma vector=ADC_VECTOR { if ...   Aug 11 2008, 21:52
- - rezident   Все дело в том, что вы маски неверно накладываете....   Aug 11 2008, 23:19
- - rezident   Daria, извините за откровенность, но у вас какой-т...   Aug 12 2008, 23:30
|- - Daria   Цитата(rezident @ Aug 13 2008, 03:30) Re...   Aug 13 2008, 17:06
|- - rezident   Цитата(Daria @ Aug 13 2008, 23:06) Но - з...   Aug 13 2008, 18:19
||- - Daria   Цитата(rezident @ Aug 13 2008, 22:19) Яс...   Aug 13 2008, 19:59
|- - zhevak   Ух-х, какие крутые виражи! Ух, как человека мы...   Aug 14 2008, 08:09
|- - Daria   Цитата(zhevak @ Aug 14 2008, 12:09) Rezid...   Aug 14 2008, 20:47
|- - rezident   Цитата(Daria @ Aug 15 2008, 02:47) Rezide...   Aug 14 2008, 21:01
|- - Daria   Ага, будем считать с буфером приема разобрались ...   Aug 17 2008, 11:13
|- - zhevak   О-хо-хо... Ну да ладно! Даша, я предполагаю, ...   Aug 17 2008, 14:49
|- - rezident   Цитата(Daria @ Aug 17 2008, 17:13) Запись...   Aug 17 2008, 15:09
|- - zhevak   Цитата(rezident @ Aug 17 2008, 21:09) Изв...   Aug 17 2008, 15:51
|- - rezident   Цитата(zhevak @ Aug 17 2008, 21:51) Не, н...   Aug 17 2008, 15:56
|- - zhevak   Цитата(rezident @ Aug 17 2008, 21:56) Да ...   Aug 17 2008, 16:38
|- - Daria   Да-а-а утром отправляю вопрос, иде себе спокойне...   Aug 17 2008, 20:49
|- - Daria   здравствуйте снова. Такой вопрос - во время работ...   Aug 19 2008, 17:42
|- - rezident   Цитата(Daria @ Aug 19 2008, 23:42) можно ...   Aug 19 2008, 21:40
|- - Daria   Цитата(rezident @ Aug 20 2008, 01:40) А т...   Aug 20 2008, 18:20
|- - Daria   Здравствуйте. rezident, по поводу примера буфера п...   Aug 21 2008, 18:01
|- - rezident   Цитата(Daria @ Aug 22 2008, 00:01) для че...   Aug 21 2008, 21:19
|- - Daria   Как всегда - большое спасибо! про выравниван...   Aug 24 2008, 17:36
|- - Daria   Здравствуйте снова. Вот опять вопросы_ Делаю усред...   Aug 29 2008, 18:53
|- - rezident   Цитата(Daria @ Aug 30 2008, 00:53) Делаю ...   Aug 29 2008, 20:16
|- - Daria   Да знаю я, знаю, что долго сидеть в прерывании нех...   Aug 30 2008, 18:33
|- - rezident   Цитата(Daria @ Aug 31 2008, 00:33) Да зна...   Aug 30 2008, 21:04
|- - Daria   Цитата(rezident @ Aug 31 2008, 01:04) Ест...   Aug 31 2008, 16:48
|- - rezident   Цитата(Daria @ Aug 31 2008, 22:48) Нужно....   Aug 31 2008, 18:39
|- - Daria   Цитата(rezident @ Aug 31 2008, 22:39) В п...   Aug 31 2008, 20:29
|- - Daria   Ну вот, отпуск кончился, пошли суровые будни И в...   Sep 12 2008, 18:04
|- - rezident   Цитата(Daria @ Sep 13 2008, 00:04) Вот та...   Sep 12 2008, 18:27
||- - Daria   Цитата(rezident @ Sep 12 2008, 22:27) re...   Sep 18 2008, 13:34
||- - Daria   Здравствуйте. Такие вопросы - сейчас я прошиваю ...   Sep 23 2008, 18:33
||- - rezident   Цитата(Daria @ Sep 24 2008, 00:33) В даль...   Sep 23 2008, 19:56
|||- - Daria   Ага, но мне, как пока неквалифицированному програм...   Sep 23 2008, 20:12
|||- - rezident   Цитата(Daria @ Sep 24 2008, 02:12) Значит...   Sep 23 2008, 20:47
|||- - Daria   Цитата(rezident @ Sep 24 2008, 00:47) Для...   Sep 23 2008, 20:56
|||- - rezident   Цитата(Daria @ Sep 24 2008, 02:56) А UIF ...   Sep 23 2008, 21:35
|||- - Сергей Борщ   Цитата(Daria @ Sep 23 2008, 23:56) Как-то...   Sep 23 2008, 21:52
|||- - Daria   Цитата(Сергей Борщ @ Sep 24 2008, 01:52) ...   Sep 24 2008, 17:18
||- - Сергей Борщ   Цитата(Daria @ Sep 23 2008, 21:33) мне ск...   Sep 23 2008, 20:01
||- - LCD   Цитата(Daria @ Sep 23 2008, 22:33) Не под...   Sep 24 2008, 19:14
|- - MrYuran   Цитата(Daria @ Sep 12 2008, 22:04) Как бы...   Sep 13 2008, 10:53
|- - rezident   Цитата(MrYuran @ Sep 13 2008, 16:53) И с ...   Sep 13 2008, 16:48
|- - MrYuran   Цитата(rezident @ Sep 13 2008, 20:48) А в...   Sep 13 2008, 17:31
|- - Сергей Борщ   Цитата(rezident @ Sep 13 2008, 19:48) А в...   Sep 13 2008, 18:20
|- - rezident   Цитата(MrYuran @ Sep 13 2008, 23:31) А во...   Sep 13 2008, 20:13
|- - AHTOXA   Цитата(rezident @ Sep 14 2008, 02:13) При...   Sep 15 2008, 17:38
- - Kurt   2rezident: я восхищен силой вашего воображения ))   Aug 13 2008, 04:41
|- - _3m   Цитата(Kurt @ Aug 13 2008, 08:41) 2rezide...   Aug 13 2008, 06:34
- - VAI   ЦитатаКварц, кстати, подходящий нашла у Murata - C...   Sep 25 2008, 06:57
- - rezident   Ну вот она и ошибка. Первой командой инициализации...   Sep 26 2008, 15:33
|- - Daria   Цитата(rezident @ Sep 26 2008, 19:33) Ну ...   Sep 29 2008, 19:16
|- - rezident   Цитата(Daria @ Sep 30 2008, 01:16) не-а, ...   Sep 29 2008, 20:23
|- - Daria   Цитата(rezident @ Sep 30 2008, 00:23) Дел...   Sep 30 2008, 19:00
|- - rezident   Цитата(Daria @ Oct 1 2008, 01:00) NData -...   Sep 30 2008, 19:49
|- - Daria   Кодtypedef struct CharBuffer { unsigned char* Dat...   Sep 30 2008, 20:26
|- - rezident   Цитата(Daria @ Oct 1 2008, 02:26) но так ...   Sep 30 2008, 23:05
|- - Daria   Цитата(rezident @ Oct 1 2008, 03:05) Поче...   Oct 1 2008, 18:23
|- - rezident   Цитата(Daria @ Oct 2 2008, 00:23) Да, но ...   Oct 1 2008, 19:34
|- - Daria   Цитата(rezident @ Oct 1 2008, 23:34) Если...   Oct 2 2008, 19:37
- - VAI   Кстати, по уартам, я как-то выкладывал свои исходн...   Oct 3 2008, 01:12
- - Daria   Цитата(VAI @ Oct 3 2008, 05:12) Кстати, п...   Oct 4 2008, 17:01
- - Daria   Опять я теперь нужен еще буфер - для АЦП. посмот...   Oct 5 2008, 15:42
- - Daria   И еще Мне нужно обмениваться с двумя устройствам...   Oct 5 2008, 19:35
- - Dog Pawlowa   Цитата(Daria @ Oct 5 2008, 22:35) И еще ...   Oct 6 2008, 06:04
- - Daria   Цитата(Dog Pawlowa @ Oct 6 2008, 10:04) О...   Oct 6 2008, 17:45
- - rezident   Цитата(Daria @ Oct 6 2008, 23:45) одно ус...   Oct 6 2008, 19:04
- - Daria   Цитата(rezident @ Oct 6 2008, 23:04) Личн...   Oct 7 2008, 17:09
- - rezident   Цитата(Daria @ Oct 7 2008, 23:09) Ага, а ...   Oct 7 2008, 17:41
- - Daria   Цитата(rezident @ Oct 7 2008, 21:41) В IA...   Oct 7 2008, 18:12
- - rezident   Цитата(Daria @ Oct 8 2008, 00:12) Все же ...   Oct 7 2008, 19:07
- - Daria   Цитата(rezident @ Oct 7 2008, 23:07) Либо...   Oct 10 2008, 20:23
3 страниц V   1 2 3 >


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 23:45
Рейтинг@Mail.ru


Страница сгенерированна за 0.01669 секунд с 7
ELECTRONIX ©2004-2016