Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
14.06.2009, 01:30
|
|
Вид на жительство
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
|
USART AVR MODBUS
Привет.
Колупаю Атмегу128.
Постал вопрос о реализации на ней Модбаса.
Прочитал инфу и т.д., проблемно... не нашел рабочих исходников, буду писать все сам...
И так - задача.
В меня вся система построена на прерыванию. По возникновению его от таймера, выводим на єкран инфу. И так по кругу.
Возник вопрос в том, как все же принимать информацию от USART, т.е. по прерыванию от него.
Пока находимся в прерыванию от таймера и печатаем на экране обработать возникновение прерывания от УАПП не можем... ибо нету механизма приоритета прерываний. О том что приняли узнаем по завершению вывода на экран и возвращение с прерывания от таймера. Типо сначала выводим текст - потом понимаем что что-то приняли.
Как быть?
Ставить еще 1 МК, который по SPI будет быстро передавать инфу, а дальше второй медленно будет передавать все в "мир" на скорости 9600?
P.S. В кого есть исходники Modbus RTU поделитесь плиз
|
|
|
|
14.06.2009, 01:58
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: USART AVR MODBUS
Сообщение от ua_gruzin
|
Привет.
Колупаю Атмегу128.
Постал вопрос о реализации на ней Модбаса.
Прочитал инфу и т.д., проблемно... не нашел рабочих исходников, буду писать все сам...
И так - задача.
В меня вся система построена на прерыванию. По возникновению его от таймера, выводим на єкран инфу. И так по кругу.
Возник вопрос в том, как все же принимать информацию от USART, т.е. по прерыванию от него.
Пока находимся в прерыванию от таймера и печатаем на экране обработать возникновение прерывания от УАПП не можем... ибо нету механизма приоритета прерываний.
P.S. В кого есть исходники Modbus RTU поделитесь плиз
|
http://freemodbus.berlios.de/index.php
Но нужен ли модбас? Тем более RTU - 3.5 байтовых интервала отслеживать не самая приятная вещь.
По поводу приема - либо разрешайте вложенные прерывания, либо делайте нормальную логику в программе - в прерывании минимальная обработка данных, типа поместить в буфер, и установка флага. А в основном цикле разгребайте события по соответствующим флагам. Еще вариант - использовать ОС.
|
|
|
|
14.06.2009, 02:04
|
|
Вид на жительство
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
|
Да, с ссылкой знаком.
Лазил, перелазил, скачал архив с файлами.
Пытался собрать в CVAVR - ничего путевого не вышло (2 дня лазил).
Можете посоветовать в чем собирать, или как это правильно сделать.
|
|
|
|
14.06.2009, 02:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Сообщение от ua_gruzin
|
Пытался собрать в CVAVR - ничего путевого не вышло (2 дня лазил).
Можете посоветовать в чем собирать, или как это правильно сделать.
|
Собирать в WinAvr. Почти все исходники в сети именно под этот компилятор. Западные так вообще все. Там в порте авровском ридми файл есть, где компилятор указан. Собирать или через make all, или создать в студии проект и указать в его параметрах внешний мейкфайл. Через студию проще будет модифицировать проект. Демо в чистом виде большого смысла не имеет.
И все же - модбас обязателен? Кроме стандартности у него плюсов перед самописным протоколом нет. И если в сеть не планируется подсоединять чужие устройства, то проще и лучше написать свой протокол.
|
|
|
|
14.06.2009, 03:24
|
|
Гражданин KAZUS.RU
Регистрация: 08.07.2006
Сообщений: 886
Сказал спасибо: 119
Сказали Спасибо 1,110 раз(а) в 177 сообщении(ях)
|
Цитата:
|
Пока находимся в прерыванию от таймера и печатаем на экране обработать возникновение прерывания от УАПП не можем... ибо нету механизма приоритета прерываний.
|
Ну почему же не можем... Если в самом начале обработчика прерывания для ЖКИ разрешить прерывания (sti), то можно будет обрабатывать и другие прерывания без проблем, и ничего не произойдет незамеченным.
|
|
|
|
14.06.2009, 10:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.12.2007
Адрес: Екатеринбург
Сообщений: 2,731
Сказал спасибо: 2,443
Сказали Спасибо 893 раз(а) в 580 сообщении(ях)
|
Програмируется таймер на величину защитного интервала.
При приеме каждогосимвола таймер сбрасывается и запускается снова,не давая ему срабатывать до тех пор,пока передача не кончится.
В таймере и происходит обработка.
|
|
|
|
14.06.2009, 16:42
|
|
Вид на жительство
Регистрация: 11.12.2006
Сообщений: 317
Сказал спасибо: 0
Сказали Спасибо 12 раз(а) в 11 сообщении(ях)
|
Да в том проблемка с прерываниями, и именно с приоритетом...
Параллельно выводу на экран происходит срабатывание от других источником, при чем они устанавливают флаги. По завершению вывода на экран, данные события будут обработаны после появления sei (reti).
Была бы возможность убирать вызов прерывания с
установкой флага, проблем бы не было.
Типо сначало установили флаг при разрешённом прерывани например от таймера1, но не вызвали обработку, а обработали - потом, когда дали разрешение на их выполнению по флагу.
За WinAVR, спасибо, буду пробовать.
|
|
|
|
14.06.2009, 23:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Сообщение от ua_gruzin
|
Пока находимся в прерыванию от таймера и печатаем на экране обработать возникновение прерывания от УАПП не можем...
|
Очень даже можем, зависит от скорости USART. Если скорость не большая, то:
У меня драйвер ЖКИ работает по прерыванию таймера от 60-120 микросекунд(в зависимости какой период требуют остальные задачи).
За один проход драйвер выводит только ОДИН байт в ЖКИ, а не ВСЮ строку. Рулится флагами. МЕГА128 будет тратить на это около 3-10 микросекунд(от частоты). За это время успеет проскочить только часть бита на скорости 9600
Так же работают драйверы 1wire, SOFT USART, USART BUFER клавиатуры, итд.. и всё паралельно работает )))) и успевает одновременно считывать и iButton, и DS18B20 и выводить в ЖКИ и принимать передавать 2-4 USART 9600(два из них SOFT) и клавиатура и ....процентов 30-50 времени остаётся...
|
|
|
|
21.04.2012, 22:35
|
|
Временная регистрация
Регистрация: 11.11.2006
Адрес: Свердловск UA
Сообщений: 60
Сказал спасибо: 8
Сказали Спасибо 19 раз(а) в 17 сообщении(ях)
|
Re: USART AVR MODBUS
Сообщение от picavr
|
Очень даже можем, зависит от скорости USART. Если скорость не большая, то:
У меня драйвер ЖКИ работает по прерыванию таймера от 60-120 микросекунд(в зависимости какой период требуют остальные задачи).
За один проход драйвер выводит только ОДИН байт в ЖКИ, а не ВСЮ строку. Рулится флагами. МЕГА128 будет тратить на это около 3-10 микросекунд(от частоты). За это время успеет проскочить только часть бита на скорости 9600
Так же работают драйверы 1wire, SOFT USART, USART BUFER клавиатуры, итд.. и всё паралельно работает )))) и успевает одновременно считывать и iButton, и DS18B20 и выводить в ЖКИ и принимать передавать 2-4 USART 9600(два из них SOFT) и клавиатура и ....процентов 30-50 времени остаётся...
|
Я тоже так стараюсь делать. Могу твердо заверить что работаетъ !!!!
|
|
|
|
22.04.2012, 00:00
|
|
Гражданин KAZUS.RU
Регистрация: 14.11.2008
Сообщений: 701
Сказал спасибо: 298
Сказали Спасибо 283 раз(а) в 193 сообщении(ях)
|
Re: USART AVR MODBUS
Сообщение от JhonLaboratory
|
Я тоже так стараюсь делать.
|
Лучше поздно чем никогда JhonLaboratory, Вы дату создания темы посмотрите.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 04:59.
|
|