Перейти к содержанию
    

2 TXC на 2 переданных байта - абсолютно нормальное поведение чипа.

Вот именно такой прямой ответ я и хотел получить! Огромное спасибо! Ибо "Атмеловский английский" неразумею. Им наверное построчно плотют. Ка-кто смутно и коротко у них там описана работа буферизации USART. Было бы логично если бы флаг TXC устанавливался по ОПУСТОШЕНИЮ буфера. Но похоже он устанавливается по окончанию передачи одного байта из двух что в буфере. Соответственно возникают 2 прерывания вместо ожидаемого 1го. То-есть не получится сделать совсем красиво. Досадно.

Спасибо за исходники.

 

 

Простите пожалуйста, но лично у меня фраза "камень глючит" или "винда не так села" вызывает пену у рта и лёгкое подколбашивание. Кто-то на форуме собирал камни которые "глючат" как редкую реликвию. И, наверное перекупили бы у вас такой камень. К сожалению, скорее всего "глючит" другой прибор не техногенного происхождения. Во всяком случае с очень большой долей вероятности.

Впоне возможно что глючу Я. А камень продам по сходящей тк. он уже в 2 раза питался 12 вольтами.

 

Что вы понимаете под словом "отладчик"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему получается 2 прерывания по TXC при передачи 2-х байт не понял. может я не правильно помню и делаю иначе, но с таким не встречался.

На память TXC возникает при пустом буфере и выдачи стопового бита.

На я передачу делал так.

2 байта в буфер;

включить UDRE

по UDRE подкачивать данные

если новых двнных нет, то выключить UDRE и включить TXC

если TXC, то все переданно, переключиться на прием.

 

и таких вещей

как бонус даже межсимвольный интервал непроизвольно получается.
у меня не было

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А AVRSTUDIO че не пользуете?Такие вещи там нормально симулируются.

А разве там есть окно COM порта? У меня 4,12 с обработкой прерываний там туго.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не совсем понял Ваш код в прерывании. Зачем нужна проверка флага?

Я выложил свои дровишки. Там у меня передача и прем идет через кольцевые буфера. По прерыванию передатчика при загрузке последнего байта в уарт, выставляется флаг окончания передачи. Далее по прерыванию TXC, которое свидетельствует о опустошении сдвигового регистра, при выставленном упомянутом флаге снова разрешается прием данных и переключение драйвера 485. То есть прием будет включен только после полной передачи пакета.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Почему получается 2 прерывания по TXC при передачи 2-х байт не понял. может я не правильно помню и делаю иначе, но с таким не встречался.

На память TXC возникает при пустом буфере и выдачи стопового бита.

 

Безусловно. Прямо так и написано:

 

The Transmit Complete (TXC) flag bit is set one when the entire frame in the Transmit

Shift Register has been shifted out and there are no new data currently present in the

transmit buffer

 

На я передачу делал так.

2 байта в буфер;

включить UDRE

по UDRE подкачивать данные

если новых двнных нет, то выключить UDRE и включить TXC

если TXC, то все переданно, переключиться на прием.

 

и таких вещей у меня не было

 

Ну в принципе даже разрешение TXC можно не дергать, если вы можете дать гарантию, что время реакции на UDRE не превысит времени передачи символа. Тогда TXC придет ТОЛЬКО ОДИН в конце пакета. Как раз, чтобы выключить передатчик на ADM485 :)

 

Вообщем-то все культурно и правильно в камне. Работать в принципе по UDRE и надо, чтобы не было дырок между символами (они только уменьшают общую скорость передачи).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообщем-то все культурно и правильно в камне. Работать в принципе по UDRE и надо, чтобы не было дырок между символами (они только уменьшают общую скорость передачи).

Они (всмысле межсимвольные интервалы) добавляют стабильности передачи. В Modbus - межсимвольный интервал is a MUST.

А скорость, кому она нужна в 485?

 

Почему получается 2 прерывания по TXC при передачи 2-х байт не понял.

Потому что отправляется два символа. После отправки каждого генерится TXC, если игнорировать UDRE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Они (всмысле межсимвольные интервалы) добавляют стабильности передачи.

 

Обоснуйте?

 

В Modbus - межсимвольный интервал is a MUST.

 

Межпакетный да, а вот межсимвольный??? Можно цитату?

 

