Андрей Смирнов
Время чтения: ~17 мин.
Просмотров: 0

Pic-микроконтроллеры, где могут пригодиться радиолюбителю?

Введение

DHT11 – это датчик температуры и влажности воздух, который использует один провод для передачи 40 бит данных. Первые 16 бит – это целая и дробная части значения влажности, следующие 16 бит – целая и дробная части значения температуры, и последние 8 бит – это контрольная сумма.

Чтобы DHT11 и микроконтроллер начали общаться друг с другом, их необходимо засинхронизировать. Чтобы засинхронизировать их, микроконтроллер посылает сигнал старта, который представляет собой импульс длительностью 20 мкс на выводе данных. После импульса, микроконтроллер ждет получения данных. В программе мы должны изменить направление вывода данных. Вы можете прочитать подробности о DHT11 в техническом описании. У вас может быть датчик, как в 4-выводном, так и в 3-выводном корпусе; но мы используем 3-выводную версию. Между этими версиями нет никакой разницы, а дополнительный вывод ни к чему не подключен.

Датчик температуры и относительной влажности воздуха DHT11

Подробное описание

Производитель: Microchip

Описание: 8- бит микроконтроллеры (MCU) 3.5 Кб 224 RAM 16 I/O

Краткое содержание документа:PIC16F627A/628A/648A Data SheetFlash-Based, 8-Bit CMOS Microcontrollers with nanoWatt Technology 2009 Microchip Technology Inc.DS40044GNote the following details of the code protection feature on Microchip devices: · · · Microchip products meet the specification contained in their particular Microchip Data Sheet.

Microchip believes that its family of products is one of the most secure families of its kind on the market today, when used in the intended manner and under normal conditions. There are dishonest and possibly illegal methods used to breach the code protection feature. All of these methods, to our knowledge, require using the Microchip products in a manner outside the operating specifications contained in Microchip’s Data Sheets. Most likely, the person doing so is engaged in theft of intellectual property. Microchip is willing to work with the customer who is concerned about the integrity of their code. Neither Microchip nor any other semiconductor manufacturer can g

Спецификации:

  • Supply Voltage — Max: 5.5 В
  • Supply Voltage — Min: 3 В
  • Вид монтажа: Through Hole
  • Встроенный в чип АЦП: нет
  • Высота: 3.3 мм
  • Длина: 22.86 мм
  • Интерфейс: USART
  • Количество линий ввода/вывода: 16
  • Количество таймеров: 3
  • Рабочее напряжение питания: 3 В … 5.5 В
  • Рабочий диапазон температрур: — 40 C … + 85 C
  • Размер ОЗУ: 224 B
  • Размер ПЗУ данных: 128 B
  • Размер памяти программ: 3.5 Кб
  • Серия процессора: PIC16
  • Тактовая частота максимальная: 20 МГц
  • Тип корпуса: PDIP-18
  • Тип памяти программ: Flash
  • Упаковка: Tube
  • Шина данных: 8 бит
  • Ширина: 6.35 мм
  • Ядро: PIC16
  • RoHS: да

Низковольтное программирование LVP из PicKit2

Цель данной статьи – показать, как внутрисхемно прошивать микроконтроллер (далее МК) в режиме низковольтного программирования с использованием PicKit2. Показаны схемы включения и особенности работы в программе PICkit 2 Programmer v2.61 .

Традиционно для прошивания к микроконтроллеру подключают 5 линий:

Vpp – напряжения программирования (обычно на уровне +13 вольт);

Vdd – напряжение питания +5 вольт;

Vss – общая линия (минус питания);

PGD – «программинг дата» или данные;

PGC – » программинг клок» или тактирование.

Аналогичные линии наблюдаем и на микроконтроллере.

Всё бы хорошо, если бы в один прекрасный момент не потребовалась сделать устройство с микроконтроллером в корпусе SOIC(или вовсе по идеологии микроконтроллер припаян к плате в любом корпусе).

Первое, при разводке платы для любых случаев надо организовать работу вывода MCLR(мастер-клир или сброс). Это важный момент, т.к. именно на этой линии присутствует функция Vpp – т.е. подачи высокого напряжения, которое переводит МК в режим программирования (прошивания). Смотрим схемы:

