среда, 17 декабря 2014 г.

Модель МК с точки зрения программиста

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

Основными узлами МК являются память (memory, mem, M) и вычислительное ядро (core), которое включает в себя арифметико-логическое устройство (АЛУ, англ. ALU, может выполнять логические операции, сложение, умножение и др.)


Любая память состоит из ячеек. В каждой ячейке записано число (данные, data). Каждая ячейка имеет номер, который называется адресом (address, addr). Доступ к данным ячейки осуществляется по её адресу. Доступ может быть на чтение (read, R) из памяти или на запись (write, W) в память. В простых дешевых МК в одной ячейке памяти обычно хранится один байт информации.

В ядре МК есть несколько особых ячеек памяти, которые имеют имя (и иногда адрес, но используется обычно имя). Эти особые ячейки называются регистрами МК. В STM8S есть регистры A (8 бит), X (16 бит), Y (16 бит), PC (24 бита) и несколько других. 

Ядро МК может выполнять фиксированный набор примитивных операций. Эти операции, для примера, могут быть такими:
  загрузить A <- M(addr1) 
     число из памяти М по адресу addr1 загрузить в регистр А
  сложить A <- A + 3
     к числу в регистре A добавить число 3 и записать обратно в А
  загрузить M(addr2) <- A
     число из регистра А записать в память М по адресу addr2

Перепишем тот же список операций по-другому:
  LD   A, M(addr1)
  ADD  A, 3
  LD   M(addr2), A

Такая запись последовательности элементарных операций МК называется программой на языке ассемблера. У каждого МК свой язык ассемблера и свои способы обозначения команд и адресов.


Далее представим, что: 
команда LD A,... имеет числовой код 1
команда ADD A,... имеет числовой код 2
команда LD ...,A имеет числовой код 3

Перепишем список операций в виде чисел:
  1 addr1
  2 3
  3 addr2

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

Ядро МК "умеет" читать программу из памяти и выполнять соответствующие элементарные операции. Для организации процесса последовательного выполнения команд используется специальный регистр PC (program counter, счетчик [команд] программы). Этот регистр содержит адрес ячейки памяти той операции (команды), которая сейчас выполняется. Когда операция выполнена, значение PC увеличивается на длину выполненной операции, выполняется чтение кода следующей операции и ее выполнение. Таким образом организован процесс последовательного выполнения элементарных операций, записанных в памяти МК.

Существует отдельная группа операций МК, которая позволяет "нарушить" последовательное выполнение программы и перейти к выполнению программы по другому адресу - это команды перехода. На языке ассемблера они обычно начинаются с буквы J (от англ. jump - прыгнуть) и имеют вариации, например JRT, JRE, JREQ и др.

Например:
  Команда           Действие
  JRT addr3         PC <- addr3

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

Объединение элементарных операций МК в последовательности с условными переходами позволяет реализовать сложные алгоритмы работы устройства. В этом состоит суть работы любого МК.

Память МК

В современных МК обычно есть 3 вида памяти: RAM (англ. Random Access Memory, память с произвольным доступом, рус. ОЗУ - оперативное запоминающее устройство), Flash и EEPROM (обобщенно их можно назвать ПЗУ - постоянное запоминающее устройство, но чаще используют английские названия без изменений).

RAM - эта память с произвольным чтением и записью обычно быстрее, чем Flash и EEPROM. Теряет информацию при отключении напряжения питания.

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

Отличия: Flash - стирание блоками, EEPROM - стирание по байтам, Flash - порядка 10 тысяч циклов стирания/перезаписи, EEPROM - порядка 300 тысяч циклов стирания/перезаписи.

Применение: Flash - хранение программы, EEPROM - хранение настроек (например, последняя радиостанция, последний уровень громкости и т.п.)

Двоичная и шестнадцатеричная системы счисления

МК - это автомат для работы с информацией, которая представлена числами. В повседневной жизни мы привыкли к числам в десятичной системе счисления (decimal, dec), и принимаем это как что-то само собой разумеющееся, не задумываясь.

Однако на привычные числа можно посмотреть другим взглядом, представив их как сумму единиц, десятков, сотен, тысяч и т.д. Например, 322 = 3*100+2*10+2*1. Т.е. в числе 322 содержатся три сотни, два десятка и две единицы.


Далее можно сказать, что 1 это 10 в степени 0 (10^0), 10 это 10^1, 100 это 10^2, 1000 это 10^3 и так далее. Таким образом 10 - это особое число, которое называется основанием системы счисления.


10 - не является единственным выбором для основания системы счисления. В вычислительной технике широко используются основания 2 (двоичная система счисления, binary, bin) и 16 (шестнадцатеричная система счисления, hexadecimal, hex). 




При разложении числа по основанию 2 используются слагаемые по степеням двойки - 2^0, 2^1, 2^2, 2^3, 2^4, 2^5, 2^6 и т.д.
Или по-другому: 1, 2, 4, 8, 16, 32, 64 и т.д.
Так же, как в десятичной системе, младший (самый маленький) разряд пишется справа, а старшие пишутся левее.


