Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT90CAN128: при приеме USART1 в UDR1 биты в обратном порядке!
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
ARV
принимаю байты USART1 на скорости 9600. осциллографом смотрю - передается 0x01, вывожу из UDR1 в PORTA - вижу в порту 0x80. и так любые числа - биты идут в обратном порядке!

что PORTA разведен правильно - убедился. что биты передаются в правильном порядке (сначала младший) - убедился...

че за хня творится?! че делать?!
prottoss
А как Вы "видите", что передается именно 0х01 а не 0х80 ?
demiurg_spb
Рисуночек прикрепите...
ARV
Цитата(prottoss @ Dec 14 2011, 15:09) *
А как Вы "видите", что передается именно 0х01 а не 0х80 ?


я смотрю осциллографом на то, что приходит на RX1: вижу провал из 1 в 0 - это старт, затем вижу скачок в 1 и снова в 0 - уже до конца фрейма. т.е. передается единственный бит, который виден в начале фрейма. когда вывожу принятый байт в порт, вижу это единственный ненулевой бит в старшем разряде sad.gif
GDI
Чудес то не бывает, смотрите как Вы там в порт выводите число, это наиболее вероятная причина ошибки. УАРТ можно проверить сравнив принятый байт с константой.
demiurg_spb
Цитата(ARV @ Dec 14 2011, 14:49) *
я смотрю осциллографом на то, что приходит на RX1: вижу провал из 1 в 0 - это старт, затем вижу скачок в 1 и снова в 0 - уже до конца фрейма. т.е. передается единственный бит, который виден в начале фрейма. sad.gif
Может Вы перепутали что нибудь.
http://www.maxim-ic.com/app-notes/index.mvp/id/2141
Ведь логической единичке соответствует низкий уровень, а нулю высокий.
Таким образом описанная вами картинка (без старт-стоп) соответствует:
Вы видите:10000000
LSB FIRST 01111111
MSB FIRST 11111110 = 0xfe

Если мне мой склероз не изменяет.
GDI
Цитата(demiurg_spb @ Dec 15 2011, 08:34) *
Может Вы перепутали что нибудь.
http://www.maxim-ic.com/app-notes/index.mvp/id/2141
Ведь логической единичке соответствует низкий уровень, а нулю высокий.

Да не, всё верно у него, инверсия получается только после RS232 буферов, а тут чистый УАРТ, где 5В - это "1", а 0В - "0".
demiurg_spb
Тогда - ой.

2ТС:
Вариант1:
Я прочитал что вы видите реверс любых чисел, но всё же, если передаёте 0xAA вы получаете 0x55?
Если нет, то проблема в настройке бодрейта и/или остальных параметров передачи байтового фрейма.
Вариант2:
Перепутаны GND и VCC при соединении земель двух устройств. У самого такое как-то раз было.
Проверьте что у них потенциал земли одинаков.
Maik-vs
Цитата(ARV @ Dec 14 2011, 15:49) *
я смотрю осциллографом на то, что приходит на RX1: вижу провал из 1 в 0 - это старт, затем вижу скачок в 1 и снова в 0 - уже до конца фрейма. т.е. передается единственный бит, который виден в начале фрейма. когда вывожу принятый байт в порт, вижу это единственный ненулевой бит в старшем разряде sad.gif

Осциллограф - это хорошо.
Вот я смотрю осциллографом на COM порт компьютера и вижу: _____--__--__--____----_________ ___ это -12 вольт, --- это +12 вольт. На терминалке жму цифру "5", то есть передаётся 0х35. Первый импульс - стартовый, дальше 01010011 То есть компьютер передаёт младшим битом вперёд.
У вас передаётся -------___---____________---------, да? А тогда то, что выделено красным - не старт ли и 0x80, только на другой скорости?
Может надо было попробовать с другими числами? 0x5, 0x86 например?
kolobok0
Цитата(ARV @ Dec 14 2011, 15:03) *
...че делать?!


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


(круглый)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.