Случай, когда организация MCLRне требуется. Банально отключается в битах конфигурации и линия вовсе может использоваться на вход. Строго говоря, MCLRвсё равно присутствует в неявном виде в МК. Присутствует в PIC16F627, PIC16F628, PIC16F627А, PIC16F628А, PIC16F648А. В данном случае всё просто, легко организовать высоковольтное программирование при условии, что по линии Vddсхема потребляет не больше, чем может дать программатор и USB. Либо Vdd отключаем от схемы в момент программирования.

Случай организации MCLRпутем объединения с плюсовой линией питания. И никак иначе. Для работы МК требуется сформировать высокий уровень после подачи питания. Для программирования однозначно требуется перемычка, чтобы Vppотключить от Vddна время высоковольтного программирования. Требования к питанию по Vdd как и предыдущем случае.

PIC16F77, PIC16F873, PIC16F874, PIC16F876, PIC16F877 (и они же с индексом А).

В данном случае Vppотделяем от Vddдиодом. Одновременно на MCLRв рабочем режиме обеспечивается потенциал высокого уровня. В отдельных случаях решение может быть оправданным. Лично мне не нравится распиновка для такого решения, где 1 вывод MCLRVpp, а 20 вывод Vdd(очень неудобно разводить в одном слое). Нам же документация навяливает еще более неудобное включение см. включение из документации к PicKit2.

И, наконец, случай, когда используется низковольтное LVPпрограммирование (линия Vppвовсе не нужна). Для режима LVPзадействуется вывод PGM (настраивается на выход и в режиме LVPне может использоваться как цифровая линия). Не будет секретом, что МК с завода выпускаются с включенным режимом LVP, который может быть переключен в HVPтолько при высоковольтном программировании (т.е. случайно это сделать не получится). Для перевода МК в режим программирования на PGMнужно установить высокий уровень (для рабочего режима и подтягиваем PGMк минусу). Далее рассмотрим подключение МК к PicKit2 и недокументированную греблю граблями.

Будем считать, что к этому моменту у вас сделаны следующие подключения микроконтроллера к PicKit2:

–общая линия Vss (до сих пор не знаю, нужно ли все Vss на МК к земле подключать или достаточно одну из Vss; кто может сослаться на официальный источник – дайте знать);

– линия PGC;

–линия PGD;

– линию PGMподключить к Auxiliary (как посоветовал Help-ReadMe).

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

Теперь рассмотрим работу в оболочке PICkit 2 Programmer v2.61 (из MPLABне получилось в режиме LVPсоединиться с МК).
К этому моменту устройство соединено 4мя проводами, питание на устройство подано, запускаем PICkit 2 Programmer v2.61.
И тишина – в автомате PICkit2 не видит МК; одно радует, что не ругается.

Ставимручнойвыбор – меню Programmer – Manual Device Select (ставимгалочку).

Для моего микроконтроллера (PIC16F876A) не лишним будет клацнуть DeviceFamily – Midrange – Standard.

В выпадающем списке выбираем наш МК

Выбрали. Так и хочется нажать кнопку Read и проверить жизнеспособность. Нажимаем.
Наблюдаем грустную надпись «No device detected».

И только после этого в меню Toolsстановится активным пункт UseLVPProgramEntry на которым мы ставим галочку. Ок. Поставили.

После этого в главном окне мы наблюдаем несколько бодрых сообщений.

Всё, теперь можно читать и шить, в том числе шить с защитой (CPCPD).

Полезные ссылки:Попробуй сделать печатную плату на кухнеУзнай как прошить микроконтроллер прошивкойНаучись программировать и делать прошивкиЗадай вопрос или найди ответ в форуме

Аппаратная часть

Первая умная вещь, которую стоит сделать при создании гаджета, это нарисовать его структурную схему. Это поможет вам увидеть, что вам необходимо, и как это реализовать. Ниже приведена структурная схема нашего термометра.

Структурная схема термометра на PIC16F628, DHT11 и LCD
(может показаться избыточным, составлять структурную схему для каждой мелочи, но это может быть полезно)

Мы хотим, чтобы DHT11 передавал данные микроконтроллеру.

