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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> [atmega16 UART] Помеха при работе, Помогите побороть помеху
zi4rox
сообщение May 7 2009, 08:58
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 4-04-08
Пользователь №: 36 480



Всем добрый день,

Пытаюсь заставить корректно работать UART на меге для связи с компьютером, и вот что получается:

Исходные данные:


1. Схема по которой это все работает:


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

2. Прошивка для мк:
* Она сгенерирована CodeWizard'ом в CVAVR на такие параметры:
Код
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x19;


Добавленная строчка в основном цикле:
Код
UDR = 'R';


т.е - постоянно посылаем символ R

Вот что получаю на самом деле в терминале:
Код
%%%%%%%%%%%ýIIIIIIIIIIIùRRRRRRRRRRRò***********ú•••••••••••õIIIIIIIIIIIùRRRRRRRRRRRò©©©©©©©©©©©é•••••••••••õ—%%%%%%%%%%åRRRRRRRRRRRò©©©©©©©©©©©ù•••••••••••õ%%%%%%%%%%%åíIIIIIIIIIIù©©©©©©©©©©©ù***********ú%%%%%%%%%%%ýIIIIIIIIIIIùRRRRRRRRRRRò***********ú%%%%%%%%%%%ýIIIIIIIIIIIùRRRRRRRRRRRò***********ú•••••••••••õIIIIIIIIIIIùRRRRRRRRRRRò©©©©©©©©©©©é•••••••••••õ%%%%%%%%%%%åRRRRRRRRRRRú©©©©©©©©©©©ùŸ**********ê%%%%%%%%%%%åíIIIIIIIIIIù©©©©©©©©©©©ù***********ú%%%%%%%%%%%ýIIIIIIIIIIIùRRRRRRRRRRR


Т.е. - как видно символ 'R' он таки передаёт, но помимо него шлется ещё куча всякого мусора. Откуда он берется и как главное с ним бороться?

Что уже попробывал:

1. Протестил саму прошивку в VMLAB - все четко, без ошибок, работает как часы.

2. Без контроллера, просто замкнул выводы TxD и RxD, и подал питание на схему - в терминале все тоже работает - переданные байты тутже возвращаются эхом назад.

3. Пробывал менять кварц 8мгц/4мгц, игрался с разными значениями бодрейта - не помогает.

Комбинация фьюзов что на меге сейчас (под кварцы 3-8мгц):
CKSEL0-3: 1111 SUT0-1: 11 CKOPT 1
(вообще, если это вдруг поможет - сейчас у меня все фьюзы выставлены в 1)

4. Монтаж проверял неоднократно - все в порядке

5. Пробывал также запускать UART использую бит паритета четный/нечетный - все равно мусор не уходит

Помогите пожалуйста побороть злостную помеху
Go to the top of the page
 
+Quote Post
Палыч
сообщение May 7 2009, 09:14
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Проверьте кабель: возможно неполадки с "земляным" проводом.
Go to the top of the page
 
+Quote Post
Chameleon
сообщение May 7 2009, 09:18
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 5-07-08
Пользователь №: 38 757



UDR = 'R';

И все?

Может надо подождать завершения передачи предыдущего символа (байта), перед отправкой нового?

Сообщение отредактировал Chameleon - May 7 2009, 09:20
Go to the top of the page
 
+Quote Post
Petka
сообщение May 7 2009, 09:30
Сообщение #4


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

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Chameleon @ May 7 2009, 13:18) *
UDR = 'R';

И все?

Может надо подождать завершения передачи предыдущего символа (байта), перед отправкой нового?

всё просто. сбивается синхронизация по старт и стоп битам.
тестируйте так:

Код
uart_putch(0x00);
uart_putch(0xff);
uart_putch('R');

тогда гарантированно войдёт в синхронизацию по "стопам" и "стартам".
Go to the top of the page
 
+Quote Post
zi4rox
сообщение May 7 2009, 09:30
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 4-04-08
Пользователь №: 36 480



Цитата
UDR = 'R';

И все?

Может надо подождать завершения передачи предыдущего символа (байта), перед отправкой нового?


Пробывал, также и с проверкой готовности регистра передачи:
Код
while(!(UCSRA & (1<<UDRE)));
UDR = 'R';


результат тотже
Go to the top of the page
 
+Quote Post
GDI
сообщение May 7 2009, 09:50
Сообщение #6


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Судя по тому что вам выдается на ПК, у вас помеха с частотой около 100Гц. Смотрите осциллографом питание вашего МК.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
zi4rox
сообщение May 7 2009, 09:55
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 4-04-08
Пользователь №: 36 480



