Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 21.07.2010, 09:17  
valic
Временная регистрация
 
Аватар для valic
 
Регистрация: 04.05.2008
Адрес: Ставрополь
Сообщений: 63
Сказал спасибо: 2
Сказали Спасибо 21 раз(а) в 17 сообщении(ях)
valic на пути к лучшему
По умолчанию Atmega16 с буфером обмена

Уважаемые форумчане!
Есть устройство собранное на atmega16 (управление шаговыми двигателями)
Устройство имеет связь с ПК по rs232(tx, rx).
По rs232 от ПК к устройству посылаются команды на исполнение. Каждая команда 1 байт.
Частота отправки команды - каждые 4мс. Обработка команды происходит в перрывании таймера по компаратору.
Проблема в том что ПК не может слать команды чаще чем 10-15 мс (многозадачность, квант времени).
Как организовать буфер чтобы команда приходила в момент после обработки текущей команды, до наступления след прерывания (обработки след команды)?
Протокол желательно modbus или другой с полем контрольной суммы.

В настоящее время организованна передача 512 байт в буфер микроконтроллера, затем обработка этих байтов. затем остановка опять прием 512 байтов, обработка и т.д.
Задержка получается между приемом в буфер и обработкой. как от нее избавится?
Программа на ПК написанна на VB.net используется компонент Serial port.
На мк использую CodeVisionAVR.
Реклама:
valic вне форума  
Непрочитано 21.07.2010, 09:56  
AJScorp
Почётный гражданин KAZUS.RU
 
Аватар для AJScorp
 
Регистрация: 10.05.2005
Адрес: Саратов.ru
Сообщений: 1,548
Сказал спасибо: 384
Сказали Спасибо 737 раз(а) в 417 сообщении(ях)
AJScorp на пути к лучшему
По умолчанию Re: Atmega16 с буфером обмена

Используйте кольцевой буфер
AJScorp вне форума  
Непрочитано 21.07.2010, 11:57  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Atmega16 с буфером обмена

Переложите вычисления с компьютера на контроллер. Он с этим справится. Компьютер пусть пересылает в контроллер реакцию пользователя - нажатие кнопок, введенные значения - это не больше 10 в секунду, а обработку этих данных пусть производит контроллер
niXto вне форума  
Непрочитано 21.07.2010, 12:04  
picavr
Почётный гражданин KAZUS.RU
 
Аватар для picavr
 
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
picavr на пути к лучшему
По умолчанию Re: Atmega16 с буфером обмена

Сообщение от niXto Посмотреть сообщение
Переложите вычисления с компьютера на контроллер. Он с этим справится.
ИЛИ ваще сделать на МК.
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
picavr вне форума  
Непрочитано 21.07.2010, 12:25  
E97
Почётный гражданин KAZUS.RU
 
Регистрация: 08.01.2008
Сообщений: 1,143
Сказал спасибо: 379
Сказали Спасибо 430 раз(а) в 274 сообщении(ях)
E97 на пути к лучшему
По умолчанию Re: Atmega16 с буфером обмена

А вы точно уверены в необходимости использовать такой длинющий протокол как modbus или подобный?
Может просто обойтись ESC последовательностью или АТ командой.
Соответственно с выдачей управляемым устройством диагностической команды.
Решением данной задачи я вижу, максимальное повышение информативности команды, при этом перенести оброботку матиматики с ПК на МК.
При этом комманда с ПК интерпретируется МК и передается в буфер. Очень даже возможно, оптимальным вариантом будет использование кольцевого буфера.
При возникновении проблемы с передачей, МК генерирует для ПК команду для повторной передачи.
А дальше по прерыванию от таймера МК вытягивает команди из буфера, для формирования импульсов для ШД. По окончанию отработки пакета команд выдает диагностическую команду на ПК.
Еще нужно организовать буфер на ПК, для передачи команды. Ато 10-15мс чтото очень долго, за это время можно передать около 90байт.
E97 вне форума  
Непрочитано 21.07.2010, 22:28  
valic
Временная регистрация
 
Аватар для valic
 
Регистрация: 04.05.2008
Адрес: Ставрополь
Сообщений: 63
Сказал спасибо: 2
Сказали Спасибо 21 раз(а) в 17 сообщении(ях)
valic на пути к лучшему
По умолчанию Re: Atmega16 с буфером обмена

Сообщение от lvadia Посмотреть сообщение
Используйте два буфера, пока один обрабатывается...другой загружается с ПК, а затем наоборот...
А как, если на прием байта в мк стоит прерывание, и на обработку команды тоже прерывание (таймер). Два прерывания в один омент времени не могут обрабатыватся.

Насчет математики самый оптимальный вариант конечно. Устройство - трехкоординатный рисовальный станок. Можно ли реализовать на мк рисование кругов дуг и т.п.?

В протоколе должна быть контрольная сумма, иначе как мк узнает правильная пришла команда или нет.
valic вне форума  
Непрочитано 22.07.2010, 00:35  
E97
Почётный гражданин KAZUS.RU
 
Регистрация: 08.01.2008
Сообщений: 1,143
Сказал спасибо: 379
Сказали Спасибо 430 раз(а) в 274 сообщении(ях)
E97 на пути к лучшему
По умолчанию Re: Atmega16 с буфером обмена

Хоть два прерывания одновременно не могут выполнятся, зато можно разрешить выполнение прерывания, при обработке другого прерывания.
Достаточно в теле обработчика прерывания на прием данных c USART разрешить выполнение прерывания от таймера и установить флаг глобальных прерываний.
Но так усложнять программу не надо. Если время на обработку команды меньше нежели на прием байта с UART. То после обработки прерывания инициализируемого таймером, контролер выполнит прерывание от UART без потери данных.

Если устройство предназначено для вывода графики, то в качестве оптимального языка можно использовать язык HPGL - Hewlett Packard Graphics Language. Тем более с любой CAD программы или некоторых векторных редакторов можно файл выводить непосредственно на устройство (используя его как принтер)

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

Насчет контроля команд, то на мой взгляд достаточно аппаратный контроль четности передаваемых данных на UART и программного контроля целостности команды.
E97 вне форума  
Непрочитано 23.07.2010, 08:54  
valic
Временная регистрация
 
Аватар для valic
 
Регистрация: 04.05.2008
Адрес: Ставрополь
Сообщений: 63
Сказал спасибо: 2
Сказали Спасибо 21 раз(а) в 17 сообщении(ях)
valic на пути к лучшему
По умолчанию Re: Atmega16 с буфером обмена

Решил перенести математику на мк и использовать одно прерывание. Изучаю алгоритм Брезенхема рисования линии и окружностеи. Возникает проблема сортировки массива с вычисленными координатами, а так же избыточность данного алгоритма. Ищу решение. Всем спасибо за помощь.
valic вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ATMEGA16 на 16MHz не запускается oldrom Микроконтроллеры, АЦП, память и т.д 52 09.09.2010 23:01
AVR (ATmega16) - TWI (аппаратный) - DS1302 igor-k Микроконтроллеры, АЦП, память и т.д 9 06.07.2010 15:26
Дифференциальный усилитель в Atmega16 и протеус jafarkiller Proteus 1 05.07.2010 19:55
Странность с USART в ATMega16 Archer07 Микроконтроллеры, АЦП, память и т.д 5 05.11.2009 20:27


Часовой пояс GMT +4, время: 18:28.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot