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

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Проблема с UART, выводит несуразицу
Zelepuk
сообщение Jul 25 2011, 08:49
Сообщение #31


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Что примечательно, заменив преобразователь уровней на max232 я вообще ничего не наблюдаю...(схема заведомо рабочая).

Такое вообще бывает?
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 25 2011, 18:54
Сообщение #32


Гуру
******

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



Эх-ма. sad.gif Основная проблема большинства начинающих в том, что они варятся внутри своей проблемы, не умея/на зная, как выйти и взглянуть на нее с другой высоты полета. А с другой высоты проблема выглядит немного иначе и попутно могут выявиться связи с другими объектами, которые незаметны изнутри проблемы. Вдобавок начинающие пренебрегают отвечать (хотя бы для самого себя) на наводящие вопросы, которые они не понимают или считают незначащими.
Вот вы, Zelepuk, пишете сообщения не для публичного форума, а для себя. "Мысли вслух" т.с.. Нет, такой способ тоже бывает полезным! Но только в том случае, когда вы, не пренебрегая мелочами, описываете проблему и ее текущее состояние полностью, а не фрагментарно!
Из последних ваших сообщений лично мне совершенно непонятно какую программу, с какими изменениями/дополнениями вы сейчас проверяете? С какой схемотехникой или на какой Eval Board? Ведь даже кусочек опубликованной вами схемы оказался неточным, а как там дело с остальной схемой? Проверяли вы или нет а) выходные сигналы осциллографом, б) преобразователь уровней отдельно от MSP430, в) работу связи с другой терминальной программой, г) работоспособность самого порта на компьютере, д) настройки COM-порта? Вы вообще используете нормальный аппаратный COM-порт или переходник USB-COM? Ответе хотя бы для себя на эти вопросы, чтобы локализовать место поиска проблемы.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jul 25 2011, 19:08
Сообщение #33


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Схемотехника используется из slaa409 (апликейшн счётчика).
Преобразователь уровней на MAX232 работает (проверялось отдельно).
Используется COM-порт на материнке.
Осцила нет crying.gif
Код (это ваш последний вариант для меня - SMLK от XT2):
CODE
#include <stdint.h>
#include <msp430x471x7.h>

#define FREQMCLK 2097152UL //MCLK
#define FREQSMCLK 16000000UL //SMCLK
#define FREQACLK 32768UL //ACLK
#define BAUDRATE 9600UL //baudrate
#define TICK_MS_ADDVAL 10U //инкремент таймера тиков [мс]
#define BLINK_TM_MS 250U //полупериод мерцания LED [мс]
#define LED_ON P5OUT&=~BIT7//включить LED
#define LED_OFF P5OUT|=BIT7 //выключить LED
#define LED_TOGGLE P5OUT^=BIT7 //переключить LED

int __low_level_init(void)
{ WDTCTL = WDTPW | WDTHOLD; //останов WDTimer
return 1;
}

volatile uint16_t tick_ms; //счетчик миллисекунд
uint8_t uart_buf[]={'0','1','2','3','4','5','6','7','8','9','\n','\r'};//буфер UART

