Главная » Микроконтроллеры
Призовой фонд
на октябрь 2020 г.
1. 1500 руб
Сайт Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 150 руб.
От пользователей

Похожие статьи:



Ёмкостный-сенсорный диммер с током 10А

Учимся создавать устройства на микроконтроллерах: светофор

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

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

Для проектирования и симуляции работы схемы светофора, (в дальнейшем устройства) я выбрал всеми известную программу ISIS Proteus Professional, с которой вы уже немного знакомы из статьи «обучающий видео курс для начинающих по микроконтроллерам» и возможно не только из неё. Для создания прошивки, (программы для работы устройства) я выбрал графическую среду программирования Flowcode AVR. Которая, по моему мнению,  (особенно для начинающих) будет очень интересна. И не только тем, что написание программы происходит фактически построением алгоритма из кубиков, ромбиков и т.д., а ещё вдобавок, начинающий сам начинает понимать как всё-таки работает микроконтроллер, и что ему нужно для того что бы он делал то что от него требуют. Сам я могу писать на СИ , но если нужно создать что то несложное и очень быстро, да ещё и нет ограничений в быстродействии, ресурсах памяти и т.д., всегда запускаю Flowcode и алгоритм быстро,  как бы сам собой, превращается в готовую прошивку.

Версии используемых в статье программ: ISIS Proteus Professional 7, и Flowcode AVR v4.3.6.61. Установите указанные программы на Ваш компьютер, и начнём работать.

1. Создадим схему нашего устройства, используя ISIS Proteus Professional.

Для начала создайте папку для выходных файлов проектов в корневом каталоге любого из дисков С или D или другого (например с именем “myprojects”), причём имя папки должно быть латинским (это для того что бы не ругался Flowcode, и не было потом проблем с компиляцией программы). Да и Вам будет удобно, будете знать, где лежат файлы Ваших проектов.

Открываем или запускаем (кому как нравиться называть) ISIS Proteus Professional. Далее в выпадающем меню файл выбираем «сохранить проект как», или на английском «save as …», указываем путь сохранения файлов проекта (наша папка в корневом каталоге диска “myprojects”). Ну и вводим имя файла “svetofor” например, жмём кнопку сохранить. (см. рис.1,2)

mc161-1.jpg
Рис. 1.

mc161-2.jpg
Рис.2.

Далее нужно выбрать из многочисленной библиотеки компонентов необходимые нам. Так что же нам нужно из компонентов для реализации нашего проекта? Поскольку наше устройство не сложное, выберем недорогой микроконтроллер Attiny13A. Для этого в выпадающем меню «Библиотека» выбираем «выбор устройства» (рис.3), можно просто нажать кнопку «Р», в появившемся окне в поле «маска» набираем “attiny”(рис.4), и два раза кликнем по “attiny13”. Микроконтроллер теперь добавлен в список наших устройств. (рис.5)

mc161-3.jpg
Рис. 3.

mc161-4.jpg
Рис. 4.

mc161-5.jpg
Рис. 5.

Далее выберем чем управлять микроконтроллеру, (в светофоре красный, желтый, зелёный) свет. Выбираем светодиоды, в поле «маска» набираем “led” , в категории “optoelectronics” выбираем (два раза кликаем на каждом) “led-red”, “led-green”, “led-yellow” .(рис.6)

mc161-6.jpg 
Рис. 6.

 Теперь поскольку падение напряжения на светодиодах 2.2в, а питание у нас 5в., то нужно ставить ограничительные резисторы, для того, чтобы не вывести из строя порты (выходы) микроконтроллера. В поле маска “resistor”, в  категории “modeling primitives” находим наш резистор “analog resistor primitive” и тоже два раза кликаем. (рис.7)

mc161-7.jpg 
Рис. 7.

mc161-8.jpg 
Рис. 8.

