To Halex007
Сообщение от Halex07
|
To Pifa
Оч похоже, что у Вас с времянками что-то не то. Обратите внимание на выпадающий горчичник о попытке записи в UDR. Он вылетает после команды обведенной рамкой.
|
Да, этот горчичник я как-то пропустил. Дело в том, что у меня постоянно висит горчичник о невозможности моделирования в реальном времени (комп слабенький). И наличие еще одного я не увидел. Но это не меняет ситуации. И так по порядку.
1.Горчичник указывает на то, что происходит запись в UDR, когда не закончена еще передача. Но о какой передаче идет речь, если был принят пакет данных и происходит запись ПЕРВОГО байта для передачи
![Вопрос](images/smilies/icon_question.gif)
.
Возможно Proteus что-то анализирует и хочет, чтоб все было по науке. Я добавил перед записью в UDR дополнительную проверку на опустошение буфера. Вот горчичник и исчез.
2. А ошибки то остались. Алгоритм у меня такой:
Я посылаю пакет 01 03 00 01 00 04 15 С9
В ответ должно прийти 01 03 08 00 55 00 77 00 99 00 AA 85 B3
3. В Proteus'e получаем:
Перед правильным ответ получаем лишний байт 0x00 (см. 1_1.gif)
После приема всего пакета уже при передаче первого байта из второй посылки получаем еще один лишний байт 0xB3 (см. 1_2.gif)
4. При приеме второго пакета снова вначале имеем лишний байт 0xB3 (см. 1_3.gif).
Такое впечатление, что происходит ложное срабатывание на выдачу байта из UDR того, что в нем находится в данное время:
вначале - 0x0
потом - 0xB3 последний принятый байт.
Платы с Atmega8535 у меня сейчас нет, попробовал проверить на Atmega128. В Proteus'e ошибки те же. А вот в железе все работает исправно, чего и следовало ожидать. ( см. terminal_1.gif и terminal_2.gif)
Я для проверки в терминале использовал файл для передачи (test.txt).
Так в чем же проблема? То ли глюк Proteus'a, то ли я не разобрался с какими-то нюансами работы UART. А то у меня уже была проблема с LCD, когда в железе все исправно работало, а в Proteus'e были горчичники. Оказалось, я немного отошел от datasheet. Когда сделал все по документации, гочичники пропали. Хотя в железе работало и с разными дисплеями и с разными производителями. Видимо, LCD аппроксимируют некоторые параметры, а в Proteus'e "шаг влево, шаг вправо - расстрел".
Я уже раз поднимал это вопрос, но никто не ответил.
https://kazus.ru/forums/showpost.php...postcount=1348
Такое впечатление, что у всех терминал работает нормально, только у меня глюки.
Может сейчас разберемся, что по чем. А то получается как у К.Пруткова:
"Если увидишь на клетке слона надпись буйвол, не верь глазам своим"
Да, еще, в архиве есть программа терминала для PC на тот случай, если кто-то захочет проверить в железе (виндусовым терминалом не пользуюсь).