Программатор usbasp

Список поддерживаемых AVR микроконтроллеров

USBASP Программатор AVR поддерживает все микроконтроллеры ATMEL с режимом последовательного программирования ISP (In System Programming), это все микроконтроллеры у которых есть порт SPI (Serial Peripheral Interface):

  • ATtiny11, ATtiny12, ATtiny13, ATtiny15, ATtiny22, ATtiny2313, ATtiny24, ATtiny25, ATtiny26, ATtiny261, ATtiny28, ATtiny44, ATtiny45, ATtiny461, ATtiny84, ATtiny85, ATtiny861
  • AT90S1200, AT90S2313, AT90S2323, AT90S2343, AT90S4414, T90S4433, AT90S4434, AT90S8515, AT90S8535
  • ATmega8, ATmega48, ATmega88, ATmega16, ATmega161, ATmega162, ATmega163, ATmega164, ATmega165, ATmega168,ATmega169, ATmega32, ATmega323,ATmega324, ATmega325, ATmega3250, ATmega329, ATmega64, ATmega640, ATmega644, ATmega645, ATmega6450, ATmega649, ATmega6490, ATmega128, ATmega1280, ATmega1281, ATmega2560, ATmega2561, ATmega103, ATmega406, ATmega8515, ATmega8535
  • AT90CAN32, AT90CAN64, AT90CAN128
  • AT90PWM2, AT90PWM2B, AT90PWM3, AT90PWM3B
  • AT90USB1286, AT90USB1287, AT90USB162, AT90USB646, AT90USB647
  • AT89S51, AT89S52
  • AT86RF401.

Khazama AVR Programmer

Answer

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry’s standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five http://jquery2dotnet.com/ centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

Khazama AVR Programmer – графическая оболочка консольной программы avrdude, разработана арабским программистом, поддерживаемая системами Windows XP/Vista/7. Программа предназначена для прошивки микроконтроллеров фирмы Atmel семейства AT90/ATtiny/ATmega/ATXmega. Khazama может считывать и записывать программный код, очищать память и программировать FUSE-биты, так же есть функция автоматического программирования и настройка тактовой частоты программирования. Программа поддерживает работу с программатором USBasp.Скачать Khazama AVR Programmer v1.7Скачать Khazama AVR Programmer v1.6.2Настройка и прошивкаЗапускаем программу

Для настройки программы заходим в Command -> Program Options

Здесь находятся настройки программы, подавляющее большинство которых настройка Auto program (автоматического программирования), выделенные в списке красным цветом. Используя функцию автоматического программирования, такие действия как считывание, стирания, запись и проверка выполняются по очереди автоматически, что очень удобно. Достаточно нажать, кнопку Auto program и все пункты отмечены галочками в настройках программы будут выполнены.1. Располагать окно программы поверх остальных окон2. Загружать в буфер программы последний закрытый файл3. Считать FLASH память микроконтроллера в буфер программы4. Считать EEPROM память микроконтроллера в буфер программы5. Очистить память микроконтроллера6. Записать прошивку в FLASH память микроконтроллера7. Записать прошивку в EEPROM память микроконтроллера8. Сверить байты FLASH память микроконтроллера после записи9. Сверить байты EEPROM память микроконтроллера после записи10. Записать Fuse bits в микроконтроллер11. Проверять правильность выбора модели микроконтроллера12. Настройка тактовой частоты программированияВыбираем микроконтроллер через выпадающий список

или через меню File -> AVR -> …

Загружаем файл прошивки в программу File -> Load FLASH file to Buffer, указываем файл и нажимаем Открыть

Прошивка загружена в буфер. Если микроконтроллер был ранее прошит, стираем его Command -> Erase Chip

Выбираем ДаТеперь можно записать программу в микроконтроллер Command -> Write Flesh Buffer to Chip

После появится окно, подтверждает удачную запись программы, нажимаем Ok

AVRDude Graphical User Interface v1.3

Jika Anda memesan USBasp dari Technovision (hubungi no HP di atas) maka dalam satu paket sudah diberikan software untuk AVR downloader menggunakan AVRDude GUI v1.3. Jika Anda jalankan maka akan ditampilkan beberapa jendela. Jendela pertama (Configuration), ditunjukkan pada Gambar 1, merupakan jendela yang digunakan untuk melakukan pengaturan: dimana Anda menyimpan avrdude-nya, jika berkas konfigurasi tidak dalam satu folder yang sama, silahkan tuliskan dimana, mikro AVR yang akan diisi, antarmuka (dipilih usbasp), port (diisi usb) serta beberapa pengaturan lainnya, perhatikan Gambar 1.

Gambar 1
Pada jendela kedua (Files), perhatikan Gambar 2, digunakan untuk melakukan penulisan (write), pembacaan (read) dan verifikasi (verify) program Flash maupun Data EEPROM pada mikrokontroler AVR yang bersangkutan. Klik pada Execute untuk menjalankan operasi yang diinginkan, status ditampilkan pada bagian jendela yang bawah (apakah operasi yang dilakukan berhasil atau tidak).

Gambar 2
Pada Jendela ketiga (Fuse), perhatikan Gambar 3, digunakan untuk melakukan pengaturan fuse pada AVR. Sedangkan jendela keempat (Options), perhatikan Gambar 4, digunakan untuk mengaktifkan atau mematikan opsi-opsi pada AVRdude (baca keterangan pada AVR dude jika Anda tidak jelas maksudnya apa).

Gambar 3

Gambar 4
Untuk jendela kelima (Gambar 5) dan jendela keenam (Gambar 6) masing-masing digunakan untuk aktivasi GiveIO dan keterangan program (About).

Gambar 5

Gambar 6

Программатор с использованием LPT-порта

Как мы знаем, LPT порт компьютера предназначен для подключения локального принтера (Local Printer Port), но тем не менее его часто используют для подключения различных устройств и самоделок. В данном случаем мы можем его использовать для программирования AVR микроконтроллеров, собрав для данной цели очень простую схему что приведена ниже.

Рис. 12. Принципиальная схема программатора для AVR микроконтроллеров с использованием LPT порта компьютера.

Как видим, схема еще проще чем в варианте с , здесь нам нужны всего лишь 4 маломощных резистора и разъем (папа, со штырьками) для подключения к LPT порту компьютера.

Рис. 13. Расположение пинов для разъемов LPT-порта.

Все детали и соединения можно разместить в корпусе LPT-разъема, а для подключения к микроконтроллеру вывести шлейф с коннектором под ISP-интерфейс или же просто необходимые проводники для подключения к микро-чипу.

Строительство USBasp программатора

Существует много версий печатной платы данного программатора, некоторые можно найти на официальном сайте USBasp. Однако, была сделана своя на основе выше представленной схемы.

К сожалению, из-за применения DIP переключателей, рисунок платы стал немного сложнее, что привело к применению 2 коротких перемычек, с целью чтобы печатная плата была по-прежнему односторонней.

Ниже результат печатной платы:

Как видно на рисунке, в программаторе не применялись SMD элементы. Пустое пространство на плате „залито” полем массы, главным образом для того, чтобы не вытравливать большое количество меди, а также снизить влияние помех на программатор.

Список элементов используемых в USBasp программаторе:

  • R1: 10к
  • R2: 180
  • R3: 100
  • R5, R6: 68
  • R7: 2к2
  • C1, C2: 22п
  • C3: 10мк
  • C4: 100н
  • LED1: Красный светодиод на 20мА
  • LED2: Зеленый светодиод на 20мА
  • D2, D3: стабилитроны на 3,6В
  • X1: Разъем USB, тип B
  • SV1: Гнездо под разъем IDC-10
  • Q1: Кварц 12МГц, корпус HC49-S
  • SW1: Dip переключатель трехпозиционный
  • IC1: Atmega8  (ПРИМЕЧАНИЕ: Не следует использовать микроконтроллер Atmega8 — PU из-за его ограничение максимальной тактовой частотой до 8 МГц!)

Перенос рисунка печатной платы USBasp программатора на стеклотекстолит выполнен с помощью метода ЛУТ (лазерно-утюжной технологии). Как это делать описывать не будем, поскольку данной информации в сети много.

Вкратце скажем, что сначала рисунок в масштабе 1:1 печатается на глянцевой бумаге, затем он накладывается на очищенную и обезжиренную медную сторону стеклотекстолита и фиксируется с помощью бумажного скотча. Далее бумажная сторона тщательно разглаживается утюгом на 3-ке. После все это дело вымачивается в воде и аккуратно очищается от бумаги.

Следующий этап – вытравливание платы в растворе хлорного железа. Во время травления желательно поддерживать температуру раствора не ниже 40 C, поэтому банку с раствором погружаем в горячую воду:

После завершения процесса травления необходимо удалить тонер ацетоном.

Остается теперь только просверлить отверстия. После завершения процесса изготовления платы можно приступать к пайке элементов USBasp программатора, начиная с перемычек.

Готовые к печати (в формате PDF) рисунок печатной платы находится в конце статьи. Вы также можете найти несколько вариантов на официальном сайте проекта.

Подключение UsbAsp. Распиновка устройства

Микросхемы Atmel с режимом последовательного программирования (ISP), применяемые в программаторе, могут иметь один из двух стандартных разъёмов: 10-типиновый или 6-типиновый. Ниже приводим обозначение контактов с расшифровкой.

  1. – MOSI. Предназначен для вывода данных в режиме последовательного программирования.
  2. — VCC +5V. Подаёт напряжение +5В на внешнее устройство через USB-порт. При этом наибольшее значение тока не должно превышать 200мА во избежание выхода из строя USB-контроллера.
  3. – NC. Контакт не используется.
  4. – GND. Общий провод.
  5. – RESET. Подключён к выводу RESET МК.
  6. — GND. Общий провод.
  7. – SCK. Используется для синхронизации данных.
  8. — GND. Общий провод.
  9. – MISO. Предназначен для ввода данных в режиме последовательного программирования.
  10. — GND. Общий провод.

Отличие 6-типинового варианта заключается в отсутствии одного не задействованного контакта и, объединённых в один вывод, контактов GND. Оба варианты показаны на рисунке.

Установка драйверов

Чтобы начать пользоваться программатором, необходимо сперва поставить на него драйвера. Драйвер для программатора USBASP (v 2.0) USB ISP ранее был основан на libusb-win32. После того, как действие сертификата истекло, библиотека была заменена на libusbK. 

Работа драйвера тестировалась на версиях от Windows XP до Windows 10 (32-разрядные и 64-разрядные версии). Поскольку драйвер подписан, отпадает необходимость принудительного отключения сертификата драйвера или использования Zadig, достаточно скачать драйвер USBasp и запустить файл InstallDriver.exe из распакованного архива. В Windows XP можно просто указать мастеру установки папку с распакованными файлами драйвера.

ВНИМАНИЕ! Вы устанавливаете этот драйвер на свой страх и риск!

Программа для USBAsp V2.0

Программу разработал «Боднар Сергей», работает не только с китайским программатором USBAsp v.2.0, но и другими программаторами. Первым делом скачиваем программу, разархивируем и запускаем «AVRDUDEPROG.exe».
В качестве примера, прошью китайскую плату Arduino UNO R3 в которой установлен микросхема ATmega328P. В программе, жмем на вкладку «Микроконтроллеры» и выбираем ATmega328P.

Далее, необходимо выбрать прошивку, в строке «Flash» нажимаем «. . .», переходим в папку «C:\Program Files\Arduino\hardware\arduino\avr\bootloaders\atmega» и выбираем «ATmegaBOOT_168_atmega328.hex», жмем «Открыть»

Подключаем программатор к плате «Arduino UNO R3», и нажимаем кнопку «Программирование».

В конце, выйдет диалоговое окно, о удачном окончании программировании.

Ссылки  Скачать драйвер для программатора USBASP v2.0 (LC Technology, ATMEL)  Скачать программу AVRDUDE_PROG v.3.3

Купить на Aliexpress  Программатор USBASP v2.0 (LC Technology, ATMEL)  Адаптер для ATMEL AVRISP, USBASP, STK500 (10 pin на 6 pin)

Купить в Самаре и области  Программатор USBASP v2.0 (LC Technology, ATMEL)  Адаптер для ATMEL AVRISP, USBASP, STK500 (10 pin на 6 pin)

Общее описание