Мы хотим, чтобы микроконтроллер обрабатывал данные и отображал их на LCD дисплее.

Мы хотим, чтобы у нас была возможность прошивать микроконтроллер через ICSP.

Программатор для PIC12F629

Рейтинг:   / 5

Подробности
Категория: Для микроконтролеров
Опубликовано: 20.03.2017 19:22
Просмотров: 2589

начинаем собирать следующую схему:Схема не сложная, за час соберёте. Несколько советов: • конечно же у вас есть хороший и дорогой паяльник. Паять тем монстром, которым наши деды, лудили самовары да чайники, я бы не советовал. • не забываем пользоваться флюсом, без него ничего не получится. Остатки флюса смываем «спирто-бензиновой смесью»

ПИТЬ НЕ РЕКОМЕНДУЕТСЯ. • длинная нога у светодиода это +. • разводку ног транзистора можно найти в Интернете. • провода к COM разъему припаивайте по цифрам. 1 это 1, 8 это 8. На картинке нарисован «папа», т.е. изображение зеркальное. • + 5 вольт снимайте с USB порта. У USB разъема питание идет по крайним контактам. Где что ищите в Интернете. При подпайке не перепутайте местами провода, а то сожжете и всю свою схему, и COM порт.

ПРОГРАММИРОВАНИЕ МИКРОКОНТРОЛЛЕРА.

И так, вы спаяли программатор, и полны решимости, закончить начатое дело. Следующий шаг программирование микроконтроллера. Для программирования микроконтроллера вам необходимы: • программа, с помощью которой вы будете заливать код прошивки в микроконтроллер. • сама прошивка. Сначала заходим на этот сайт http://www.ic-prog.com/ и из раздела DOWNLOAD скачиваем: IC-Prog Software 1.05E Multi-Lingual и не забываем скачать IC-Prog NT/2000 driver, который обеспечивает правильную работу программы под Win XP. Скачали, создаём на вашем жестком диске папку IC-Prog и распаковываем в неё оба архива. Запускаем IC-Prog. При первом запуске, появится сообщение об ошибке, игнорируем его и переходим к конфигурации программы. Заходим в «Settings» -> «Options», далее делаем активной закладку «Misc». В активном окне, выставляем галочки опциям «Enable NT/2000/XP Driver» и «Enable VCC control for JDM». 

Жмём ОК и программа должна перезапуститься. Если она не перезапустилась, выходите из программы и запускаете её заново. При повторном запуске сообщение об ошибке должно исчезнуть. Далее переходим к установкам самого программатора. Тип программатора выбираете как JDM 

Programmer, интерфейсом указываете Windows API, ну и не забудьте правильно указать номер COM порта, к которому вы подключили спаянный программатор.

Всё, все подготовительные процедуры закончены, и можно переходить непосредственно к программированию. Вставляйте в панельку вашу микросхему(PIC 12F629), в верхнем правом углу, в ниспадающем меню выбирайте тип программируемого микроконтроллера » PIC 12F629″ и нажимайте на кнопку «Read All»(кнопка с изображением микросхемы и большой зелёной стрелки). Если вы спаяли схему с двумя светодиодами (один горит при включении питания, второй срабатывает при чтении/записи в микроконтроллер), то один из светодиодов должен заморгать, что говорит о правильности работы всей вашей схемы. По завершении считывания данных, вы увидите на экране код состоящий из сплошных «3FFF». Перематываем на последнюю строчку и записываем (или запоминаем) последние четыре знака. Они должны отличаться от «3FFF» и в разных контроллерах это значение будет разным. Если же последние четыре знакоместа не отличны от «3FFF», то значит у вас проблемы с программатором или даже с PIC-ом. 

Если с этим всё в порядке, то продолжим процедуру. Заходим в «File» -> «Open» и загружаем нужную вам прошивку (файл должен быть с расширением HEX). Далее жмём кнопку «Program All»(находится рядом с кнопкой «Read All» и выглядит как микросхема с жёлтой молнией). 

Программа поинтересуется у вас, действительно ли вы хотите запрограммировать устройство? Смело отвечайте «YES».

Далее произойдёт считывание данных с вашего PIC-а, и программа снова задаст вопрос: хотите ли вы использовать данные из файла с прошивкой? ВНИМАНИЕ!!! Тут надо ответить «NO», ибо, дав положительный ответ(«YES»), вы перезапишите те самые последние четыре знакоместа(OSCCAL) и выведите микроконтроллер из строя. (Конечно это не большая беда, и всё можно вернуть обратно, ведь вы записали эти важные четыре символа.) Но вы же ответили «NO», и программа начала записывать в ваш PIC прошивку

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

Оставлять комментарии могут только зарегистрированные пользователи

Метки

Altium DesignerAVRCOMLCDLEDLPTmini2440PICPIC16F628ARS-485stm8STM32USBЛУТПКСвязьаудиоинструментмеханикамикроконтроллеробзорпитаниеплатапрограммаробототехникаумный дом

Newer Device Available PIC16F18444

Status: In Production

View Datasheet View Comparisons

Features:

  • Low voltage programming
  • Low speed Clock mode
  • Programmable BOR
  • 4MHz internal oscillator
  • Programmable VREF
  • 128 bytes of EEPROM
  • Data Memory
  • ICD

View More

  • ProgrammingServices Available
  • SamplingOptions
  • BuyNow

This powerful (200 nanosecond instruction execution) yet easy-to-program (only 35 single word instructions) CMOS FLASH-based 8-bit microcontroller packs Microchip’s powerful PIC architecture into an 18-pin package and is upwards compatible with the PIC16F628, PIC16C62XA, PIC16C5X and PIC12CXXX devices. The PIC16F628A features 4MHz internal oscillator, 128 bytes of EEPROM data memory, a capture/compare/PWM, a USART, 2 Comparators and a programmable voltage reference that make it ideal for analog/integrated level applications in automotive, industrial, appliances and consumer applications.

For product comparison, please consider: PIC16F18444

  • Low voltage programming
  • Low speed Clock mode
  • Programmable BOR
  • 4MHz internal oscillator
  • Programmable VREF
  • 128 bytes of EEPROM
  • Data Memory
  • ICD

User Guides

  • Integrated Development Environments
  • Compilers
  • Programmers
  • Demo & Evaluation Boards
  • Code Examples

MPLAB X Integrated Development Environment (IDE) is an expandable, highly configurable software program that incorporates powerful tools to help you discover, configure, develop, debug and qualify embedded designs for most of Microchip’s microcontrollers, microprocessors and digital signal controllers. MPLAB X IDE works seamlessly with the MPLAB development ecosystem of

Available as free, unrestricted-use downloads, our award-winning MPLAB XC C Compilers are comprehensive solutions for your project’s software development. Finding the right compiler to support your device is simple:

  • MPLAB XC8 supports all 8-bit PIC and AVR microcontrollers (MCUs)
  • MPLAB XC16 supports all 16-bit PIC MCUs and dsPIC Digital

Fast programming, increased functionality, at the same price as its predecessor, the PICkit 3.

The MPLAB PICkit 4 now has Programmer-to-Go functionality for 8-bit, 16-bit and 32-bit PIC MCUs and dsPICs and also SAM MCU devices . The firmware update comes with MPLAB X IDE v5.30. AVR is expected soon!

The MPLAB PICkit 4 In-Circuit

The MPLAB ICD 4 In-Circuit Debugger/Programmer is Microchip’s fastest, cost-effective debugging and programming tool for PIC and SAM Microcontrollers (MCUs), dsPIC Digital Signal Controllers (DSCs), and CEC flash microcontrollers. This speed is provided by a SAME70 MCU with 300 MHz, 32-bit MCU with 2MB of RAM and a high-speed FPGA to yield

The MPLAB PM3 Universal Device Programmer is easy to use and operates with a PC or as a stand-alone unit, and programs Microchip’s entire line of PIC devices as well as the latest dsPIC DSC devices. When used standalone, data can be loaded and saved with the SD/MMC card (not included).

Фотографии и видео

Приветственное сообщениеОжидание получения названия сотового оператораВывод названия сотового оператораОтправка SMS сообщения

Общий взгляд на устройства ПЛК

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

