Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

Ответ
 
Опции темы Опции просмотра
Старый 13.10.2019, 23:34   #1
Aleksey_
Member
 
Регистрация: 12.12.2012
Адрес: Пермь, Чайковский
Возраст: 40
Сообщений: 43
Вес репутации: 100/27
Aleksey_ will become famous soon enoughAleksey_ will become famous soon enough
По умолчанию Как правильно синтаксически написать прерывание на Си для PIC12F683

Здравствуйте! Подскажите пожалуйста. Мне нужно разработать схему для работы ШИМ. Имею MPLAB X IDE v5.20, PIC12F683, начальные знания по языку Си. Понимаю так, Таймер_2 работает с этим ШИМ, но я не могу по синтаксису правильно написать обработку прерывания переполнения Таймера_2 (перед работой ШИМ мне нужно задать импульс некоторой длительности и для того в прерывании должна увеличиваться переменная, при достижении которой некоторого значения настраивается аппаратный ШИМ). В инете нашёл примеры
Код:
void interrupt ISR(void) 
{TMR2IF = 0;
   if (start)
    {start_count++;
        if (start_count == 300)
        {!start ;
         GP2 = 0;
этот код не компилится. Почитал MPLAB_XC8_C_Compiler_User_Guide_for_PIC" и "MPLAB_XC8_Getting_Started_Guide", нашёл там и пример приведённый раньше и вот этот: "void __interrupt(irq(TMR0),high_priority) tc0Int(void)" , но ничего не помогает.
Скажите как написать правильно, что я делаю не так. Если можно, то приведите рабочий код с этим прерыванием
Aleksey_ вне форума   Ответить с цитированием
Старый 14.10.2019, 10:07   #2
NVIC
Member
 
Аватар для NVIC
 
Регистрация: 26.02.2007
Сообщений: 57
Вес репутации: 100/48
NVIC will become famous soon enoughNVIC will become famous soon enough
Отправить сообщение для NVIC с помощью ICQ
По умолчанию Re: Как правильно синтаксически написать прерывание на Си для PIC12F683

Код:
/******************************************
 * TST_TRAP.c
 ******************************************/
#include <xc.h>

// CONFIG
#pragma config FOSC = INTOSCCLK // Oscillator Selection bits (INTOSC oscillator: CLKOUT function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config MCLRE = ON       // MCLR Pin Function Select bit (MCLR pin function is MCLR)
#pragma config CP = OFF         // Code Protection bit (Program memory code protection is disabled)
#pragma config CPD = OFF        // Data Code Protection bit (Data memory code protection is disabled)
#pragma config BOREN = ON       // Brown Out Detect (BOR enabled)
#pragma config IESO = ON        // Internal External Switchover bit (Internal External Switchover mode is enabled)
#pragma config FCMEN = ON       // Fail-Safe Clock Monitor Enabled bit (Fail-Safe Clock Monitor is enabled)

// #pragma config statements should precede project file includes.

volatile unsigned char cnt;

void INIT_TMR2(void);

void __interrupt INTERRUPT_ISR(void){
    if(TMR2IF && TMR2IE){
	PIR1bits.TMR2IF=0;
    cnt++;
    }
	
}

void main (void){
    
	cnt=0;
	INIT_TMR2();
    INTCONbits.PEIE=1;
    INTCONbits.GIE=1;
	while(1){
	if(cnt>100){
		cnt=0;
		}
	}
}

void INIT_TMR2(void){
    TMR2=0;
    PR2=0xff;
    T2CON=0;
    T2CONbits.TMR2ON=1;
    PIR1bits.TMR2IF=0;
    PIE1bits.TMR2IE=1;
}
NVIC вне форума   Ответить с цитированием
Старый 14.10.2019, 18:25   #3
DmitrijVDN
Senior Member
 
Регистрация: 09.04.2010
Сообщений: 834
Вес репутации: 1473/58
DmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud ofDmitrijVDN has much to be proud of
По умолчанию Re: Как правильно синтаксически написать прерывание на Си для PIC12F683

Цитата:
Сообщение от Aleksey_ Посмотреть сообщение
Понимаю так, Таймер_2 работает с этим ШИМ, но я не могу по синтаксису правильно написать обработку прерывания переполнения Таймера_2 (перед работой ШИМ мне нужно задать импульс некоторой длительности и для того в прерывании должна увеличиваться переменная, при достижении которой некоторого значения настраивается аппаратный ШИМ).
КМК вы несколько неправильно понимаете работу ШИМ
для запуска ШИМ необходимо
1. обнулить таймер TMR2
2. задать период ШИМ в регистре PR2
3. вывод GP2 перевести на выход.
4. задать начальную длительность импульса ШИМ в регистрах CCPR1L<7:0> + CCP1CON<5:4>
5. переключить модуль CCP1 в режим ЩИМ в регистре CCP1CON<3:0> = 1111 или 1101
6. в регистре T2CON установить нужные коэффициенты предделителя и постделителя таймера TMR2
7. включить таймер TMR2 TMR2ON=1.

Для включения прерывания по TMR2

1. разрешить прерывания от TMR2 TMR2IE=1
2. разрешить прерывания от периферии PEIE=1
3. разрешить глобальные прерывания GIE=1

В прерывании по TMR2
1. обнулить флаг TMR2IF=0
2. загрузить новое значение импульса ШИМ CCPR1L<7:0> + CCP1CON<5:4>
Код:
unsigned int pulse_PWM;
void interrupt timer_isr(void)
{ unsigned char temp;
    if(PIR1bits.TMR2IF && PIE1bits.TMR2IE){
    PIR1bits.TMR2IF=0;
    temp= pulse_PWM&0b00000011;
    temp<<=4;
    CCP1CON=(CCP1CON&0b11001111)|temp;
    CCPR1L=(pulse_PWM>>2)&0xff;     
    }
}
ЗЫ !!! новое значение импульса ШИМ будет валидно при следующем переполнении таймера2.
DmitrijVDN на форуме   Ответить с цитированием
Ответ

Метки
interrupt, mplab x ide, pic12, pwm


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как правильно смешивать статический и динамический контент в ответе HTTP сервера на Java? Вова Cетевые протоколы и технологии 8 27.04.2018 17:44
Сказ о том, как правильно "обвесить" MCLR для приёма цифрового сигнала Romantic Продукция MICROCHIP 41 26.12.2014 14:49
Многофункциональные часы. Н.Заяц.Книга 4. samko Вопросы начинающих 11 12.06.2012 09:26
Как реализовать на си alex_new_2030 Продукция MICROCHIP 9 07.08.2007 07:19


Часовой пояс GMT +3, время: 13:43.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot