|
MSP430F169D зависает когда работает от XT2, UART работает ~ 1 час, потом процессор зависает.... |
|
|
|
Jan 29 2008, 14:46
|

Частый гость
 
Группа: Свой
Сообщений: 97
Регистрация: 26-05-05
Из: Киев, Украина
Пользователь №: 5 426

|
Цитата(cornflyer @ Jan 29 2008, 16:10)  Плата разведена так: XIN - Vcc, XOUT - болтается в воздухе.... Работаю от DCO. XIN, XOUT, XT2IN, XT2OUT висят в воздухе. Не виснет никогда. Интересно, а перестанет ли виснуть если XIN отрезать от Vcc ?
--------------------
Смотреть в себя, зреть муки свои, зная, что сам ты виновник мук - вот истинное страдание. Отладка / Софокл, "Аякс".
|
|
|
|
|
Jan 29 2008, 15:08
|

Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729

|
Цитата(Kaplinsky @ Jan 29 2008, 17:46)  Работаю от DCO. XIN, XOUT, XT2IN, XT2OUT висят в воздухе. Не виснет никогда. Интересно, а перестанет ли виснуть если XIN отрезать от Vcc ? В мануале на семейство MSP430x1xx Family User's Guide (Rev. F).pdf написано, как надо делать: 2.5 Connection of Unused Pins The correct termination of all unused pins is listed in Table 2−2. Table 2−2.Connection of Unused Pins Pin Potential Comment AVCC DVCC AVSS DVSS VREF+ Open VeREF+ DVSS VREF−/VeREF− DVSS XIN DVCC XOUT Open XT2IN DVSS 13x, 14x, 15x and 16x devices XT2OUT Open 13x, 14x, 15x and 16x devices т.е. XIN вешать надо на питание, а XOUT - оставить в воздухе...
|
|
|
|
|
Jan 29 2008, 20:31
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Если нет необходимости иметь кварцованный MCLK и частоты тактирования ядра порядка 5,5МГц хватает для работы программных алгоритмов, то источником MCLK нужно назначать DCO. Помехоустойчивость MSP430 при этом значительно увеличивается! Подключение неиспользованного входа Цитата XIN DVCC появилось в MSP430x1xx Family User's Guide rev.D. До этого во всех ревизиях было Цитата XIN DVss специально просмотрел все User's Guide rev. A, B, C, D, E, F. Кстати, в вашей программе нет обработки ошибки кварцевого генератора, которую нужно делать в прерывании NMI. Там по сути та же самая процедура, что у вас в clock_Init описана. Только перед выходом из прерывания нужно разрешать прерывание ошибки осциллятора установкой OFIE в регистре IE1, т.к. при входе в обработчик оно автоматически сбрасывается. Или можно вообще оставить процедуру инициализации только в преывании NMI, что я обычно и делаю. Пример ниже Код // Инициализация источников тактирования ACLK, MCLK, SMCLK #pragma vector=NMI_VECTOR #pragma type_attribute=__interrupt void osc_fault(void) { BCSCTL2=SELM_0|DIVM_0|DIVS_0; //перейдем на такт. DCO BCSCTL1=DIVA_3|RSEL2|RSEL1|RSEL0; //ACLK=XT1/1=32768Гц DCOCTL=DCO0|DCO1|DCO2; //DCO около 5МГц do { IFG1&=~OFIFG; } while ((IFG1&OFIFG)!=0); //Ожидаем стабилиз. колебаний //кварца XT1 BCSCTL2=SELM_2|DIVM_0|SELS|DIVS_0; //MCLK=XT2/1=7327,8кГц, //SMCLK=XT2/1=7327,8кГц IE1|=OFIE; //разр. прерывания от детектора } а в main-е пишем попросту Код #pragma type_attribute=__task void main(void) { WDTCTL=WDTPW+WDTHOLD; IFG1|=OFIFG; //Принудительно установим флаг ошибки осциллятора IE1=OFIE; //Разрешим прерывание для вызова процедуры инициализации источников тактирования ... }
|
|
|
|
|
Feb 1 2008, 06:51
|

Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729