Благодаря таким языкам программирования, существенно облегчается процесс программирования контроллеров. Язык высокого уровня, созданный для ПЛК, обеспечивает простоту, эффективность и дружелюбную среду для пользователя.

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

  • память,
  • входные порты,
  • выходные порты.

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

  • микропроцессор,
  • память программ и данных,
  • генератор тактовых импульсов,
  • интерфейсы ввода и вывода,
  • таймеры,
  • аналого-цифровые преобразователи,
  • внешние коммуникационные порты и другие схемы.

Макрос языка высокого уровня — это инструкция, которая является сокращённой строкой, содержащей несколько инструкций. Запись программы с повторяющимися действиями (схожестью инструкций) при использовании макросов значительно сокращается.

Программируемые микроконтроллеры используются в составе современной электроники повсеместно. Умение работать с этим функциональным инструментом открывает широкие горизонты

Эффективность программы на основе макросов столь же эффективна, как и запись программы на языке «C». Компилятор отвечает за создание соответствующих подстановок для генерации кода, который передаётся в память программы микропроцессора или микроконтроллера.

Детали

В регуляторе можно использовать любые кремниевые высокочастотные транзисторы соответствующей структуры с допустимым напряжением между эмиттером и коллектором не менее 15 В и статическим коэффициентом передачи тока h21э не менее 200 (1V1 — 5V1) и 70 (остальные). Допустимое отклонение от указанных на схеме значений емкости конденсаторов 1С1 — 5С7,    1С2 — 5С2 и сопротивлений резисторов 1R4 — 5R4, 1R5 — 5R5 не должно превышать ± 10%. Переменные- резисторы 1R2 — 5R2 должны быть группы А.

Число полос регулирования можно увеличить, уменьшив интервалы между частотами настройки фильтров до одной или до одной трети октавы. Значения добротности и параметры резисторов частотозадающих цепей для этих случаев приведены в табл. 11.1.

Емкость конденсаторов 1C1 — NC1, 1С2— NC2 (в микрофарадах) рассчитывают исходя из выбранных значений частот регулирования f0 (в герцах) по формуле С =

Допустимое отклонение параметров элементов частотозадающих цепей октавного (десятиполосного) регулятора 10 %, третьоктавного 5%. Налаживания регулятор не требует.

Сфера применения PIC-микроконтроллеров

Как уже было сказано, семейство PIC16 очень любят радиолюбители. К тому же оно хорошо описано в большом количестве литературы. По количеству учебников с семейством PIC, на момент написания статьи, может посоревноваться только семейство AVR.

Давайте рассмотрим несколько схем с применением микроконтроллеров семейства PIC.

Таймер для управления нагрузкой на PIC16f628

Простейшая автоматика на микроконтроллерах PIC – это стихия 8-битного семейства. Их объём памяти не позволяет делать сложных систем, но отлично подходит для самостоятельного выполнения пары поставленных задач. Так и эта схема трёхканального таймера на Pic16f628, поможет вам управлять нагрузкой любой мощности. Мощность нагрузки зависит только от установленного реле/пускателя/контактора и пропускной способности электросети.

Настраивается прибор с помощью набора из 4-х кнопок SB1-SB4, на HG1 выводятся параметры, это дисплей типа LCD на 2 строки по 16 символов. В схеме используется внешний кварцевый резонатор на 4 МГц, а KV1 – это реле, с питанием катушки в 24 В, вы можете использовать любое реле, лишь бы оно подходило по напряжению катушки к вашему БП. МК питается от 5 В стабилизированного источника.

Вы можете использовать от 1 до 3 каналов в управлении нагрузкой, стоит только продублировать схему, добавив реле к выводам RA3, RA4 микроконтроллера.

Часы-будильник на МК PIC16f628A

Такие часы, согласно заявлениям разработчика, получились весьма точными, их погрешность весьма мала – порядка 30 секунд в год.

С незначительными переделками вы можете использовать любые 7-мисегментные индикаторы. Питаются от блока питания на 5В, при этом, при отключении от сети продолжают работать от батареек, что вы можете увидеть в правом верхнем углу схемы.

Регулятор мощности паяльника на PIC16f628A

