реклама на сайте
подробности

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Программный UART в AVR, Помехоустойчивость
Sergio66
сообщение Sep 13 2005, 08:34
Сообщение #31


Местный
***

Группа: Свой
Сообщений: 235
Регистрация: 9-02-05
Пользователь №: 2 526



Цитата(Daisy @ Aug 18 2005, 15:30)
Программный УАРТ работает на скорости 115200 в режиме приема. Обмен группами по 4 байта (от Cygnal к AVR), один раз в 700 мс.
Однако, где-то один раз в час проскакивает помеха. В результате один байт из 4-х неверен. Помеху можно убрать поставив RC-цепочку на линию передачи. Но ставить не хочется, ибо серия.
Какие есть варианты программной фильтрации? Или может быть ещё какие-то идеи?
*


Если помеха проскакивает случайным образом и носит редкий характер, то достаточно передавать контрольную сумму и сравнивать ее на приемном конце. Если она не совпадает - повторить передачу. С Вашей вероятностью возникновения помехи, уверен, три раза повторять передачу не придется.
Go to the top of the page
 
+Quote Post
Daisy
сообщение Sep 13 2005, 10:37
Сообщение #32


Частый гость
**

Группа: Свой
Сообщений: 96
Регистрация: 29-04-05
Из: г. Жуковский
Пользователь №: 4 606



Попробую сейчас объяснить как это было.
Исходные данные:
*** at90s2313, 10МГц:
* с одной стороны принимает данные (4 байта ) по программному УАРТ-у от силабсового сигнала(48МГц) на скорости 115200. интервал посылок 700 мс.
* с другой стороны отвечает на однобайтовые запросы т.н. блока искробезопасного пятибайтными ответами по аппаратному УАРТ-у на скорости 2400. Интервал запросов 40 мс.

Сначала и то и другое работало по прерываниям. И случалась такая ситуация, что во время обработки прерывания от аппаратного уарт (2400), приходил старт бит байта (прерывание INT1) по программному УАРТ-у(115200).

Затем, отслеживая эту ситуация по флагам, приходилось терять посылку, не обращать на неё внимание.
И все равно порой что-то да проскакивало, за два часа раз. или за три.
Что-то видимо где-то недочищено было, флаг может быть какой-то взводился и не сбрасывался.

В настоящее время аппаратный УАРТ (2400) работает без прерывания. В основном цикле анализируются флаги приема и передачи. Так как скорость небольшая, то можно успеть. Программный УАРТ(115200) работает по прерыванию. Принимаю по нему всю посылку до конца, а потом иду проверять флаги аппаратного уарт-а (2400).
В таком варианте работает железно. Уже два дня подряд smile.gif

Про RC-цепочки надо почитать. ТОлько начальство не может и не хочет пойтить на аппаратные доработки, во всяком случае в этой партии.
Да и дело-то пока в программе оказалось.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 14 2005, 09:58
Сообщение #33


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(CDT @ Sep 13 2005, 09:35)
Видимо, когда первым вызывал прерывание аппаратный UART, прерывания запрещались, а вложенные не разрешались.
В результате со временем возникал конфликт и пропускалась (или откладывалась) обработка очередного фронта программного интерфейса.
*

И я о том же.
Отличная иллюстрация того, что у AVR на самом деле НЕТ приоритетной системы прерываний, которая, пусть в урезанном виде (без понятия приоритета процессора) есть у самого захудалого MCS51.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
mse
сообщение Sep 14 2005, 10:24
Сообщение #34


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата
Отличная иллюстрация того, что у AVR на самом деле НЕТ приоритетной системы прерываний, которая, пусть в урезанном виде (без понятия приоритета процессора) есть у самого захудалого MCS51.

У меня старый-добрый АТ89С2051 выкидывал аналогичные кренделя и с приоритетными прерываниями. Нога ИНТ рядом с ОСЦ, чуть затянутый фронт и подкидон в критичной задаче тут как тут. Емкостишка на ногу рулит.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Sep 14 2005, 10:49
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



[/quote]
И я о том же.
Отличная иллюстрация того, что у AVR на самом деле НЕТ приоритетной системы прерываний, которая, пусть в урезанном виде (без понятия приоритета процессора) есть у самого захудалого MCS51.
*

[/quote]

Как понять НЕТ. Есть. и будет есть. Самый старший приоритет RESET. Затем внешние прерывания, UART где-то в конце. А если надо иначе - то разрешайте глобальное в обработчике прерывания. Лично пользовался и все работало.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 14 2005, 11:17
Сообщение #36


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



[quote=&-rey,Sep 14 2005, 13:49]
[/quote]
И я о том же.
Отличная иллюстрация того, что у AVR на самом деле НЕТ приоритетной системы прерываний
*

