Данный курс рассчитан главным образом для начинающих, поэтому подробно рассмотрено назначение каждого символа в коде, предполагая что ранее слушатель не имел никакого опыта в программировании; изучаем «даташиты», подробно рассматриваем периферию: таймер-счетчик, прерывания, АЦП, ШИМ, интерфейсы и т.п. Выполняем анализ ошибок, наиболее часто допускаемых начинающими, рассматриваем альтернативные варианты кода и многое другое.
Изучать программирование мы будем на примере микроконтроллеров AVR. Для обучающих целей за базовый МК принят ATmega8. Плюс несколько последних занятий будут посвящены микроконтроллерам STM32.
Изучать в качестве первого микроконтроллера STM32 по личному и опыту других программистов я не рекомендую. Проще и продуктивней начинать изучение с 8-ми битных МК, например таких как ATmega8, ATmega48, ATmega16, ATmega8535, ATmega328, ATtiny2313, ATtiny13 и т.п. Кроме того, работу МК линейки AVR можно эмулировать в программе Proteus. Благодаря этому можно изучать работу и выполнять отладку микроконтроллеров не имея в наличии самих МК, что очень удобно как в обучающих, так и в практических целях.
В дальнейшем я собираюсь проводить курсы по программированию микроконтроллеров STM32, поскольку они сейчас пользуются наибольшим спросом среди программистов встроенных систем. И в целях экономии времени, чтобы не дублировать самого себя, я буду строить занятия с учетом того, что у слушателей уже имеется хотя бы минимальный опыт программирования МК AVR, и мне не придется уделять много времени снова рассказывая, что собой представляют функции, операторы, массивы, побитовые операции или, например, порты ввода-вывода, таймеры, АЦП, ШИМ, UART, SPI и т.п. Все эти и многие другие вопросы рассмотрены в данном курсе.
В основном микроконтроллеры программируют на таких языках: C, С++, Python, а также на Ассемблере. Знать ассемблер – это хорошо, но опыт показывает, что программирование микроконтроллеров для начинающих выглядит гораздо интересней и увлекательней на языке C. Поэтому в данном курсе особое внимание уделяется языку C, причем С излагается с учетом того, что у слушателей ранее не было никакого опыта программирования вовсе, то есть мы будем изучать C от самых базовых понятий до вполне приличного уровня.
Программа курса
Программа курса предполагает изучения всех пунктов, приведенных ниже. Основной упор сделан на практическую сторону, поэтому будем решать практические задачи, применяемые в реальных устройствах.
- Область применение микроконтроллеров (МК). Основная периферия МК. Отличие микроконтроллера от микропроцессора. Порти ввода-вывода микроконтроллера. Настройка портов на выход. Подключение светодиодов. Функция main. Оператор while. Директива препроцессора #include.
- Библиотека задержек. Директива препроцессора #define. Прошивка микроконтроллера.
- Подключение кнопок к портам микроконтроллера. Настройка портов МК на выход. Подтягивающий и стягивающий резисторы. Высокое входное сопротивление. Проверка состояния пинов порта микроконтроллера.
- Семисегментные индикаторы. Подключение одноразрядных семисегментных индикаторов с общим катодом и общим анодом.
- Массивы. Оператор for. Типы данных int, char.
- Логические операции. Побитовые операции. Установка, сброс, переключение отдельных битов микроконтроллера.
- Проверка отдельных битов микроконтроллера. Динамическая индикация.
- Подключение динамической индикации посредством транзисторов. Общие понятия о таймер-счетчиках. Настройки нулевого таймер-счетчика. Регистр контроля и счетный регистр таймер-счетчика.
- Настройки первого и второго таймер-счетчиков. Отличие 8-ми битного и 16-ти битного таймер-счетчиков. Форматы записи чисел в таймер-счетчики.
- Дребезг контактов. Борьба с дребезгом. Настройка работы кнопки в разных режимах. Общие понятия о прерываниях. Внешние прерывания.
- Прерывание от таймер-счетчиков. Прерывание при переполнении таймер-счетчика. Динамическая индикация по прерыванию таймер-счетчика.
- Прерывание таймер-счетчика при совпадении. Формирование точного интервала времени. Таймер. Секундомер.
- Настройка фьюзов. Подключение внешнего кварцевого резонатора к микроконтроллеру.
- Оператор switch case. Динамическая индикация с применением switch case.
- Сдвиговый регистр 74HC595. Принцип работы. Применение. Подключение к микроконтроллеру. Расширение портов микроконтроллера. Последовательное соединение сдвиговых регистров. Статическая и динамическая индикация с применением сдвиговых регистров.
- Разработка частотомера и тахометра.
- Аналогово-цифровой преобразователь (АЦП). Принцип работы. Основные параметры. Настройки. Источники опорного напряжения. Расчет схемы подключения.
- Настройки работы АЦП по прерыванию. Сборка и настройка вольтметра. Типы данных с плавающей запятой. Явное и неявное преобразование типов данных.
- Подключение аналогового датчика температуры TMP36 (LM35). Измерения с нескольких каналов АЦП. Подключение кнопок к выводам АЦП.
- Аналоговый компаратор. Принцип действия. Основные параметры. Настройки. Применение. Режимы работы аналогового компаратора.
- Энергонезависимая память EEPROM. Основные параметры. Настройки. Организация памяти, запись и чтение данных из EEPROM.
- Функции. Типы функций. Создание и подключение подключаемых файлов .h и .c. Определение наибольшего и среднего числа.
- Подключение жидкокристаллического дисплея (ЖК) LCD. Настройки. Различие между строками и символами. Код ASCII. Отображение символов и строк на ЖК.
- Вывод переменной на ЖК дисплей. Применение функций itoa, dtostrf, sprintf. Вольтметр на ЖК дисплее. Настройки среды для работы с плавающей запятой для функции sprintf.
- Матричная клавиатура. Принцип работы. Подключение. Работа с двухмерными массивами данных.
- Широтно-импульсная модуляция (ШИМ). Принцип работы. Основные параметры. Настройки. Быстродействующая ШИМ. ШИМ с точной фазой. ШИМ с точной фазой и частотой.
- Регулирование ШИМ посредством кнопок и АЦП. Энкодер. Принцип работы. Подключение.
- Шаговый двигатель (ШД). Принцип работы и управления униполярным и биполярным ШД. Управление униполярным ШД посредством драйвера ULN2003.
- Управление биполярным, униполярным ШД и коллекторным двигателям посредством драйверов LN298N, L293D, DVR8834.
- Интерфейс UART. Принцип работы. Настройки. Передача данных.
- Прием данных по интерфейсу UART.
- Применение функций для работы с UART. Передача данных с АЦП по UART.
- Аппаратная реализация интерфейса 1-wire. Подключение датчика температуры DS18B20.
- Интерфейс 1-wire. Обмен данными с датчиком температуры DS18B20.
- Интерфейс TWI (I2C). Принцип работы. Настройки. Подключение EEPROM 24C256.
- Интерфейс TWI (I2C). Подключение датчика температуры и влажности SHT3x.
- OLED дисплей. Основные параметры и настройки. Подключение OLED посредством TWI (I2C).
- Интерфейс TWI (I2C). Подключение расширителя портов PCF8574. Подключение LCD к МК посредством PCF857.
- Интерфейс SPI. Принцип работы. Настройки. Обмен данными между двумя МК.
- Интерфейс SPI. Подключение преобразователя MAX6675 и термопары.
После изучения курса Вас ожидает следующее:
- Полюбите микроконтроллеры и больше не будете их бояться.
- Научитесь программировать микроконтроллеры любых типов серии AVR и сможет приступить к МК STM32.
- Приобретете навыки уверенного программирования на языке C.
- Научитесь читать и понимать даташиты (техническую документацию) микроконтроллеров, датчиков, радиоэлектронных элементов.
- Сможете разрабатывать электронные устройства средней сложности на базе микроконтроллеров AVR.
- Сможете очень быстро и без труда освоить ARDUINO.
- Будет гораздо проще и интересней изучать микроконтроллеры других серий: STM, PIC и т.п.
- Приобретете новую профессию и в дальнейшем сможете работать программистом микроконтроллеров.







