fmdost 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба 2 TXC на 2 переданных байта - абсолютно нормальное поведение чипа. Вот именно такой прямой ответ я и хотел получить! Огромное спасибо! Ибо "Атмеловский английский" неразумею. Им наверное построчно плотют. Ка-кто смутно и коротко у них там описана работа буферизации USART. Было бы логично если бы флаг TXC устанавливался по ОПУСТОШЕНИЮ буфера. Но похоже он устанавливается по окончанию передачи одного байта из двух что в буфере. Соответственно возникают 2 прерывания вместо ожидаемого 1го. То-есть не получится сделать совсем красиво. Досадно. Спасибо за исходники. Простите пожалуйста, но лично у меня фраза "камень глючит" или "винда не так села" вызывает пену у рта и лёгкое подколбашивание. Кто-то на форуме собирал камни которые "глючат" как редкую реликвию. И, наверное перекупили бы у вас такой камень. К сожалению, скорее всего "глючит" другой прибор не техногенного происхождения. Во всяком случае с очень большой долей вероятности. Впоне возможно что глючу Я. А камень продам по сходящей тк. он уже в 2 раза питался 12 вольтами. Что вы понимаете под словом "отладчик"? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
arttab 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба Почему получается 2 прерывания по TXC при передачи 2-х байт не понял. может я не правильно помню и делаю иначе, но с таким не встречался. На память TXC возникает при пустом буфере и выдачи стопового бита. На я передачу делал так. 2 байта в буфер; включить UDRE по UDRE подкачивать данные если новых двнных нет, то выключить UDRE и включить TXC если TXC, то все переданно, переключиться на прием. и таких вещей как бонус даже межсимвольный интервал непроизвольно получается. у меня не было Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Igor26 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба Что вы понимаете под словом "отладчик"? JTAGICE Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба А AVRSTUDIO че не пользуете?Такие вещи там нормально симулируются. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fmdost 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба А AVRSTUDIO че не пользуете?Такие вещи там нормально симулируются. А разве там есть окно COM порта? У меня 4,12 с обработкой прерываний там туго. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vesago 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба Не совсем понял Ваш код в прерывании. Зачем нужна проверка флага? Я выложил свои дровишки. Там у меня передача и прем идет через кольцевые буфера. По прерыванию передатчика при загрузке последнего байта в уарт, выставляется флаг окончания передачи. Далее по прерыванию TXC, которое свидетельствует о опустошении сдвигового регистра, при выставленном упомянутом флаге снова разрешается прием данных и переключение драйвера 485. То есть прием будет включен только после полной передачи пакета. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба Почему получается 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 и надо, чтобы не было дырок между символами (они только уменьшают общую скорость передачи). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба Вообщем-то все культурно и правильно в камне. Работать в принципе по UDRE и надо, чтобы не было дырок между символами (они только уменьшают общую скорость передачи). Они (всмысле межсимвольные интервалы) добавляют стабильности передачи. В Modbus - межсимвольный интервал is a MUST. А скорость, кому она нужна в 485? Почему получается 2 прерывания по TXC при передачи 2-х байт не понял. Потому что отправляется два символа. После отправки каждого генерится TXC, если игнорировать UDRE. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба Они (всмысле межсимвольные интервалы) добавляют стабильности передачи. Обоснуйте? В Modbus - межсимвольный интервал is a MUST. Межпакетный да, а вот межсимвольный??? Можно цитату? А скорость, кому она нужна в 485? Ну не скажите... Разные случаи есть.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IEC 1 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба Работать в принципе по UDRE и надо, чтобы не было дырок между символами (они только уменьшают общую скорость передачи). Оно то может и так, но привычка с 51 осталась. Там аналога UDRE нет. Да и немного неудобно. UDRE устанавливается всегда, когда буфер на передачу пуст (срабатывание по состоянию). А если я не хочу передавать, надо прерывание запрещать. Прерывание ТХС устанавливается по событию, сбросил после передачи последнего байта и свободен до следующей передачи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maik-vs 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба А разве там есть окно COM порта? У меня 4,12 с обработкой прерываний там туго. :07: Чойто туго??! Там можешь руками поднять бит прерывания - и вот оно, появилось. Или маску. Или ещё что, всё работает. Наоборот, оч. хорошо там с прерываниями вручную. Приём только так и отлаживал - включаешь RXC - сразу прерываание, побежал обрабатывать байт... :) По поводу TXC/UDRE. Пользую их оба, для 485, ага. Чтобы отправить строку байтов, переключаю интерфейс на выход и записываю байт в UDR. Всё! дальше прерывания сами. Тут же байт из UDR проваливается в регистр сдвига и возникает прерывание UDRI. Обработчик смотрит: все байты передал? нет: следующий в UDR; да: ничего. Когда последний байт передан, возникает TXCI. Его обработчик переключает RS485 на приём. Всё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
defunct 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба Обоснуйте? Ну например - передатчик работает 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 не подворачивались. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
WHILE 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба :07: Чойто туго??! Там можешь руками поднять бит прерывания - и вот оно, появилось. Или маску. Или ещё что, всё работает. Наоборот, оч. хорошо там с прерываниями вручную. Приём только так и отлаживал - включаешь RXC - сразу прерываание, побежал обрабатывать байт... :) Дык у аффтара проблемы с передачей,значит руками флаги дергать ваще не надо.байт в UDR -и смотри чего-там с прерываниями.И скачайте версию 4.13,там атымельцы здорово над переферией поработали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SapegoAL 0 21 августа, 2007 Опубликовано 21 августа, 2007 · Жалоба А я был очень рад увидеть два флага. Наверное после х51. Да и в 4414 только один байт буферизовался. Иногда для RS232 при высокой скорости и плотности передачи Именно чтобы избежать межбайтовых интервалов очень необходимы оба флага. В идеале конечно можно было бы и байт 16 впихнуть в аппаратный буфер. Но два лучше чем один. Короче использовать или нет - это программисту решать, а вот наличие - это замечательно. Использую 2 флага и в 485 и в 232. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Rst7 5 22 августа, 2007 Опубликовано 22 августа, 2007 · Жалоба Ну например - передатчик работает 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 не подворачивались. Ну надо минимизировать время опроса в сети при ограничении битовой скорости. Вот и весь случай. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться