Плюс гигабайт за инвайт! Получаем бонусное пространство в облаке «Яндекс.Диска»

Привет, дру́ги!
У меня осталось 4 инвайтов. Если вы ещё не завели себе собственное облако, теперь самое время!

С помощью «Яндекс.Диска» можно хранить что-то важное, нужное, полезное и иметь к этому доступ с любого ПК мира. А можно поделиться, прислав ссылки на свои файлы или папки нужным людям.
Как только вы перейдёте по нашей ссылке-инвайту и установите программу «Яндекс.Диск»*, вы получите ещё +1 ГБ дискового пространства для хранения своих схем, фоток, даташитов и др. файлов.
Итого 11 Гигабайт = 11.264 Мегабайт. Хватит на многое!
Всем мира, здоровья, достатка и побольше приятных подарков!
--
*Установите программу от «Яндекс.Диск», это ОБЯЗАТЕЛЬНОЕ условие акции. Программка маленькая и бесплатная. Позволяет синхронизировать содержимое локальной папки с облаком. Попробуйте, если не понравится - удалите.
 

» » USB-программатор AVR на FT232RL с буффером

 
 
 

USB-программатор AVR на FT232RL с буффером

Категория: Микроконтроллеры
Разместил error 14 октября 2011. Просмотров: 32013

16 Иметь дело с микроконтроллерами (как и вообще с цифровой техникой) мне приходится довольно редко и если мне надо было прошить микроконтроллер, я просто просил на работе ближайшего «софтверщика» и через 10 минут получал ожидаемое. Но зависимость от других не давала покоя и я решил сделать собственный программатор.
USB-программатор AVR на FT232RL с буффером

Тернистыми тропами выбора…

Прежде всего, я определился, что обычного ISP (In-circuit Programming) SPI (Serial Peripheral Interface)-программатора мне хватит с головой даже с заделом на обозримое будущее. Недостатков у последовательных внутрисхемных программаторов всего два.

Во-первых, это более низкая скорость прошивания, хотя в большинстве случаев реально несущественно будет ли проц шиться 20 секунд или 2 секунды, разве что если вы не собираетесь наладить себе мануфактуринг.

Во-вторых, это опасность заблокировать процессор неправильной установкой битов конфигурации (фьюзов), или случайно вообще отключить режим ISP, или переназначить вывод RESET на что-то другое (в некоторых младших моделях этот вывод бывает совмещённым с портом).
Что ж, придётся быть внимательным. Тем не менее «вылечить» заблокированный таким образом проц можно с помощью т.н. параллельного высоковольтного программирования или с помощью JTAG.
Оба варианта для домашнего использования востребованными обычно не являются, а вот стоят довольно-таки дороговато. У меня же на работе данные девайсы имеются, поэтому «если что», ситуацию могу исправить там.

Да, ещё одно преимущество ISP-программирования для рядового любителя — программируемый процессор может оставаться впаянным в устройство, т.е. нет необходимости его вынимать и переставлять в программатор.

Итак, однозначно ISP

Однако и тут я набрёл на развилку. «Простые» ISP-программаторы довольно капризны в работе. Дело в том, что они требуют прямого доступа к порту (т.н. bitbang-mode) и часто нестабильно работают на современных компьютерах.
В качестве «классики» можно привести программатор STK200/300 для LPT-порта и программатор Громова для COM-порта, содержащих всего несколько резисторов.

Возникает резонный вопрос: раз контроллер должен подключаться по SPI-протоколу, как это может работать от LPT/COM? А вот это и есть суть битбанг-режима, когда мы, получив прямой доступ к регистрам порта, произвольно управляем состоянием на его пинах.
Таким образом, на LPT/COM-портах можно реализовать какой угодно протокол, в разумных пределах, конечно. В нашем же случае реализовывается протокол ISP; на пинах портов формируются сигналы CLK, MOSI, MISO.
USB-программатор AVR на FT232RL с буффером

Очевидно, что такой режим является принципиально ненормальным для порта, да и WinXP не приветствует прямой к его регистрам. Именно поэтому для работы с такими программаторами часто рекомендуют компьютеры на основе P-III под управлением Windows98.

