Найти в Дзене
Электроник ОПГЭ

Помигаем светодиодами на PIC24 используя ШИМ и таймеры. продолжение 1 (soft)

ссылка на -> начало Начинаем воплощение . Пока виртуальное .Памяти в контроллере предостаточно для такой простенькой задачи. Производительности высокой не требуется. Значит будем использовать "С". Начало стандартное. Использую MPLAB X IDE v5.30. Создаю проект. Штатным способом выставляю биты конфигурации. Использую "Production/set configuration bits". Можно было МCС использовать, но в маленькой программке нет смысла в этом. Тут все обычно. Используем внутренний генератор 8 МГц и отключаем "сторожевую собаку" :) . Результат в main-файл. Потом , при необходимости, можно всегда скорректировать. Затем объявим глобальные переменный , которые , как мне кажется, должны быть видны везде и библиотеку "math.h" . Пока так. Дальше можно убавить\прибавить. Переменная "sdvig" в битовом виде для наглядности. Первые три бита соответствуют трем каналам выхода . Период ШИМ-"period2" и период коммутации- "period3" рассчитываются по описанию в даташите на контроллер, достаточно просто. Номера в конце

ссылка на -> начало

Начинаем воплощение . Пока виртуальное .Памяти в контроллере предостаточно для такой простенькой задачи. Производительности высокой не требуется. Значит будем использовать "С".

Начало стандартное. Использую MPLAB X IDE v5.30. Создаю проект.

Добавьте описание
Добавьте описание

Штатным способом выставляю биты конфигурации. Использую "Production/set configuration bits". Можно было МCС использовать, но в маленькой программке нет смысла в этом. Тут все обычно. Используем внутренний генератор 8 МГц и отключаем "сторожевую собаку" :) .

Добавьте описание
Добавьте описание

Результат в main-файл. Потом , при необходимости, можно всегда скорректировать. Затем объявим глобальные переменный , которые , как мне кажется, должны быть видны везде и библиотеку "math.h" . Пока так. Дальше можно убавить\прибавить.

Библиотеки и глобальные переменные
Библиотеки и глобальные переменные

Переменная "sdvig" в битовом виде для наглядности. Первые три бита соответствуют трем каналам выхода . Период ШИМ-"period2" и период коммутации- "period3" рассчитываются по описанию в даташите на контроллер, достаточно просто. Номера в конце имени соответствуют номеру таймера

Программка ожидается маленькой. Поэтому не планирую дробить на модули, а размещу всё в одном файле.

Перехожу в главную функцию "main()" и , для начала, прописываю то, что не требует бесконечного цикла. Инициализирую некоторые переменные и настрою собственно ШИМ-ы

конфигурация PWM
конфигурация PWM

Ограничиваю, пока, скважность "сверху-снизу" на 8 тактов счета . Для старта, выставляю скважности каналов в 50% примерно.

Для ШИМ-ов нужны переназначаемые пины. Я выбрал из порта "B" с номерами 2,3,4 . Для каждого из трех каналов: Выставляю соответствующий TRIS на выход. В соответствующем регистре RPOR , перенаправляю пин на нужный OC/PWM (код каждого ОС в даташите есть) . Вношу в регистр OCxRS , отвечающий за скважность, начальное значение. Выбираю таймер периода tmr2 - для всех ШИМ-ов . Конфигурирую OC/PWM в режим PWM(ШИМ).

Настраиваю таймеры.

Таймеры
Таймеры

TMR2 - частота ШИМ.

3 и 4 таймеры на будущее. Буду использовать их прерывание. А пока эти прерывания в ноль - отключу.

Ну и в конце главной функции бесконечный цикл. Жму "build main project". Добился отсутствия ошибок(куда без них) . Получил .hex файл в соответствующей папке проекта.

Далее иду в Proteus , конкретно в ISIS. Создаю проект . Нахожу наш контроллер , подключаю к нужным выводам "осциллограф" - мне так нагляднее. Не забываю подвесить "сброс" к плюсу.

-6

В свойствах контроллера указываю расположение полученного выше файла. Запускаю симуляцию. Получилась такая картинка:

-7

Если бы то были диоды , то горели бы в "полнакала". Смотрю частоту - порядка 4 КГц, как и закладывал. Может и многовато - уменьшить всегда можно изменив переменную "period2 "

Пока достаточно. Продолжу в следующий раз.