Использование модулей АЦП и ШИМ в микроконтроллерах PIC16

АЦП и ШИМ в PIC16
Микроконтроллеры PIC16 имеют на борту 10-ти разрядный модуль аналого-цифрового преобразователя (АЦП) последовательного приближения. Метод последовательного приближения предполагает получение результата за несколько измерений (сравнений), с постепенным увеличением точности в каждом последующем сравнении. Таким образом, преобразование выполняется за несколько машинных циклов. Естественно данный метод уступает параллельным АЦП по скорости преобразования, в которых результат получают за один такт (машинный цикл). Я не буду здесь углубляться в тонкости различных методов, необходимую информацию можно найти в сети. (далее…)

Продолжить чтение Использование модулей АЦП и ШИМ в микроконтроллерах PIC16

RGB куб

RGB Led CubeИдея представленного светового куба хоть и не нова, но очень интересна, суть идеи заключается в применении 3-х осевого акселерометра, измеряющего проекции ускорения на три пространственные оси. По граням куба расположены трехцветные (RGB) светодиоды, яркость которых управляется посредством ШИМ. Значение яркости зависит от величины ускорения, каждый цвет соответствует одной пространственной оси, красный – оси X, зеленый – оси Y, синий – оси Z. Таким образом, при изменении ориентации, куб светится различными цветами. (далее…)

Продолжить чтение RGB куб

Динамическая индикация. Подключение светодиодной матрицы к микроконтроллеру

Динамическая индикация
Иногда требуется подключить к микроконтроллеру несколько семисегментных индикаторов или светодиодную матрицу, при этом для отображения информации используется динамическая индикация. Суть динамической индикации заключается в поочередном выводе информации на индикаторы. Ниже на схеме представлен пример соединения нескольких семисегментных индикаторов (для примера с общим катодом) для реализации динамической индикации, вообще с учетом точки получается 8 сегментов, но по старинке их называют именно так. Все выводы (аноды) одноименных сегментов соединяют вместе, итого 8 линий которые через резисторы подключают к микроконтроллеру. Общий катод каждого индикатора подключают к микроконтроллеру через транзистор. (далее…)

Продолжить чтение Динамическая индикация. Подключение светодиодной матрицы к микроконтроллеру

Таймеры. Организация временной задержки

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

Продолжить чтение Таймеры. Организация временной задержки

Змейка и Тетрис на микроконтроллере

Тетрис и Змейка
Увидел как-то интересный видеоролик в сети, в нем демонстрировалась игра змейка реализованная на микроконтроллере и светодиодной матрице 8х8, потом нашел еще несколько подобных роликов, которые заинтересовали меня. Среди них также был ролик, где на “мощном” микроконтроллере была собрана игра тетрис. После просмотра, я решил разработать собственный вариант устройства, в котором совмещены обе игры, с применением микроконтроллера PIC16F688 и двух светодиодных матриц, которые отображают игровое поле с разрешением 8х16 точек. (далее…)

Продолжить чтение Змейка и Тетрис на микроконтроллере

Прерывания

Прерывания в микроконтроллерах очень часто используются при разработке радиоэлектронных устройств, они позволяют реализовать многозадачность, то есть параллельное выполнение нескольких задач. Под прерыванием подразумевается условный переход из какой-либо области памяти программ (во время выполнения основной программы) на четко определенный адрес в этой памяти, данный адрес еще называют вектором прерываний. Векторов может быть несколько, но в микроконтроллерах PIC16 только один вектор прерываний, и это адрес в памяти программ равный 0004h. По этому адресу размещают подпрограмму обработки прерываний (обработчик прерываний). (далее…)

Продолжить чтение Прерывания

Косвенная адресация

Косвенная адресация очень удобная штука, когда необходимо оперировать с большим количеством регистров, о ней я упоминал еще в первой статье, здесь же покажу, как можно применить данный вид адресации.
Для работы с косвенной адресацией используется регистр специального назначения FSR и физически не реализованный регистр INDF. Принцип работы простой, в регистр FSR записываем адрес какого-либо регистра, пусть это будет регистр с названием temp (то есть адресу этого регистра присвоено название temp с помощью директивы equ), после чего содержимое регистра temp “условно” оказывается в регистре INDF. Теперь все операции, проделанные над регистром INDF, будут выполнены и для регистра temp, на самом же деле обращение к регистру INDF вызовет действие непосредственно с регистром temp, поэтому я и употребил термин “условно”. (далее…)

Продолжить чтение Косвенная адресация

Арифметические операции. Умножение и деление

Умножение и деление
В микроконтроллерах PIC16 отсутствует аппаратный блок умножения и деления чисел, но эти арифметические операции можно реализовать программным путем.
Операцию умножения можно представить в виде многократного сложения, деление – многократным вычитанием. Например, выражение 8х3=24 равнозначно 8+8+8=24, для деления в качестве примера возьмем следующее выражение 36:10=3,6. Алгоритм деления можно представить так: 36-10-10-10-10=-4, то есть вычитаем из 36 число 10 до тех пор, пока не получим отрицательный результат. При этом результатом операции деления является количество вычитаний, но только без учета последнего вычитания, которое привело к отрицательному результату, так как я рассматриваю здесь только целочисленные операции без дробных частей. В данном примере после четырех вычитаний получаем -4, соответственно ответ равен 3, без учета последнего вычитания. (далее…)

Продолжить чтение Арифметические операции. Умножение и деление