А скорость, кому она нужна в 485?

 

Ну не скажите... Разные случаи есть..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работать в принципе по UDRE и надо, чтобы не было дырок между символами (они только уменьшают общую скорость передачи).

Оно то может и так, но привычка с 51 осталась. Там аналога UDRE нет.

Да и немного неудобно. UDRE устанавливается всегда, когда буфер на передачу пуст (срабатывание по состоянию). А если я не хочу передавать, надо прерывание запрещать.

Прерывание ТХС устанавливается по событию, сбросил после передачи последнего байта и свободен до следующей передачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А разве там есть окно COM порта? У меня 4,12 с обработкой прерываний там туго.

:07: Чойто туго??! Там можешь руками поднять бит прерывания - и вот оно, появилось. Или маску. Или ещё что, всё работает. Наоборот, оч. хорошо там с прерываниями вручную. Приём только так и отлаживал - включаешь RXC - сразу прерываание, побежал обрабатывать байт... :)

По поводу TXC/UDRE. Пользую их оба, для 485, ага. Чтобы отправить строку байтов, переключаю интерфейс на выход и записываю байт в UDR. Всё! дальше прерывания сами. Тут же байт из UDR проваливается в регистр сдвига и возникает прерывание UDRI. Обработчик смотрит: все байты передал? нет: следующий в UDR; да: ничего. Когда последний байт передан, возникает TXCI. Его обработчик переключает RS485 на приём. Всё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Обоснуйте?

Ну например - передатчик работает 8-1-N, а приемник включили 8-2-N.

С отправкой "по TXC" с большой долей вероятности ошибок приема не будет.

 

Межпакетный да, а вот межсимвольный??? Можно цитату?

Таки действительно органичение "снизу" только на межпакетный - "Character gap interval".

 

На межсимвольный "silent interval" ограничение "сверху":

The entire message must be transmitted as a continuous stream. If a silent interval of

more than 1.5 character times occurs before completion of the frame (not a continuous stream),

the receiving device flushes the incomplete message and assumes the next byte will be the

address field of a new message.

источник:

http://www.sena.com/download/tutorial/tech_Modbus_v1r0c0.pdf (150k)

cм. секцию 5.2

 

Ну не скажите... Разные случаи есть..

Может быть, но мне что-то такие случаи в сетях 485 не подворачивались.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:07: Чойто туго??! Там можешь руками поднять бит прерывания - и вот оно, появилось. Или маску. Или ещё что, всё работает. Наоборот, оч. хорошо там с прерываниями вручную. Приём только так и отлаживал - включаешь RXC - сразу прерываание, побежал обрабатывать байт... :)

Дык у аффтара проблемы с передачей,значит руками флаги дергать ваще не надо.байт в UDR -и смотри

чего-там с прерываниями.И скачайте версию 4.13,там атымельцы здорово над переферией поработали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А я был очень рад увидеть два флага. Наверное после х51. Да и в 4414 только один байт буферизовался. Иногда для RS232 при высокой скорости и плотности передачи Именно чтобы избежать межбайтовых интервалов очень необходимы оба флага. В идеале конечно можно было бы и байт 16 впихнуть в аппаратный буфер. Но два лучше чем один. Короче использовать или нет - это программисту решать, а вот наличие - это замечательно. Использую 2 флага и в 485 и в 232.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну например - передатчик работает 8-1-N, а приемник включили 8-2-N.

С отправкой "по TXC" с большой долей вероятности ошибок приема не будет.

 

Так включите и в передатчике 9 бит с установленным девятым битом... А ручные задержки для добавления бита - это моветон... А задержки, которые еще и неизвестно какой длительности (ну сколько времени там будет от TXC до записи в UDR) - как говорится, это ваще ;)

 

Таки действительно органичение "снизу" только на межпакетный - "Character gap interval".

 

На межсимвольный "silent interval" ограничение "сверху":

 

источник:

http://www.sena.com/download/tutorial/tech_Modbus_v1r0c0.pdf (150k)

cм. секцию 5.2

 

Посему оптимально будет посылка именно без интервалов.

 

Может быть, но мне что-то такие случаи в сетях 485 не подворачивались.

 

Ну надо минимизировать время опроса в сети при ограничении битовой скорости. Вот и весь случай.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...