Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с USART
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Страницы: 1, 2
Skaf
Вот пытаюсь заставить компьютер принимать данные из контроллера по ком порту.

Но получается что-то странное. Программа просло шлет натуральный ряд от 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;
}
haker_fox
Цитата(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;
}
mempfis_
При занесении данных в реистры лучше использовать битовые определения.
При инициализации поставте
UBRRH = 0;
UBRRL = 7;

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

P.S. Если приходит не то что вы хотели отправить значит проблема в неправильном битрейте.
Skaf
Цитата
В Вашем же случае придется октрывать даташит и вычитывать номера разрядов


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

Что касается битрейта, то должно быть все верно исходя из формулы его вычисления, частоты кварца 7372800 и делителя 7.
Кстати в PROTEUS этот код работает как часы.
mempfis_
Да и ещё вопрос вы переключили МК на работу от внешнего кварца?
Может быть он у вас работает на внутренних 8 МГц?
У меня буквально вчера был такой прикол - при настройке уарта использовал частоту 7.ххх МГц (взял настройку из другого проекта)
а реально процессор работал на 8 МГцах от встроенного генератора. Тоже шля всякая белеберда пока не заметил эту оплошность smile.gif
Skaf
Нет, фьюзы я выставил верно. Если отключить кварц- вообще ничего не работает.

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

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

120
121
122
123
257
233
126
127

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

Причем как видно из графига мусор это не простой. Эти левые числа ВСЕГДА больше нужных! Поэтому мусор именно в верхней части графика и ни разу не пришло ни одного байта меньше чем нужно.
mempfis_
Попробуйте тогда выполнять пересылку с опросом бита готовности.
И проверте во фузах не включён ли у вас стророжевой таймер.

