|
MSP430 - снова вопросы от чайника, Вопросы от чайника про MSP и магнитный компас |
|
|
|
Jul 23 2008, 19:17
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
 Здравствуйте. Кто читал предыдущую мою тему "MSP430 - вопросы от чайника", тот поймет - это снова я  Тему закрыли, слишком долго висела. А вопрсов все больше. Если кому-то вдруг окажется не влом разбираться, то Вот кусок проги: 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; } В ЧЕМ ПРОБЛЕМА: Перед выполнением калибровки присылаю элементы массива, полученного при считывании показаний с выводов, - оказывается, что в массив записываются по два-три раза одно значение, хотя этого не может быть. Соответственно, из-за этого не работает и все остальное Может, неправильно настроен АЦП? Или в чем может быть дело? И, если кому-то вдруг не влом разбираться - функции записи во flash и чтения flash - можно ли сделать как-то поумнее?
|
|
|
|
|
 |
Ответов
|
Sep 24 2008, 18:12
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Я не вижу функции инициализации UART, но попробуйте перед тем как разрешать прерывание от приемника UART (по)чистить его флаги. В строках Цитата IE1 |= UTXIE0; IFG1 |= UTXIFG0; следует поменять их очередность. Кроме того, функции работы с буфером у вас не полностью реентерабельные. Они не обеспечивают атомарности доступа к переменным индекса и счетчика.
|
|
|
|
|
Sep 25 2008, 18:43
|
Местный
  
Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345

|
Цитата(rezident @ Sep 24 2008, 22:12)  Я не вижу функции инициализации UART, но попробуйте перед тем как разрешать прерывание от приемника UART (по)чистить его флаги. В строках
следует поменять их очередность. Кроме того, функции работы с буфером у вас не полностью реентерабельные. Они не обеспечивают атомарности доступа к переменным индекса и счетчика. Ну, теряться байты перестали, спасибо. Но нули все равно приходят при включении питания. Не могу понять, откуда они берутся  а функции, значит, не очень? Цитата(LCD @ Sep 24 2008, 23:14)  А не лучше ли использовать DCO с внешним резистором, если толщина схемы важнее стабильности частоты? Не, не лучше. Во-первых, хочется все же высокой частоты, от DCO - это 800кГц, а, во-вторых, не важнее, конечно, просто уменьшение размеров желательно Цитата(VAI @ Sep 25 2008, 10:57)  Мы используем Муратовские керамические трёхногие SMD-шные резонаторы с установлеными в них емкостями. CSTCE8M00G55A-R0 - на 8МГц CSTCR6M00G53-R0 - на 6МГц И довольны Спасибо! Я так и думала, что это хорошие  Надеюсь, мы тоже будем довольны
|
|
|
|
|
Sep 25 2008, 19:30
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Daria @ Sep 26 2008, 00:43)  Ну, теряться байты перестали, спасибо. Но нули все равно приходят при включении питания. Не могу понять, откуда они берутся  Покажите функцию инициализации UART. Цитата(Daria @ Sep 26 2008, 00:43)  Не, не лучше. Во-первых, хочется все же высокой частоты, от DCO - это 800кГц, а, во-вторых, не важнее, конечно, просто уменьшение размеров желательно Вы опять что-то недочитали в User's Guide  Частоту DCO можно изменить программно вплоть до 6,5МГц. А если использовать внешний резистор ROSC, то DCO можно легко разогнать МГц эдак до 50 одной левой.  На такой частоте работать кристалл конечно же не сможет, но DCO такую частоту генерировать будет. Самолично проверял  Проблема с DCO в том, что частота его зависит от температуры и напряжения питания. Для связи требуется стабильность битовой частоты не хуже 1-2%, 0,5% это вообще для любого случая подойдет. Если напряжения питания стабильно, используется внешний резистор ROSC с хорошим ТКС (не хуже скажем 50ppm/°C), DCO при старте калибруется по часовому кварцу (а при возникновении ошибок по связи происходит перекалибровка), то вполне можно обойтись и без внешнего высокочастотного кварца, одним лишь часовым.
|
|
|
|
|
Sep 26 2008, 15:21
|
Местный
  
Группа: Участник
Сообщений: 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; Флаги не сбрасываю, потому что не помогло Цитата(rezident @ Sep 25 2008, 23:30)  Вы опять что-то недочитали в User's Guide  Видимо, да Цитата(rezident @ Sep 25 2008, 23:30)  Частоту DCO можно изменить программно вплоть до 6,5МГц. А если использовать внешний резистор ROSC, то DCO можно легко разогнать МГц эдак до 50 одной левой.  На такой частоте работать кристалл конечно же не сможет, но DCO такую частоту генерировать будет. Самолично проверял  Проблема с DCO в том, что частота его зависит от температуры и напряжения питания. Для связи требуется стабильность битовой частоты не хуже 1-2%, 0,5% это вообще для любого случая подойдет. Если напряжения питания стабильно, используется внешний резистор ROSC с хорошим ТКС (не хуже скажем 50ppm/°C), DCO при старте калибруется по часовому кварцу (а при возникновении ошибок по связи происходит перекалибровка), то вполне можно обойтись и без внешнего высокочастотного кварца, одним лишь часовым. Спасибо, буду иметь ввиду
|
|
|
|
Сообщений в этой теме
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 страниц
1 2 3 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|