|
Цитата(Dog Pawlowa @ Jan 31 2008, 17:24)  Ein frage. В момент зависания JTAG подключен? Зависает как с JTAG'ом так и без него. Когда я использовал JTAG debugger - в момент зависания появлялась ошибка соединения - типа "нет связи с устройством." И пока не передернешь питание - устройство не видно на шине.
|
|
|
|
|
Feb 1 2008, 08:44
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(cornflyer @ Feb 1 2008, 10:51)  Зависает как с JTAG'ом так и без него. Когда я использовал JTAG debugger - в момент зависания появлялась ошибка соединения - типа "нет связи с устройством." И пока не передернешь питание - устройство не видно на шине. Ну тогда дело хуже - плата разведена совсем плохо, хотя не так все просто. Во влияние входов генератора трудно поверить. Проще поверить в то, что brown-out detector не используется, и микроконтроллер виснет из-за помех. Хотя в 169 контроллере TI вроде улучшил работу bod, не стоит забывать, что наличие внешнего супервизора питания официально было названо тексасом как условие стабильной работы младших моделей в условиях помех.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Feb 1 2008, 15:18
|

Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729

|
brown-out detector используется, питание беру с отладочной платы Olimex (припаялся к ней двумя проводками по 5 см). Вообще у меня на плате используюца все входы АЦП, компаратор, оба таймера, почти все ноги - порты ввода - вывода, uart1, даже температуру измеряю... Еще есть I2C.... но встроенный контроллер - клюкавый, написал свой.... так что проц пашет на все 90%
Мне не понятно, почему не срабатывает watch dog ? Когда ту же прошивку загружаю в olimex - работает без сбоев 8 часов... Когда подключаю свою платку с припаянным на XIN/XOUT часовым кварцем - работает без сбоев 8 часов... Но когда я подключаю свою вторую платку, где XIN - Vcc, XOUT - в воздухе, то примерно через час проц зависает намертво... Непонятно каким образом можно понять что происходит.... (??????????!!!!!!) Пока решил остановица на рабочем эмпирическом варианте - часовом кварце на ногах XIN/XOUT. Но тут у меня народ ходит и высказывает что-то типа "откуда ты знаешь что у тя все заработало? может период глюков просто увеличился... " А плата реально разведена хреново... Однослойная топология... качество изготовления - полный ахтунг... (некоторые ноги плохо были запаялись) Эх, не я разводил ее... я бы уж сделал 2 внутр. слоя - Vcc и GND, а на внешних слоях нарисовал бы дорожки... И отдал бы ее делать в Зеленоград. Короче, правильно было выше сказано - если нужна частота не больше 5 MHz - юзать надо часовой кварц и DCO. А меня позвали в самом конце - типа "вот тебе плата - иди программируй!"
|
|
|
|
|
Feb 1 2008, 16:24
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(cornflyer @ Feb 1 2008, 19:18)  Короче, правильно было выше сказано - если нужна частота не больше 5 MHz - юзать надо часовой кварц и DCO. А меня позвали в самом конце - типа "вот тебе плата - иди программируй!" С вершин  своего скромного опыта скажу (по крайней мере базируясь на 133-149 кристаллах), что DCO спасает не всегда ( в случае помех программа сбивается все равно). Разве что у Вас генератор блокируется. Кстати, подобное обсуждение было на сахаре касательно AVR. Вариант выяснения, что именно происходит - подключить внешний генератор, а не кварц.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Feb 4 2008, 18:20
|
Участник

Группа: Свой
Сообщений: 63
Регистрация: 16-06-04
Из: Россия, Уфа
Пользователь №: 31