void main(void)
{ uint16_t tickStamp, idx, flag;
uint32_t lTmp;
//Инициализация системы тактирования
FLL_CTL1 = 0; //D=2, MCLK=fDCOCLK/D, SMCLK=fDCOCLK/D, ACLK=LFXT/1, XT2=on
FLL_CTL2 = XT2S1; //для работы XT2=16МГц
FLL_CTL0 = XCAP11PF; //XT1=LF, DCO/D, XCAP=11пФ
while ((FLL_CTL0 & LFOF) != 0); //ждем готовности генератора 32768Гц
SCFI0 = FLLD_2; //D=2, fDCOCLK = 0.65-6.1Mhz
SCFQCTL = (32U-1U); //fDCOCLK=32768*(32)*2=2097152Гц, DCO=fDCOCLK/2
FLL_CTL0 |= DCOPLUS; //MCLK=DCO/1, SMCLK=DCO/1
do
{ IFG1 &= ~OFIFG;
} while ((IFG1&OFIFG) != 0); //ждем готовности всей системы тактирования
FLL_CTL1 |= SELS; //MCLK=fDCOCLK, SMCLK=XT2, ACLK=LFXT/1, XT2=on
//Инициализация UART
UCA1CTL1 |= UCSWRST; //Reset USCI
UCA1CTL0 = 0; //Parity=disable, 8bit, 1stop-bit
UCA1CTL1 = UCSSEL_2 | UCSWRST; //BRCLK=SMCLK
lTmp=FREQSMCLK/BAUDRATE;
UCA1BR1 = (uint8_t)(lTmp>>8UL); //
UCA1BR0 = (uint8_t)(lTmp); //BITCLK=BRCLK/(UCAxBR1*256+UCAxBR0)
UCA1MCTL = 0; //регистр модуляции
UCA1STAT = 0; //сброс всех битов ощибок
UCA1IRTCTL = 0; //IRDA disable
UCA1CTL1 &= ~UCSWRST;
P1SEL |= BIT6 | BIT7; //P1.6 = USCI TXD, P1.7 = USCI RXD
UC1IE &= ~(UCA1TXIE | UCA1RXIE); //запретим прерывания USCI_A1
UC1IFG &= ~UCA1RXIFG; //сбросим флаг готовности буфера приемника
UC1IFG |= UCA1TXIFG; //установим флаг готовность буфера передатчика
//Иницализация TimerA
TACTL = TASSEL_1 | TACLR; //TACLK=ACLK/1
TACCR0=(uint16_t)(FREQACLK*TICK_MS_ADDVAL/1000UL); //период около 10мс
TACCTL0 = CCIE; //разр. прерывание от CCR0
TACCTL1 = 0;
TACCTL2 = 0;
TACTL |= MC_1; //запустить таймер в режиме CountUP
//Инициализация LED
P5DIR |= BIT7;
P5SEL &= ~BIT7;
LED_ON;
//Настройка пинов чтобы посмотреть частоту SMCLK и ACLK
P1DIR |= BIT4 | BIT5;
P1SEL |= BIT4 | BIT5; //P1.4 = SMCLK, P1.5 = ACLK

idx=0;
flag=0;
tickStamp = tick_ms; //зафиксировать временную метку
__enable_interrupt(); //разрешим прерывания
for (;;)
{ if ((UC1IFG & UCA1TXIFG) != 0) //буфер передатчика готов?
{ UCA1TXBUF = uart_buf[idx]; //вывод текущего символа
flag=1; //установим флаг готовности UART
if (idx < (sizeof(uart_buf)-1))//увеличение индекса элемента буфера
idx += 1;
else
idx = 0;
}
if ((tick_ms - tickStamp) >= BLINK_TM_MS)//полупериод мерцания закончился?
{ tickStamp = tick_ms; //запомним новое значение метки времени
if (flag != 0) //проверка флага готовности UART
{ LED_TOGGLE; //включаем LED
flag = 0; //сбросим флаг готовности UART
}
else
LED_OFF; //выключаем LED
}
}
}

#pragma vector=TIMERA0_VECTOR
#pragma type_attribute=__interrupt
void TimerA0_ISR (void)
{
tick_ms += TICK_MS_ADDVAL; //инкремент счтечика тиков [мс]
}


Код, судя по всему, верный и рабочий.
Суть проблемы:
Когда открываю порт в HyperTerminal то по экрану бегут иероглифы. Стоит только "закрыть-открыть" порт тут же всё идёт как надо (бегут цифры "0123456789" столбиком). Иногда "закрыть-открыть" нужно несколько раз тобы получить нужную картину.
Сие чудо наблюдается в ЛЮБОЙ терминальной программе.

Если бы просто не выводилось ничего я бы больше не стал писать (сколько можно уж). Но тут непонятное вовсе явление.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 25 2011, 20:42
Сообщение #34


Гуру
******

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