Всё! Для построения модели нашего устройства у нас почти все есть (рис.8). Почему почти спросите Вы? Казалось бы, всё есть – «мозг» и «исполнительное устройство», но это не совсем так, поскольку нужен еще источник питания устройства, а точнее его модель. Ну об этом ниже. Начинаем собирать схему. Правой кнопкой мыши кликаем на чистом листе и в появившемся меню выбираем «разместить», «компонент», “attiny13”(рис.9,10). Затем наши три светодиода и три резистора (рис.11). Далее выбираем «разместить», «терминал», “ground” . Это как раз и есть один из выводов питания нашей модели устройства (для наглядности схемы договоримся включить светодиоды с общим катодом), как раз этим катодам и нужен минус питания (земля). Обратите внимание на то, что у микроконтроллера отсутствуют выводы питания. Дело в том что программа работает с моделями компонентов, и соответственно выводы питания присущие любой из моделей считает скрытыми.

mc161-9.jpg 
Рис. 9.

mc161-10.jpg
Рис.10.

mc161-11.jpg 
Рис.11.

Теперь выбираем выводы микроконтроллера, которые нам нужно будет запрограммировать на вывод данных (выход). Но нужно учесть, что вывод 1 (порт В5) нужен ещё и в качестве “RESET” для программатора, поэтому если мы его задействуем, то запрограммировать микроконтроллер сможем один только раз. Поэтому его трогать не будем, по крайней мере пока. И так обозначим себе следующее:
А.  порт В0 будет управлять красным светодиодом(вывод 5);
Б.  порт В1 – желтым(вывод 6);
В.  порт В2 – зелёным(вывод 7).

Устанавливаем карандашик на нужный вывод, кликаем левой кнопкой мыши и соединяем порты микроконтроллера с ограничительными резисторами(рис.12,13).

mc161-12.jpg
Рис.12

mc161-13.jpg
Рис.13

   Аналогично соединим светодиоды по схеме с общим катодом, и подключим каждый анод на нужный резистор: красный на R1; желтый на R2; зелёный на R3 (рис.14).

mc161-14.jpg 
Рис.14.

Любуемся созданной схемой, и замечаем что номиналы резисторов сильно велики для зажигания светодиодов, нужно где то порядка 300 Ом, а у нас 10кОм. Кликаем правой кнопкой на резисторе, выбираем в выпадающем меню «правка свойств», и устанавливаем нужный номинал резисторов (рис.15,16,17).

mc161-15.jpg
Рис.15.

mc161-16.jpg
Рис.16.

mc161-17.jpg
Рис.17.

Вот теперь уже схема модели устройства под названием «светофор» готова. Можно на всякий случай нажать на дискетку и сохранить файл нашего проекта.

2.  Напишем управляющую программу для нашего устройства при помощи Flowcode AVR v4.3.6.61.

Запускаем Flowcode AVR v4.3.6.61. Выбираем “create a new flowcode flowchart”, в появившемся меню прокруткой выбираем тип микроконтроллера, нам нужен “Attiny13” (рис18,19,20). Далее появляется окно программы с панелями. В выпадающем меню «файл» выбираем «сохранить как», и указываем путь к созданной нами папке в корневом каталоге диска “myproject”, называем файл его именем на английской раскладке клавиатуры “svetofor”. И мы готовы к написанию алгоритма программы.

mc161-18.jpg
Рис.18.

mc161-19.jpg
Рис.19.

mc161-20.jpg
 Рис.20.

Немного о Flowcode.

Первая  инструментальная панель — это панель команд

mc161-21.jpg 
Рис.21.

Перечень представленных команд (с лева - на право на рис.21). Input (ввод), Output (вывод), Delay (пауза), Decision (ветвление), Connection Point (две точки соединения), Loop(цикл), Macro (макрос), Component Macro (макрос компонента, добавленного в программу), Calculation (вычисление),String Manipulation (строковые операции), Interrupt (прерывание), C Code (блок кода на языке Си), Comment(комментарий).

Ниже расположена вторая панель инструментов.

mc161-22.jpg
Рис.22

На ней расположено много всяких устройств, для подключения к портам микроконтроллера (рис.22).

Вообще я прилагаю к статье “help” на русском языке по работе с этой программой, если что, то заглядывайте туда, (правда перевод там смешной, но разобраться можно).

Далее давайте определимся с алгоритмом работы светофора и опишем его словами:
1.   Зажигается красный свет и горит, к примеру -  5 секунд (не смейтесь, у нас же всё - таки не настоящий светофор с перекрёстка);
2.   Зажигается желтый на 2 секунды (красный при этом не тухнет);
3.   Тухнет красный и желтый;
4.   Загорается зелёный на 5 секунд;
5.   Зелёный мигает 3 раза;
6.   Тухнет зелёный;
7.   Загорается желтый  на 2 секунды;
8.   Тухнет желтый;
9.   Повтор пункта 1 (или конец цикла).

Теперь этот алгоритм нужно нам запрограммировать в наш микроконтроллер.

Настроим выходы микроконтроллера, для этого на второй инструментальной панели выбираем «выходы» и «LED», на панели видим добавился наш светодиод (рис.23,24).

mc161-23.jpg
Рис.23

mc161-24.jpg
Рис.24

Кликнем на светодиоде правой кнопкой , выберем «расширенные свойства»(ext properties), выберем цвет, размер, и активный уровень (вспомним нашу модель в протеусе, светодиоды подключили с общим катодом, а значит активный уровень выбираем высокий) (рис.25,26) . Теперь ещё раз кликнем правой кнопкой на нём и выберем “connections” (вспомним модель в протеусе, у нас красный порт -  В0, желтый - В1, зелёный - В2.) (рис.27,28).

mc161-25.jpg
Рис.25

mc161-26.jpg 
Рис.26

mc161-27.jpg 
Рис.27

mc161-28.jpg
Рис.28

   Таким образом подключаем все три наших светодиода (рис.29).

mc161-29.jpg
Рис.29

Теперь у нас есть чем управлять программно.

На клетчатом фоне видим два связанных элемента алгоритма, они неизменно присутствуют всегда. Без них никак нельзя это “BEGIN” и “END”, то есть начало и конец выполнения программы. Поскольку микроконтроллеры AVR  выполняют программу от начала и до конца, то выполнив «тело программы» он дойдёт до “END” и остановится. Нам этого не нужно, светофор ведь должен работать всё время, пока его не отключат.

Для этого установим бесконечный цикл выполнения нашей будущей программы. Для этого в первой панели инструментов находим значок “Loop”, что значит цикл, и перетягиваем этот значок на место, между “BEGIN” и “END” (рис.30) .

mc161-30.jpg 
Рис.30