У начинающих радиолюбителей не всегда есть возможность купить паяльную станцию. Но они могут собрать её сами. На схеме ниже представлен регулируемый блок питания на PIC16f628, для работы паяльника. В основу схемы вложено фазоимпульсное управление. Это, по сути, доработанный и осовремененный аналог классического тиристорного регулятора, но с микроконтроллерным управлением.

Схема довольно простая, в нижней части реализация светодиодной индикации. Главный силовой элемент – тиристор BT139, а MOC3041 – нужен для гальванической развязки МК от сети и управления тиристором с помощью логического уровня в 5 В.

Программа

При установке компилятора XC8 вы также добавили и некоторые заголовочные и исходные файлы. В этом руководстве мы используем файлы библиотеки по работе с LCD, которые идут с компилятором XC8: XLCD.H и несколько исходных файлов. Чтобы всё немного упростить, я скопировал содержимое всех исходных файлов в один файл. На моей установке Ubuntu исходные файлы XLCD находятся в каталоге:

/opt/microchip/xc8/v1.34/sources/pic18/plib/XLCD

Там было 10 файлов, bysyxlcd.c, openxlcd.c, putrxlcd.c и т.д.. Я поместил содержимое всех этих файлов в один файл и назвал его my_xlcd.c. Этот файл теперь содержит все функции. Файлы my_xlcd.c и xlcd.h необходимо скопировать в каталог проекта (файл xlcd.h находился в каталоге /opt/microchip/xc8/v1.34/include/plib). Файл xlcd.h – это стандартный файл, который нуждается в небольшом редактировании. Нам необходимо изменить данные о подключении LCD к микроконтроллеру, чтобы они совпадали с нашей схемой:

Теперь связь между LCD дисплеем и микроконтроллером задана. С этими двумя файлами (my_xlcd.h и my_xlcd.c) больше ничего делать не требуется.

Далее основная программа. Она начинается с включения нескольких заголовочных файлов, битов конфигурации, определений, объявления переменных и функций:

Чтобы заставить LCD дисплей работать с нашим микроконтроллером, нам необходимо создать несколько функций задержек. В начале вашего файла XLCD.H говорится, что:

Пользователь должен обеспечить три функции задержки:

  • обеспечивает задержку в 18 циклов;
  • обеспечивает задержку в 15 мс;
  • обеспечивает задержку в 5 мс.

Мы должны добавить еще и четвертую функцию задержки,

Ниже приведены функция инициализации LCD и функции задержек:

Далее на очереди функции подачи стартового сигнала, чтения байта и проверки ответа:

Чтобы узнать, когда микроконтроллер передает сигнал старта, и когда DHT11 закончил передачу своих 40 бит, нам нужна функция прерывания:

И наконец, основная часть программы:

Это был один из способов использования DHT11 совместно с PIC контроллером и LCD дисплеем.

Требования

Чтобы получить максимальный результат от этой статьи, вам понадобятся:

  • GSM модуль SIMCOM SIM900A с обновленной прошивкой, чтобы он мог зарегистрироваться у европейских (и российских) сотовых операторов;
  • компьютер с MPLAB X и компилятором XC8;
  • микроконтроллер PIC16F628A и микросхема MAX232;
  • способ прошить свой PIC контроллер, я использую PICkit 3;
  • макетная плата, перемычки и LCD дисплей;
  • другие компоненты из перечня элементов.

Заключение

Мы использовали микроконтроллер PIC16F628A совместно с датчиком DHT11 и отобразили значения температуры и относительной влажности воздуха на LCD дисплее. Вы можете, приложив немного усилий, преобразовать/подстроить код для какого-либо другого микроконтроллера. Программа занимает в микроконтроллере 32% памяти данных и 55% памяти программ. Это потому, что микросхема довольно низкого класса.

Разница между PIC16F628 и PIC16F628A в том, что версия с буквой «A» обладает внутренним тактовым генератором. Версия без буквы «A» нуждается во внешнем кварцевом резонаторе или RC цепи. Если вы покупаете PIC16F628, то убедитесь, что он с буквой «A». Другой контроллер является устаревшим.

Рейтинг автора
5
Материал подготовил
Максим Иванов
Наш эксперт
Написано статей
129
Ссылка на основную публикацию
Похожие публикации