Попробывал, как Вы сказали:

Код
putchar(0x00);      
putchar(0xff);
putchar(0x15);


Уже заметно лучше, но все же ещё кое где проскальзывает ошибочные данные (вот что в терминале [должно быть 00 FF 15 ]):
Код
00 FF 15 00 FF [b]11 D0 15[/b] 00 FF 15 00 FF 15 [b]FF E8 15[/b] 00 FF 15 00 FF 15 00
Go to the top of the page
 
+Quote Post
GDI
сообщение May 7 2009, 10:06
Сообщение #8


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

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Кстати, какой конкретно мах232 у вас стоит, не к каждому можно конденсаторы по 0,1мк ставить, обычно там по 1мк ставят.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Dx!
сообщение May 7 2009, 10:14
Сообщение #9


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

Группа: Участник
Сообщений: 108
Регистрация: 6-02-09
Из: Новочеркасск
Пользователь №: 44 469



И схема настораживает - на участке от проца до макса Rx и Tx не перепутаны?
Go to the top of the page
 
+Quote Post
alex1979
сообщение May 7 2009, 10:19
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-11-07
Из: Украина, Волынь
Пользователь №: 32 613



Попробуйте поставить значение UBRRL=25 (для 4МГц) или UBRRL=51 (для 8МГц)
смотреть стр. 169 описания.
Go to the top of the page
 
+Quote Post
rx3apf
сообщение May 7 2009, 10:36
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 3 834
Регистрация: 14-06-06
Из: Moscow, Russia
Пользователь №: 18 047



Цитата(zi4rox @ May 7 2009, 13:30) *
Пробывал, также и с проверкой готовности регистра передачи:
Код
while(!(UCSRA & (1<<UDRE)));
UDR = 'R';


результат тотже

Это неудивительно, поскольку у UART есть буферизация. Тогда уж стоило бы проверять не UDRE, а TXC. Но и то, скорее всего, эффект будет аналогичный. Чтобы гарантированно исключить вариант с ошибкой синхронизации, надо сделать задержку между посылкой байтов, хоть программную, на пару mS. Если и тогда будет мусор - разбираться с "землями" и наводками (а вообще-то обрыв проводника в соединительном кабеле - самое обычное дело).
Go to the top of the page
 
+Quote Post
zi4rox
сообщение May 7 2009, 10:39
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 4-04-08
Пользователь №: 36 480



Я не знаю как это получилось, но решил руководствуясь замечанием Dx! поменять местами RxD TxD (от max232 до меги) - и что самое интересное оно заработало! (Хотя я был уверен что при неправильном подключении просто ничего не будет происходить)

Как всегда - все оказалось банально до немогу. Постейшая невнимательность. Всем ОГРОМНОЕ спасибо.
Буду разбираться ещё немного и писать код под свою задачу - если что обязательно спрошу. Ещё раз всем спасибо
Go to the top of the page
 
+Quote Post
Marian
сообщение May 7 2009, 10:56
Сообщение #13


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

Группа: Участник
Сообщений: 148
Регистрация: 23-02-07
Пользователь №: 25 618



Если преобразователь RS232-TTL стоит возле компа, а TTL сигнал гоняется по длинным проводам, то не помешает экранированный провод.
Go to the top of the page
 
+Quote Post
zi4rox
сообщение May 11 2009, 13:05
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 4-04-08
Пользователь №: 36 480



Обнаружилась следующая нехорошая вещь:

При таком соединении:
T2IN - TxD
R2OUT - RxD


UART работает как надо и нареканий нет, вот только на блоке питания спустя 1-2 минуты начинают жутко греться стабилизаторы (кренки)
Навряд ли там уарт такой большой ток кушает, начал искать кз. Схемы проверил, всё прозвонил - нигде нет.

Удалось установить, что:
Если я поменяю местами
T2IN - RxD
R2OUT - TxD


то перестает греться, но и уарт не работает как надо (куча мусора лезет - то что в начале было)

В каком направлении искать сие загадочную пакость?
Go to the top of the page
 
+Quote Post
defunct
сообщение May 11 2009, 14:08
Сообщение #15


кекс
******

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



Цитата(zi4rox @ May 11 2009, 16:05) *
вот только на блоке питания спустя 1-2 минуты начинают жутко греться стабилизаторы (кренки)

Какое напряжение на входе кренки и какая кренка? (78L, 78F, 78C)?
Ток померять можете?

Первое включение - правильное. Второе - вход со входом, выход с выходом.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th July 2025 - 16:34
Рейтинг@Mail.ru


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