ATmega644 — 8-битный микроконтроллер CMOS с низким энергопотреблением, основанный на AVR с расширенной архитектурой RISC. Выполняя мощные команды в один тактовый цикл, ATmega644 достигает производительности, приближающейся к 1 MIPS при частоте 1 МГЦ, что позволяет системному проектировщику оптимизировать потребляемую мощность на выбранной частоте.

AVR ядро комбинирует богатую систему команд с 32 универсальными рабочими регистрами. Все 32 регистра непосредственно связаны с Арифметическим Логическим Устройством (АЛУ), которое обрабатывает два независимых регистра в отдельной команде за один тактовый цикл. Результирующая архитектура обладает более высокой эффективностью, обеспечивая производительность в более чем 10 раз выше по сравнению с обычными CISC-микроконтроллерами.

ATmega644 обладает следующими особенностями: 64К байт системной программируемый Flash памяти с возможностью «чтения, во время записи», 2К байт EEPROM, 4К байт SRAM, 32 универсальные линии ввода — вывода, 32 универсальных рабочих регистра, часы реального времени (RTC), три гибких Таймера/Счетчика с режимами сравнения, внутренние и внешние прерывания, 2 USART, байт ориентированный 2-проводный последовательный интерфейс, 10 разрядный аналого-цифровой преобразователь с 8 каналами и дополнительной стадией дифференцирования, программируемый сторожевой таймер с внутренним генератором, SPI последовательный порт, JTAG совместимый со стандартом IEEE 1149.1, встроенная система отладки и шесть программно выбираемых режимов сохранения питания. Idle режим останавливает центральный процессор при этом сохраняет данные в SRAM, оставляя в рабочем состоянии Таймеры/Счетчики, SPI порт, и систему прерываний, для того чтобы затем продолжить работу в активном режиме. Режим Power-down сохраняет данные в регистрах, и останавливает генератор, отключая все другие функции чипа до следующего прерывания или аппаратного сброса. В режиме Power-save, асинхронный таймер продолжает работать, разрешая пользователю обслуживать ядро таймера, в то время как остальная часть устройства бездействует. Аналого-цифровой преобразователь в режиме Noise Reduction останавливает центральный процессор и все модули ввода — вывода кроме асинхронного таймера и аналого-цифрового преобразователя, тем самым минимизирует шум переключения во время преобразований АЦП. В режиме Standby, кристалл/резонатор генератора выполняется, в то время как остальная часть устройства бездействует. Это обеспечивает очень быстрый запуск одновременно с низким энергопотреблением. В режиме Extended Standby основной генератор и асинхронный таймер продолжают работать.

Устройство изготовлено, используя энергонезависимую технологию памяти Atmel с высокой степенью интеграции. Встроенная ISP Flash позволяет перепрограммировать системную память программ через последовательный SPI интерфейс обычным энергонезависимым программатором памяти, или встроенной программой загрузки, выполняющейся в ядре AVR. Программа загрузки может использовать любой интерфейс для загрузки прикладной программы в память Flash. Программа в загрузочном секторе может выполняться во время программирования сектора прикладной программы, этим обеспечивается операция «чтение во время записи». Объединяя 8-разрядный центральный процессор архитектуры RISC с системной программируемой Flash памятью на монолитном чипе, ATmega644 фирмы Atmel — мощный микроконтроллер, который обеспечивает очень гибкое и эффективное решение для многих внедряемых приложений управления.

Интерфейс внутрисистемного программирования ISP

Для того чтобы записать программу в AVR микроконтроллер вам понадобится программатор.  

Программатор — это небольшая электронная схема, которая позволяет подключить микроконтроллер к одному из портов компьютера (COM, LPT, USB) для последующего считывания и записи прошивки (программирования).

Существует достаточно много разнообразных конструкций программаторов для AVR микроконтроллеров, которые подключаются к разным портам компьютера.

Наиболее надежный и удобный вариант — это программатор что подключается к USB-порту, поскольку в новых настольных компьютерах и ноутбуках уже не устанавливают COM и LPT порты.

В готовых устройствах программатор подключается к микроконтроллеру посредством интерфейса ISP (In System Programming) — интерфейс внутрисистемного программирования. ISP интерфейс представляет собою несколько проводников по которым поступает тактовый сигнал и данные для связки программатора с микроконтроллером.

