Views: 1266
Во второй главе для управления светодиодами применялись макросы задержки, они “типа” стопорили работу процессора на пол секунды, после чего, контроллер выполнял необходимые команды по переключению светодиодов и опять занимался тем что ожидал. в реальной жизни это непозволительная роскошь. Если контроллеру необходимо выполнять обработку информации, то наши задержки будут только стопорить его основную работу.
Для решение этой проблемы можно использовать прерывания, которые формирует аппаратный таймер и который работает независимо от функционирования центрального процессора. Одно из решений задачи, контроллер занимается основной задачей и циклически проверяет флаг который устанавливается когда выполняется прерывание от таймера. Если флаг установлен выполняется процедура “мигания” светодиодами Если нет выполняется основная задача.
Основные различия от предыдущего проекта это при настройки таймера включение прерывания от таймера TMR1.
//--------------------------------------------------------------------------- // Настройка таймера TMR1 T1CON = 0b1000000000110000; // |||||||||||||||+-- неиспользуемый // ||||||||||||||+--- TCS: источник тактовых импульсов FOSC/2 // |||||||||||||+---- TSYNC: состояние игнорируется, так как тактовая частота системный генератор // ||||||||||||+----- неиспользуемый // ||||||||||++------ TCKPS1:TCKPS0: настройка предделителя 11 = 1:256 // |||||||||+-------- TGATE: 0- режим измерение длительности входного импульса отключен // |||++++++--------- неиспользуемые // ||+--------------- TSIDL: 0- продолжать работу в режиме ожидания (сна) // |+---------------- неиспользуемый // +----------------- TON: 1 -таймер включен PR1=0xFFFF; // период счета _T1IF=0; // очистить бит прерывания от таймера TMR1 _T1IE=1; // разрешить прерывание от таймера TMR1 //---------------------------------------------------------------------------
Создание функции прерывания от таймера TMR1.
// подпрограмма обслуживания прерываний от таймера TMR1
void __attribute__((__interrupt__, __auto_psv__)) _T1Interrupt(void)
{
_T1IF=0; // сброс флага прерывания от таймера TMR1
Bit.MIG=1;
}//
А сам главный цикл программы теперь будет выглядеть так:
while(1)
{
ClrWdt(); // сброс сторожевого таймера
//-------------------------
// переключение светодиодов
if(Bit.MIG)
{
if(Bit.NAG)
{
_LATA0 = 1; // выключить светодиод
_LATB0 = 0; // выключить светодиод
Bit.NAG=0;
}
else
{
_LATA0 = 0; // выключить светодиод
_LATB0 = 1; // включить светодиод
Bit.NAG=1;
}
Bit.MIG=0;
}
//-------------------------
// основная программа в этом месте
}
Расчет периода прерываний для таймера TMR1 (смотри в описании по работе с таймером).
Загрузка проекта
Использование прерываний для управления процессами в PIC24 45.72 KB 764 downloads
Использование прерываний для управления процессами...Это может быть интересно
Оптосимистор и его применениеViews: 20172 Эрве Кадино “Цветомузыкальные установки” Ответ на вопрос – управление мощным тиристором или симистором, от терморегулятора. Статья в pdf[wpdm_file id=129 template=”link-template-calltoaction3.php”] Оптосимистор принадлежат к классу оптронов и обеспечивают очень хорошую …
Одноканальный емкостной сенсор – AT42QT1012Views: 2441 Описание сенсора [wpdm_file id=242] Незаконченный проект, так-как сенсор не оправдал своего назначения, не рекомендую, просто выброшенные деньги. Особенности. • Количество сенсоров – один, режим переключения ( touch-on/touch-off ), а также программируемая …
Стабилизатор тока для светодиодов SN3350Views: 2751 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V драйвер светодиодов с внутренним ключом SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …
LED драйвер TM1639Views: 2467 TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом. Для управления драйвером …
Гаджеты для домашней автоматики – Датчик приближенияViews: 2161 Управление светодиодным освещением – Датчик приближения. Данный гаджет предназначен для управления внутренним освещением мебели. Датчик позволяет определить закрытие или открытие дверцы или ящика и при этом включать или …
Проект с использованием MCC часть 16Views: 1289 Продолжим изучение EUSART. На этом этапе отработает передачи данных с ПК и получения эха. Для этого в основной цикл программы добавим код if(EUSART_DataReady) // проверим флаг готовности данных …
Мультизоновый индикатор-терморегулятор ch-c3010Views: 1335 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре, температуру на улице, а в погребе (или на балконе) …
DIXELL XWEB500D-EVO + RUT900 или как пробить NAT-серверViews: 1156 Когда необходимо под какой нибудь контроллер имеющий вэб сервер в инет, то нужен статический IP, что оказалось проблемой при работе с операторами сотовых сетей, конкретно с оператором сети …
BMP280 – температура и атмосферное давление – учебный проектViews: 2264 Учебный проект на PIC32 и светодиодной панели P5 (2121)-168-6432-80 (32*64). Проект позволяет ознакомиться с простой графикой и с чтением давления и температуры с датчика BMP280. Для тестирования необходимо …
TM1650 драйвер LED семисегментного индикатораViews: 18376 UPDATES 2025/10/10 Китайский производитель Shenzhen Titan Micro Electronics Co., Ltd. Выпускает широкую линейку драйверов управления светодиодными дисплеями, которые позволяют разгрузить микроконтроллер для основной работы, главная особенность этих драйверов …