|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
||||||
Помогите найти ошибку (rs485) (решено)10.02.2016, 21:56. Показов 9381. Ответов 28
Метки нет (Все метки)
Обрабатываю запросы, приходящие на attiny2313 через st485. Прием-передача буферизованы.
По дефолту нога отвечающая за направление передачи rs485 опущена в ноль. Идет наполнение приемного буфера побайтно в прерывании URXC. Как только данные похожи на запрос, выставляется флаг готовности данных. Динные преобразовываются, наполняется выходящий буфер и нога поднимается для передачи. Передача происходит в прерывании UDRE. После передачи последнего байта нога опускается прямо в прерывании. Проблема в том, что устройство в точности получает инструкции и отрабатывает их, но отвечает по шине билибердой. Такое ощущение что где-то либо нога раньше времени опускается либо хз что. Начало ответа верное, но в середине и конце возникает мусор. Может у кого-нибудь есть рабочий пример работы по rs485 с буферизованым uartом? Или скажите куда рыть. Анализатора сигналов нету :(
0
|
||||||
| 10.02.2016, 21:56 | |
|
Ответы с готовыми решениями:
28
[решено]Помогите пожалуйста найти ошибку в программе Помогите победить RS485. Программа пишет ошибку!! Помогите найти ошибку |
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
|
| 10.02.2016, 22:02 | |
|
Я допускаю что слишком рано опускаю ногу (данные в UDR засунул, но времени им высраться не дал). Но ведь это была бы ошибка только в последнем байте передачи. А ошибка начинается со второго байта ответа.
0
|
|
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
|
| 10.02.2016, 22:05 | |
|
А может для опускания ноги использовать прерывание UTXC предварительно выставив в UDRE флаг что это последний байт? Или это тоже будет преждевременно?
0
|
|
|
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|||||||||||||||||
| 11.02.2016, 11:49 | |||||||||||||||||
|
Ух,
Логику вот этого:
Так , а это вообще все лишнее :
0
|
|||||||||||||||||
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
|
| 11.02.2016, 12:23 | |
|
подключил ftdiшку послушать что там говорит тинька интерфейсу, она говорит все верно:
55 11 01 41 4F 4B 0D а проходя через ST485EB эта посылка превращается вот в такие (каждый раз разные): 55 81 40 B0 6A 35 55 91 40 B0 6A CA 55 81 40 A0 6A 35 55 91 40 B0 6A CA 55 C4 81 EA 15
0
|
|
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
||||
| 11.02.2016, 12:34 | ||||
0
|
||||
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
|
| 11.02.2016, 12:58 | |
|
отключил прием везде где только можно, переделал переключение управляющей ножки интерфейса в прерывании TX (т.е. передатчик выключается когда все биты улетели в провод), добавил терминирующее сопротивление 120ом на стороне приемника, добавил подтяжку к питанию 10ком на RX выход контроллера и подтяжку к земле 10ком на управляющий выход (PD2).
один хрен. причем ПОЛУЧАЕТ данные оно точно, у меня проверка по стартовой посылке, по чексумме да и я вижу по исполнительному механизму что оно работает. но почему оно отвечает мусором я не понимаю. кстати после всех переделок теперь еще и первый байт бывает заваленым, раньше он гарантированно проходил. вместо 55 11 01 41 4F 4B 0D получаю 55 C4 A1 AA 35 D5 84 41 BA 35 D5 A4 41 6A DA D5 A4 41 BA 35 55 84 41 6A DA
0
|
|
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
|
|
| 11.02.2016, 12:59 | |
|
Буфер может быть уже пуст (готов к приему следующего байте), но передача предыдущего при этом еще не завершена. На прием переключайтесь не по UDRE, а по TX Complete. Интерфейс по меркам МК очень медленный.
0
|
|
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
||
| 11.02.2016, 13:12 | ||
вместо: 55 11 01 41 4F 4B 0D получаю: D5 A4 C1 EA 15 D5 A4 41 6A 15 55 84 A1 AA 35 D5 A4 C1 6A 15 55 84 A1 BA 35 D5 A4 41 6A 35 D5 A4 C1 6A 15 D5 84 41 BA 35 55 84 A1 AA 35 D5 A4 C1 6A 15 55 84 A1 AA 35 D5 A4 C1 6A 15 D5 A4 41 6A 15 95 A4 C1 EA 15 D5 84 41 6A DA D5 84 41 6A 35 55 84 41 BA 35 55 C4 A1 AA 35 55 84 41 AF 69 F8 55 84 A1 BA 35 D5 A4 C1 6A 15 D5 84 41 BA 35 55 84 A1 AA 35 D5 A4 C1 6A 15 D5 A4 C1 EA 15 D5 A4 41 6A 15 D5 84 41 AF 29 F8 D5 A4 C1 6A 15 D5 A4 41 6A 35 D5 A4 41 6A 15 D5 A4 41 6A 15
0
|
||
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
|
||
| 11.02.2016, 13:14 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
||
| 11.02.2016, 13:44 | ||
|
[QUOTE="STT"][QUOTE="Цитата:[/QUOTE]
я вываливаю 7 байт подряд, если б было так как вы говорите, то потерялся бы только последний байт. передачу я прерываю только после всех 7 байт. и кстати никаких запросов ST485EB не формирует. я начинаю подозревать что именно этот драйвер какой-то корявый. надо попробовать заменить на MAX485 и посмотреть что будет.
0
|
||
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
|
| 11.02.2016, 14:05 | |
|
интернет говорит что st485 бывают бракованные, я недавно в кетае заказал десяток max485, как раз должны прийти.
так что пока голову насиловать не буду, попробую детальку заменить. p.s. только что перепаял одну st485 на другую такую же. никаких изменений.
0
|
|
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
|
||
| 11.02.2016, 15:01 | ||
Исходные данные. Сначала у вас стабильно проходил 1-й байт, остальные портились. Почему. Помимо вашего программного буфера имеется аппаратный буфер ФИФО на 2 байта в самом УСАПП. В начале передачи (поскольку буфер на 2 байта) вы скармливаете в УСАПП 1-й байт и тут же получаете прерывание по UDRE, поскольку есть куда всунуть второй байт. Ваша программа это и делает. Буфер заполнился. При этом передача уже началась. Следующий запрос на прерывание по UDRE вы получите, когда второй байт из ФИФО поступит на передачу в сдвиговый регистр, т.е. первый байт уже уйдет адресату. Пока вы обрабатываете запрос, идет передача второго байта, но тут вы ее прекращаете волевым решением. По аналогии то же самое происходит с остальными байтами. Таким образом вы портите все байты, кроме первого. Прерывание UDRE возникает тогда, когда в аппаратном буфере ФИФО есть место для очередной порции данных, в то время как TXC возникает после отправки последнего бита из самого передатчика. Т.о., вам необходимо в основном цикле отслеживать флаг занятости аппаратного буфера ФИФО, который будет сбрасываться в обработчике прерывания UDRE и устанавливаться подпрограммой загрузки данных в этот буфер, а переключать интерфейсную микросхему на прием по прерыванию TXC.
0
|
||
|
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|||
| 11.02.2016, 17:12 | |||
0
|
|||
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
||
| 11.02.2016, 17:19 | ||
UART работает идеально. В нем нет никаких ошибок. Посылка выходит целиком и полностью. Направление передачи я переключаю в два этапа: в прервании UD_OK поднимаю флаг "ушел последний байт", в прерывании TX_OK я проверяю этот флаг и отключаю передатчик (прерывание TX_OK выскакивает когда все биты улетели в провод). Если выбросить ST485EB всё работает идеально. Но когда я её добавляю, то прием работает идеально, а передача - зажёвывает. Проблема или в чипе ST485EB или в моем понимании его работы.
0
|
||
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
|
|
| 11.02.2016, 17:24 | |
|
Чтобы не спорить, попробуйте переводить ST485EB на прием не по прерыванию, а по тайм- ауту, скажем, в 3 секунды. Заодно работоспособность микросхемы проверите.
0
|
|
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
|||
| 11.02.2016, 17:27 | |||
|
[QUOTE="YTYOUT"]
Вы показываете исправление блока, который у меня в чистом виде не присутствует. Я не понимаю вас.
0
|
|||
|
0 / 0 / 0
Регистрация: 21.01.2011
Сообщений: 158
|
||
| 11.02.2016, 17:29 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
|
||
| 11.02.2016, 17:33 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 02.10.2012
Сообщений: 1,946
|
|||||||||||
| 11.02.2016, 17:50 | |||||||||||
0
|
|||||||||||
| 11.02.2016, 17:50 | |
|
Помогаю со студенческими работами здесь
20
Помогите найти ошибку: По двум сторонам и углу найти все остальное Помогите найти ошибку: в двумерном массиве найти второе по величине число Найти коэффициент при 10 степени в разложении бинома Ньютона (помогите найти ошибку). Найти минимальный элемент в массиве: помогите найти ошибку
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|