[/quote]

Как понять НЕТ. Есть. и будет есть. Самый старший приоритет RESET. Затем внешние прерывания, UART где-то в конце. А если надо иначе - то разрешайте глобальное в обработчике прерывания. Лично пользовался и все работало.
*

[/quote]
Есть??? Ну извините.
Берём мегу128. Берём прерывание TIMER1CAPT. Прерывания от таймера 2 и внешние прерывания INT как бы имеют больший приоритет, а прерывания от остальных таймеров и UART как бы имеют меньший приоритет.
Пожалуйста, объясните мне, неразумному, как сделать такую вещь. Я хочу, чтобы обработчик TIMER1_CAPT было можно прервать любым внешним прерыванием или прерываниями таймера2, но нельзя прервать прерываниями от таймера3 и от USART-ов.
Если я в начале обработчика TIMER1_CAPT поставлю sei, то прерывание TIMER3_OVF, якобы самое низкоприоритетное, сможет прервать мой обработчик наравне с INT0. Ну и где тут приоритетная система???

У AVR НЕТУ приоритетной системы прерываний. Есть "близость к процессору в цепочке запросов", которая решает - кто из двух и более возьмёт управление при одновремённом возникновении запросов, такт в такт. И как часто это происходит? А если "более приоритетное" возникнет на такт позже "менее приоритетного"? А если при этом этом "менее приоритетное" ну очень не хочется прерывать "ещё менее приоритетным", так как "более приоритеное" выписано так, что быстро отработате и выставит флаги, а "ещё менее" может занять процессор на милисекунду, так как для фонового процесса это совсем до лампочки?

Итого я утверждаю, что слово "приоритет" применительно к прерываниям у AVR - это скорее маркетинговый термин, чем технический.

Когда такая система есть, то более приоритетное прерывание прервёт менее приоритетное как только более приоритетное возникнет - независимо от желания менее приоритетного. У MCS51 это возможно, более приоритетное может прервать менее приоритетное, менее приоритетное не будет вызвано пока более приоритетное не выполнит команду reti. Но у MCS51 нет понятия приоритета процессора и там нельзя "вот на этот период" запретить только менее приоритетные прерывания, а более приоритетные оставить.

===
MIPS - Meanless Indicator of Performance for Salesmen


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
mse
сообщение Sep 14 2005, 11:38
Сообщение #37


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



"Итого я утверждаю, что слово "приоритет" применительно к прерываниям у AVR - это скорее маркетинговый термин, чем технический."
Дык, Атмел никогда не говорил про прерывания с приоритетом. Даже была инфа, что в какие-то АВРы только планируется её ставить.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Sep 14 2005, 12:12
Сообщение #38


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



"Я хочу, чтобы обработчик TIMER1_CAPT было можно прервать любым внешним прерыванием или прерываниями таймера2, но нельзя прервать прерываниями от таймера3 и от USART-ов.
Если я в начале обработчика TIMER1_CAPT поставлю sei, то прерывание TIMER3_OVF, якобы самое низкоприоритетное, сможет прервать мой обработчик наравне с INT0. Ну и где тут приоритетная система???"

Да, конечно если так ставить задачу, то нужно будет запрещать прерывания по соответствующим таймера3 и USART-ы. а по выходу разрешать их. Изврат ? - согласен. Но если нужно...

" У MCS51 это возможно, более приоритетное может прервать менее приоритетное, менее приоритетное не будет вызвано пока более приоритетное не выполнит команду reti. Но у MCS51 нет понятия приоритета процессора и там нельзя "вот на этот период" запретить только менее приоритетные прерывания, а более приоритетные оставить."
А, понял. У MCS51 можно разделить на 2 группы ? Конечно так довольно удобнее. Но ведь они все тратят 12 тактов на команду если Вы не имеете ввиду новые которые как и AVR восновном 1 тактные, но вроде это ядро называют 52 или нет? А с расчета разницы 12 тактов 51 и 1-го AVR разницы заметно не будет.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 14 2005, 13:26
Сообщение #39


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(mse @ Sep 14 2005, 14:38)
"Итого я утверждаю, что слово "приоритет" применительно к прерываниям у AVR - это скорее маркетинговый термин, чем технический."
Дык, Атмел никогда не говорил про прерывания с приоритетом. Даже была инфа, что в какие-то АВРы только планируется её ставить.
*


Цитата(doc2467M.pdf @ page 9)
The interrupts have priority in accordance with their
interrupt vector position. The lower the interrupt vector address, the higher the priority.


