zi4rox 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Всем добрый день, Пытаюсь заставить корректно работать 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 использую бит паритета четный/нечетный - все равно мусор не уходит Помогите пожалуйста побороть злостную помеху Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Проверьте кабель: возможно неполадки с "земляным" проводом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Chameleon 0 7 мая, 2009 Опубликовано 7 мая, 2009 (изменено) · Жалоба UDR = 'R'; И все? Может надо подождать завершения передачи предыдущего символа (байта), перед отправкой нового? Изменено 7 мая, 2009 пользователем Chameleon Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Petka 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба UDR = 'R'; И все? Может надо подождать завершения передачи предыдущего символа (байта), перед отправкой нового? всё просто. сбивается синхронизация по старт и стоп битам. тестируйте так: uart_putch(0x00); uart_putch(0xff); uart_putch('R'); тогда гарантированно войдёт в синхронизацию по "стопам" и "стартам". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zi4rox 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба UDR = 'R'; И все? Может надо подождать завершения передачи предыдущего символа (байта), перед отправкой нового? Пробывал, также и с проверкой готовности регистра передачи: while(!(UCSRA & (1<<UDRE))); UDR = 'R'; результат тотже Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Судя по тому что вам выдается на ПК, у вас помеха с частотой около 100Гц. Смотрите осциллографом питание вашего МК. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zi4rox 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Попробывал, как Вы сказали: 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GDI 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Кстати, какой конкретно мах232 у вас стоит, не к каждому можно конденсаторы по 0,1мк ставить, обычно там по 1мк ставят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dx! 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба И схема настораживает - на участке от проца до макса Rx и Tx не перепутаны? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
slyshyk 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Попробуйте поставить значение UBRRL=25 (для 4МГц) или UBRRL=51 (для 8МГц) смотреть стр. 169 описания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Пробывал, также и с проверкой готовности регистра передачи: while(!(UCSRA & (1<<UDRE))); UDR = 'R'; результат тотже Это неудивительно, поскольку у UART есть буферизация. Тогда уж стоило бы проверять не UDRE, а TXC. Но и то, скорее всего, эффект будет аналогичный. Чтобы гарантированно исключить вариант с ошибкой синхронизации, надо сделать задержку между посылкой байтов, хоть программную, на пару mS. Если и тогда будет мусор - разбираться с "землями" и наводками (а вообще-то обрыв проводника в соединительном кабеле - самое обычное дело). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zi4rox 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Я не знаю как это получилось, но решил руководствуясь замечанием Dx! поменять местами RxD TxD (от max232 до меги) - и что самое интересное оно заработало! (Хотя я был уверен что при неправильном подключении просто ничего не будет происходить) Как всегда - все оказалось банально до немогу. Постейшая невнимательность. Всем ОГРОМНОЕ спасибо. Буду разбираться ещё немного и писать код под свою задачу - если что обязательно спрошу. Ещё раз всем спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
codenamehawk 0 7 мая, 2009 Опубликовано 7 мая, 2009 · Жалоба Если преобразователь RS232-TTL стоит возле компа, а TTL сигнал гоняется по длинным проводам, то не помешает экранированный провод. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zi4rox 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба Обнаружилась следующая нехорошая вещь: При таком соединении: T2IN - TxD R2OUT - RxD UART работает как надо и нареканий нет, вот только на блоке питания спустя 1-2 минуты начинают жутко греться стабилизаторы (кренки) Навряд ли там уарт такой большой ток кушает, начал искать кз. Схемы проверил, всё прозвонил - нигде нет. Удалось установить, что: Если я поменяю местами T2IN - RxD R2OUT - TxD то перестает греться, но и уарт не работает как надо (куча мусора лезет - то что в начале было) В каком направлении искать сие загадочную пакость? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 11 мая, 2009 Опубликовано 11 мая, 2009 · Жалоба вот только на блоке питания спустя 1-2 минуты начинают жутко греться стабилизаторы (кренки) Какое напряжение на входе кренки и какая кренка? (78L, 78F, 78C)? Ток померять можете? Первое включение - правильное. Второе - вход со входом, выход с выходом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться