Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ШИМ-модуль
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
ogk
Подскажите, пожалуйста, что неверно в программе: почему у меня не генерируется последовательность 2 импульсов 10% скважность и 20%, а какой-то хаос. Если убрать в программе генерацию второго импульса, то все ОК-генерируется только один импульс скважностью 10%, период расчетный получается и скважность импульса.
list p=16f877
#include <P16F877.INC>
;fosc=20MHz, fPWM=78,125kHz;
org 0
clrf INTCON
clrf CCP1CON
clrf TMR2
;---------------------;
MOVLW .63
bsf STATUS, 5
MOVWF PR2;уст.периода ШИМ;
bcf STATUS, 5
;---------------------;
L movlw b'00000110'
movwf CCPR1L;длит.импульса;
bcf CCP1CON, 5
bsf CCP1CON, 4

;---------------------;
bsf STATUS, 5
bcf TRISC, 2;настр.ССР на выход;
bcf STATUS, 5
;---------------------;
clrf T2CON
bcf T2CON, 0
bcf T2CON, 1;коэф.предделит.=1;
bsf T2CON, 2;вкл.TMR2;
;---------------------;
bsf CCP1CON, 2
bsf CCP1CON, 3;вкл.ШИМ-режима;
;---------------------;
movlw b'00001100'
movwf CCPR1L
bsf CCP1CON, 5
bsf CCP1CON, 4;длит.2имп.скважн.20%;
;--------------------;
clrf T2CON
bcf T2CON, 0
bcf T2CON, 1
bsf T2CON, 2
;-------------------;
bsf CCP1CON, 2
bsf CCP1CON, 3
;-------------------;
goto L
END
evc
Цитата(ogk @ Dec 15 2007, 12:45) *
Подскажите, пожалуйста, что неверно в программе...


Все. (извините, но) Вам нужно внимательнее ознакомиться с замечаниями по применению (aplication notes) майкрочипа. Программу расположите не с нулевого адреса, а (скажем) с 20-того. На адрес 0х04 находится вектор прерывания процессора. Даже и если прерываниями не пользуетесь, оставьте этого адреса свободным! По инициализации PWM модуля посмотрите здесь, стр. 14-14. Чтобы сделать один импульс скважности 10%, а второй - 20%, нужно дождаться вырабатыванием первого, а затем менять CCP1CON!

П.П. Выражения типа
Цитата(ogk @ Dec 15 2007, 12:45) *
clrf T2CON
bcf T2CON, 0
bcf T2CON, 1
bsf T2CON, 2

лишние, т.к. T2CON вы обнулили - все его биты нули. Следует просто выставит нужные в "1".
Просто предлагаю...
ogk
Цитата(evc @ Dec 15 2007, 16:03) *
Чтобы сделать один импульс скважности 10%, а второй - 20%, нужно дождаться вырабатыванием первого, а затем менять CCP1CON!

Извините, но как это сделать?
evc
Отслеживайте флаг TMR2IF. Он будет выставлятся по оканчанию каждого периода PWM (если, конечно, TC2KPS1:TC2KPS0 = 0).
ogk
Что сделать,чтобы 3 импульс был один и ШИМ остановить?
list p=16f877
#include <P16F877.INC>
;fosc=20MHz, fPWM=78,125kHz;
org 14h
clrf INTCON
clrf CCP1CON
clrf TMR2
;---------------------;
MOVLW .63
bsf STATUS, 5
MOVWF PR2;уст.периода ШИМ;
bcf STATUS, 5
;---------------------;
L movlw b'00000110'
movwf CCPR1L;длит.импульса;
bcf CCP1CON, 5
bsf CCP1CON, 4

;---------------------;
bsf STATUS, 5
bcf TRISC, 2;настр.ССР на выход;
bcf STATUS, 5
;---------------------;
clrf T2CON ;коэф.предделит.=1;
bsf T2CON, 2;вкл.TMR2;
;---------------------;
bsf CCP1CON, 2
bsf CCP1CON, 3;вкл.ШИМ-режима;
;проверка флага переполнения TMR2;
L1 btfss PIR1, 1
goto L1
;---------------------;
movlw b'00001100'
movwf CCPR1L
bsf CCP1CON, 5
bsf CCP1CON, 4 ;длит.2имп.скважн.20%;
;--------------------;
bcf PIR1, 1
;-------------------;
L2 btfss PIR1, 1
goto L2
;-------------------;
movlw b'00011001'
movwf CCPR1L
bsf CCP1CON, 5
bsf CCP1CON, 4 ; 40%;
;-------------------;

bcf PIR1, 1
;-------------------;
L3 btfss PIR1, 1
goto L3
;???????? Что сделать. чтобы 3 импульс был один и ШИМ остановить?
END




Цитата(evc @ Dec 15 2007, 19:05) *
Отслеживайте флаг TMR2IF. Он будет выставлятся по оканчанию каждого периода PWM (если, конечно, TC2KPS1:TC2KPS0 = 0).

Спасибо, evc за помощь. А что делать, когда коэф.деления предделителя не 1:1- тогда отслеживать флаг нельзя? А как быть в таком случае?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.