<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Простой пример управления портами P1..P22 платы AVR-USB-MEGA16 (portctrl)</title>
		<description>Обсуждение Простой пример управления портами P1..P22 платы AVR-USB-MEGA16 (portctrl)</description>
		<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html</link>
		<lastBuildDate>Wed, 13 May 2026 18:21:20 +0300</lastBuildDate>
		<generator>JComments</generator>
		<atom:link href="https://microsin.ru/component/option,com_jcomments/format,raw/limit,10/object_group,com_content/object_id,711/task,rss/" rel="self" type="application/rss+xml" />
		<item>
			<title>vs145 написал:</title>
			<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-759</link>
			<description><![CDATA[lalinux, microsin, не могли бы Вы ещё раз выложить куда-нибудь "обернутую libusb в delphi". А если бы ещё проектик - то вообще бы было бы замечательно! microsin: у меня, к сожалению, ничего для Delphi нет.]]></description>
			<dc:creator>vs145</dc:creator>
			<pubDate>Thu, 30 Sep 2010 12:57:47 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-759</guid>
		</item>
		<item>
			<title>lrstein написал:</title>
			<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-541</link>
			<description><![CDATA[Недавно вернулся к этому проекту (тензодатчик-АЦП -> ПК). Почитав примеры выбрал за основу прошивку и класс Сергея Кухтецкого, принял во внимание рекомендации по прерываниям. Прошивку изменил, добавил прерывания по таймеру с усреднением данных в микроконтроллер е - частота дискретизации составила 1562 Гц, данные усредняются по 78 10-битных чисел и помещаются в буфер, который читает компьютер 20 раз в секунду. Компьютер радостно принимает данные и отображает их на графике. Помимо АЦП, используется также несколько выходов микроконтроллер а - один для запуска двигателя, второй для счетчика оборотов. Напаял быстренько схемку USB на атмеге16, после отладки все заработало, система увидела устройство. В общем, устройство работает как надо. ;-) Спасибо большое вашему сайту и Сергею за информацию, без ваших пояснений и примеров ничего бы не получилось. :-) microsin: интересная конструкция у Вас получилась. Было бы неплохо, если у себя на сайте или в блоге (а если нет таких, то хотя бы на Хабре) Вы опубликовали бы описание разработки.]]></description>
			<dc:creator>lrstein</dc:creator>
			<pubDate>Wed, 02 Jun 2010 23:06:03 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-541</guid>
		</item>
		<item>
			<title>Hausauer написал:</title>
			<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-452</link>
			<description><![CDATA[Здравствуйте! наконец то решил собрать данную схему, и при проверке наткнулся на такую проблему: выход порта РВ0 (там где светодиод) никак не управляется, хотя остальные работают отлично. Возможно ли это связано с прошивкой контроллера, которая не дает возможность управлять ногой РВ0, или здесь другая проблема? И ещё, если в fuse деактивировать JTAG, возможно ли к управляемым портам подсоединить к управлению порты РС2-РС5, без изменения прошивки? microsin: возможность управления портом PB0, как и любым другим (в том числе и портами PC2..PC5, задействованным и под JTAG) зависит только от программы firmware, прошитой в микроконтроллер . Смотрите в исходниках той программы, которую прошиваете - как настраиваются интересующие Вас порты, и управляйте состоянием портов соответственно Вашим нуждам. Если Вы оставите фьюз JTAGEN незапрограммиро ванным, то ножки PC2..PC5 микроконтроллер а ATmega16 можете использовать как обычные порты ввода-вывода.]]></description>
			<dc:creator>Hausauer</dc:creator>
			<pubDate>Wed, 14 Apr 2010 14:20:11 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-452</guid>
		</item>
		<item>
			<title>lalinux написал:</title>
			<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-448</link>
			<description><![CDATA[вот обернул usblib в delphi если кому надо смотрите здесь: http://depositfiles.com/files/r62i2babf microsin: респект! Однако полностью Delphi-проект со всеми файлами не помешал бы.]]></description>
			<dc:creator>lalinux</dc:creator>
			<pubDate>Tue, 13 Apr 2010 07:34:55 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-448</guid>
		</item>
		<item>
			<title>lstein написал:</title>
			<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-344</link>
			<description><![CDATA[Спасибо за ответ. Точная привязка по времени не нужна, главное чтобы данные шли на порт. Получается надо организовать прием потока байтов, заранее записанных в озу микроконтроллер а из АЦП(например 10-20 раз в секунду). Или средствами микроконтроллер а усреднять данные с АЦП, передавая потом только результат усреднения в ПК в таком же интервале. Последний вопрос - есть ли команды которые позволяют передавать данные сразу массивами или непрерывным потоком? microsin: тогда Вы точно уложитесь. А команд никаких нет. Есть библиотека V-USB (для firmware), и есть библиотека libusb (для ПО хоста). В библиотеке V-USB есть примеры firmware, которые могут передавать данные в двух направлениях, и есть примеры ПО хоста, которые используют функции библиотеки libusb. Все просто - берете готовый пример, и организуете "поток данных" из буфера АЦП (можно кольцевого, например) путем передачи блоков фиксированного размера. В примерах есть передача за раз по 4 байта (см. пример avr-usb-russianexamples hid-custom-rq) и по 128 байт (см. пример avr-usb-russianexamples hid-data).]]></description>
			<dc:creator>lstein</dc:creator>
			<pubDate>Wed, 03 Mar 2010 14:47:14 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-344</guid>
		</item>
		<item>
			<title>lstein написал:</title>
			<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-341</link>
			<description><![CDATA[Необходимо сделать устройство для измерения усилия на тензодатчике. Процесс довольно быстрый и необходимо делать 500 - 1000 измерений в секунду. Встроенный в атмегу16 ацп позволяет работать на такой скорости. Но как я понял интерфейс не сможет передавать на такой скорости информацию в ПК? microsin: все зависит от того, какой объем данных Вам нужно передавать. Библиотека V-USB может предоставить скорость low speed, что составляет 1.5 мегабит/сек. Если Вы забуферизируете данные с АЦП, или, что еще лучше - сделаете над ними статистическую обработку (свертку, чтобы уменьшить объем данных), то сможете уложиться в полосу. Простой расчет показывает - даже без свертки 1000 выборок/сек = 10битАЦП * 1000 = 0.01 мегабит/сек. С такой скоростью справится обычный low speed USB HID, т. е. V-USB подойдет. Проблема может возникнуть, если Вам нужно сделать ТОЧНУЮ привязку выборок к абсолютному времени - тут уже обработка протокола USB будет мешать (она работает по прерываниям с максимальным приоритетом). В этом случае присмотритесь к чипам с аппаратной поддержкой интерфейса USB, см. макетную плату AVR-USB162.]]></description>
			<dc:creator>lstein</dc:creator>
			<pubDate>Wed, 03 Mar 2010 01:45:32 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-341</guid>
		</item>
		<item>
			<title>Hausauer написал:</title>
			<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-331</link>
			<description><![CDATA[Ок. Только сейчас работы много, диплом писать нужно, а так в свободное время буду начинать макетную плату собирать и компонент писать.]]></description>
			<dc:creator>Hausauer</dc:creator>
			<pubDate>Thu, 25 Feb 2010 01:39:32 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-331</guid>
		</item>
		<item>
			<title>Hausauer написал:</title>
			<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-330</link>
			<description><![CDATA[Спасибо за информацию, а особенно за статью http://microsin.ru/content/view/812/44/! P.S. Наверное буду писать компонент для Delphi, чтобы можно было легко обращаться и управлять контроллером. microsin: очень интересная тема - буду рад, если поделитесь компонентом и примером программы с его использованием.]]></description>
			<dc:creator>Hausauer</dc:creator>
			<pubDate>Thu, 25 Feb 2010 00:43:31 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-330</guid>
		</item>
		<item>
			<title>Hausauer написал:</title>
			<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-329</link>
			<description><![CDATA[Вопрос такой: 1) Беру я, к примеру, тот же ATmega640 в файле pins.h я должен определить дополнительные переменные LED* которые будут соответствовать определенным битам порта контроллера, а также задать маску для других регистров. В файле portctrl.c также прописываем дополнительные регистры и в строке 233 изменяем переменную ledstate до требуемого количество битов (выходных светодиодов). --> Поэтому если я задействую, к примеру, 10 полноценных регистров контроллера то посылать я должен уже не 4 байт, а 10 + 1 байт который бы определял режим работы светодиода? Поэтому не могли бы Вы сказать в каком месте кода, нужно сделать так чтобы теперь 11-й байт, посылаемый на контроллер, определял режим работы светодиодов (вкл или выкл)? 2) Возможно ли так сделать, чтобы ДИНАМИЧЕСКИ можно было назначать определённые порты как на выход, так и на вход (например, пересылкой управляющей команды hidtool setget), а затем уже считывать состояние портов (hidtool read)? microsin: 1) наверное, Вы все правильно поняли. Конечно, нужно задать макроопределени я для всех используемых в программе портов микроконтроллер а (LEDxx) и маски для управления ими. Кроме того, нужно переписать процедуру LedControl в том виде, чтобы она была удобна для управления всеми Вашими портами. Сколько конкретно передавать байт данных - зависит только от метода кодирования в них информации о состояниях портов, это не имеет принципиально никакого значения. Делайте так, как Вам удобно. Можно даже выделить под один светодиод целый байт - кто нам мешает, если память это позволяет? 2) очень даже запросто. Все давно украдено до нас =). Почитайте статью Сергея Кухтецкого вот тут - http://microsin.net/programming/avr-working-with-usb/avr-usb-mega16-and-csharp-class.html (если коротко - прошивка позволяет напрямую управлять ресурсами - портами, регистрами - из программы на Visual C#), а также еще вот эту статью - http://microsin.net/programming/avr-working-with-usb/avr-cdc.html (см. CDC-IO - это примерно тоже самое, что и делает прошивка Сергея Кухтецкого, только управление ресурсами осуществляется через виртуальный COM-порт). Выбирайте, что Вам по вкусу - можно взять все готовенькое, а можно на основе этих примеров сделать что-то свое.]]></description>
			<dc:creator>Hausauer</dc:creator>
			<pubDate>Wed, 24 Feb 2010 18:52:56 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-329</guid>
		</item>
		<item>
			<title>vitvol написал:</title>
			<link>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-327</link>
			<description><![CDATA[Привет! Скажите пожалуйста, с помощью такого контроллера я могу например свет в квартире с компьютера включать??? :eek: microsin: да, можете.]]></description>
			<dc:creator>vitvol</dc:creator>
			<pubDate>Tue, 23 Feb 2010 23:53:55 +0300</pubDate>
			<guid>https://microsin.ru/programming/avr-working-with-usb/avr-usb-mega16-ports-control.html#comment-327</guid>
		</item>
	</channel>
</rss>
