Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
21.07.2010, 09:17
|
|
Временная регистрация
Регистрация: 04.05.2008
Адрес: Ставрополь
Сообщений: 63
Сказал спасибо: 2
Сказали Спасибо 21 раз(а) в 17 сообщении(ях)
|
Atmega16 с буфером обмена
Уважаемые форумчане!
Есть устройство собранное на atmega16 (управление шаговыми двигателями)
Устройство имеет связь с ПК по rs232(tx, rx).
По rs232 от ПК к устройству посылаются команды на исполнение. Каждая команда 1 байт.
Частота отправки команды - каждые 4мс. Обработка команды происходит в перрывании таймера по компаратору.
Проблема в том что ПК не может слать команды чаще чем 10-15 мс (многозадачность, квант времени).
Как организовать буфер чтобы команда приходила в момент после обработки текущей команды, до наступления след прерывания (обработки след команды)?
Протокол желательно modbus или другой с полем контрольной суммы.
В настоящее время организованна передача 512 байт в буфер микроконтроллера, затем обработка этих байтов. затем остановка опять прием 512 байтов, обработка и т.д.
Задержка получается между приемом в буфер и обработкой. как от нее избавится?
Программа на ПК написанна на VB.net используется компонент Serial port.
На мк использую CodeVisionAVR.
|
|
|
|
21.07.2010, 09:56
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
|
Re: Atmega16 с буфером обмена
Используйте кольцевой буфер
|
|
|
|
21.07.2010, 11:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Atmega16 с буфером обмена
Переложите вычисления с компьютера на контроллер. Он с этим справится. Компьютер пусть пересылает в контроллер реакцию пользователя - нажатие кнопок, введенные значения - это не больше 10 в секунду, а обработку этих данных пусть производит контроллер
|
|
|
|
21.07.2010, 12:04
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Atmega16 с буфером обмена
Сообщение от niXto
|
Переложите вычисления с компьютера на контроллер. Он с этим справится.
|
ИЛИ ваще сделать на МК.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
|
|
|
|
21.07.2010, 12:25
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.01.2008
Сообщений: 1,143
Сказал спасибо: 379
Сказали Спасибо 430 раз(а) в 274 сообщении(ях)
|
Re: Atmega16 с буфером обмена
А вы точно уверены в необходимости использовать такой длинющий протокол как modbus или подобный?
Может просто обойтись ESC последовательностью или АТ командой.
Соответственно с выдачей управляемым устройством диагностической команды.
Решением данной задачи я вижу, максимальное повышение информативности команды, при этом перенести оброботку матиматики с ПК на МК.
При этом комманда с ПК интерпретируется МК и передается в буфер. Очень даже возможно, оптимальным вариантом будет использование кольцевого буфера.
При возникновении проблемы с передачей, МК генерирует для ПК команду для повторной передачи.
А дальше по прерыванию от таймера МК вытягивает команди из буфера, для формирования импульсов для ШД. По окончанию отработки пакета команд выдает диагностическую команду на ПК.
Еще нужно организовать буфер на ПК, для передачи команды. Ато 10-15мс чтото очень долго, за это время можно передать около 90байт.
|
|
|
|
21.07.2010, 22:28
|
|
Временная регистрация
Регистрация: 04.05.2008
Адрес: Ставрополь
Сообщений: 63
Сказал спасибо: 2
Сказали Спасибо 21 раз(а) в 17 сообщении(ях)
|
Re: Atmega16 с буфером обмена
Сообщение от lvadia
|
Используйте два буфера, пока один обрабатывается...другой загружается с ПК, а затем наоборот...
|
А как, если на прием байта в мк стоит прерывание, и на обработку команды тоже прерывание (таймер). Два прерывания в один омент времени не могут обрабатыватся.
Насчет математики самый оптимальный вариант конечно. Устройство - трехкоординатный рисовальный станок. Можно ли реализовать на мк рисование кругов дуг и т.п.?
В протоколе должна быть контрольная сумма, иначе как мк узнает правильная пришла команда или нет.
|
|
|
|
22.07.2010, 00:35
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.01.2008
Сообщений: 1,143
Сказал спасибо: 379
Сказали Спасибо 430 раз(а) в 274 сообщении(ях)
|
Re: Atmega16 с буфером обмена
Хоть два прерывания одновременно не могут выполнятся, зато можно разрешить выполнение прерывания, при обработке другого прерывания.
Достаточно в теле обработчика прерывания на прием данных c USART разрешить выполнение прерывания от таймера и установить флаг глобальных прерываний.
Но так усложнять программу не надо. Если время на обработку команды меньше нежели на прием байта с UART. То после обработки прерывания инициализируемого таймером, контролер выполнит прерывание от UART без потери данных.
Если устройство предназначено для вывода графики, то в качестве оптимального языка можно использовать язык HPGL - Hewlett Packard Graphics Language. Тем более с любой CAD программы или некоторых векторных редакторов можно файл выводить непосредственно на устройство (используя его как принтер)
Если же устройство типа координатно гравировального станка
то можно использовать язык какой нибудь стойки.
А программу для обработки генерировать какой нибудь CAM системой.
Насчет контроля команд, то на мой взгляд достаточно аппаратный контроль четности передаваемых данных на UART и программного контроля целостности команды.
|
|
|
|
23.07.2010, 08:54
|
|
Временная регистрация
Регистрация: 04.05.2008
Адрес: Ставрополь
Сообщений: 63
Сказал спасибо: 2
Сказали Спасибо 21 раз(а) в 17 сообщении(ях)
|
Re: Atmega16 с буфером обмена
Решил перенести математику на мк и использовать одно прерывание. Изучаю алгоритм Брезенхема рисования линии и окружностеи. Возникает проблема сортировки массива с вычисленными координатами, а так же избыточность данного алгоритма. Ищу решение. Всем спасибо за помощь.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 18:28.
|
|