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

 
 
4 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> Проблемы с USART, Избитая тема, но все-таки
Skaf
сообщение Jun 6 2009, 07:57
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Вот пытаюсь заставить компьютер принимать данные из контроллера по ком порту.

Но получается что-то странное. Программа просло шлет натуральный ряд от 1 до 200. Следовательно должна наблюдаться наклонная прямая, а наблюдается непойми что.. Хотя закономерность в этом есть… Вот и не понятно в чем дело. Сначала думал, что неправильно число бит настроил или скорость- но вроде правильно. Проверьте пожалуйста, наверно глаз замылился. Кварц у меня на 7.372800, что кратно стандартным скоростям ком порта.


Прикладываю скриншот и код программы



Код
/*************************************
ÏÐÈÌÅÐ ÌÈÃÀÍÈß ÑÂÅÒÎÄÈÎÄÎÌ
Ïðèìåð ïîäêëþ÷åíèÿ íà ðèñóíêå 1
**************************************/

#include <avr/io.h>
#include <util/delay.h>

//#define F_CPU 7372800UL

int main(void) {
DDRA = 0xff;
DDRB = 0b11000111;
DDRC = 0xff;
DDRD = 0xff;

SetupOutUART();

unsigned char i;

while(1){
i++;
_delay_ms(200);
PORTD = ~PORTD;
SendByte(i);
if (i==200){
i=1;
}
_delay_ms(200);
}

}

void SetupOutUART (void){
UCSRB = 0b00011000;
UCSRC = 0b10000110;
UBRRL = 7;

}

void SendByte (unsigned char data){
UDR = data;
}
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jun 6 2009, 08:15
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