Например: 
7[dec] = 0*8+1*4+1*2+1*1 = 0111[bin]
125[dec] = 1*64+1*32+1*16+1*8+1*4+0*2+1*1 = 1111101[bin]
10110[bin] = 1*16+0*8+1*4+1*2+0*1 = 22[dec]

Числа в двоичной записи занимают довольно много места и не очень удобны для восприятия. Поэтому в программировании чаще используется представление чисел по основанию 16. В таком виде обычно записываются адреса памяти и ее содержимое.




При записи числа в шестнадцатеричной системе счисления используются символы 0-9, A, B, C, D, E, F. При этом А=10[dec], B=11[dec], C=12[dec], D=13[dec], E=14[dec], F=15[dec].
Для обозначения основания 16 используются такие записи (на примере числа 7C[hex]):
0x7C  7Chex  7C16  7Ch  7CH

Информация в простых дешевых МК хранится "кусочками" по 8 бит, один такой кусочек из 8 бит называется байт. Каждый бит - это один двоичный разряд - 0 или 1. Отсюда название 8-разрядный или 8-битный МК. Один байт может содержать число от 0 до 255 (пока не рассматриваем отрицательные числа). Числа больше 255 не помещаются в байт.

Если разделить байт на две части по 4 бита - тетрады, то для записи каждой части в шестнадцатеричной системе счисления потребуется один символ от 0 до F, а для записи всего байта - два символа.

Например:
124[dec] = 7*16+12*1 = 7hex*16 + Chex*1 = 0x7C

понедельник, 8 декабря 2014 г.

Минимальное устройство на МК

Каким может быть минимальное устройство на МК? Ответ на этот вопрос особенно интересен в начале изучения, чтобы сократить усилия и время, необходимые для получения первых результатов. В минимальном варианте к МК подключается напряжение питания (+Vdd и GND на рисунке) и несколько электрических сигналов. Под сигналом мы будем понимать некоторый процесс, который меняется во времени. Поскольку МК работает только с электрическими сигналами, то для взаимодействия с физическими объектами неэлектрической природы используются датчики, которые преобразуют физические величины в электрические сигналы, и исполнительные устройства - для обратного преобразования.


Сигналы, с которыми работает МК, можно разделить на логические (входы и выходы МК) и аналоговые (входы и выходы МК).

Логические сигналы принимают только два уровня напряжения: высокий или низкий. Простейший датчик, подключаемый к логическому входу МК - кнопка. Простейший индикатор, подключаемый к логическому выходу МК - светодиод.

Аналоговые сигналы меняются по форме непрерывно и повторяют (по возможности близко) физический процесс, которому они соответствуют. Поскольку МК внутри себя работает только с числами, то входной непрерывный аналоговый сигнал преобразуется блоком аналого-цифрового преобразователя (АЦП, англ. ADC, Analog to Digital Converter) в поток чисел. Этот блок АЦП находится внутри МК.

А вот устройство для обратного цифро-аналогового преобразования (ЦАП, англ. DAC, Digital to Analog Converter) в дешевых МК обычно не установлено. Хотя можно было бы установить внешнюю микросхему ЦАП, обычно вместо этого используют блок широтно-импульсной модуляции (ШИМ, англ. PWM, pulse width modulator) и внешний фильтр нижних частот (ФНЧ, англ. LPF, low pass filter). Блок ШИМ установлен во всех современных МК, даже самых дешевых, а фильтр может быть простым.

Суть работы ШИМ сводится к тому, что на выходе блока присутствуют импульсы фиксированной частоты, которые меняются по длительности (ширине). Если эта длительность пропорциональна исходному сигналу, а частота ШИМ значительно (в 50-100 раз) выше частоты исходного сигнала, то после фильтрации на выходе ФНЧ получается сигнал очень близкий к исходному.
Оба решения - отдельная микросхема ЦАП, и ШИМ+ФНЧ обладают своими достоинствами и недостатками. В целом можно сказать, что ШИМ+ФНЧ это дешевый способ реализации ЦАП.

Отладочная плата STM8S-DISCOVERY

Прежде, чем мы сделаем свою первую плату с МК, для начала работы мы можем использовать готовую плату (в нашем случае это будет STM8S-DISCOVERY). Такой подход позволит начать освоение микроконтроллера и его программных средств разработки до того, как готовы платы конечного устройства.




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

http://compel.ru
http://megachip.ru
http://terraelectronica.ru
http://micronika.ru
http://chipdip.ru

http://efind.ru (поиск по разным магазинам в России)

Выбор микроконтроллера (МК)

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