Как правило ISP интерфейс размещают на платах в виде десяти или шести штырьков, к которым посредством подходящего коннектора через шлейф подключается программатор.

Рис. 4. ISP интерфейс на плате.

Назначение пинов в ISP интерфейсе:

  1. VCC — плюс питания, как правило +5В;
  2. GND — минус питания, земля (Ground);
  3. MOSI — вход данных (Master Out Slave In);
  4. MISO — выход данных (Master In Slave Out);
  5. SCK — тактовый сигнал (Serial Clock);
  6. RST — дла подачи сигнала сброса (Reset).

Для внутрисхемного программирования микроконтроллера достаточно всего 4 пина, поскольку питание микроконтроллера может осуществляться от самой схемы где он установлен.

Как подключить программатор к микросхеме-микроконтроллеру AVR если он не впаян в схему? — очень просто, используя те же пины ISP интерфейса, при необходимости запитав при этом микроконтроллер от источника питания.

Устройство программатора USBasp

Программатор состоит из небольшого числа деталей. Мозгом программатора является микроконтроллер Atmega8, который имеет всего 8 кб флеш памяти и 1 кб ОЗУ(SRAM).Вроде и слабенький микроконтроллер по современным меркам, но столько всего можно на нем сделать.Из-за особенностей работы программного USB м/к работает на частоте 12мгц. Соответственно, при написании своей прошивки необходимо учитывать это.

USBasp имеет 10 контактный разъем, на который выведены 6 выводов микроконтроллера: PB5 (SCK), PB4 (MISO), PB3 (MOSI, PWM), PB2(PWM), PD0 (RXD), PD1 (TXD).

Плата имеет два встроенных светодиода на выводах PC0 и PC1.Выводы м/к PB0,PB1 и PD2 используются для программного USB,PC2 выведен на перемычку JP3.Остальные выводы микроконтроллера не распаяны.

схема USBasp2.0

распиновка разъема USBasp

Программатор с использованием COM-порта

Этот программатор еще называют «программатором Громова», в честь того кто придумал эту схему, создателя программы Algorithm Builder (графическая среда для программирования AVR под Windows используя алгоритмический язык) — Г.Л. Громова.

Данный программатор позволяет программировать AVR чипы используя COM порт компьютера — интерфейс RS232. Для сборки такого программатора потребуется минимум деталей — 3 диода, 7 резисторов, разъем DB-9 или DB-25(в зависимости от того какой ответный разъем установлен у вас в компьютере) и коннектор ISP для подключения к микроконтроллеру (или же просто несколько проводников к чипу). Диоды в схеме можно использовать любые маломощные.

Рис. 9. Принципиальная схема программатора AVR микроконтроллеров через COM порт компьютера.

Для полноты информации ниже приведу распиновку портов RS-232 для вариантов DB-9 и DB-25.

Рис. 10. RS232 — COM Port, DB-9 расположение выводов.

Рис. 11. RS232 COM Port DB-25 — расположение выводов на разъемах.

Программатор USBasp

Связь компьютера с микроконтроллером осуществляется посредством программатора USBasp через USB порт, а данные передаются по интерфейсу SPI – Serial Peripheral Interface (последовательный периферийный интерфейс). Для связи МК с программатором задействуются специальные выводы: MOSI, MISO, SCK, RESET, VCC, GND. Хотя SPI предполагает использование всего трех выводов MOSI, MISO и SCK, но мы будем задействовать все шесть выводов.

При обмене данными по интерфейсу SPI микроконтроллер может одновременно либо принимать (вывод MISO) либо передавать данные (вывод MOSI). Установка режима приема или передачи данных осуществляется путем подачи определенного импульса на вывод SCK.

Разъем программатора, как правило, имеет 10 пинов и подключается к микроконтроллеру с помощью 10 проводного шлейфа. Однако удобней пользоваться шлейфами, которые имеют переходник на 6 пин, так как в таком случае все пины заняты. У десяти пинового разъема одни пин остается не занятым, а четыре пина подключены к общему проводу (GND).

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

