Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
07.02.2011, 14:32
|
|
Частый гость
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
PWM НА PIC16F877A
Подскажите почему PWM1 не работает. Использую microC PRO for PIC последней версии. Проверял различными симмуляторами результаты разные. В Proteus вообще никакой канал не работает, в PIC Simulator IDE запускается второй ШИМ (PWM2), но правильно не работает, в MPLAB PWM2 работает отлично, а PWM1 не генерирует 30кГц, хотя переключается со 100% на 0% величины шим. Не могу понять в чем проблема.
КОД
// PIC16F877A 20MHz
unsigned int temp_res;
unsigned int temp_res2;
void main() {
TRISC = 0 ; // set PORTC as output
PORTC = 0 ; // clear PORTC
PR2 = 0b10100110; // PWM = 30kHz
T2CON = 0b00000100;
PORTB = 0x00;
TRISB = 0x00;
PORTD = 0x00;
TRISD = 0x00;
PORTB = 0x00;
TRISA = 0xFF;
temp_res2 = 0x03F9; // 1017
while (1) {
temp_res = ADC_Read(2); // Get 10-bit results of AD conversion
if (temp_res ›= temp_res2) { // If ADC read ~5V (1017)
PORTB.RB0 = 1;
CCPR1L = 0b10100110; // 100% PWM 1
CCP1CON = 0b00111100; // 100% PWM 1
CCPR2L = 0b00000000; // 0% PWM 2
CCP2CON = 0b00001100; // 0% PWM 2
Delay_ms(5);
CCPR1L = 0b00000000; // 0% PWM 1
CCP1CON = 0b00001100; // 0% PWM 1
CCPR2L = 0b01010011; // 50% PWM 2
CCP2CON = 0b00011100; // 50% PWM 2
Delay_ms(5);
CCPR2L = 0b10100110; // 100% PWM 2
CCP2CON = 0b00111100; // 100% PWM 2
Delay_ms(5);
CCPR2L = 0b00000000; // 0% PWM 2
CCP2CON = 0b00001100; // 0% PWM 2
CCPR1L = 0b01010011; // 50% PWM 1
CCP1CON = 0b00011100; // 50% PWM 1
}
}
}
|
|
|
|
08.02.2011, 00:02
|
|
Вид на жительство
Регистрация: 29.01.2010
Адрес: Десногорск Смол.обл.
Сообщений: 333
Сказал спасибо: 17
Сказали Спасибо 256 раз(а) в 103 сообщении(ях)
|
Re: PWM НА PIC16F877A
полностью не уверен что так для микроСи, но в микробайсике использование ШИМа через библиотеку Микро, хотя вроде библиотеки для компиляторов одинаковые.
сперва инициализация через процедуру PWM_Init(частота)
далее запуск PWM_Start()
Initialize PWM 1 module at 5KHz:
PWM1_Init(5000)
и компилятор сам настроит нужные регистры.
а вообще в МикроСи хелп подробный есть со всеми хардовыми библиотеками. Посмотри внимательней
|
|
|
|
08.02.2011, 00:54
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: PWM НА PIC16F877A
К дьяволу библиотеки. С ними ничего толкового не выйдет. Автор все делает правильно, но проект в протеусе сильно облегчит жизнь. Там можно посмотреть, что происходит с модулем CCP.
|
|
|
|
08.02.2011, 01:25
|
|
Гражданин KAZUS.RU
Регистрация: 20.05.2005
Сообщений: 660
Сказал спасибо: 40
Сказали Спасибо 187 раз(а) в 117 сообщении(ях)
|
Re: PWM НА PIC16F877A
А пример с папки Examples (c:\Program Files\Mikroelektronika\mikroC PRO for PIC\Examples\Internal MCU modules\P16F887\PWM\Pwm.c) работает в протеусе?
С PWM косяки бывают в протеусе. Макетки сейчас не дорогие, пробовать лучше в железе.
На 628, 876, 887 камнях библиотеки для PWM работали отлично, в протеусе тоже все симулировалось.
|
|
|
|
09.02.2011, 10:59
|
|
Частый гость
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: PWM НА PIC16F877A
Вначале естественно пробовал с помощью стандартных библиотек mikroC, меня они тоже не устроили, проверял через Proteus получалось следующее, чтобы запустить один канал ШИМ приходится инициализировать сразу два, при этом два одновременно не работают, чудеса! Тоже самое и с примером на пике 887, идет настройка для двух каналов, при этом в Proteuse они вообще не запускаются. Я конечно без проблем могу написать на ассемблере, кстати пробовал все работает, но вся беда в том, что это только маленький кусочек всей программы, которую писать через ассемблер ой как долго, поэтому хотел облегчить себе жизнь, но пока не получается.
|
|
|
|
09.02.2011, 12:21
|
|
Частый гость
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: PWM НА PIC16F877A
Вот что у меня показывет MPLAB
|
|
|
|
09.02.2011, 12:25
|
|
Частый гость
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: PWM НА PIC16F877A
CCP1 начинает генерировать 50% ШИМ в течение 5 мс и только потом переходить на 100%, а он переходит практически сразу на 100%, хотя должен работать как CCP2
|
|
|
|
09.02.2011, 12:47
|
|
Частый гость
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: PWM НА PIC16F877A
Извените мужики, запарился, не правилно зациклил программу. ШИМ работает. Вот код, может кому-нибудь понадобится.
КОД
// PIC16F877A 20MHz
void main() {
TRISC = 0 ; // set PORTC as output
PORTC = 0 ; // clear PORTC
PR2 = 0b10100110; // PWM = 30kHz
T2CON = 0b00000100;
PORTB = 0x00;
TRISB = 0x00;
PORTD = 0x00;
TRISD = 0x00;
PORTB = 0x00;
TRISA = 0xFF; // PORTA is input
while (1) {
PORTB.RB0 = 1;
CCPR1L = 0b10100110; // 100% PWM 1
CCP1CON = 0b00111100; // 100% PWM 1
CCPR2L = 0b00000000; // 0% PWM 2
CCP2CON = 0b00001100; // 0% PWM 2
Delay_ms(5);
CCPR1L = 0b00000000; // 0% PWM 1
CCP1CON = 0b00001100; // 0% PWM 1
CCPR2L = 0b01010011; // 50% PWM 2
CCP2CON = 0b00011100; // 50% PWM 2
Delay_ms(5);
CCPR2L = 0b10100110; // 100% PWM 2
CCP2CON = 0b00111100; // 100% PWM 2
Delay_ms(5);
CCPR2L = 0b00000000; // 0% PWM 2
CCP2CON = 0b00001100; // 0% PWM 2
CCPR1L = 0b01010011; // 50% PWM 1
CCP1CON = 0b00011100; // 50% PWM 1
Delay_ms(5);
}
}
|
|
|
|
10.02.2011, 00:36
|
|
Гражданин KAZUS.RU
Регистрация: 20.05.2005
Сообщений: 660
Сказал спасибо: 40
Сказали Спасибо 187 раз(а) в 117 сообщении(ях)
|
Re: PWM НА PIC16F877A
Сообщение от sprew
|
Вначале естественно пробовал с помощью стандартных библиотек mikroC, меня они тоже не устроили, проверял через Proteus получалось следующее, чтобы запустить один канал ШИМ приходится инициализировать сразу два, при этом два одновременно не работают, чудеса!
|
Видимо чудеса. Проект выложите там где не работает.
Запускать и останавливать можно один канал, второй может не работать, не разобрались вы с библиотеками, а уже заявляете - "не устраивают"
|
|
|
|
10.02.2011, 22:20
|
|
Частый гость
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: PWM НА PIC16F877A
Уважаемый lyk, дело в том, что когда я пишу на ассемблере в MPLAB и запускаю в Proteus у меня ШИМ работает при любых вариантах, а когда через стандартные библиотеки mikroC ШИМ не работает, хотя я потом проверил созданный mikroC hex файл в MPLAB там все нормально (работает как надо), а не устраивает потому, что не работает в Proteus. По поводу моего проекта из-за которого я создал тему, написал, что это лично моя запара.
Выкладываю проект на PIC16F887, программа взята из примеров предоставленных mikroC (убрал все лишнее).
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 00:04.
|
|