Т.е. атмел НЕ говорит о наличии приоритетной схемы прерываний (ибо их LSI-11 засмеяла бы), но слово "приортет" упоминает, так как звучит красиво.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
ReAl
сообщение Sep 14 2005, 13:35
Сообщение #40


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(&-rey @ Sep 14 2005, 15:12)
Да, конечно если так ставить задачу, то нужно будет запрещать прерывания по соответствующим таймера3 и USART-ы. а по выходу разрешать их. Изврат ? - согласен. Но если нужно...

А, понял. У  MCS51 можно разделить на 2 группы ? Конечно так довольно удобнее. Но ведь они все тратят 12 тактов на команду если Вы не имеете ввиду новые которые как и AVR восновном 1 тактные, но вроде это ядро называют 52 или нет? А с расчета разницы 12 тактов 51 и 1-го AVR разницы заметно не будет.
*

Причём тут число тактов? Это параметр более технологический (что те же цигналы демонстрируют), чем архитектурный. Да и если в каждом прерывании сохранять состояние разрешения прерываний по менее приоритетным, а потом восстанавливать (так как, вообще говоря, может быть неизвестно, разрешены ли они в данный момент), то в терминологии времени заданного процессора (в машинных циклах, а не в тактах кварца) это будет слишком долго до разрешения прерываний более приоритетным и задача класса обсуждаемой выполнена всё равно не будет.

Ну и если время не сильно дваит (хотя необходимость в приоритетности прерываний возникает как раз тогда, когда оно давит smile.gif), то всё равно изврат и изврат именно потому, что приоритетной схемы у AVR просто нет.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
mse
сообщение Sep 14 2005, 13:46
Сообщение #41


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



"Т.е. атмел НЕ говорит о наличии приоритетной схемы прерываний (ибо их LSI-11 засмеяла бы), но слово "приортет" упоминает, так как звучит красиво"
Думаю, дело не в красоте. Надо-же как-то объяснить, что из N, одновременно случившихся событий исполнится одно по определённому правилу, и оставшиеся, аналогично.
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 14 2005, 14:34
Сообщение #42


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(mse @ Sep 14 2005, 17:46)
"Т.е. атмел НЕ говорит о наличии приоритетной схемы прерываний (ибо их LSI-11 засмеяла бы), но слово "приортет" упоминает, так как звучит красиво"
Думаю, дело не в красоте. Надо-же как-то объяснить, что из N, одновременно случившихся событий исполнится одно по определённому правилу, и оставшиеся, аналогично.
*


В любом фирменном атмеловском описании на AVR расписана иерархия прерываний и она выполняется - железно. Можете сами проверить - запрограммировав прерывания по входу и подав на них один и тот-же импульсный сигнал. В теле каждого прерывания сделайте вывод в порт и посмотрите осцилографом, 'чья возьмет'... tongue.gif


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
mse
сообщение Sep 14 2005, 18:26
Сообщение #43


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



"В любом фирменном атмеловском описании на AVR расписана иерархия прерываний и она выполняется - железно"

А что, кто-то говорит, что нет? Подымите мне веки. Но разделения по уровням приоритетов у АВРа нет.
Go to the top of the page
 
+Quote Post
Andy Mozzhevilov
сообщение Sep 15 2005, 02:53
Сообщение #44


Знающий
****

Группа: Свой
Сообщений: 877
Регистрация: 26-01-05
Из: Екатеринбург
Пользователь №: 2 206



Цитата(BVU @ Sep 14 2005, 19:34)
В любом фирменном атмеловском описании на AVR расписана иерархия прерываний и она выполняется - железно. Можете сами проверить - запрограммировав прерывания по входу и подав на них один и тот-же импульсный сигнал. В теле каждого прерывания сделайте вывод в порт и посмотрите осцилографом, 'чья возьмет'...  tongue.gif
*


О том и речь, что это не приоритетность в нормальном ее понимании.


--------------------
Пасу котов...
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 15 2005, 05:06
Сообщение #45


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(Andy Mozzhevilov @ Sep 15 2005, 06:53)
Цитата(BVU @ Sep 14 2005, 19:34)
В любом фирменном атмеловском описании на AVR расписана иерархия прерываний и она выполняется - железно. Можете сами проверить - запрограммировав прерывания по входу и подав на них один и тот-же импульсный сигнал. В теле каждого прерывания сделайте вывод в порт и посмотрите осцилографом, 'чья возьмет'...  tongue.gif
*


О том и речь, что это не приоритетность в нормальном ее понимании.
*



А об приоритетности в 'ее понимании' должен позаботиться сам программист. Аппаратной реализации тут не требуется, а уж если очень хочеться делайте внешние навороты своими руками.


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post

4 страниц V  < 1 2 3 4 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 15th July 2025 - 15:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01495 секунд с 7
ELECTRONIX ©2004-2016