Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 07.02.2011, 14:32  
sprew
Частый гость
 
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sprew на пути к лучшему
Восклицание 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
}
}
}
Реклама:
sprew вне форума  
Непрочитано 08.02.2011, 00:02  
Vadim_sh
Вид на жительство
 
Регистрация: 29.01.2010
Адрес: Десногорск Смол.обл.
Сообщений: 333
Сказал спасибо: 17
Сказали Спасибо 256 раз(а) в 103 сообщении(ях)
Vadim_sh на пути к лучшему
По умолчанию Re: PWM НА PIC16F877A

полностью не уверен что так для микроСи, но в микробайсике использование ШИМа через библиотеку Микро, хотя вроде библиотеки для компиляторов одинаковые.
сперва инициализация через процедуру PWM_Init(частота)
далее запуск PWM_Start()


Initialize PWM 1 module at 5KHz:
PWM1_Init(5000)

и компилятор сам настроит нужные регистры.
а вообще в МикроСи хелп подробный есть со всеми хардовыми библиотеками. Посмотри внимательней
Вложения:
Vadim_sh вне форума  
Непрочитано 08.02.2011, 00:54  
Easyrider83
Гуру портала
 
Аватар для Easyrider83
 
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
Easyrider83 на пути к лучшему
По умолчанию Re: PWM НА PIC16F877A

К дьяволу библиотеки. С ними ничего толкового не выйдет. Автор все делает правильно, но проект в протеусе сильно облегчит жизнь. Там можно посмотреть, что происходит с модулем CCP.
Easyrider83 вне форума  
Непрочитано 08.02.2011, 01:25  
lyk
Гражданин KAZUS.RU
 
Регистрация: 20.05.2005
Сообщений: 660
Сказал спасибо: 40
Сказали Спасибо 187 раз(а) в 117 сообщении(ях)
lyk на пути к лучшему
По умолчанию 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 работали отлично, в протеусе тоже все симулировалось.
lyk вне форума  
Непрочитано 09.02.2011, 10:59  
sprew
Частый гость
 
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sprew на пути к лучшему
По умолчанию Re: PWM НА PIC16F877A

Вначале естественно пробовал с помощью стандартных библиотек mikroC, меня они тоже не устроили, проверял через Proteus получалось следующее, чтобы запустить один канал ШИМ приходится инициализировать сразу два, при этом два одновременно не работают, чудеса! Тоже самое и с примером на пике 887, идет настройка для двух каналов, при этом в Proteuse они вообще не запускаются. Я конечно без проблем могу написать на ассемблере, кстати пробовал все работает, но вся беда в том, что это только маленький кусочек всей программы, которую писать через ассемблер ой как долго, поэтому хотел облегчить себе жизнь, но пока не получается.
sprew вне форума  
Непрочитано 09.02.2011, 12:21  
sprew
Частый гость
 
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sprew на пути к лучшему
По умолчанию Re: PWM НА PIC16F877A

Вот что у меня показывет MPLAB
Миниатюры:
Нажмите на изображение для увеличения
Название: Untitled.jpg
Просмотров: 71
Размер:	29.5 Кб
ID:	18049  
sprew вне форума  
Непрочитано 09.02.2011, 12:25  
sprew
Частый гость
 
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sprew на пути к лучшему
По умолчанию Re: PWM НА PIC16F877A

CCP1 начинает генерировать 50% ШИМ в течение 5 мс и только потом переходить на 100%, а он переходит практически сразу на 100%, хотя должен работать как CCP2
sprew вне форума  
Непрочитано 09.02.2011, 12:47  
sprew
Частый гость
 
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sprew на пути к лучшему
По умолчанию 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);
}
}
Миниатюры:
Нажмите на изображение для увеличения
Название: Untitled2.jpg
Просмотров: 72
Размер:	94.5 Кб
ID:	18050  
sprew вне форума  
Непрочитано 10.02.2011, 00:36  
lyk
Гражданин KAZUS.RU
 
Регистрация: 20.05.2005
Сообщений: 660
Сказал спасибо: 40
Сказали Спасибо 187 раз(а) в 117 сообщении(ях)
lyk на пути к лучшему
По умолчанию Re: PWM НА PIC16F877A

Сообщение от sprew Посмотреть сообщение
Вначале естественно пробовал с помощью стандартных библиотек mikroC, меня они тоже не устроили, проверял через Proteus получалось следующее, чтобы запустить один канал ШИМ приходится инициализировать сразу два, при этом два одновременно не работают, чудеса!
Видимо чудеса. Проект выложите там где не работает.
Запускать и останавливать можно один канал, второй может не работать, не разобрались вы с библиотеками, а уже заявляете - "не устраивают"
lyk вне форума  
Непрочитано 10.02.2011, 22:20  
sprew
Частый гость
 
Регистрация: 09.01.2010
Сообщений: 18
Сказал спасибо: 16
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
sprew на пути к лучшему
По умолчанию Re: PWM НА PIC16F877A

Уважаемый lyk, дело в том, что когда я пишу на ассемблере в MPLAB и запускаю в Proteus у меня ШИМ работает при любых вариантах, а когда через стандартные библиотеки mikroC ШИМ не работает, хотя я потом проверил созданный mikroC hex файл в MPLAB там все нормально (работает как надо), а не устраивает потому, что не работает в Proteus. По поводу моего проекта из-за которого я создал тему, написал, что это лично моя запара.
Выкладываю проект на PIC16F887, программа взята из примеров предоставленных mikroC (убрал все лишнее).
Вложения:
Тип файла: rar TEST PWM.rar (37.7 Кб, 131 просмотров)
sprew вне форума  
 

Закладки
Опции темы

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
pic16f877 и pic16f877A определяются PicKit2 как pic16f876 avr123-nm-ru Микроконтроллеры, АЦП, память и т.д 31 18.05.2010 23:04
mega168 16 bit PWM ReM37 Микроконтроллеры, АЦП, память и т.д 6 06.05.2010 00:36
Подключение АЦП Ads1256 к PIC16f877A kurock_09 Микроконтроллеры, АЦП, память и т.д 1 10.04.2010 15:04
[Решено] Компаратор в Pic16f877a AZMaster Proteus 1 23.03.2010 02:24


Часовой пояс GMT +4, время: 00:04.


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