Теперь в теле этого цикла и будем осуществлять наш алгоритм. Первым пунктом у нас идёт - включить красный на 5 секунд. Перетягиваем значок “component macro” что значит макрос компонента, а компонент у нас это наш красный светодиод (кстати у него есть имя, он у нас LED0, это можно посмотреть если на нём кликнуть и посмотреть в панель свойств -  “property” (рис.31,32).

mc161-31.jpg
Рис.31

mc161-32.jpg
Рис.32

Далее, два раза кликнув по значку «макрос компонента» выбираем LED0  и ON, что значит – включить светодиод 0 (рис.33).

mc161-33.jpg
Рис.33

Можно ещё вставить комментарий, что бы было легче ориентироваться по своему алгоритму. Перетянем значок “comment”, два раза на нём кликнем, и пишем свой комментарий (рис.34).

mc161-34.jpg 
Рис.34

Красный должен гореть 5 секунд, есть значок “DELAY”  что значит задержка (пауза), перетянем его и в его свойствах укажем единицу времени ( с ), и их количество ( 5 ) (рис.35).

mc161-35.jpg
Рис.35

Пунктом 2 у нас идёт включение желтого на 2 секунды, при этом красный не тухнет. Снова: макрос компонента LED1 (он у нас желтый), выбираем LED1, ON, далее DELAY , выставляем 2 и единицы измерения – секунды (рис.36).

mc161-36.jpg 
Рис.36

Далее пункт 3, тухнет красный и желтый. И пункт 4, загорается зелёный на 5 секунд. Перетягиваем: макрос компонента , LED0, OFF (выключили красный), макрос компонента, LED1, OFF (выключили желтый), снова макрос компонента , LED2, ON (включили зелёный). Далее  перетянем DELAY, 5 sec. (рис.37) .

mc161-37.jpg
Рис.37

Пунктом 5, у нас зелёный мигает 3 раза, то есть тухнет затем пауза, загорается, пауза, и снова тухнет. Здесь немного подумаем, стоит ли переписывать одни и те же действия 3 раза? Конечно же, нет. Используем цикл, перетянем его и кликнем по нему два раза. Поставим галочку на LOOP COUNT (что значит количество циклов), поставим в поле нужное нам количество – это 3 цикла (рис.38). Для наглядности примем паузу между включением и выключением зелёного 0.5 секунды(или 500мс.). Перетягиваем теперь в тело нашего троекратного цикла: макрос компонента LED2, OFF, дальше DELAY, 500 ms, LED2, ON, и DELAY, 500ms. (рис.39).

mc161-38.jpg
Рис.38

mc161-39.jpg
Рис.39

Далее пункт 6, выключаем зелёный. Пункт 7 включаем желтый на 2 секунды. Пункт 8 – выключаем желтый.  (LED2, OFF; LED1, ON; DELAY, 2 sec.; LED1, OFF). Думаю, что такая запись Вам будет понятна, поскольку эти действия выполнялись уже неоднократно (рис.40).

Ну вот, и всё ! Мы написали алгоритм программы управления светофором. Давайте проверим, что у нас получилось. Для этого в выпадающем меню “view” выберем “project option”, откроется окно опций проекта. Установим тактовую частоту микроконтроллера 4800000 Гц. (это нужно для правильного расчёта пауз ), и скорость симуляции, в данном случае “fast as possible” (рис.41,42).

mc161-40.jpg
Рис.40

mc161-41.jpg
Рис.41

mc161-42.jpg
Рис.42

Теперь жмём «ОК», ищем и нажимаем синий треугольник вверху «RUN», (или нажимаем клавишу F5), и наслаждаемся симуляцией работы нашего светофора в Flowcode. Если не работает, или не так работает как надо, то ищем ошибки. Поскольку статья очень подробная то ошибок быть не должно.

Приступим теперь к компиляции проекта. В выпадающем меню “chip”, выбираем “compile to hex”. Появляется окно компилятора, и индикация его работы (рис.43).

mc161-43.jpg
Рис.43

Должно получится так как на картинке, если ”Return code=1”, проверяем путь к файлу проекта. Напомню что названия всех папок в пути от корневого каталога и файла должно состоять только из латинских символов. Иначе компилятор будет выдавать ошибку (рис.44).

mc161-44.jpg
Рис.44

Открываем папку с проектом, и смотрим на наш HEX файл прошивки (рис.45,46).

mc161-45.jpg
Рис.45

mc161-46.jpg
Рис.46

А вот и наш Си файл (рис.47,48).

mc161-47.jpg
Рис.47

mc161-48.jpg
Рис.48

Алгоритм
Рис.49 (наш алгоритм)

Собственно полученная нами прошивка (код).

:1000000009C016C015C014C013C012C011C010C062
:100010000FC00EC011241FBECFE9CDBF10E0A0E677
:10002000B0E001C01D92A737B107E1F702D0C5C00B
:10003000E7CF14BE88E10FB6F89481BD11BC0FBEA6
:1000400040EB54E0B89AC09A30E01EC0CA01019754
:10005000F1F72F5F2A3FD1F720E0CA010197F1F7AE
:100060002F5F2A3FD1F720E0CA010197F1F72F5FF8
:100070002A3FD1F720E0CA010197F1F72F5F2A3F0D
:10008000D1F73F5F353011F020E0E0CFB99AC19A47
:1000900030E01EC0CA010197F1F72F5F2A3FD1F768
:1000A00020E0CA010197F1F72F5F2A3FD1F720E046
:1000B000CA010197F1F72F5F2A3FD1F720E0CA016B
:1000C0000197F1F72F5F2A3FD1F73F5F323011F0F0
:1000D00020E0E0CFB89AC098B99AC198BA9AC29A6B
:1000E00030E01EC0CA010197F1F72F5F2A3FD1F718
:1000F00020E0CA010197F1F72F5F2A3FD1F720E0F6
:10010000CA010197F1F72F5F2A3FD1F720E0CA011A
:100110000197F1F72F5F2A3FD1F73F5F353011F09C
:1001200020E0E0CF33E0BA9AC29820E0CA010197FC
:10013000F1F72F5F2F3FD1F720E0CA010197F1F7C8
:100140002F5F253FD1F7BA9AC29A20E0CA010197E2
:10015000F1F72F5F2F3FD1F720E0CA010197F1F7A8
:100160002F5F253FD1F73150F1F6BA9AC298B99A6C
:10017000C19A1EC0CA010197F1F72F5F2A3FD1F73C
:1001800020E0CA010197F1F72F5F2A3FD1F720E065
:10019000CA010197F1F72F5F2A3FD1F720E0CA018A
:1001A0000197F1F72F5F2A3FD1F73F5F323011F00F
:0E01B00020E0E0CFB99AC19845CFF894FFCF78
:00000001FF

И программа на СИ (находится в архиве ниже).

Теперь возвращаемся к нашему проекту в Proteus professional. Нам нужно проверить, функционирует ли полученный нами код в модели созданного нами устройства, или нет. Для этого открываем наш файл svetofor.DSN (он у нас в папке myproject), делаем двойной клик на микроконтроллере, откроется окно его свойств (рис.50), так называемые фьюзы поставьте такие как на рисунке (WDTON=1; CLKDIV8=1; RSTDISBL=1; CKSEL=10; SUT=10).

mc161-50.jpg
Рис.50

Выберите путь к “Program file” нажав на кнопку с папкой (укажите путь к нашему HEX файлу) (рис.51).

mc161-51.jpg
Рис.51

Нажимаем кнопку треугольник внизу (воспроизвести), и наслаждаемся работой схемы.

От автора

Как Вам понравилась статья? Старался объяснить, как мог понятней и подробней. Любой (осознанной) критике буду только рад.

Прикрепленные файлы:

Теги:

Калистратов Владислав Опубликована: 2012 г. 0 2
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (32) | Я собрал (0) | Подписаться

0
Юрий #
Спасибо большое. Статья кулл, буду пытаться, автор спасибо еще раз огромное!
Ответить
0
Владислав #
Продолжение в том же стиле будет Вам интересно?
Ответить
0
p@r@dox #
Несомненно будет интересно! принципы работы МК, начиная с самых простеньких, с переходом на более высокие уровни, в столь наглядном виде. Ждем дальнейших публикаций!
Ответить
0
Анатолий #
Продолжай в том же духе! Мне твоя статья была очень полезна, она лучше всяких там самоучителей.
Ответить
+1
Влад #
Не советую FlowCode, он только так побаловаться... Если хотите черьёзно заняться программированием учите Си...
Ответить
0
Иван #
Безусловно!!!
Конечно лично для меня не понятно следующее:
- выставляем фьюзы, как на картинке;
- тактовая частота.
Это же для каждого контроллера индивидуально, поэтому прошу в такой же классной подробной следующей статье расширенно сказать об этих вещах.
И собственно кто бы что не писал, я, как начинающий, просто безгранично благодарен.
Тут все ясно и понятно! Пытался читать книги, но так и не смог вьехать
Ответить
0
streetboy163 #
Спасибо автору! Именно с этой статьи я начну изучение МК.
Ответить
0
Vovan #
Автор, когда будет продолжение?
Ответить
0
Streetboy163 #
Почему у меня временные паузы правильные при тактовой частоте микроконтроллера 1200000, а при 4800000 Гц вместо 5с светодиоды горели по 20с все в 4 раза больше?
Ответить
0
mikas #
Спасибо большое за бесплатные уроки. Все никак не мог решиться разобраться в МК, а тут стало проще. Литературы тьма, а прочитав без практики несколько глав - ничего в голове не остается. Так вот я начал, посмотрел сначала "Обучающий видео курс для начинающих по микроконтроллерам", повторил, потом перешел на вашу статью. Скачал Flowcode free для AVR, хорошая вещь, но бесплатная версия ограничена, количеством component macro ну и самими МК. Искать бесплатную не хватило терпения, тем более, что я подумал, что написать код на С не составит труда. Это и правда так, но у меня был опыт только с видео-урока, а там в AVR Studio мы использовали Atmega16, я так понял, что поменять МК я могу тут #include , но как объявить тут Attiny13, мозгов не хватило, может, кто подскажет. Файл С, который был приложен к данной статье вообще поставил меня в тупик, я таки написал светофор для Atmega16 и запустил в Proteus 7, все красиво моргает, но откуда так много кода в примере? У меня это заняло несколько строчек. Да и код очень сильно отличается. Возникли сомнения, что я смогу универсально изучать МК.
Ответить
0
mikas #
Вопрос пока отпал, пошевелил мозгами, полазил в папке с библиотеками Toolchain и нашел iotn13, интуитивно понятно стало, что это и есть Attiny13, так и получилось, код на Си почти менять не пришлось, все заработало.
Ответить
0
Кристина #
Простите, у меня выдает "Cannot find model file "LEDA.mdf", подскажите как исправить?
Ответить
0
Сергей #
Та же ситуация. Смотрю так и не ответили
Ответить
0
Никита #
Давно искал схему светофора на микроконтроллере, а тут целая лекция! Спасибо автору за такой урок по радиоэлектронике! БРАВО!
Ответить
0
Влад #
Спасибо за подробную статью. А как привинтить таймер например по совпадению? Был бы очень благодарен за описание таймера, ацп и рвм, если это возможно в этой программе.
Ответить
0
Дима #
А как реализовать управление 4 светофорами на перекрестке?
Ответить
0
Ильнур #
У меня вопрос, я попробовал накидать один блочек защиты, и там использовал точки переноса, почему-то при использовании точек переноса невозможно скомпилировать в hex формат? Но стоит их удалить, так сразу получается компиляция. Почему так происходит?
Ответить
0
Виталий #
Понравилась статья, повторил, и у меня получилось.
Только у вас в конце статьи фьюзы выставлены на 9,6 МГц. И у меня хекс получился почему-то большего объема. Может из-за того, что версия proteus и flowcode другая, не знаю.. Автору спасибо! Все доходчиво расписано.
Ответить
0
Павел #
Не могли бы Вы объяснить как сделать светофор в оба направления одновременно?
Ответить
0
Леха #
Отлично, все получилось без проблем, изложено доступным языком. Будем подолжать
Ответить
0
Денис #
Спасибо автору! Все разложено по полочкам, все понятно и доступно!
Ответить
0
Игорь #
Отличная статья! Ждем продолжений!
Ответить
0
Андрей #
Уважаемы Автор-просто круть, молодец, все понятно и подробно, заставляет идти на подвиги начинающих. Респект и Уважение таким людям и авторам таких замечательных поучительных статей и материалов.
Ответить
0
Макс #
Проэкт не компилируеться в хекс. Все папки латынью, проект на подобии этого. Что не так сделано?
Ответить
0
Алексей #
У тоже самое. Не знаю почему, но программа на моей платформе I7-4790k с win7, win8 (на разных проверял, и совместимость ставил, все перепробовал ни в какую) не работает компилятор и все. На амд платформе только на семерке работает. Может у вас такая же или похожая проблема?
Ответить
0
Алексей #
Такая же ситуация, Return code = 1
Не смог откомпилировать...
интел i7-4790k... помогло с установкой програмы в виртуальной среде. на ноуте i7-3610qm, такая же проблема.
Ответить
0
Евгений #
Хорошая статья!
Только не понятны пара моментов:
- выставляем фьюзы, как на картинке;
- тактовая частота.
Также не может найти ни одной микросхемы или микроконтроллера, может нужно как-то обновить библиотеку?
Ответить
0
abracadabra #
Для тех, кого, как меня, заинтриговал выбор номиналов для резисторов в цепи светодиода — испускаемый свет прямо пропорционален току через светодиод: http://hyperphysics.phy-astr.gsu.edu/hbase/electronic/leds.html . Чем больший нужен свет, тем меньшее нужно выбирать сопротивление…
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Паяльник с регулировкой температуры Discovery V8
вверх