Для первого изучения МК должен быть простым и дешевым. Мы остановим свой выбор на 8-битном МК STM8S фирмы STMicroelectronics (http://st.com). Этот МК в России стоит менее 2$ при покупке 1 шт., и менее 1$ при закупке крупных партий (несколько 100 шт). Он имеет тактовую частоту 16 МГц (мегагерц) и диапазон питающих напряжений 2.95-5.5 В (вольт). Этот МК обладает одними из лучших технических характеристик и низкой ценой в своём классе и превосходит популярные МК AVR фирмы Atmel, применяемые в Arduino. Широкий диапазон питающих напряжений позволяет использовать в качестве источника питания для этого МК как USB-выход (5 В), так и LiIon аккумулятор (3...4.2 В).

Тактовая частота 16 МГц (т.е. 16 миллионов элементарных операций в секунду) позволяет охватить широкий круг задач взаимодействия с физическим миром. Для примера можно сказать, что диапазон частот, воспринимаемых человеческим ухом равен примерно от 20 до 20 000 Гц, а частота вращения коленчатого вала двигателя обычного автомобиля не превышает 100 Гц (6000 оборотов в минуту). Т.е. за каждый период звукового или механического колебания этот МК может выполнить несколько сотен или тысяч элементарных операций. 


Разрядность 8 бит означает, что элементарные операции МК выполняются с числами, для представления которых используются 8 двоичных разрядов (бит). Каждый бит равен 0 или 1. Работа с числами большей разрядности (например, 16 бит) тоже возможна за счет выполнения нескольких 8-битных операций.


STM8S - это пример одного из самых простых и дешевых МК. На другом конце спектра существуют МК, подобные ARM Cortex-A8 с тактовой частотой 1ГГц и выше, одним или несколькими вычислительными ядрами, с разрядностью 32 бита. Такие МК, как правило, работают под управлением операционной системы (ОС) (например Linux), максимально приближенной к обычной ОС и позволяют решать такие задачи, как подключение по WiFi, запуск web-сервера, подключение HDMI монитора, подключение USB устройств. Такие МК установлены в современных мобильных телефонах и планшетах. Платы на основе таких МК часто попадают в разряд мини-компьютеров (например: BeagleBone Black, http://beagleboard.org/BLACK). Для первого изучения эти МК слишком сложны, стоят значительно дороже (>20-30$), требуют отдельной системы питания с несколькими уровнями напряжений и уступают простым МК по энергопотреблению. К примеру, некоторые устройства на простых МК могут работать от батарейки несколько лет без замены.

Уточняем задачу

Электронные устройства - очень широкая область. Чтобы начать, мы сузим класс устройств, которыми будем интересоваться. Это будут устройства на микроконтроллерах (МК). Почему? Потому что МК позволяет с минимальными усилиями получить ощутимый результат. Также мы будем ориентироваться на схемы, в которых МК взаимодействуют с физическим миром через датчики (кнопки, фотодиоды, термометры и др.) и исполнительные устройства (светодиоды, индикаторы, лампы, моторы и др.). Во-первых, это достаточно наглядно. Во-вторых, это позволяет использовать недорогие МК. В целом, предметная область, которой мы будем интересоваться, очень близка к тому, что делается в рамках проекта Arduino: 
https://ru.wikipedia.org/wiki/Arduino
http://www.youtube.com/results?search_query=arduino
http://www.arduino.cc

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


Также могут быть интересны сайты:

http://masterkit.ru (наборы и готовые устройства)
http://easyelectronics.ru (блог по радиоэлектронике)

понедельник, 1 декабря 2014 г.

Начинаем курс «Электронные устройства с нуля»

Цель курса: научиться делать электронные устройства

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


Структура курса: Курс включает в себя практическую и теоретическую часть. Приоритет отдается тому, чтобы сначала что-то попробовать на практике, а потом понять, как это работает. Теория привлекается только в той степени, в которой она необходима для решения текущей поставленной задачи. Сам курс создается и обновляется в процессе чтения, изначально нет жесткой структуры и порядка изложения.


От автора: меня зовут Василий Смирнов. У меня большой опыт программирования и небольшой опыт создания электронных устройств. Именно поэтому я хочу начать курс, в котором мы будем вместе учиться создавать электронные устройства. Это желание не покидает меня на протяжении долгого времени. Если оно есть и у вас, присоединяйтесь!


Об авторе: имеет разнообразный опыт программирования (C++/Python на ПК, микроконтроллеры AVR ATmega8, TI F28335, TI C54x, ПЛИС Xilinx Spartan-3E) и моделирования электронных устройств (MATLAB/Simulink/MicroCap/FASTMEAN). Занимался речевыми технологиями (очистка от шума, вокодеры) и цифровой обработкой сигналов (фильтры, БПФ), программированием встроенных автомобильных систем (громкоговорящая связь с bluetooth), обработкой данных радаров гражданской авиации (фильтр Калмана), радиолюбительством на начальном уровне (ремонт, простые схемы), разработкой и реализацией алгоритмов управления 3х фазными инверторами (100+ кВт), созданием собственной программы моделирования (FASTMEAN), управлением с обратными связями (импульсные преобразователи напряжения с ШИМ) и другими задачами.