Код
#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;
   }
}
Skaf
Добавил while ( !( UCSRA & (1<<UDRE)) );
но ничего не изменилось. Как было- так и осталось (

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

Судя по коду программы всё должно работать правильно.
Была-бы под рукой платка с МК и max232 проверил-бы у себя.
Skaf
У меня собран кабель-переходник на ST232. Кабель был проверен путем замыкания входа и выхода. Через гипер терминал принималось точно то, что передавалось наружу. Значит вроде должен быть исправен
mempfis_
Цитата(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.
Skaf
Не вижу смысла добавлять прием данных, пока даже просто передача не работает (
DpInRock
Цитата
120
121
122
123
257
233
126
127

А поточнее нельзя? Число 257 - это что такое?
--
Посмотрите пропайку и степень загрязнения конденсаторов около кварца.
defunct
Цитата(Skaf @ Jun 6 2009, 12:00) *
Нет, фьюзы я выставил верно. Если отключить кварц- вообще ничего не работает.

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

Выводите вместо графика числа в hex виде, будет сразу заметно в чем дело - завышена частота или занижена.
какой МК кстати?
Skaf
МК мега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
@Ark
Впечатление, что скорости не совпадают...
Попробуйте для начала выводить одно и то же значение (лучше F0) без пауз, тогда можно что-то увидеть.
Еще посмотрите, все-таки, что там с кварцем. Может заводится не на той частоте...
Skaf
Сделал передачу одного и того же байта- 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


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


Тут, к сожалению с паузами было. Сейчас сделаю без пауз.
@Ark
Зря AA взяли. Лучше F0 или 55. Частоту посмотрели на кварце?
Dog Pawlowa
Цитата(Skaf @ Jun 6 2009, 20:34) *
Вот реальные байты принятые из ком порта ПК. Должен быть натуральный ряд.


Какой драйвер RS232 установлен? Какие конденсаторы к нему запаяны? Какое напряжение питания?
Оч похоже на проблемы в физическом уровне. Диагностируется осциллографом.
Skaf
Цитата
Зря 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пФ
@Ark
У Вас COM-порт какой в компьютере? Настоящий или переходник USB-COM?
Skaf
Обычный железный комп порт в материнке.
@Ark
Есть вероятность, что проблема с портом компьютера - не справляется со сплошным потоком по какой-то причине.
Чтобы исключить эту версию, надо бы проверить на другом компьютере...
Skaf
СТранно.. до этого я слал ему по одному байту ведь раз в секунду и тоже были проблемы...
@Ark
Если есть доступ к другому компу, то лучше проверить. Тогда будете уверены, что дело не в этом...


Судя по тому, как принимается F0, действительно похоже, что проблема на физическом уровне. Возможно фронты "завалены". Предлагаю еще повторить вывод без пауз значения 55 (hex) - это чередование 0 и 1 с учетом
старт- и стоп- битов.
Skaf
Мдя... Подключил я к другому компьютеру... байты F0 и 55 принимаются идеально. Никаких проблем. Однако остальные мои примеры с возрастающим числом и с посылкой F0 не постоянно, а раз с задержкой- проходят аналогично первому компьютеру... Вот так штука....
@Ark
Ну это уже результат. Значит версии про неисправный порт компа и неправильную скорость можно временно отклонить. Нужно смотреть железо, что вы там сотворили. Плохо без осциллографа. Подтягивающие резисторы на RX и TX UARTа у Вас присутствуют?
Skaf
Хм... Резисторов нет- напрямую от контроллера к ST232 подключены, а что, они нужны? )

Сделал тут сплошной поток возрастающих цифр от 1 до 200- вообще ересь идет, практически белый шум )
@Ark
Резисторы к питанию +5В поставьте - хуже точно не будет. Номиналы в диапазоне примерно от 5К до 15К, какие найдете. Вообще, по-моему Вам пора свою схему выкладывать, хотя бы часть от UART-а МК до порта RS-232 в ПК.
vvs157
Цитата(Skaf @ Jun 7 2009, 14:36) *
Мдя... Подключил я к другому компьютеру... байты F0 и 55 принимаются идеально. Никаких проблем. Однако остальные мои примеры с возрастающим числом и с посылкой F0 не постоянно, а раз с задержкой- проходят аналогично первому компьютеру... Вот так штука....
Посмотрите осциллографом, что там у вас идет.
Skaf
Чуть позже выложу схемку, хотя зачем она- она самая стандартная. Включение ST232 (=MAX232) как в даташите, на вход ее напрямую подается соотв. выход микроконтроллера. Ну вечерком подробно все нарисую с номерами ножек.

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

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


Осциллографа нет у меня ( Максимум что могу сделать- понизить скорость передачи и посмотреть на осциллографе на базе звуковой карты ) Вечерком это тоже сделаю.
@Ark
Куда подключили и какого номинала? И почему только один? В общем, ждем подробную схему...
defunct
Цитата(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.
Skaf
Я сделал вот что. Запрограммировал мегу на постоянную бесперерывную отсылку 0x55 в ком порт. Это 101010101... постоянно включая стоповые и стартовые биты и приделал мультиметр со встроенным частотомером прямо на TxD. Он показывает 28.8-28.9 кГц (переключается туда-сюда). На сколько я понимаю, если умножить на 2- это и будет битрейт... 28.8 умножаем на 2 и получаем 57.6 килобита... Тоесть как раз нужная скорость... тока 28.9 немного напрягает

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

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

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

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


Подключил между TxD и VCC. Один- потому что только TxD у меня используется. Приема данных на стороне контроллера вообще пока нет. Пока пытаюсь отладить отправку
@Ark
Частота скорее всего в норме. Насчет мигания светодиодом - это интересная версия. Если разводка платы неудачна, то при его включении-выключении может прыгать потенциал земли. Что может восприниматься как ложный старт-бит. Попробуйте временно отключить светодиод (аппаратно или программно).
Skaf
Светодиод я отключил, толку никакого.

Я понизил скорость передачи данных до 600 бод. И подключил через резисторный делитель на вход звуковой карты. Своебразный осциллограф. Сначала я проверил без кабеля в ком порт, а внизу осциллограмма с подключенным кабелем. Амплитуда там меньше раза в 4, просто увеличл, чтобы лучше было видно сигнал. Какой-то шлак вообще-то а не сигнал. А кабель на конце с COM-TTL преобразователем. Сейчас попробую отпаять кабель вообще и подпаяться напрямую к плате преобразователя уровней.
@Ark
<< Думал может помехи- но провод у меня экранированный, экран припаян к корпусу штекера ком порта, а с другой стороны на землю устройства...>>

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


Подключил к другому компьютеру- результат тот же
@Ark
Желательно все-таки увидеть схему. Либо преобразователь накрылся. Либо что-то не так подключили. Чудес-то не бывает... Посмотрите напряжение на выходе преобразователя со стороны RS-232 не подключая к компьютеру и
ничего не передавая в порт. Должно быть где-то (-5)В - (-10)В относительно земли. С минусом!
Skaf
Преобразователь собран по описанию из статьи http://easyelectronics.ru/svyaz-mikrokontr...erez-rs232.html

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

Напряжения проверил. Если вход у преобразователя висит- 0 вольт на выходе.. если вход подключить на +5 то -8.6 на выходе. Когда после этого убираю +5 на вход- то напряжение на выходе поднимается до 5 и спускается опять в 0 )) Жесть какая-то... Наверно преобразователь все-таки испортился. завтра еще раз устрою ему тест на гипертерминале.
@Ark
Кто-то тут уже давал такую ссылку... Тоже проблемы были... Сейчас все посмотрим, подождите полчасика...


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

Вы там часом RX и TX не перепутали местами (5-ти вольтовые)? Передавать от UART надо на 10 ногу ST232 - зеленый провод. Так у Вас?
OLEG_BOS
Цитата(Skaf @ Jun 8 2009, 22:41) *
Вот фотографии именно моего кабеля.

Мда... мда.. А вот что-то электролитов "накачки" в Вашем варианте платы то и не наблюдается. Или они спрятаны под платой ? wink.gif
@Ark
вот тут еще почитайте:
http://electronix.ru/forum/index.php?showt...mp;#entry591281


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


Так и керамики как-то не видно. Платка то ведь односторонняя.
@Ark
<<Так и керамики как-то не видно>>
Плохо смотрите...
Skaf
Цитата
А обратные стороны для обоих рисунков можете выложить?


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

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


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

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

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

П.С. Если железо окажется рабочим прикрепляю архив с робочими на моей макетке проектами для mega16, они делают точно то что Вы хотите.
XVR
Проверьте тестером напряжения на выводах 2 и 6 ST в покое и при передаче данных. Оно должно быть стабильным. Если при передаче проседает - меняйте емкости на побольше
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.