"Дьявол кроется в мелочах". laughing.gif Не ссылайтесь на slaa409, опубликуйте свою схему. Если она на базе slaa409, то ничего секретного там нет, не так ли? Например, в схеме из slaa409 используется часовой кварц со встроенными нагрузочными конденсаторами, а у вас другой кварц с внешними конденсаторами. Притом, что имеются нюансы применения такого кварца, о чем отмечено в Errata.
Преобразователь вы проверяли как? Пробовали проверить на "эхо" при подключенной плате? Т.е. все подключено штатно к ПК, но только в самом преобразователе TTL выход преобразователя подключен к TTL входу, который в свою очередь отключен от выхода MSP430. Отключив в программе-терминале локальное эхо, нужно получить такую же строку символов, которую вы вводите с клавиатуры в окне терминала. Handshake (аппаратное управление потоком) в настройках терминальной программы точно отключено? Br@y's Terminal ведет себя также как и Гипертерминал?
Питание своей платы откуда получаете? Гальваническая изоляция от сети у этого БП имеется? Ваш ПК заземлен? Не могут ли токи от сетевого фильтра и/или от вашего БП мешать передаче (синфазная помеха)?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 26 2011, 02:33
Сообщение #35


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Zelepuk @ Jul 25 2011, 22:08) *
Код, судя по всему, верный и рабочий.
Суть проблемы:
Когда открываю порт в HyperTerminal то по экрану бегут иероглифы. Стоит только "закрыть-открыть" порт тут же всё идёт как надо (бегут цифры "0123456789" столбиком). Иногда "закрыть-открыть" нужно несколько раз тобы получить нужную картину.
Сие чудо наблюдается в ЛЮБОЙ терминальной программе.

Если бы просто не выводилось ничего я бы больше не стал писать (сколько можно уж). Но тут непонятное вовсе явление.

Код неверный и нерабочий, поскольку он постоянно, без интервалов больше стопового передает что-то.
Принять такое, подключившись в произвольный момент времени, невозможно.
Вы вообще про байтовую синхронизацию слышали? wink.gif
Сделайте так: запустите терминал, откройте порт, ПОТОМ запустите устройство и отпишитесь о результатах.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jul 26 2011, 08:25
Сообщение #36


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Dog Pawlowa @ Jul 26 2011, 06:33) *
Код неверный и нерабочий, поскольку он постоянно, без интервалов больше стопового передает что-то.
Принять такое, подключившись в произвольный момент времени, невозможно.
Вы вообще про байтовую синхронизацию слышали? wink.gif
Сделайте так: запустите терминал, откройте порт, ПОТОМ запустите устройство и отпишитесь о результатах.


Да, так всё работает нормально. Выходит нужно задержку поставить в коде?

Цитата(rezident @ Jul 26 2011, 00:42) *
"Дьявол кроется в мелочах". laughing.gif Не ссылайтесь на slaa409, опубликуйте свою схему. Если она на базе slaa409, то ничего секретного там нет, не так ли? Например, в схеме из slaa409 используется часовой кварц со встроенными нагрузочными конденсаторами, а у вас другой кварц с внешними конденсаторами. Притом, что имеются нюансы применения такого кварца, о чем отмечено в Errata.
Преобразователь вы проверяли как? Пробовали проверить на "эхо" при подключенной плате? Т.е. все подключено штатно к ПК, но только в самом преобразователе TTL выход преобразователя подключен к TTL входу, который в свою очередь отключен от выхода MSP430. Отключив в программе-терминале локальное эхо, нужно получить такую же строку символов, которую вы вводите с клавиатуры в окне терминала. Handshake (аппаратное управление потоком) в настройках терминальной программы точно отключено? Br@y's Terminal ведет себя также как и Гипертерминал?
Питание своей платы откуда получаете? Гальваническая изоляция от сети у этого БП имеется? Ваш ПК заземлен? Не могут ли токи от сетевого фильтра и/или от вашего БП мешать передаче (синфазная помеха)?


Техасовцы вообще народ интересный. Выдают схему, а потом на фото платы у них же виден обычный кварц часовой и два кондёра.
Преобразователь проверял путём подключения к другой плате (на другом микроконтроллере).
ВСЕ терминалы ведут себя одинаково.
Гальваническая развязка у БП есть.
ПК не заземлён (обычный пк как у всех).
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 26 2011, 09:28
Сообщение #37


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Zelepuk @ Jul 26 2011, 11:25) *
Да, так всё работает нормально. Выходит нужно задержку поставить в коде?

