Новые сообщения в форуме · Участники · Правила форума · Поиск · RSS ]







  • Страница 1 из 1
  • 1
Модератор форума: sanyaav, Volodya215  
Обучение программированию PIC контроллеров (Урок 3)
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мкс (удобно считать: одна команда-одна микросекунда biggrin )

Читаем далее: память программ 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
 
  • Страница 1 из 1
  • 1
Поиск:

- ЕСТЬ НОВОЕ СООБЩЕНИЕ
- НЕТ НОВЫХ СООБЩЕНИЙ

Copyright Zloy Soft (Company) © 2008 - 2024