Ещё один камень в огород «резисторных» программаторов — потенциальная возможность сжечь порт вследствие отсутствия гальванической развязки с контроллером, который в данный момент находится в устройстве, имеющем свой блок питания (в момент программирования ему тоже требуется питание, а где ж оно возьмётся на LPT/COM?).

Для обхода этого недостатка, было придумано множество модификаций подобных программаторов с добавлением транзисторных ключей, оптронов, буферов (в т.ч. МАХ232) и т.д. вплоть до абсурда; некоторые из них можно было назвать «простыми» только с натяжкой. Да и проблемы зависимости от быстродействия компьютера и с прямым доступом к порту они не решают.

И наконец, LPT/COM-порты постепенно уходят в небытиё. Казалось бы, USB-COM переходник решит проблему, ан нет, не все переходники обеспечивают даже полный СОМ, не говоря уже о битбанге.

Однажды на работе мне попался в руки нерабочий USB-COM переходник, который при жизни однозначно обеспечивал полный СОМ. Расковыряв его, разобрав на корпусе одной из двух микросхем FT232 и ознакомившись с её даташитом я выяснил, что данная микросхема поддерживает и битбанг.

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

Что же касается сложности схемы, так она выходит ещё и проще чем некоторые «усовершенствованные резисторные». Немного может отпугнуть её цена (ок. $10), но за всё хорошее надо платить (для сравнения готовый USB-COM переходник на её же основе стоит порядка $70).

В принципе, схема подключения может быть и стандартной из даташита, но у такого подключения будет один недостаток. После программирования микроконтроллер должен быть отключён от программатора, для чего достаточно просто отсоединить ISP-кабель. Для тех, кому данный способ представляется неудобным, на сайте DI HALT’а было предложено простое решение добавить к микросхеме буфер 74НС244 с «третьим состоянием» выходов, который по сигналу OE (Output Enable) отключит контроллер от программатора. Ну и в случае неправильного подключения пусть лучше выгорит копеечный буфер, чем FTDI.

Схема программатора на FT232R с буффером

Эту схему я и решил реализовать:
Этот фрагмент исключен из ознакомительной версии статьи.
Полные версии статей доступны полноправным членам сообщества и подписчикам.
Регистрация не открывает доступ автоматически! Пожалуйста, ознакомьтесь с условиями доступа.

Несколько слов о ней. Питание программатор берёт с USB и им же питает программируемый контроллер через джампер JP3. При разомкнутом джампере контроллер может питаться от собственного источника питания.

При неправильной установке фьюзов контроллеру может понадобиться внешний генератор тактовой частоты. Её нам поможет получить всё та же FT232, этот сигнал выведен на джампер JP1.
Для получения 6 МГц на джампере JP1 скачайте утилитку «FT Prog» и пройдя по дереву «Device Xxxxx»→«FT EEPROM»→«Hardware Specific»→«IO Controls»→«C4», установите для пина СBUS4 значение «CLK6». Всё, теперь при наличии питания будем иметь 6 МГц TTL-уровня.

Ну и раз UART-интерфейс на микросхеме присутствует принципиально, выведем и его на JP2.

Микросхема используется в режиме битбанга, т.е. программно мы произвольно управляем состоянием её выходов, а это значит, что нам без разницы какой вывод будет сигналом MISO или MOSI; это же касается остальных выводов. Иными словами, мы можем совершенно произвольно завести выводы микросхемы на ISP-коннектор, а потом сконфигурировать всё программно.

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


Платы заказывал в одной из фирм, коих у нас в Чехии предостаточно.
USB-программатор AVR на FT232RL с буффером


Запаиваем детальки:
USB-программатор AVR на FT232RL с буффером


Остаётся лишь изготовить ISP-кабелёк для внутрисхемного программирования. Их есть два стандартных варианта:
USB-программатор AVR на FT232RL с буффером


Мне приходилось иметь дело преимущественно со вторым вариантом, кроме того он чуть более помехоустойчив, т.к. в нём между двумя каждыми соседними сигналами проходит земляной провод. Во всяком случае, с 80-сантиметровым проводом у меня не возникало никаких проблем.

И всё в сборе:
USB-программатор AVR на FT232RL с буффером


Драйверы

