04.06.2015, 00:30
|
#31
|
Заблокирован
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,715
Сказал спасибо: 189
Сказали Спасибо 3,199 раз(а) в 2,074 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
в зависимости от скорости включать надо чуть раньше и выключать чуть позже
чо там внутри у пика я хз.
а от ардуины я вообще блюю
|
|
|
|
04.06.2015, 01:14
|
#32
|
Прописка
Регистрация: 06.07.2010
Сообщений: 140
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Сообщение от индюк
|
а от ардуины я вообще блюю
|
Имхо слишком критично, я её на самом деле даже, никогда в руках не держал , проект попсовый, но для детей в качестве обучалки самое то - вот планирую сына в радиокружок отдавать - там как раз ардуинке учат.
По теме:
Получается, что дело не в пике - пересмотрел пару библиотек от разных микров(не пики) и везде задержки. И вот в ардуино тож задержка, хотя это авр. Может дело в микросхеме все же... такое ощущение, что микрухе надо время, чтобы это отправить, хотя были смещения на осцилографе - а их нет. Получается, что пик TXIF выставляет раньше чем надо, т.е. получается, что отправка не завершена, а пик уже ждет следующего байта и видимо внутри это нормально т.к. отправляемый байт находится в TSR, поэтому на последнем это проявляется.
Добавил:
Кажется дело все же в пике
TXIF becomes valid in the second instruction cycle following
the write execution. Polling TXIF immediately following
the TXREG write will return invalid results.
но добавил nop после записи - не помогло - я хз...
|
|
|
|
04.06.2015, 01:48
|
#33
|
Заблокирован
Регистрация: 21.01.2014
Сообщений: 589
Сказал спасибо: 7
Сказали Спасибо 267 раз(а) в 206 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Сообщение от fsmoke
|
Кто нибудь объясните мне теоретическую суть этой задержки
|
Дело в том, что в PIC есть два регистра для передачи байта. В первый реигстр TXREG Вы записываете байт для передачи. Процессор тут же передвигает этот байт во второй регистр TSR, который есть сдвиговый регистр и к этому второму регистру доступа у Вас нет. И этот самый сдвиговый регистр начинает выталкивать битики наружу методом сдвига. Согласно заданной скорости Baud Rate байт из регистра TSR через некоторое время вытолкнется наружу.
Так вот пока байт выталкивается, первый регистр TXREG пустой, и в него можно записывать уже второй байт для передачи. После выталкивания первого, процессор сам передвинет второй байт в сдвиговый регистр и начнёт передачу второго. И так далее: образуется непрерывная передача массива.
Флаг прерывания TXIF выставляется тогда, когда первый регистр TXREG стал пустым, сообщая программе, что можно записывать следующий байт для передачи. Но при этом текущий байт только-только начал выталкиваться, и ещё уйму времени будет выталкиваться.
Поэтому если переключать передача/приём по прерыванию TXIF, то и будет обрубаться последний байт.
Флаг встал, TXREG - пустой, но последний байт только начал свой сдвиг в TSR и еще весь не вытолкнулся!
Для проверки завершения передачи - опустошения сдвигового регистра TSR есть спец. битик TRMT, который устанавливается в 1 при опустошении уже сдвигового TSR регистра. Этот бит никаких прерываний не делает, его можно только в цикле проверять при передаче последнего байта. Как только TRMT встал в 1, значит последний байт вытолкнут, и можно переключать передачу на приём.
Последний раз редактировалось Yurkin2014; 04.06.2015 в 01:56.
|
|
|
|
04.06.2015, 06:23
|
#34
|
Гражданин KAZUS.RU
Регистрация: 13.04.2012
Адрес: Королёв МО
Сообщений: 786
Сказал спасибо: 621
Сказали Спасибо 364 раз(а) в 200 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
fsmoke, Может быть, вам так будет проще понять работу USART TX (из pdf)?
----
P.S.
Что касается времени задержки при переходе передача‹›приём:
Это не "магическое число". Дело в том, что при переключении драйверов RS485 передача‹›приём может "проскочить" импульс, который USART RX "поймёт" как START. Поэтому делают задержку, время которой просчитывается как время передачи 10-ти бит (START, 8-мь бит, STOP [если используется бит "чётность" - добавить время передачи одного бита]) умноженное на 1.5
Если нужно работать по RS485 вообще без задержек - надо переходить на 4-ёх проводный RS485.
Последний раз редактировалось Albert_V; 04.06.2015 в 09:18.
|
|
|
|
04.06.2015, 08:25
|
#35
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
И для нужд симуляции рисовать кварцы и конденсаторы совсем-совсем не нужно!
|
|
|
|
04.06.2015, 09:44
|
#36
|
Прописка
Регистрация: 06.07.2010
Сообщений: 140
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Сообщение от Yurkin2014
|
первый регистр TXREG пустой, и в него можно записывать уже второй байт для передачи
|
Спасибо кэп - я это уже написал в 32 посте!
Сообщение от Yurkin2014
|
Как только TRMT встал в 1, значит последний байт вытолкнут, и можно переключать передачу на приём.
|
TRMT - точно! про этот бит я забыл - ща попробую
Сообщение от NewWriter
|
И для нужд симуляции рисовать кварцы и конденсаторы совсем-совсем не нужно!
|
я в курсе как бы... но на схеме рисую всё, даже не эмулируемые куски - люблю, понимаешь, целостность
|
|
|
|
04.06.2015, 11:57
|
#37
|
Прописка
Регистрация: 06.07.2010
Сообщений: 140
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
вставил while (!TRMT); - один фиг режет последние биты
Добавил:
А видимо у меня косяк был - сейчас с TRMT все заработало.
Последний раз редактировалось fsmoke; 04.06.2015 в 13:08.
|
|
|
|
07.06.2015, 00:13
|
#38
|
Прописка
Регистрация: 06.07.2010
Сообщений: 140
Сказал спасибо: 3
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Опять проблема. переписал все на прерывания - вернее прерывания только на чтение.
Наблюдается глюк в протеусе - боролся с ним целый день - не могу побороть.
Алгоритм такой:
1)Включены GIE = 1; PEIE = 1; RCIE = 1;
2) написана ф-ция прерывания - собственно как обычно
Код:
|
void interrupt serial()
{
if ((RCIF) && (RCIE))
{
... код
}
} |
3) жду просто так, для отладки 3 секунды - хотя могу не ждать разницы никакой
4) включаю передачу - т.е. ногу подключенную к DE RE ставлю в 1
5) передаю 6 байт - CREN и TXEN добавил для надежности т.к. уже не знаю, что сделать
Код:
|
void send_array_485(uint8_t const * st, uint8_t len)
{
CREN = 0;
TXEN = 1;
XCAT(R, RS485_DIR_SW) = 1;
while (len--)
send_byte_485_int(*st++);
while (!TXIF);
while (!TRMT);
XCAT(R, RS485_DIR_SW) = 0;
TXEN = 0;
CREN = 1;
} |
6) жду - специально жду для отладки целую секунду - до этого не ждал - но разницы никакой
7) Выключаю передатчик - DE RE ставлю в 0
И вот тут происходит херня - по RX с 487 микросхемы в протеусе проскакивает импульс - нет это не бит - это просто какой-то мгновенный импульс - естественно срабатывает прерывание приемника - и все летит к чертям
Самое странное, что больше этого не происходит - у меня это все в цикле - дальше ещё раз отправляю - никаких импульсов нет!!
Т.е. это только при первой отправке - вкратце:
-включаем передатчик
-передаем
-выключаем передатчик
-хлоп, видим импульс на приемнике - получаем сработку приемника - жопа
-включаем посылаем выключаем передатчик - больше не происходит
Что это за фигня?
|
|
|
|
07.06.2015, 00:29
|
#39
|
Заблокирован
Регистрация: 17.07.2010
Адрес: мурмурляндия
Сообщений: 10,715
Сказал спасибо: 189
Сказали Спасибо 3,199 раз(а) в 2,074 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
брось ты эту виртуальщину!!!!!!
чо за мода пошла блин......... одну глючную программу пишут внутри другой глючной
|
|
|
|
07.06.2015, 00:45
|
#40
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: Микросхемы и инфа по 485 интерфейсу
Сообщение от fsmoke
|
проглатывается последний символ и стоповый бит
|
Последний символ - это что, имеется в виду последний байт? А тогда вопрос - сколько всего байт было в посылаемом пакете?
Попробуйте добавить количество байт. Чтобы отловить причину. Можно будет узнать - или проглатывается именно последний байт, независимо от количества, или проглатывается как раз тот по счету, который сейчас последний.
Результат этого эксперимента облегчит продвижение к разгадке.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:13.
|
|