Цитата(Skaf @ Jun 6 2009, 16:57) *
Код
/*************************************
void SetupOutUART (void){
UCSRB = 0b00011000;
UCSRC = 0b10000110;
UBRRL = 7;
}
}

Очень советую не записывать цифры напрямую в регистры конфигурации, а использовать для этого такой вид записи
Код
REG_NAME = (1 << BIT_NAME0) | (1 << BIT_NAME1) | (1 << BIT_NAME2);

Где REG_NAME - имя регистра,
BIT_NAME0, BIT_NAME1, BIT_NAME2 - имена битов.
Таким образом гораздо легче прочитать, что делает программа. В Вашем же случае придется октрывать даташит и вычитывать номера разрядов и разбираться, за что они отвечают. К сожалению, даташита нет под рукой.
Цитата(Skaf @ Jun 6 2009, 16:57) *
Код
void SendByte (unsigned char data){
[b]Если данные отправляются "в лоб", то нужно анализировать флаг UDRE. И пока он не равен 1, ничего не отправлять. А задержку на 200 мс - выкинуть.[/b]
UDR = data;
}


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 6 2009, 08:28
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



При занесении данных в реистры лучше использовать битовые определения.
При инициализации поставте
UBRRH = 0;
UBRRL = 7;

При передаче анализируйте флаг опустошения буффера: while(!(UCSRA&(1<<UDRE)))

P.S. Если приходит не то что вы хотели отправить значит проблема в неправильном битрейте.
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 6 2009, 08:37
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



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


Сейчас исправлю. Перепишу код с указанием битов.

Что касается битрейта, то должно быть все верно исходя из формулы его вычисления, частоты кварца 7372800 и делителя 7.
Кстати в PROTEUS этот код работает как часы.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 6 2009, 08:39
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Да и ещё вопрос вы переключили МК на работу от внешнего кварца?
Может быть он у вас работает на внутренних 8 МГц?
У меня буквально вчера был такой прикол - при настройке уарта использовал частоту 7.ххх МГц (взял настройку из другого проекта)
а реально процессор работал на 8 МГцах от встроенного генератора. Тоже шля всякая белеберда пока не заметил эту оплошность smile.gif
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 6 2009, 09:00
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Нет, фьюзы я выставил верно. Если отключить кварц- вообще ничего не работает.

Ну странно это, что сладшие биты правильные- рисуется правильно нижняя часть на графике, а сверху какой-то мусор...

Если смотреть приходящие цифры, то там что-то типа

120
121
122
123
257
233
126
127

То есть там есть куски правильной полсдеовательности, но часто она нарушается каким-то мусором.

Причем как видно из графига мусор это не простой. Эти левые числа ВСЕГДА больше нужных! Поэтому мусор именно в верхней части графика и ни разу не пришло ни одного байта меньше чем нужно.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 6 2009, 09:32
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Попробуйте тогда выполнять пересылку с опросом бита готовности.
И проверте во фузах не включён ли у вас стророжевой таймер.

Код
#include <avr/io.h>
#include <util/delay.h>

//#define F_CPU 7372800UL


void SetupOutUART (void){
UCSRB = 0b00011000;
UCSRC = 0b10000110;
UBRRH = 0;
UBRRL = 7;
}

void SendByte(unsigned char Data)    
{
//ждём пока не освободится передающий буффер
while ( !( UCSRA & (1<<UDRE)) );
UDR = Data;
}

int main(void)
{
DDRA = 0xff;
DDRB = 0b11000111;
DDRC = 0xff;
DDRD = 0xff;

SetupOutUART();

unsigned char i=1;

while(1)
  {
     _delay_ms(200);
     PORTD = ~PORTD;
    SendByte(i++);

    if (i>=200) i=1;
   }
}
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 6 2009, 10:11
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Добавил while ( !( UCSRA & (1<<UDRE)) );
но ничего не изменилось. Как было- так и осталось (

Сторожевой таймер не включен. Иначе бы он регулярно сбрасывался и не наблюдалось бы на графике возрастающего тренда.
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 6 2009, 10:26
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Ну если вы уверены что у ваша программа работает правильно тогда ищите косяки снаружи smile.gif
Например в самом COM-порту, терминале, преобразователе ttl-rs232 (если у вас не переходник com-usb)
Попробуйте по нажатию кнопки передавать байт и смотреть что будет приходить.
Или постоянно передавать какое-либо число.

Судя по коду программы всё должно работать правильно.
Была-бы под рукой платка с МК и max232 проверил-бы у себя.
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 6 2009, 10:29
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



У меня собран кабель-переходник на ST232. Кабель был проверен путем замыкания входа и выхода. Через гипер терминал принималось точно то, что передавалось наружу. Значит вроде должен быть исправен
Go to the top of the page
 
+Quote Post
mempfis_
сообщение Jun 6 2009, 10:44
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 001
Регистрация: 27-06-06
Пользователь №: 18 409



Цитата(Skaf @ Jun 6 2009, 13:29) *
У меня собран кабель-переходник на ST232. Кабель был проверен путем замыкания входа и выхода. Через гипер терминал принималось точно то, что передавалось наружу. Значит вроде должен быть исправен


Для проверки UARTа МК закольцуйте данные через него - сделайте отправку эха назад в ком-порт.
Добавте функцию ReadByte и после настройки UART цикле while отправляйте эхо.
Не забудте разрешить приём если он у вас запрещён.

Код
void SendByte(unsigned char Data)    
{
//ждём пока не освободится передающий буффер
while ( !( UCSRA & (1<<UDRE)) );
UDR = Data;
}

unsigned char ReadByte(void)    
{
//ждём пока не буте получен байт
while ( !( UCSRA & (1<<RXC)) );
return UDR;
}

void main(void)
{
//тут настройте уарт

//бесконечный цикл
while(1) SendByte(ReadByte());
}

}


Сможете проверить стабильность работы модуля UART и преобразователя ttl-rs232.

Сообщение отредактировал mempfis_ - Jun 6 2009, 10:45
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 6 2009, 11:57
Сообщение #12


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Не вижу смысла добавлять прием данных, пока даже просто передача не работает (
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jun 6 2009, 13:12
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Цитата
120
121
122
123
257
233
126
127

А поточнее нельзя? Число 257 - это что такое?
--
Посмотрите пропайку и степень загрязнения конденсаторов около кварца.

Сообщение отредактировал DpInRock - Jun 6 2009, 13:15


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 6 2009, 15:14
Сообщение #14


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Skaf @ Jun 6 2009, 12:00) *
Нет, фьюзы я выставил верно. Если отключить кварц- вообще ничего не работает.

Уточните, что значит совсем ничего не работает?

Выводите вместо графика числа в hex виде, будет сразу заметно в чем дело - завышена частота или занижена.
какой МК кстати?
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 6 2009, 17:34
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



МК мега16. Совсем не работает это значит не мигает светодиод, который висит на PD7 и мигает за счет PORTD = ~PORTD;

Вот реальные байты принятые из ком порта ПК. Должен быть натуральный ряд.

Цитата
FE 03 04 FF 06 FF 08 1F FE 0B FE F8 0E F8 10 1F FF F3 F4 F1 FF 18 1F 1E 1B 1C 1F 1E FF 20 E1 FE 23 24 3F 26 FE FE FF 3A FB F9 FB FF F9 FE 3F 3E FE 3F 36 3F 38 FE 3E E7 3C 3F 3E 3F 7F FC E8 44 FF F4 FF C8 49 FE E9 4C 4D CE CF 50 FD D2 F3 F4 D5 F5 F7 BC 5F EB EF DC 5F 5E FF E0 61 7E 63 64 F6 66 F6 FF EA 7B 6C FF 6E 6F F8 F1 7E 73 74 F7 76 7F 78 7F 7E 7B 7C 7F 7E 7F 80 FE F0 FC FF F8 FF 88 8F FE FF 8C 8F 8E 8F 90 F1 BE F3 94 9F F6 FF FE 99 9E FB 9C 9F 9E 9F BF FE FF FF A5 BE FA E8 FF FE FB FD AF EE EF BF FB F3 B4 BF BE BF FF BF BE BB BC BD BE BF C0 FF FE C3 C4 FF C6 FC C8 F0 03 F8 F0 07 08 1F FE
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 7 2009, 07:52
Сообщение #16





Guests






Впечатление, что скорости не совпадают...
Попробуйте для начала выводить одно и то же значение (лучше F0) без пауз, тогда можно что-то увидеть.
Еще посмотрите, все-таки, что там с кварцем. Может заводится не на той частоте...
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 7 2009, 08:09
Сообщение #17


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Сделал передачу одного и того же байта- 0xAA. На стороне ПК принимается

Цитата
EE FF BA FD FE FE FF FE FE FE FF FE FE FE FE FE FD FE FE AA FE FE FE FE BA FF FD FF BA FE FD EA FE FE FE FE D5 FF FE AA FE FF FE FE FF FF EA FE FE AA BA BA FF D5 F5 FE BA FE FE AA FF FE FE BA FD FF FF AA FE FE FF FE FF FF FE FF FE FE EA BA FE BA AA FE FE FF FE FE FE FF AA FE FF EE FE FE FE AA FE FE EA FE FF FE AA BA BA FE BA FE FF FD FE FD BA FE FE FE FF FE FE FE FE FE FE FE BA FF AA FD FE FE FE FE FE FF FE BA FE FE FE BA FF FE FE FE FE FE BA FE FE FE FF FF FF FE FE FE AA FE


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

Цитата
F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F8 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F8 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F8 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0


Цитата
без пауз


Тут, к сожалению с паузами было. Сейчас сделаю без пауз.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 7 2009, 08:10
Сообщение #18





Guests






Зря AA взяли. Лучше F0 или 55. Частоту посмотрели на кварце?
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 7 2009, 08:12
Сообщение #19


Гуру
******

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



Цитата(Skaf @ Jun 6 2009, 20:34) *
Вот реальные байты принятые из ком порта ПК. Должен быть натуральный ряд.


Какой драйвер RS232 установлен? Какие конденсаторы к нему запаяны? Какое напряжение питания?
Оч похоже на проблемы в физическом уровне. Диагностируется осциллографом.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 7 2009, 08:25
Сообщение #20


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Цитата
Зря AA взяли. Лучше F0 или 55. Частоту посмотрели на кварце?


Вот результаты при F0 без пауз
Цитата
F0 F8 F0 F0 F0 F0 F0 F8 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 3E FE F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 3E 7E 7C 7C 7C FC F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 FE F0 F0 F0 F8 F0 F0 F8 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 3E 3E 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C FC F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0 F0


Частоту, к сожалению, возможности посмотреть нет.


Цитата
Какой драйвер RS232 установлен? Какие конденсаторы к нему запаяны? Какое напряжение питания?
Оч похоже на проблемы в физическом уровне. Диагностируется осциллографом.


Используется ST232 с конденсаторами на 0.1 мкФ, как в датащите. Напряжение питания 5.2 вольта. Осциллографа не имею, к сожалению (

Вот мои фьюзы. Атмега16, кварц на 7.3728. Программа программирования- UniProf, галочка около фьюза в ней означает 1 в датащите.



Если это важно- около кварца у конроллера у меня стоят кондеры на 15пФ
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 7 2009, 09:03
Сообщение #21





Guests






У Вас COM-порт какой в компьютере? Настоящий или переходник USB-COM?
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 7 2009, 09:10
Сообщение #22


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Обычный железный комп порт в материнке.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 7 2009, 09:28
Сообщение #23





Guests






Есть вероятность, что проблема с портом компьютера - не справляется со сплошным потоком по какой-то причине.
Чтобы исключить эту версию, надо бы проверить на другом компьютере...
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 7 2009, 10:00
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



СТранно.. до этого я слал ему по одному байту ведь раз в секунду и тоже были проблемы...
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 7 2009, 10:17
Сообщение #25





Guests






Если есть доступ к другому компу, то лучше проверить. Тогда будете уверены, что дело не в этом...


Судя по тому, как принимается F0, действительно похоже, что проблема на физическом уровне. Возможно фронты "завалены". Предлагаю еще повторить вывод без пауз значения 55 (hex) - это чередование 0 и 1 с учетом
старт- и стоп- битов.
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 7 2009, 10:36
Сообщение #26


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Мдя... Подключил я к другому компьютеру... байты F0 и 55 принимаются идеально. Никаких проблем. Однако остальные мои примеры с возрастающим числом и с посылкой F0 не постоянно, а раз с задержкой- проходят аналогично первому компьютеру... Вот так штука....
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 7 2009, 10:48
Сообщение #27





Guests






Ну это уже результат. Значит версии про неисправный порт компа и неправильную скорость можно временно отклонить. Нужно смотреть железо, что вы там сотворили. Плохо без осциллографа. Подтягивающие резисторы на RX и TX UARTа у Вас присутствуют?
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 7 2009, 11:07
Сообщение #28


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Хм... Резисторов нет- напрямую от контроллера к ST232 подключены, а что, они нужны? )

Сделал тут сплошной поток возрастающих цифр от 1 до 200- вообще ересь идет, практически белый шум )
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 7 2009, 11:13
Сообщение #29





Guests






Резисторы к питанию +5В поставьте - хуже точно не будет. Номиналы в диапазоне примерно от 5К до 15К, какие найдете. Вообще, по-моему Вам пора свою схему выкладывать, хотя бы часть от UART-а МК до порта RS-232 в ПК.
Go to the top of the page
 
+Quote Post
vvs157
сообщение Jun 7 2009, 12:23
Сообщение #30


Профессионал
*****

Группа: Свой
Сообщений: 1 526
Регистрация: 8-04-05
Пользователь №: 3 960



Цитата(Skaf @ Jun 7 2009, 14:36) *
Мдя... Подключил я к другому компьютеру... байты F0 и 55 принимаются идеально. Никаких проблем. Однако остальные мои примеры с возрастающим числом и с посылкой F0 не постоянно, а раз с задержкой- проходят аналогично первому компьютеру... Вот так штука....
Посмотрите осциллографом, что там у вас идет.
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 7 2009, 13:14
Сообщение #31


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Чуть позже выложу схемку, хотя зачем она- она самая стандартная. Включение ST232 (=MAX232) как в даташите, на вход ее напрямую подается соотв. выход микроконтроллера. Ну вечерком подробно все нарисую с номерами ножек.

Подключил подтягивающий резистор- не изменилось ничего.

Цитата
Посмотрите осциллографом, что там у вас идет.


Осциллографа нет у меня ( Максимум что могу сделать- понизить скорость передачи и посмотреть на осциллографе на базе звуковой карты ) Вечерком это тоже сделаю.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 7 2009, 13:16
Сообщение #32





Guests






Куда подключили и какого номинала? И почему только один? В общем, ждем подробную схему...
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 7 2009, 15:53
Сообщение #33


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Skaf @ Jun 6 2009, 20:34) *
МК мега16. Совсем не работает это значит не мигает светодиод, который висит на PD7 и мигает за счет PORTD = ~PORTD;

Вот реальные байты принятые из ком порта ПК. Должен быть натуральный ряд.
FE 03 04 FF 06 FF 08 1F FE 0B FE F8 0E F8 10 1F FF F3 F4 F1 FF 18 1F 1E 1B 1C 1F 1E FF 20 E1 FE 23 24 3F

А часом это самое мигание PORTD = ~PORTD не убивает данные которые шлет UART? UART тоже висит на PORTD. (банально КЗ между PD2 и PD1 например)

Если взять во внимание что данные по UART передаются в обратном порядке, например 04h передается как "0 - 0010 0000 - 1", то получить FF после передачи 04 можно если частота передатчика завышена относительно частоты приемника, и последний "0" воспринимается как старт бит следующего символа.

08 09 0A

- 0 0001 0000 1 - 0 1001 0000 1 - 0 0101 0000 1 -
превратилось в

08 1F FE

- 0 0001 0000 x - 0 1111 1000 x - 0 0111 1111 1 -

Обилие "1111" тут тоже символ начал приниматься раньше чем нужно (в момент передачи СТОП бита / межсимвольной паузы). Что в свою очередь говорит, что частота передатчика м.б. завышена относительно приемника.


Цитата
Осциллографа нет у меня ( Максимум что могу сделать- понизить скорость передачи и посмотреть на осциллографе на базе звуковой карты ) Вечерком это тоже сделаю.

Проверте на какой частоте работает МК.
Запрограммируйте TIMER1 на тик раз в 500 тактов, в прерывании таймера меняйте какой-нибудь пин любого порта. Измерьте частоту с этого пина низкочастотным частотомером (в китайских тестерах есть частотомер со шкалой 0..20kHz). Потом домножите показания на 1000 и получите частоту МК в Hz, или разделите показания еще на 1000 и будет частота в Mhz.
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 7 2009, 20:21
Сообщение #34


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Я сделал вот что. Запрограммировал мегу на постоянную бесперерывную отсылку 0x55 в ком порт. Это 101010101... постоянно включая стоповые и стартовые биты и приделал мультиметр со встроенным частотомером прямо на TxD. Он показывает 28.8-28.9 кГц (переключается туда-сюда). На сколько я понимаю, если умножить на 2- это и будет битрейт... 28.8 умножаем на 2 и получаем 57.6 килобита... Тоесть как раз нужная скорость... тока 28.9 немного напрягает

Кстати 0x55 и принимается на компе хорошо и без ошибок!! А вот всякие там возрастающие натуральные ряды - ужасно.

Думал может помехи- но провод у меня экранированный, экран припаян к корпусу штекера ком порта, а с другой стороны на землю устройства.

Схемы выложу завтра, сегодня не успел (

Цитата
Куда подключили и какого номинала? И почему только один? В общем, ждем подробную схему...


Подключил между TxD и VCC. Один- потому что только TxD у меня используется. Приема данных на стороне контроллера вообще пока нет. Пока пытаюсь отладить отправку
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 7 2009, 21:18
Сообщение #35





Guests






Частота скорее всего в норме. Насчет мигания светодиодом - это интересная версия. Если разводка платы неудачна, то при его включении-выключении может прыгать потенциал земли. Что может восприниматься как ложный старт-бит. Попробуйте временно отключить светодиод (аппаратно или программно).
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 8 2009, 18:18
Сообщение #36


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Светодиод я отключил, толку никакого.

Я понизил скорость передачи данных до 600 бод. И подключил через резисторный делитель на вход звуковой карты. Своебразный осциллограф. Сначала я проверил без кабеля в ком порт, а внизу осциллограмма с подключенным кабелем. Амплитуда там меньше раза в 4, просто увеличл, чтобы лучше было видно сигнал. Какой-то шлак вообще-то а не сигнал. А кабель на конце с COM-TTL преобразователем. Сейчас попробую отпаять кабель вообще и подпаяться напрямую к плате преобразователя уровней.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 8 2009, 18:47
Сообщение #37





Guests






<< Думал может помехи- но провод у меня экранированный, экран припаян к корпусу штекера ком порта, а с другой стороны на землю устройства...>>

Экран кабеля на землю устройства лучше не подключать. В общем случае - это не правильно.
Вообще-то, в большинстве компьютерных COM-портах экран внутри порта уже соединен с землей. Можете проверить это тестером. Но со стороны устройства экран к земле подключать нельзя. Особенно, если кабель длинный. Это может быть источником помех и наводок. Может образоваться т.н. "земляная петля" - будет как антенна собирать весь "мусор"...
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 8 2009, 19:14
Сообщение #38


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Я отпаял весь кабель, соотвтственно вместе с экраном. Теперь плату преобразователя и контроллер разделяет 10 сантиметров проводочков. Результат остался прежним. Также выяснился следующий факт- если преобразователь ОТКЛЮЧИТЬ от компьютера- все хорошо, сигналы нормальные. Подключаю к компьютеру- опять помехи каике-то


Подключил к другому компьютеру- результат тот же
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 8 2009, 19:22
Сообщение #39





Guests






Желательно все-таки увидеть схему. Либо преобразователь накрылся. Либо что-то не так подключили. Чудес-то не бывает... Посмотрите напряжение на выходе преобразователя со стороны RS-232 не подключая к компьютеру и
ничего не передавая в порт. Должно быть где-то (-5)В - (-10)В относительно земли. С минусом!
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 8 2009, 19:41
Сообщение #40


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Преобразователь собран по описанию из статьи http://easyelectronics.ru/svyaz-mikrokontr...erez-rs232.html

Вот фотографии именно моего кабеля. Напряжение сейчас проверю. Кстати кабель проверялся- вход и выход я замыкал и в гипертерминале слал на него данные- точно такие же данные тут же принимались назад.

Напряжения проверил. Если вход у преобразователя висит- 0 вольт на выходе.. если вход подключить на +5 то -8.6 на выходе. Когда после этого убираю +5 на вход- то напряжение на выходе поднимается до 5 и спускается опять в 0 )) Жесть какая-то... Наверно преобразователь все-таки испортился. завтра еще раз устрою ему тест на гипертерминале.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 8 2009, 20:06
Сообщение #41





Guests






Кто-то тут уже давал такую ссылку... Тоже проблемы были... Сейчас все посмотрим, подождите полчасика...


А обратные стороны для обоих рисунков можете выложить?

Вы там часом RX и TX не перепутали местами (5-ти вольтовые)? Передавать от UART надо на 10 ногу ST232 - зеленый провод. Так у Вас?
Go to the top of the page
 
+Quote Post
OLEG_BOS
сообщение Jun 8 2009, 20:25
Сообщение #42


Местный
***

Группа: Свой
Сообщений: 386
Регистрация: 1-12-05
Пользователь №: 11 639



Цитата(Skaf @ Jun 8 2009, 22:41) *
Вот фотографии именно моего кабеля.

Мда... мда.. А вот что-то электролитов "накачки" в Вашем варианте платы то и не наблюдается. Или они спрятаны под платой ? wink.gif
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 8 2009, 20:29
Сообщение #43





Guests






вот тут еще почитайте:
http://electronix.ru/forum/index.php?showt...mp;#entry591281


<<А вот что-то электролитов "накачки" в Вашем варианте платы то и не наблюдается>>
Да ладно Вам придираться. На керамике такие вещи всегда исправно работали... wink.gif
Go to the top of the page
 
+Quote Post
Vlad27
сообщение Jun 8 2009, 21:00
Сообщение #44


Частый гость
**

Группа: Свой
Сообщений: 95
Регистрация: 31-07-05
Из: Полоцк Беларусь
Пользователь №: 7 227



Цитата(@Ark @ Jun 8 2009, 23:29) *
<<А вот что-то электролитов "накачки" в Вашем варианте платы то и не наблюдается>>
Да ладно Вам придираться. На керамике такие вещи всегда исправно работали... wink.gif


Так и керамики как-то не видно. Платка то ведь односторонняя.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 8 2009, 22:35
Сообщение #45





Guests






<<Так и керамики как-то не видно>>
Плохо смотрите...
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jun 9 2009, 12:44
Сообщение #46


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Цитата
А обратные стороны для обоих рисунков можете выложить?


Нет обратной стороны. Плата односторонняя. КОнденсаторы там есть. Их просто не видно ) Они 02х04

Цитата
Вы там часом RX и TX не перепутали местами (5-ти вольтовые)? Передавать от UART надо на 10 ногу ST232 - зеленый провод. Так у Вас?


Проверял. По зеленому проводу идут данные с контроллера в компьютер.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 9 2009, 13:33
Сообщение #47


Гуру
******

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



ИМХО стоит заменить м/с ST232 на изделие другой фирмы MAX232 или ADM232. На 99,9% уверен, что после такой замены проблема самоликвидируется.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Jun 9 2009, 14:44
Сообщение #48


Гуру
******

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



Цитата(rezident @ Jun 9 2009, 16:33) *
ИМХО стоит заменить м/с ST232 на изделие другой фирмы MAX232 или ADM232. На 99,9% уверен, что после такой замены проблема самоликвидируется.

И еще ... маленькие корпуса при ручной пайке легко повреждаются. Да и кто сказал, что там 100 нФ.
Типичное проявление недостаточной емкости. Сам как-то прошляпил, запомнил на всю оставшуюся жизнь.
Дубликат заново сделайте и сравните результаты.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
ZVE
сообщение Jun 9 2009, 17:03
Сообщение #49


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 19-11-07
Из: Vinnitsa, UA
Пользователь №: 32 472



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

Staf побоюсь показаться банальным но в таких случаях легче всего найти неисправность тестирую каждое звено цепи по очереди:
1. Закоротите пины 2 и 3 сом порта и из терминала передавайте какие нибудь числа и смотрите приходят ли они без ошибки назад.
2. Подключите ваш адаптер соедините Rx и Tx и повторить.
Причем желательно пробовать на разных скоростях.

П.С. Если железо окажется рабочим прикрепляю архив с робочими на моей макетке проектами для mega16, они делают точно то что Вы хотите.
Прикрепленные файлы
Прикрепленный файл  UART_M16_test.zip ( 29.97 килобайт ) Кол-во скачиваний: 20
 
Go to the top of the page
 
+Quote Post
XVR
сообщение Jun 9 2009, 17:57
Сообщение #50


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Проверьте тестером напряжения на выводах 2 и 6 ST в покое и при передаче данных. Оно должно быть стабильным. Если при передаче проседает - меняйте емкости на побольше
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Jun 9 2009, 19:35
Сообщение #51





Guests






Добрый вечер! Извините за отсутствие, были неотложные дела...

Присоединяюсь к высказанному выше.
Надо разбираться с Вашей платой до полной ее работоспособности.
Обратная сторона платы мне не важна, если там нет соединений...

Для начала, предлагаю немного отмыть плату от флюса. Затем по очереди отпаять и припаять заново керамические кондеры. Они иногда лопаются при неаккуратной пайке, заметить это практически невозможно.
Рассматривая рисунок, мне показалось, что кондер вправа внизу (по последней картинке) - лопнул. А может у меня уже "глюки"...
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 9 2009, 19:57
Сообщение #52


Гуру
******

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



Цитата(Dog Pawlowa @ Jun 9 2009, 20:44) *
Да и кто сказал, что там 100 нФ.
Типичное проявление недостаточной емкости.
Угу. И это тоже м.б. Если керамика Y5V, то емкость ее легко может быть вдвое меньше номинальной. На 30% меньше даже при комнатной температуре бывает. "Наелись" мы уже с этой керамикой Y5V. sad.gif Особенно на климатике. Лучше уж X7R ставить.
Go to the top of the page
 
+Quote Post
manul78
сообщение Jun 9 2009, 20:13
Сообщение #53


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



... Согласен, дело в железе...

Сам, давно использую только MAX232CN - "умощненый" аналог MAX3232...

Конденсаторы обвязки 1.0 uF на 35 В Танталовые (!) - никаких проблем. Кабель "пытали" до 12 метров.


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
Skaf
сообщение Jul 16 2009, 20:05
Сообщение #54


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Цитата
ИМХО стоит заменить м/с ST232 на изделие другой фирмы MAX232 или ADM232. На 99,9% уверен, что после такой замены проблема самоликвидируется.


Поставил MAX232 и проблема действительно самоликридировалась )
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 20:40
Рейтинг@Mail.ru


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