С установкой драйверов проблем не возникло. Скачать их можно у производителя микросхемы на ftdichip.com. Рекомендуются драйвера D2XX Direct Drivers.
Для программирования осваиваю консольную утилиту avrdude, для которой, впрочем, в сети можно найти GUI на свой вкус.

Софтинка-прошивалка SinaProg

USB-программатор AVR на FT232RL с буффером
[14/05/2016] Удобная и простая оболочка, работающая совместно с avrdude. К сожалению, разработка проги давно прекращена.
Файловый сервис доступен только полноправным членам сообщества и подписчикам.
Регистрация не открывает доступ автоматически! Пожалуйста, ознакомьтесь с условиями доступа.

Вы сможете настроить SinaProg для работы с любой версией программатора на FT232R, переопределив в конфиге обращение к пинам чипа.
Правим avrdude.conf
programmer
  id    = "usb_bb";
  desc  = "USB_BB programmer based on FT232R (datagor.ru)";
  type  = ft245r; 
  
#		= 0;  # TXD [ 1  PIN FT232RL ]
#		= 1;  # RXD [ 5  PIN FT232RL ]
#		= 2;  # RTS [ 3  PIN FT232RL ]
  gates  	= 3;  # CTS [ 11 PIN FT232RL ]
  mosi		= 4;  # DTR [ 2  PIN FT232RL ] 
  sck   	= 5;  # DSR [ 9  PIN FT232RL ]
  miso  	= 6;  # DCD [ 10 PIN FT232RL ]
  reset	 	= 7;  # RI  [ 6  PIN FT232RL ]
;

Волшебная строчка "gates = 3; # CTS [ 11 PIN FT232RL ]" сработает только с пропатченым avrdude. Она и определяет управление состоянием буфферной микросхемы, в данном случае через пин № 11 FT232, см. схему вверху.

Файлы, ссылки

В архиве прилагаю схему и ПП в Eagle CAD. Шейте на здоровье!
Файловый сервис доступен только полноправным членам сообщества и подписчикам.
Регистрация не открывает доступ автоматически! Пожалуйста, ознакомьтесь с условиями доступа.


ПП в Sprint Layout, подготовлена Юрой (Yura_Zayets_Vol)
Файловый сервис доступен только полноправным членам сообщества и подписчикам.
Регистрация не открывает доступ автоматически! Пожалуйста, ознакомьтесь с условиями доступа.


Модифицированный avrdude + все либы и конфиги для него + avrdude-gui (графическая оболочка). Архив из статьи от DI HALT.
Файловый сервис доступен только полноправным членам сообщества и подписчикам.
Регистрация не открывает доступ автоматически! Пожалуйста, ознакомьтесь с условиями доступа.


Статья от DI HALT — Скоростной AVR USB программатор на FT232RL без вспомогательного контроллера

Спасибо за внимание!

Об авторе

Андрей (error)
Острава, Чехия
1981 г.р.

После окончания школы поступил в Винницкий технический колледж (радиоприборостроение), затем в Винницкий нац. техн. университет (радиотехника и телекоммуникации).

7,5 лет проработал в Укртелекоме на радиорелейной станции, дошёл до её руководителя.

В начале 2007 г. переехал в Чехию. Тут полгода проработал в одной организации звукооператором, потом полгода в немецкой фирме Befra Elektronic в отделе ремонта и испытании всякой электронной дребедени.

Два с половиной года проработал техруководителем в Асусе в отделе ремонтов сет-топ-боксов, спутниковых ресиверов и ПиСи-компонентов.

С 2011 года работаю в Континентале разработчиком автоэлектроники.

Женат. Имею дочь и сына. Хотелось бы не останавливаться на достигнутом.

Верю в Бога. Хожу с семьёй в Церковь.
 

Понравилось? Палец вверх!

  • всего лайков: 13

Категория: Микроконтроллеры

Поделись с друзьями!


Связанные материалы:


Windows 10 и программаторы на базе AVR910 Prottos

Я он-лайн геймер, поэтому недавно пришлось на моём компьютере обновить ОС с MS...

Сделай сам программатор PIC-микроконтроллеров PICkit-2 clone

Как я уже упомянул в предыдущей статье «Сделай сам универсальный блок управления...

Программатор JTAGICE 3. Что внутри?

Совершенно случайно попался мне в руки программатор JTAGICE3, который был выпущен компанией...

Разработка встроенных систем с помощью микроконтроллеров PIС. Уилмсхерст Т.

Разработка встроенных систем с помощью микроконтроллеров PIС. Уилмсхерст Т. Год издания: 2008...

Сельская dance-машина из металлолома. LM1036 + TDA7293 в корпусе от ПК

Привет всем. Немного о себе. Любителем назваться не могу, а не назваться не прилично. Скорее всего,...

Грызем микроконтроллеры. Урок заключительный. Прошивка.

Ну вот, писать программы для микроконтроллеров мы научились. Работоспособность прошивки тоже...

Программатор AVR-910-slim для контроллеров ATMEL + Code Vision

Прочитав на Датагоре статью Гунтиса о программаторе AVR 910, задумал сделать ещё меньше размер и...

Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL, Евстифеев А.В.

Издательство: Додэка XXI [М.], 560 стр. 2005 г. Книга посвящена вопросам практического применения...

Программатор для ATMEL AVR-910 по USB

Представлю Вам мой вариант печатной платы для сборки такого программатора. Детали, кроме самого...

В. Трамперт. Измерение, управление и регулирование с помощью AVR микроконтроллеров.

Книга описывает особенности применения AVR-микроконтроллеров в технике измерения, управления и...

Применение микроконтроллеров AVR. Схемы, алгоритмы, программы

Какой микроконтроллер выбрать? Где найти его описание? Где взять программу, обеспечивающую...

Программирование микроконтроллеров ATmega

Хеллоу ВСЕМ!!! Итак, как я и обещал, расскажу как залить программу в МК. Для этого нам понадобится...
<
  • Гражданин
14 октября 2011 13:30

Вадим / vadeg

  • Регистрация: 14.01.2012
  • Публикаций: 0
  • Комментариев: 28
 
  • 0
Классная цацка получилась! Давно на нее облизываюсь, но останавливает изготовление платы в домашних условиях под SSOP. А так из доступных программаторов этот, имхо - самый стабильный и предсказуемый. Пробовал я USB ASP, AVR910 - все они через раз работают, особенно плохо с ноутбуками. Потому что софтовое USB. Правда в Win7 все равно с ними было проще, чем с "пятью проводками".
Радует, что в исполнении программатора FTDI не нужен внешний еепром и кварц.
И еще, раз работает через "дудку", наверняка и линуксоиды могут его юзать.

<
  • Кандидат
14 октября 2011 19:46

Михаил / Dust112

  • Регистрация: 22.05.2011
  • Публикаций: 1
  • Комментариев: 14
 
  • +1
А я такой сделал, аналог MMusb232RL.

<
  • Гражданин
16 октября 2011 03:20

Алексей / alex

  • Регистрация: 8.01.2012
  • Публикаций: 4
  • Комментариев: 58
 
  • 0
А где проводок, который восстанавливает ушатанный фьюзами МК? Обычно нечайно частоту не ту ставят и всё, МК можно выкинуть. Так вот этот проводок и восстанавливает.

А так супер! Особенно изготовление платы. По-началу думал ЛУТом сделана, удивился.
Оказалось, индустрия работала. smile

<
  • Гражданин
16 октября 2011 20:39

Андрей / error

  • Регистрация: 4.01.2009
  • Публикаций: 2
  • Комментариев: 28
 
  • 0
vadeg, Вы совершенно правы - под Линуксом "дудка" тоже работает.

Что же касается изготовления платы - ЛУТом такую приготовить тоже можно, я делал. Эту отдавал на производство "за компанию" с другом, чтоб заполнить пустое пространство на большой плате. Как вариант, видел в продаже "переходники" SOIC->DIP, с их помощью можно изготовить на макетке.

alex, читать нужно статью внимательно! pardon
"При неправильной установке фьюзов контроллеру может понадобиться внешний генератор тактовой частоты. Её нам поможет получить всё та же FT232, этот сигнал выведен на джампер JP1 = Clock."

В более сложных ситуациях проц выкидывать не надо - если есть доступ к параллельному программатору, его можно "воскресить".

<
  • Гражданин
20 января 2012 18:25

Андрей / End_reW

  • Регистрация: 16.02.2009
  • Публикаций: 0
  • Комментариев: 9
 
  • 0