Я же не знаю, какая цель этого проекта.
Если убедиться в работоспособности преобразователя уровней RS232, то цель достигнута.
Если передавать осмысленные данные, то одной задержки мало, обычно предпринимают какие-нибудь меры для контроля правильности приема.
Правила, установленные для организации передачи данных, зовутся протоколом, и Вы должны его сформулировать, предусмотрев поведение для любой из сторон.
Сейчас Вы не предусмотрели поведение приемника.
Включившись в середине посылки, даже при наличии задержки, приемник получит неправильные данные и запустит стратегическую ракету, начав III WW.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
rezident
сообщение Jul 26 2011, 10:15
Сообщение #38


Гуру
******

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



Цитата(Dog Pawlowa @ Jul 26 2011, 07:33) *
Код неверный и нерабочий, поскольку он постоянно, без интервалов больше стопового передает что-то.
Принять такое, подключившись в произвольный момент времени, невозможно.

Да, этот момент я прохлопал, увлекшись проблемой ТС с тактированием UART. laughing.gif Хотя в посте 23 у меня был пример в котором выдача байта в UART была синхронизирована с мерцанием светодиода и значительно превышала период его передачи.
Цитата(Zelepuk @ Jul 26 2011, 13:25) *
Да, так всё работает нормально. Выходит нужно задержку поставить в коде?
Вам нужен какой-либо протокол передачи данных, который включает в себя контроль целостности данных. Кроме того, устройства чаще всего подразделяются на ведущие и ведомые. Соответственно передача данных строится как запрос (ведущего) - ответ (ведомого). Ваш электросчетчик будет ведомым, так что он должен "слушать" линию связи и по запросу выдавать требуемый ведущим блок данных.
Цитата(Zelepuk @ Jul 26 2011, 13:25) *
Техасовцы вообще народ интересный. Выдают схему, а потом на фото платы у них же виден обычный кварц часовой и два кондёра.
Evalutation Board это не догма, а пример/образец, руководство к действию. Этот пример не для слепого клонирования, а как образец для разработки на его основе своего устройства. Разработка это работа инженера, который должен понимать нюансы применения компонентов.
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jul 26 2011, 12:52
Сообщение #39


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Цитата(Dog Pawlowa @ Jul 26 2011, 13:28) *
Я же не знаю, какая цель этого проекта.
Если убедиться в работоспособности преобразователя уровней RS232, то цель достигнута.
Если передавать осмысленные данные, то одной задержки мало, обычно предпринимают какие-нибудь меры для контроля правильности приема.
Правила, установленные для организации передачи данных, зовутся протоколом, и Вы должны его сформулировать, предусмотрев поведение для любой из сторон.
Сейчас Вы не предусмотрели поведение приемника.
Включившись в середине посылки, даже при наличии задержки, приемник получит неправильные данные и запустит стратегическую ракету, начав III WW.


Цель? Напсиать свой putchar.
Вот например когда я работал с ARM9, то в компиляторе был printf, который выводил данные в терминалку через DBGU (UART). Так вот там было всё просто и диалого между пользователем и камнем осуществлялся очень хорошо (и протоколов там небыло никаких).

Сообщение отредактировал Zelepuk - Jul 26 2011, 13:12
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jul 26 2011, 20:31
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Zelepuk @ Jul 26 2011, 15:52) *
Цель? Напсиать свой putchar.

Ну дык и писали бы putchar!
А так получился тест непонятно чего.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jul 27 2011, 11:32
Сообщение #41


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Теперь можно и putchar писать, теперь видно что связь есть и связь нормальная

Сообщение отредактировал Zelepuk - Jul 27 2011, 11:48
Go to the top of the page
 
+Quote Post
Zelepuk
сообщение Jul 28 2011, 13:50
Сообщение #42


Знающий
****

Группа: Участник
Сообщений: 634
Регистрация: 27-10-10
Пользователь №: 60 464



Всем спасибо! Тема закрыта!

Сообщение отредактировал Zelepuk - Jul 29 2011, 12:19
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 08:13
Рейтинг@Mail.ru


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