|
Обработка ошибки OSC_ FAULT в любом случае не помешает. Плюс внешную собаку, если уж такая плата кривая. Год назад выкладывал пример с тактированием, может пригодится http://kurt.embedders.org/wiki/sources:xtalТам же работа с уартом и т.д. Редактируйте, дополняйте.
|
|
|
|
|
Feb 6 2008, 06:56
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(cornflyer @ Feb 5 2008, 18:38)  Внешний watchdog - реально повышает помехоустойчивость системы.... Внутренний как оказалось не спасает ( в первые столкнулся с такой ситуацией.... имею успешный опыт использования 149, 449, но с 169 что-то не так) А что ставили? Дело в том, что реально повышает помехоустойчивость не столько watchdog, сколько супервизор питания, которого в 149 и 449 не было. Watchdog - это уже собирать крошки зависаний, когда сброс от супервизора все-таки не прошел.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Feb 6 2008, 16:59
|
Участник

Группа: Участник
Сообщений: 36
Регистрация: 4-03-05
Из: Киев
Пользователь №: 3 078

|
Цитата(Dog Pawlowa @ Feb 4 2008, 18:50)  UART от DCO .....от часового кварца больше 1200 не получить. { U1CTL = 0x10; U1TCTL= 0x50; U1BR1 = 0x00; U1BR0 = 0x03; U1MCTL = 0x4A; } // 9600 больше 9600 на 32 кГц действительно не получить.
|
|
|
|
|
Feb 7 2008, 16:14
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(cornflyer @ Feb 7 2008, 12:51)  Хотя прошивку оставил без изменений - т.е. ту, когда был только XT2. Просто припаял на ноги часовой кварц, который у меня не используеца. И все теперь работает без глюков. Очень интересная информация. Поверить трудно. Может, все-таки XT1 используется как-то в прошивке ? У меня несколько приборов с разными комбинациями генераторов, но действительно наиболее устойчиво работают приборы с синхронизацией от часового кварца. Хотя эти кварцы чаще отказывают. Но другие приборы работают тоже месяцами не выключаясь. А по 9600 - похоже, перебдел
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Feb 8 2008, 09:08
|

Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729

|
Цитата(Dog Pawlowa @ Feb 7 2008, 19:14)  Может, все-таки XT1 используется как-то в прошивке ? void app_Init ( void ) { WDTCTL = WDTPW + WDTHOLD ; // stop watchdog IFG1 |= OFIFG ; IE1 |= OFIE ; watch_dog_Reset () ; _DINT () ; // disanable interrupts ///////////////////////// svs_Init () ; port_Init () ; select_HV_U () ; // select data source connected to ADS1100 clock_Init () ; serial_Init () ; adc_Init () ; HV_Init () ; var_Init () ; comparator_Init () ; flash_init () ; _EINT () ; // enable interrupts adc_Start () ; } void clock_Init ( void ) { //asm ( " xor SR, 0x20 " ) ; _BIS_SR ( 0x20 ) ; // disable XT1 // Timer_A setup TACTL = 0x00; // stop timer before config TACCR0 = 0xFFFF ; // 0xFFFF ; TACCTL0 = BIT4 ; // Timer_A compare interrupt enable TAR = 0x0000 ; TACTL = BIT4 | // Up mode: the timer counts up to TACCR0 BIT7 | BIT6 | // CLK/8 BIT9 ; // Timer_A clock source = SMCLK // Timer_B setup TBCTL = 0x00; // stop timer before config TBCCR0 = 0xFFFF ; TBCCTL0 = BIT4 ; // Timer_B compare interrupt enable TBR = 0x0000 ; TBCTL = BIT4 | // Up mode: the timer counts up to TBCCR0 BIT7 | BIT6 | // CLK/8 BIT9 ; // Timer_B clock source = SMCLK } #pragma vector = NMI_VECTOR __interrupt void osc_fault (void) { BCSCTL1 = 0 ; // &= ~XT2OFF; // XT2 = HF XTAL do { IFG1&=~OFIFG; } while ((IFG1&OFIFG)!=0); //Îæèäàåì ñòàáèëèç. êîëåáàíèé BCSCTL2 |= BIT7 | // MCLK = XT2CLK when XT2 oscillator present on-chip BIT4 | BIT5 | // ACLK = MCLK/8 BIT3 ; // SMCLK = XT2 IE1|=OFIE; }
|
|
|
|
|
Feb 8 2008, 09:30
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
В моем примере выше не зря первой командой в обработчике ошибки кварцевого осциллятора стоит Код BCSCTL2=SELM_0|DIVM_0|DIVS_0; //перейдем на такт. DCO Это не чистая блажь и не перестраховка. Я уже неоднократно здесь обращал внимание, что при сбое кварца MCLK переходит на тактирование от DCO автоматически. А вот SMCLK - нет. Нужно сначала переключить его тактирование на DCO, а затем можно переключать снова на тактирование от кварцевого генератора. Не помню описано ли это в errata, но этот глюк известен еще с давних времен. По-моему впервые я про него прочитал в сообщениях Сергея Борща. А потом уже и сам с этим встречался.
|
|
|
|
|
Feb 8 2008, 11:07
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(rezident @ Feb 8 2008, 11:30)  Не помню описано ли это в errata, но этот глюк известен еще с давних времен. По-моему впервые я про него прочитал в сообщениях Сергея Борща. А потом уже и сам с этим встречался. Угу, было дело. Как я понимаю, механизм там такой - при сбое кварца происходит переключение MCLK на DCO, но на битах SELM это не отражается. И когда потом в эти биты записывается то же значение, переключения обратно не происходит - я думаю, что там переключение происходит по изменению битов, а поскольку изменения нет, то нет и переключения.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 8 2008, 11:29
|

Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 8-04-06
Из: Новосибирск
Пользователь №: 15 939

|
Цитата переходит на тактирование от DCO автоматически. А вот SMCLK - нет. Нужно сначала переключить его тактирование на DCO, а затем можно переключать снова на тактирование от кварцевого генератора Хм. интересное замечатие. Не знал. 2 cornflyer: У вас теперь получается два кварца используется или с XT2IN/XT2OUT резонатор убрали?
|
|
|
|
|
Feb 8 2008, 12:51
|

Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729

|
Цитата(aag @ Feb 8 2008, 14:29)  2 cornflyer: У вас теперь получается два кварца используется или с XT2IN/XT2OUT резонатор убрали? используеца только XT2IN/XT2OUT, а на XIN/XOUT просто повешен часовой кварцевый резонатор 32768 Гц.
|
|
|
|
|
Feb 8 2008, 13:12
|

Местный
  
Группа: Свой
Сообщений: 319
Регистрация: 3-09-05
Из: Беларусь, Новополоцк
Пользователь №: 8 188

|
Цитата(Dog Pawlowa @ Feb 6 2008, 08:56)  Дело в том, что реально повышает помехоустойчивость не столько watchdog, сколько супервизор питания, которого в 149 и 449 не было. А когда у F449 убрать "Supply Voltage Supervisor/Monitor With Programmable Level Detection" успели? Люди его используют, а его нет оказывается. Странно как то...
|
|
|
|
|
Feb 21 2008, 12:41
|

Частый гость
 
Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729

|
похоже глюк может быть в опциях оптимизации компилятора. я использую IAR C/C++ Compiler for MSP430 V3.41 в опциях компилятора я поставил галочку Optimizations / Area -> High (Maximum optimization) видимо так лучше не делать  поставил Optimizations / Speed -> High (Maximum optimization) уже 30 минут работает без глюков если опять взглюкнет - откомпиляю свой проект в mspgcc
|
|
|
|
|
Mar 5 2008, 02:48
|

Частый гость
 
Группа: Свой
Сообщений: 81
Регистрация: 8-04-06
Из: Новосибирск
Пользователь №: 15 939

|
Цитата Бляха муха, да резистор от конденсатора даже по цвету различается Ну зачем ругаетесь? Мало ли на плате кондеров и резисторов. Проверить какой из них к чему подключен никому бы в голову не пришло даже. Тем более проверять резисторы, не имеющие к кварцу отношения... Вобщем баг подлый получился.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|