sanyaav | Дата: Среда, 06.02.2013, 00:45 | Сообщение # 1 |
Репутация:
Группа:Журналист
Сообщений: 134
Награды: 8
Статус:Offline
Микроконтроллеры изначально создавались для управлением вводом выводом в микропроцессорных системах, сам процессор - это кусок железа, для его практического использования нужны контроллеры устройств ввода-вывода, чтобы дать данные процессору для обработки, и чтобы потом он вывел результат в понятной для пользователя форме. Позже микроконтроллеры стали применять как самостоятельные устройства.
Основное достоинство - упрощение схемотехники различных устройств, создание устройств выполняющих сложные функции. Чтобы посмотреть какие есть модули в МК нужно скачать даташит с сайта http://www.microchip.ru/ ,так как я буду использовать 12F675 - качаем документацию на него, при разработке устройств обратите внимание на наличие русифицированных документов (русский даташит на 12F675 ТУТ)
Открываем 3 страницу и смотрим характеристики данного МК. Кратко поясню некоторые пункты, на которые стоит обращать внимание при выборе МК: Тактовая частота: 20 Мгц- максимальная тактовая частота на которой работает данный МК, при этом длительность машинного цикла составляет 200 нс. тут возникнет вопрос: почему 200 нс.? ведь если разделить секунду на 20 МГц получается 50нс. Объясняю: машинный цикл в PIC контроллерах выполняется за 4 такта, 50нс. - это такт, 200 нс - это машинный цикл. Очень "удобной" частотой является 4 Мгц, так как длительность машинного цикла составляет 1мкс (удобно считать: одна команда-одна микросекунда )
Читаем далее: память программ 1024 х 14 слов, каждая команда на ассемблере после компиляции превращается в 1 слово длиной 14 бит (бит - это 0 или 1, байт-это 8 бит, например 01000100), то есть программа для 12F675 будет составлять максимум в 1024 команд. (на самом деле счётчик команд в МК позволяет адресовать 8192 слова, но физически реализовано 1024). Программа исполняется последовательно, регистр счётчика команд инкрементируется и исполняется следущая команда (кроме команд переходов, когда в регистр счётчика загружается значение адреса команды, к которой должен выполниться переход). Программа никогда не прерывается, кроме особого случая - режима SLEEP
Далее: память данных 64х8, первая цифра указывает на количество регистров общего назначения в микроконтроллере (аналогия-оперативка в компьютере), вторая цифра указывает разрядность, то есть у данного микроконтроллера есть 64 регистра, каждый по 1 байту (8 бит).
Следом идёт энергонезависимая память, цифры обозначают тоже самое, что и в регистрах общего назначения: 128 ячеек энергонезависимой памяти каждая по 1 байту.
Далее упоминаются прерывания, у данного МК есть несколько прерываний от периферийных устройств, они нужны для того, чтобы оперативно реагировать на внешние события, допустим нажатия кнопки (кнопок), можно конечно делать опрос кнопок в программе через определённоый промежуток времени, но при написании сложных программ всё же лучше пользоваться прерываниями.
16-аппаратных регистров специального назначения-это регистры, с помощью которых осуществляется связь с периферийными устройствами. Например, для того чтобы прочитать значение таймера нужно обратиться к специальному регистру TMR0, чтобы вывести на какую-либо ножку сигнал нужно записать определённое значение в регистр GPIO (в старших микроконтроллерах это PortA, PortB...)
На странице 10 даташита показана карта памяти микроконтроллера: 2 банка памяти, ячейки с названием-это рег. специального назначения, серые ячейки-нереализованные регистры, а также показана область регистров общего назначения, адрес записан в 16-ричной системе счисления, о чём свидетельствует h на конце числа, в десятичной системе счисления первый регистр общего назначения имеет адрес 32, в двоичной 00100000. (про перевод чисел расскажу ниже)
8-уровневый аппаратный стек....вот это камень преткновения для многих. Пробуем разобраться: представьте магазин от автомата Калашникова, так же сохраняются и значения регистров, только в данном микроконтроллере всё сильно упрощено, стек тут предназначен только для хранения счётчика команд, нельзя сохранять в него значения регистров общего назначения. Как всё это работает: допустим МК работает с клавиатурой при помощи прерываний, при переходе в подпрограмму прерываний значение счётчика основной программы заносится в вершину стека, а когда выполняется команда возврата это значение записывается обратно в счётчик команд, и программа начинает исполняться именно с того места, где произошло прерывание.
Кратко "пробежимся" по переферийным модулям: 6 каналов ввода-вывода, с высокотоковыми выводами (максимальный ток 25мА), режимом работы этих каналов управляет регистр TRISIO, в зависимости от значения, которое записано в этом регистре каналы работают на вход или на выход (канал GP3 работат только на вход)
В данном МК (12F675 ) есть 4-х канальный модуль АЦП, а также компаратор, для работы этих модулей нужно настроить порт на вход.
Также внутри этого МК есть 2 таймера, подробнее о них я расскажу позже при написании программ. Тактироваться этот PIC может как от внутреннего, так и от внешнего генератора, если используется внешний генератор, то придётся жертвовать выводами.
Стоит упомянуть о питании: для разных вариантов исполнения диапазон 2,0 - 5,5 Вольт, но стоит внимательно изучить страницу с электрическими характеристиками, где показана зависимость выбора питающего напряжения от используемых функций и условий эксплуатации. Если схема не критична к энергопотреблению, то можно смело запитывать МК от стабилизатора 78L05.
Теперь обещаный перевод чисел: микроконтроллер не может понимать десятичные числа, у него есть только 2 "понятия": ноль и единица, вот на комбинации нулей и единиц и построена вся работа любых цифровых устройств. Одним битом можно закодировать 2 значения: это уже упомянутые 0 или 1, если нужно большее число, то берём 2 бита, теперь можно закодировать 4 значения: 00,01,10,11 Для вычисления максимального числа комбинаций нужно взять систему счисления за основание (это 2) и количество битов за показатель степени. Например 8-ю битами можно закодировать 256 значений (возводим два в восьмую степень)
Существует такой ряд: 128,64,32,16,8,4,2,1 в этом ряду для получения следущего числа каждое предыдущее умножается на 2 (читаем справо налево!!!! такая особенность! нумерация битов тоже справа налево) как это применять? Допустим имеется число в двоичной системе 10001010, нужно перевести его в десятичную и шестнадцатеричную. берём это число и описанный выше ряд и переписываем друг под другом: 1 0 0 0 1 0 1 0 128 64 32 16 8 4 2 1
Теперь смотрим: если над числом стоит единичка, то "плюсуем" это число, для данного примера будет так: 2+8+128, итого получаем 138 в десятичной, десятичные числа в ассемблере записываются с точкой в начале: .138 либо d'138'
Если в 10 системе используется 10 чисел от 0 до 9, то в 16-ричной используются ещё и буквы от А до F: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,F. Букве А соответствует число 10, букве В - 11 и т.д. F-это число 15, а не 16!!!!! так как счёт начинается с нуля, аналогично и в десятичной системе 0-9. Для перевода в 16-ю систему счисления разобьём наш байт на тетрады: 1000 1010
затем переведём эти числа в шестнадцатиричные, также записываем наш ряд под числом (конечно используем только младшую часть из 4 чисел 8-4-2-1) 1 0 0 0 8 4 2 1
В итоге получим число 8 переводим второе число 1 0 1 0 8 4 2 1
в итоге получим число 10, что соответствует букве А. записываем полученную комбинацию по порядку 8А, в программах шестнадцатеричные числа записываются так: 8Аh или 0х8А или h'8А' Двоичные же числа записываются так: b'10001010'
Для вывода в порт удобно использовать 2-ую систему счисления. Допустим у нас 3 младших бита порта ввода-вывода настроены на выход и нужно установить GP2 в 1, GP1 в 1 и GP0 в 0, для этого записываем в регистр GPIO число b'110'
Вывод: микроконтроллер работает с числами, которые записаны в регистрах, задача программы - в нужный момент времени производить операцию над числами. Ввод-вывод чисел осуществляется через порт GPIO, так же их можно получить прочитав значения таймера
Сообщение отредактировал sanyaav - Среда, 06.02.2013, 13:33 | |
|
I'll be back
|
|
| |
sanyaav | Дата: Воскресенье, 24.02.2013, 19:22 | Сообщение # 2 |
Репутация:
Группа:Журналист
Сообщений: 134
Награды: 8
Статус:Offline
ВНИМАНИЕ ВСЕМ! в 16-ричной системе счисления используются цифры и буквы: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F - выше ошибка: не хватает Е
| |
|
I'll be back
|
|
| |