Очень жаль что в статье не описано как сконфигурировать программу. Собрал сей программатор, а как заставить его работать не могу разобраться.

<
  • Создатель
20 января 2012 22:32

Игорь / Datagor

  • Регистрация: 25.02.2011
  • Публикаций: 261
  • Комментариев: 1516
 
  • 0
Цитата: End_reW
как сконфигурировать программу

О какой программе речь?

<
  • Гражданин
21 января 2012 02:07

Андрей / End_reW

  • Регистрация: 16.02.2009
  • Публикаций: 0
  • Комментариев: 9
 
  • +1
"Для программирования осваиваю консольную утилиту avrdude, для которой, впрочем, в сети можно найти GUI на свой вкус."

"Микросхема используется в режиме битбанга, т.е. программно мы произвольно управляем состоянием её выходов, а это значит, что нам без разницы какой вывод будет сигналом MISO или MOSI; это же касается остальных выводов. Иными словами, мы можем совершенно произвольно завести выводы микросхемы на ISP-коннектор, а потом сконфигурировать всё программно."

Надо (я так понимаю) дать понять программе какой вывод микросхемы за что отвечает. Где и как это делается пока не ясно?

Обнаружилась ошибка в статье:
"При неправильной установке фьюзов контроллеру может понадобиться внешний генератор тактовой частоты. Её нам поможет получить всё та же FT232, этот сигнал выведен на джампер JP2. Ну и раз UART-интерфейс на микросхеме присутствует принципиально, выведем и его на JP1." -правильно: JP1-Clock, JP2-UART!(как в схеме)

Дак вот об этом тактовом сигнале. Чтобы его получить на этом выводе, микросхему надо настроить. Делается это утилитой FT PROG от производителя.

Пока разбираюсь....

<
  • Гражданин
23 марта 2012 18:55

Юра / Yura_Zayets_Vol

  • Регистрация: 17.05.2009
  • Публикаций: 0
  • Комментариев: 12
 
  • +1
Всем привет... Я сделал в SL 5.0 куда залить?

<
  • Создатель
3 апреля 2012 20:18

Игорь / Datagor

  • Регистрация: 25.02.2011
  • Публикаций: 261
  • Комментариев: 1516
 
  • 0
Юра, спасибо!
ПП в статью добавил.

<
  • Гражданин
3 мая 2015 19:48

Михаил / mick63

  • Регистрация: 23.02.2010
  • Публикаций: 0
  • Комментариев: 6
 
  • 0
Собрал. RX/TX работают, а програмить не хочет. Что в дудке надо изменить, конкретно для этого варианта?

<
  • Создатель
8 мая 2015 10:33

Игорь / Datagor

  • Регистрация: 25.02.2011
  • Публикаций: 261
  • Комментариев: 1516
 
  • +1
Михаил / mick63, првиет!
Я дополнил раздел "Файлы, ссылки", должно помочь.

<
  • Создатель
31 марта 2016 22:18

Игорь / Datagor

  • Регистрация: 25.02.2011
  • Публикаций: 261
  • Комментариев: 1516
 
  • 0
Цитата: End_reW
-правильно: JP1-Clock, JP2-UART!(как в схеме)

Спасибо за внимательность, опечатку поправили. handshake

<
  • Гражданин
8 апреля 2016 03:02

Андрей / error

  • Регистрация: 4.01.2009
  • Публикаций: 2
  • Комментариев: 28
 
  • +1
Михаил,
Я пользовался дудкой через SinaProg - это ГУЙ для дудки. Скачайте её (я пользовался версией 1.4.5.10). Прежде всего надо её сконфигурировать, чтоь дудка не только "увидела" Ваш программатор, а и знала, какой вывод микрушки отвечает за какой сигнал.
В файл avrdude.conf добавляем блок:

programmer
id = "usbbit";
desc = "USBBit";
type = ft245r;

# = 0; # TXD [ 1 PIN FT232RL ]
# = 1; # RXD [ 5 PIN FT232RL ]
# = 2; # RTS [ 3 PIN FT232RL ]
gates = 3; # CTS [ 11 PIN FT232RL ]
mosi = 4; # DTR [ 2 PIN FT232RL ]
sck = 5; # DSR [ 9 PIN FT232RL ]
miso = 6; # DCD [ 10 PIN FT232RL ]
reset = 7; # RI [ 6 PIN FT232RL ]
;

где:
• id — это как мы будем звать наш программатор в командной строке avrdude.
• desc — описание что за программатор
• type — дает понять, что мы используем либу для FT245R (впервые было сделано на этой микрухе)
• miso, sck, mosi, reset — что какой ноге соответствует

Затем открываем файл Programmer.txt и видим там список известных дудке программаторов. Можно его дополнить, вписав наш USBBit, а можно стереть всё в баню, чтоб глаза не мозолило и оставить только USBBit.

Затем удаляем содержимое (или добавляем к имеющемося) файла Port.txt и вписываем туда две строчки, для сопоставления порта нашей ФТДИ:

USBBit.
[USB ft0]

И наконец в файл speed.txt вписываем поддерживаемые скорости:

1200 x -B 1200
2400 x -B 2400
4800 x -B 4800
9600 x -B 9600
14400 x -B 14400
19200 x -B 19200
38400 x -B 38400
57600 x -B 57600
115200 x -B 115200
230400 x -B 230400
460800 x -B 460800
921600 x -B 921600
3000000 x -B 3000000

Всё.

Игорь, для простоты я б выложил свой комплект дудки+синапрог, как бы это организовать? Куда посылать файл?

<
  • Создатель
8 апреля 2016 11:29

Игорь / Datagor

  • Регистрация: 25.02.2011
  • Публикаций: 261
  • Комментариев: 1516
 
  • +1
Андрей, можно положить на любой фалообменник или в облако и дать ссылку здесь. Я потом перенесу в статью.

Пока я ждал ответов от Андрея (дооолго wink), уже сам запилил такой прорграмматор и начал с ним разбираться. Вся фишка этой версии не раскрыта в этой статье и отсутствует полностью в упомянутой статье Дихалта.
Фишка в том, что специально пропатченная AVERDUDE (вовсе не каждая Дудка понимает "gates" в конфиге) позволяет программно управлять FT232R для переключения Z-состояния гейтов 74НС244.
Поэтому никакие внешние триггеры с кнопочками НЕ нужны и в этой схеме их нет.
Не нужен и генератор на рассыпухе, т.к. чудесная FT232R сама умеет отдавать например 6 Мгц, что и можно использовать для "спасительных" целей (это я уже отметил в статье и вашем комменте выше).

Хорошо бы нашелся программист, который из сорсов соберет и пропатчит свежую версию Дудки 6.х - пока есть только 5-я.

<
  • Гражданин
14 мая 2016 04:24

Андрей / error

  • Регистрация: 4.01.2009
  • Публикаций: 2
  • Комментариев: 28
 
  • +1
С очередной задержкой послал Игорю свою сборку, попрошу прикрепить к статье.

Насчёт буфера 74НС244. Оба варианта (и с ним и без него) требуют специятельно пропатченных Дудок, поэтому вариант с буфером я выбрал во-первых исходя из того, что это было уже готовое решение, а во-вторых (что я и упомянул с статье), чтоб хоть как-то охранить FT232. 74НС244 таки рубь/ведро стОят.

Да, для получения 6МГц на джампере скачайте утилитку "FT Prog" и пройдя по дереву "Device Xxxxx"->"FT EEPROM"->"Hardware Specific"->"IO Controls"->"C4", установите для пина СBUS4 значение "CLK6". Всё, теперь при наличии питания микруха всегда будет на джампер генерить 6МГц TTL-уровня.

<
  • Создатель
14 мая 2016 16:03

Игорь / Datagor

  • Регистрация: 25.02.2011
  • Публикаций: 261
  • Комментариев: 1516
 
  • 0
Статью дополнил, сборку Sinaprog загрузил.
Андрею - мерсю! handshake

Информация
Вы не можете участвовать в комментировании. Вероятные причины:
— Администратор остановил комментирование этой статьи.
— Вы не авторизовались на сайте. Войдите с паролем.
— Вы не зарегистрированы у нас. Зарегистрируйтесь.
— Вы зарегистрированы, но имеете низкий уровень доступа. Получите полный доступ.