Перейти к содержанию

Шим На Pic16f628


Lev@

Рекомендуемые сообщения

Думаю в жизни каждого верстальщика программ для МК возникает момент, когда необходимо написать программу , которая будет формировать ШИМ сигналы. Вот и я наконец пришел к этому.

Посидев полдня в изучении даташитов(без пива – нельзя, болею) так ничего толкового и не надумал. Решил обратится к своему старому другу и помощнику – книгам по программированию. Сразу стало ясно, что на PICBasic сделать нормальный ШИМ не получится, значит придется работать по старинке – ASM!

И так попробую подитожить, что у меня получилось.

Первое: Период. Это время, за которое таймер TMR2 сделает полный цикл 00:FF и равное

(4*tosc)*Коэфф. деления предделителя*(PR2+1)

, где 4*tosc – длительность машинного цикла(при тактовой частоте 4МГц = 4*1/4)

Коэфф. деления предделителя – 1:1, 1:4, 1:16 устанавливается в регистре T2CON битами T2CKPS1: T2CKPS0

PR2 – это регистр периода таймера TMR2, т.е. им задается время через которое таймер сделает полный цикл.

… с этим вроде понятно?!

Дальше – скважность или длительность импульса CCP1. Тут немного сложнее, задается регистром CCPR1L(в упрощенном виде) численно означает сколько времени относительно TMR2 будет длится импульс CCP1, т.е. если PR2 больше CCPR1L в два раза – половину счета времени таймером на выходе CCP1 будет лог. 1, а другую лог. 0. Если значения PR2 и CCPR1L будут равны(или CCPR1L) – то на выходе CCP1 всегда будет лог. 1. Если CCPR1L будет 00 - то на выходе CCP1 всегда будет лог.0.

Как смог, так и объяснил… Фух!

Кстати самое интересное – ШИМ работает в фоновом режиме – т.е. программа может спокойно делать другие задачи. И еще одно значение регистра CCPR1L можно менять походу выполнения программы, единственное, «но» модуль ШИМ его воспримет только тогда, когда таймер TMR2 закончит счет.

Думаю этого хватит чтобы написать небольшую(первую) программку с ШИМ.

 
list	p=16f628a
#include	<p16f628a.inc>
org	0x00
reset
goto	start
org	0x20
; **************************************************************
start
clrf	ccp1con		; выключить модуль CCP
clrf	TMR2		; Очистить TMR2(на всякий случай)
bsf	STATUS,RP0	; Банк 1
movlw	b'11111111'	; Задаем период TMR2
movwf	PR2
bcf	STATUS,RP0	; Банк 0
movlw	b'11111110'	; Задаем длительность импульса CCP1
movwf	CCPR1L
clrf	INTCON		; Запрещаем все прерывания
bsf	STATUS,RP0	; Банк 1
bcf	TRISB,3		; Задаем направление выводу RB3 - CCP1
clrf	PIE1		; Запрет прерываний от периферийных модулей
bcf	STATUS,RP0	; Банк 0
clrf	PIR1		; Срос флагов прерываний от периферийных модулей
movlw	b'00001100'	; Переводим модуль CCP1 в режим ШИМ
movwf	CCP1CON
bsf	T2CON,TMR2ON	; Включить таймер TMR2
clrwdt			; Очистить сторожевой таймер

label
clrwdt			; Очистить сторожевой таймер
btfss	pir1,tmr2if	; Проверка переполнения TMR2
goto	label
decf	CCPR1L,1
clrf	PIR1		; Сброс флагов прерываний от периферийных модулей
goto	label
end

Изменено пользователем Lev@
Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Немного не понятно в чём у Вас проблема. Или вы хотите знаниями из даташита поделиться ? Если воторое, то это никчему, каждый это может увидеть в ДШ :)

CCPR1 не обязательно менять после переполнения TMR2, сам модуль обработает эти изменения тогда, когда ему это будет нужно.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Немного не понятно в чём у Вас проблема. Или вы хотите знаниями из даташита поделиться ? Если воторое, то это никчему, каждый это может увидеть в ДШ :)

Мысль была в том что может кому-то поможет мое описание... ХЗ лично я не всегда с даташита мог понять что делать... :(

CCPR1 не обязательно менять после переполнения TMR2, сам модуль обработает эти изменения тогда, когда ему это будет нужно.

Это я уже для своего случая начал делать...

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Вопрос такой интересный ,а почему на PicBasic сделать нормальный ШИМ нельзя? У него что,что то не хватает?

Я например недавно устройство сделал,так написал всю прогу на PicBasic,в том числе и ШИМ( Прекрасно всё работает)

Это для 16F628A, так что в PicBasic всё работает не хуже, хотя иногда приходится вставлять строки на ASMe

CCPR1L = 14 ;Установка периода 50%

CCP1CON = %00001111 ;Включаем ШИМ

STATUS.5 = 1;Банк 1

PR2 = 27 ;Частота ШИМ примерно 36КГЦ (для TSOP1736)

STATUS.5 = 0;БАНК 0

TMR2 = 0;Включение модуля ШИМ

T2CON = %00000100;и таймера TMR2, чтобы ШИМ работало

Изменено пользователем Broka
Ссылка на комментарий
Поделиться на другие сайты

Спасибо за пояснения)) А у меня такой вопрос: кнотроллер PIC16F8..(забыл дальше) ну не важно... Частоту шим надо сделать в районе 40-50 Гц. Кварц на 10 Мгц... что-то не очень низкая частота ШИМ получается на такой тактовой ))

Но у таймера есть еще делитель на выходе (тоже вроде максимум на 16). Можно ли это деление как-то применить?

ps В контроллерах не силен, но сделать хочется)

Ссылка на комментарий
Поделиться на другие сайты

Вопрос такой интересный ,а почему на PicBasic сделать нормальный ШИМ нельзя? У него что,что то не хватает?

Я например недавно устройство сделал,так написал всю прогу на PicBasic,в том числе и ШИМ( Прекрасно всё работает)

Это для 16F628A, так что в PicBasic всё работает не хуже, хотя иногда приходится вставлять строки на ASMe

CCPR1L = 14 ;Установка периода 50%

CCP1CON = %00001111 ;Включаем ШИМ

STATUS.5 = 1;Банк 1

PR2 = 27 ;Частота ШИМ примерно 36КГЦ (для TSOP1736)

STATUS.5 = 0;БАНК 0

TMR2 = 0;Включение модуля ШИМ

T2CON = %00000100;и таймера TMR2, чтобы ШИМ работало

Да, правильно - если не использовать стандартную библиотеку БарсиКа... помоему PWM.

Ссылка на комментарий
Поделиться на другие сайты

  • 8 лет спустя...

Вопрос чайника :) : включение/выключение ШИМ осуществляется запуском/остановкой TMR2? Допустим, мне надо по команде останавливать ШИМ и выставлять на его выходе 0. 

Командой

bсf T2CON,TMR2ON

это можно устроить? Или надо каждый раз очищать/переинициализировать CCP1CON?

Ссылка на комментарий
Поделиться на другие сайты

Выключение модуля осуществляется ровно также, как и его включение. Только обратной операцией.
Как его включить (или выключить) - подробно описано в документации на камень.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...