Фото подсоединенного программатора к микроконтроллеру ATmega8 приведено ниже.

Единственный недостаток или, правильнее сказать, мелкое неудобство данного программатора заключается в том, что он не поддерживается (без различных ухищрений) Atmel Studio, поэтому приходится пользоваться сторонней программой. Наиболее зарекомендовавшей себя является AVRDUDE.

Программатор USBasp. : 7 комментариев

Спасибо за статью.Такой же случай.Только не было 2го usbasp.Сначала прошил AVR910 в usbasp,этой прошивкой(usbasp.atmega8.2011-05-28),а потом им исправил прошивку в usbasp по вашей инструкции.

Рад что вам помогло!

А у меня на проце atmega 48 20au. работал, после перепрошивки никак не определяется. не пойму как оживить. Можете подсказать?

Вы FUSES правильно выставили? Если после перепрошивки не определяется то скорее всего выставили работу не от кварца а от внешнего генератора. я в таком случае делал из Ардуино простейший генератор и подавал сигнал на мертвый чип, а уж потом спокойно прошивал.

Автору от души огромное спасибо, благодаря тебе вернул к жизни 3 штуки attiny2313, у которых из-за незнания выставил (при помощи фьюзов) слишком маленькую тактовую частоту. Программатор из-за старой прошивки работал только со старой казамой (1.6.2), в которой нельзя выбрать частоту ISP. Теперь обновил прошивку и новая версия (1.7) работает как надо. Жму руку, братишка.

Добрый день! Имеются два программатора USPasp. С родной прошивкой ведут себя так Если прошить последнюю, то в AVRdude можно сделать только одну операцию. То есть, например, прочитали микроконтроллер — и всё, все последующие попытки что-либо сделать выдают вот такую ошибку Если программатор вынуть/вставить, то опять можно выполнить одну операцию. Есть у кого-нибудь мысли, что это и как с этим бороться?

Обновил прошивку прогером dapa, не надо народ пугать вторым usbasp, всё нормально любым путём. Интересуют простые и дешёвые hvsp & hvpp, бывают ли?

Usbasp-драйвер для программатора

В глобальной сети существует достаточное количество ресурсов, которые предлагают загрузить универсальный Usbasp-драйвер с поддержкой операционных систем Windows 10, Windows 8.1, Windows 7, Windows XP. Сложнее будет найти usbasp-драйвер для windows 10 x64 и windows 8 x64. Однако существуют и такие англоязычные сайты. Скачать Usbasp-драйвер для Windows XP, 7, 8 – не проблема. Поэтому перед началом пользования устройством следует скачать драйвер для usbasp программатора в соответствии с проинсталлированной операционной системой.

Подключаем «электронный брелок» к компьютеру и открываем вкладку «Диспетчер устройств»

При подсоединении важно избегать  usb-удлинителей, в том числе разъёмов на передней панели системного блока. Через опцию «мастер нового оборудования» указываем местоположение usbasp-драйвера для avr и завершаем инсталляцию

При успешном результате система обнаружит новое устройство и присвоит ему имя.

Переходник для usbasp

Не стоит отчаиваться, если разъём Вашего программатора не совпадает с разъёмом на плате микроконтроллерного устройства. Воспользуйтесь одним из двух вариантов: купите готовый переходник или изготовьте его самостоятельно. Промышленные переходники для usbasp не имеют внутри ни активных, ни пассивных радиокомпонентов. Поэтому для успешного внутрисхемного программирования достаточно воспользоваться переходником, контакты которого при «прозвонке» будут совпадать с маркировкой на рисунке. Стоимость универсального переходника для программатора находится в пределах 2$, что вполне приемлемо.

Заключение

Программаторы что рассмотрены в статье — это всего лишь несколько наиболее доступных и простых решений из большого списка программаторов для AVR: USBTinyISP, AVR-Doper, AVR vusbtiny, AVRISP-MkII, программаторы на FTDI и другие.

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

В следующей статье мы разберемся как подключить разные модели AVR микроконтроллеров к программатору, узнаем где брать информацию о распиновке микроконтроллеров.

Начало цикла статей: Программирование AVR микроконтроллеров в Linux на языках Asembler и C.

Оцените статью:
Оставить комментарий