|
ШИМ-модуль, Что неверно? |
|
|
|
Dec 15 2007, 09:45
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 4-02-07
Пользователь №: 25 035

|
Подскажите, пожалуйста, что неверно в программе: почему у меня не генерируется последовательность 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
|
|
|
|
|
 |
Ответов
|
Dec 15 2007, 12:03
|

Местный
  
Группа: Свой
Сообщений: 206
Регистрация: 17-03-07
Из: Москва
Пользователь №: 26 266

|
Цитата(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". Просто предлагаю...
--------------------
УЭР
|
|
|
|
|
Dec 15 2007, 12:40
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 4-02-07
Пользователь №: 25 035

|
Цитата(evc @ Dec 15 2007, 16:03)  Чтобы сделать один импульс скважности 10%, а второй - 20%, нужно дождаться вырабатыванием первого, а затем менять CCP1CON! Извините, но как это сделать?
|
|
|
|
|
Dec 15 2007, 15:16
|
Участник

Группа: Новичок
Сообщений: 46
Регистрация: 4-02-07
Пользователь №: 25 035

|
Что сделать,чтобы 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- тогда отслеживать флаг нельзя? А как быть в таком случае?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|